]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - apps/AntiTheft/Root/AntiTheftRootC.nc
antitheft demo app
[tinyos-2.x.git] / apps / AntiTheft / Root / AntiTheftRootC.nc
diff --git a/apps/AntiTheft/Root/AntiTheftRootC.nc b/apps/AntiTheft/Root/AntiTheftRootC.nc
new file mode 100644 (file)
index 0000000..19bc943
--- /dev/null
@@ -0,0 +1,78 @@
+module AntiTheftRootC
+{
+  uses
+  {
+    interface Boot;
+    interface SplitControl as SerialControl;
+    interface SplitControl as RadioControl;
+    interface LowPowerListening;
+
+    interface DisseminationUpdate<settings_t> as SettingsUpdate;
+    interface Receive as SettingsReceive;
+
+    interface StdControl as CollectionControl;
+    interface RootControl;
+    interface Receive as AlertsReceive;
+    interface AMSend as AlertsForward;
+
+    interface Leds;
+  }
+}
+implementation
+{
+  event void Boot.booted()
+  {
+    call SerialControl.start();
+    call RadioControl.start();
+  }
+
+  event void SerialControl.startDone(error_t error) { }
+  event void SerialControl.stopDone(error_t error) { }
+  event void RadioControl.startDone(error_t error) { 
+    if (error == SUCCESS)
+      {
+       call LowPowerListening.setLocalDutyCycle(200);
+       call CollectionControl.start();
+       call RootControl.setRoot();
+      }
+  }
+  event void RadioControl.stopDone(error_t error) { }
+
+  event message_t *SettingsReceive.receive(message_t* msg, void* payload, uint8_t len)
+  {
+    settings_t *newSettings = payload;
+
+    if (len == sizeof(*newSettings))
+      {
+       call Leds.led2Toggle();
+       call SettingsUpdate.change(newSettings);
+      }
+    return msg;
+  }
+
+  message_t fwdMsg;
+  bool fwdBusy;
+
+  event message_t *AlertsReceive.receive(message_t* msg, void* payload, uint8_t len)
+  {
+    alert_t *newAlert = payload;
+
+    call Leds.led0Toggle();
+
+    if (len == sizeof(*newAlert) && !fwdBusy)
+      {
+       alert_t *fwdAlert = call AlertsForward.getPayload(&fwdMsg);
+
+       *fwdAlert = *newAlert;
+       if (call AlertsForward.send(AM_BROADCAST_ADDR, &fwdMsg, sizeof *fwdAlert) == SUCCESS)
+         fwdBusy = TRUE;
+      }
+    return msg;
+  }
+
+  event void AlertsForward.sendDone(message_t *msg, error_t error) {
+    if (msg == &fwdMsg)
+      fwdBusy = FALSE;
+  }
+
+}