To get and handle event on getting motion event from PIR

Dependencies:   BLE_API mbed nRF51822

Files at this revision

API Documentation at this revision

Comitter:
abhishekkumardwivedi
Date:
Wed May 20 12:06:18 2015 +0000
Commit message:
To control device on getting motion event from PIR.

Changed in this revision

BLE_API.lib Show annotated file Show diff for this revision Revisions of this file
PIRService.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
nRF51822.lib Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r c165b9e652d8 BLE_API.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BLE_API.lib	Wed May 20 12:06:18 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#501ad8b8bbe5
diff -r 000000000000 -r c165b9e652d8 PIRService.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PIRService.h	Wed May 20 12:06:18 2015 +0000
@@ -0,0 +1,46 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __BLE_PIR_SERVICE_H__
+#define __BLE_PIR_SERVICE_H__
+
+class PIRService
+{
+public:
+    const static uint16_t PIR_SERVICE_UUID              = 0xA000;
+    const static uint16_t PIR_STATE_CHARACTERISTIC_UUID = 0xA001;
+
+    PIRService(BLEDevice &_ble, bool initialValueForPIRCharacteristic) :
+        ble(_ble), pirStateCharacteristic(PIR_STATE_CHARACTERISTIC_UUID, &initialValueForPIRCharacteristic) {
+        GattCharacteristic *charTable[] = {&pirStateCharacteristic};
+        GattService         pirService(PIR_SERVICE_UUID, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
+        ble.addService(pirService);
+    }
+
+    GattAttribute::Handle_t getValueHandle() const {
+        return pirStateCharacteristic.getValueHandle();
+    }
+    
+    void UpdateMotionStatus(bool status) {
+        ble.updateCharacteristicValue(pirStateCharacteristic.getValueHandle(), (uint8_t *)&status, sizeof(bool));
+    }
+
+private:
+    BLEDevice                         &ble;
+    ReadOnlyGattCharacteristic<bool>  pirStateCharacteristic;
+};
+
+#endif /* #ifndef __BLE_PIR_SERVICE_H__ */
\ No newline at end of file
diff -r 000000000000 -r c165b9e652d8 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed May 20 12:06:18 2015 +0000
@@ -0,0 +1,73 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2013 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbed.h"
+#include "BLEDevice.h"
+#include "PIRService.h"
+
+BLEDevice ble;
+
+InterruptIn pir(p4);
+
+bool motion_detected = 0;
+int interval = 0;
+static const int PUBLISH_TIMESLISE = 10; //once detected, publish for 10 sec, important data so keep broadcasting for 10 sec.
+
+
+const static char     DEVICE_NAME[] = "PIR";
+static const uint16_t uuid16_list[] = {PIRService::PIR_SERVICE_UUID};
+
+//PIRService *pirServicePtr;
+
+void irq_handler(void)
+{
+    motion_detected = 1;
+    interval = PUBLISH_TIMESLISE;
+}
+
+void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
+{
+    ble.startAdvertising();
+}
+
+int main() {
+
+    ble.init();
+    ble.onDisconnection(disconnectionCallback);
+
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
+    ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+    ble.setAdvertisingInterval(Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(1000));
+    ble.startAdvertising();
+    
+    PIRService pirService(ble, motion_detected);
+    
+    pir.rise(&irq_handler);
+    
+    while(1) {
+        if(motion_detected) {
+            pirService.UpdateMotionStatus(motion_detected);
+            while(interval > 0) {
+                wait(1);
+                interval--;
+            }
+            motion_detected = 0;
+            pirService.UpdateMotionStatus(motion_detected);
+        }
+    }
+}
\ No newline at end of file
diff -r 000000000000 -r c165b9e652d8 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed May 20 12:06:18 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/487b796308b0
\ No newline at end of file
diff -r 000000000000 -r c165b9e652d8 nRF51822.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nRF51822.lib	Wed May 20 12:06:18 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/Nordic-Semiconductor/code/nRF51822/#bdc690669431