ir-puck

Dependencies:   IRSender Puck mbed

Fork of ir-puck by Nordic Pucks

Revision:
0:c94311378ec1
Child:
1:e92c3b50191d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jul 02 10:48:58 2014 +0000
@@ -0,0 +1,92 @@
+#include "mbed.h"
+#include "BLEDevice.h"
+#include "IR.h"
+#include "nRF51822n.h"
+
+BLEDevice ble;
+
+DigitalOut myled(LED1);
+DigitalOut yourled(LED2);
+nRF51822n nrf;
+
+Serial py(USBTX, USBRX);
+
+const static uint8_t beaconPayload[] = {
+    0x00, 0x4C, // Company identifier code (0x004C == Apple)
+    0x02,       // ID
+    0x15,       // length of the remaining payload
+    0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, // UUID
+    0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61,
+    0x13, 0x37, // the major value to differenciate a location
+    0xFA, 0xCE, // the minor value to differenciate a location
+    0xC8        // 2's complement of the Tx power (-56dB)
+};
+
+extern GattService ir_service;
+extern GattCharacteristic header, one, zero, ptrail, predata, code;
+
+void onDataWritten(uint16_t handle)
+{
+    py.printf("Data written! %i\n", handle);
+    for (int i = 0; i < ir_service.getCharacteristicCount(); i++) {
+        GattCharacteristic* characteristic = ir_service.getCharacteristic(i);
+        characteristic->getMaxLength();
+        if (characteristic->getHandle() == handle) {
+            uint16_t max_length = characteristic->getMaxLength();
+            ble.readCharacteristicValue(handle, characteristic->getValuePtr(), &max_length);
+            break;
+        }
+    }
+    
+    if (code.getHandle() == handle) {
+        fireIRCode(header.getValuePtr(), one.getValuePtr(), zero.getValuePtr(), ptrail.getValuePtr(), predata.getValuePtr(), code.getValuePtr());
+    }
+}
+
+void disconnectionCallback(void)
+{
+    py.printf("Disconnected!\n");
+    py.printf("Restarting the advertising process\n");
+    ble.startAdvertising();
+}
+
+void connectionCallback(void)
+{
+    py.printf("Connected!\n");    
+}
+
+void onDataSent(uint16_t data)
+{
+    py.printf("onDataSent!\n");
+}
+
+int main() {
+    ble.init();
+    ble.onConnection(connectionCallback);
+    ble.onDisconnection(disconnectionCallback);
+    ble.onDataWritten(onDataWritten);
+    ble.onDataSent(onDataSent);
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
+    ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+    ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
+    
+    
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA,
+                    beaconPayload, sizeof(beaconPayload));
+    
+    ble.startAdvertising();
+
+    ble.addService(ir_service);
+    
+    myled = 1;
+    
+    py.printf("Starting up.\n");
+    
+    
+
+    while (true) {
+        ble.waitForEvent();
+        myled = !myled;
+    }
+    
+}
\ No newline at end of file