ir-puck

Dependencies:   IRSender Puck mbed

Fork of ir-puck by Nordic Pucks

Files at this revision

API Documentation at this revision

Comitter:
sigveseb
Date:
Wed Jul 23 13:01:27 2014 +0000
Parent:
4:24d9873936e6
Child:
6:da2de3a0a9d9
Commit message:
updated to use newer puck lib

Changed in this revision

BLE_API.lib Show diff for this revision Revisions of this file
IR.cpp Show annotated file Show diff for this revision Revisions of this file
Puck.lib Show annotated file Show diff for this revision Revisions of this file
TxIR.lib Show annotated file Show diff for this revision Revisions of this file
ir_service.cpp Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
nRF51822.lib Show diff for this revision Revisions of this file
--- a/BLE_API.lib	Tue Jul 15 08:49:45 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#6f4c8e545d38
--- a/IR.cpp	Tue Jul 15 08:49:45 2014 +0000
+++ b/IR.cpp	Wed Jul 23 13:01:27 2014 +0000
@@ -7,8 +7,46 @@
 TxIR txir(p14);
 Serial px(USBTX, USBRX);
 
+#define SCR_1 1260, 420
+#define SCR_0 420, 1260
+
+#define SCR_RAW_CODE_DOWN   SCR_1, SCR_1, SCR_1, SCR_1, SCR_0, SCR_0, SCR_0, SCR_0, SCR_0, SCR_1, SCR_0, SCR_0
+#define SCR_RAW_CODE_MIDDLE SCR_1, SCR_1, SCR_1, SCR_1, SCR_0, SCR_0, SCR_0, SCR_0, SCR_0, SCR_0, SCR_1, SCR_0
+#define SCR_RAW_CODE_UP     SCR_1, SCR_1, SCR_1, SCR_1, SCR_0, SCR_0, SCR_0, SCR_0, SCR_0, SCR_0, SCR_0, SCR_1
+#define SCR_PAUSE 0, 20 * 1680    
+
+unsigned screen_down_raw_codes[50] = {
+    SCR_RAW_CODE_DOWN,
+    SCR_PAUSE,
+    SCR_RAW_CODE_DOWN
+};
+
+unsigned screen_middle_raw_codes[50] = {
+    SCR_RAW_CODE_MIDDLE,
+    SCR_PAUSE,
+    SCR_RAW_CODE_MIDDLE
+};
+
+unsigned screen_up_raw_codes[50] = {
+    SCR_RAW_CODE_UP,
+    SCR_PAUSE,
+    SCR_RAW_CODE_UP
+};
+
+
+
 void fireIRCode(uint8_t* header, uint8_t* one, uint8_t* zero, uint8_t* ptrail, uint8_t* predata, uint8_t* code)
 {
+    
+    if(code[0] == 17) {
+        switch(code[1]) {
+            case 17: txir.txSeq(26, 50, screen_up_raw_codes); break;
+            case 18: txir.txSeq(26, 50, screen_middle_raw_codes); break;
+            case 19: txir.txSeq(26, 50, screen_down_raw_codes); break;
+        }
+        return;
+    } 
+    
     px.printf("Going to fire.\n");
     int raw_codes_length = 67;
     unsigned raw_codes[raw_codes_length];
@@ -40,5 +78,6 @@
     
     txir.txSeq(26, 67, raw_codes);
 
+
     px.printf("Wrote message :)\n");
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Puck.lib	Wed Jul 23 13:01:27 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/Nordic-Pucks/code/Puck/#5432b38585ea
--- a/TxIR.lib	Tue Jul 15 08:49:45 2014 +0000
+++ b/TxIR.lib	Wed Jul 23 13:01:27 2014 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/teams/Nordic-Pucks/code/TxIR/#bc64c2d5bc26
+http://mbed.org/teams/Nordic-Pucks/code/TxIR/#1f89d6278243
--- a/ir_service.cpp	Tue Jul 15 08:49:45 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-#include "BLEDevice.h"
-
-uint8_t uuid_array_service[16]   = {'b', 'f', 't', 'j', ' ', 'i', 'r', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
-uint8_t uuid_array_header[16]    = {'b', 'f', 't', 'j', ' ', 'i', 'r', ' ', 'h', 'e', 'a', 'd', 'e', 'r', ' ', ' '};
-uint8_t uuid_array_one[16]       = {'b', 'f', 't', 'j', ' ', 'i', 'r', ' ', 'o', 'n', 'e', ' ', ' ', ' ', ' ', ' '};
-uint8_t uuid_array_zero[16]      = {'b', 'f', 't', 'j', ' ', 'i', 'r', ' ', 'z', 'e', 'r', 'o', ' ', ' ', ' ', ' '};
-uint8_t uuid_array_ptrail[16]    = {'b', 'f', 't', 'j', ' ', 'i', 'r', ' ', 'p', 't', 'r', 'a', 'i', 'l', ' ', ' '};
-uint8_t uuid_array_predata[16]   = {'b', 'f', 't', 'j', ' ', 'i', 'r', ' ', 'p', 'r', 'e', 'd', 'a', 't', 'a', ' '};
-uint8_t uuid_array_code[16]      = {'b', 'f', 't', 'j', ' ', 'i', 'r', ' ', 'c', 'o', 'd', 'e', ' ', ' ', ' ', ' '};
-
-const UUID uuid_service = UUID(uuid_array_service);
-const UUID uuid_header = UUID(uuid_array_header);
-const UUID uuid_one = UUID(uuid_array_one);
-const UUID uuid_zero = UUID(uuid_array_zero);
-const UUID uuid_ptrail = UUID(uuid_array_ptrail);
-const UUID uuid_predata = UUID(uuid_array_predata);
-const UUID uuid_code = UUID(uuid_array_code);
-
-uint8_t header_data[4];
-uint16_t header_data_length = 4;
-uint8_t one_data[4];
-uint16_t one_data_length = 4;
-uint8_t zero_data[4];
-uint16_t zero_data_length = 4;
-uint8_t ptrail_data[2];
-uint16_t ptrail_data_length = 2;
-uint8_t predata_data[2];
-uint16_t predata_data_length = 2;
-uint8_t code_data[2];
-uint16_t code_data_length = 2;
-
-GattCharacteristic header = GattCharacteristic(uuid_header, header_data, sizeof(header_data), sizeof(header_data), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
-GattCharacteristic one = GattCharacteristic(uuid_one, one_data, sizeof(one_data), sizeof(one_data), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
-GattCharacteristic zero = GattCharacteristic(uuid_zero, zero_data, sizeof(zero_data), sizeof(zero_data), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
-GattCharacteristic ptrail = GattCharacteristic(uuid_ptrail, ptrail_data, sizeof(ptrail_data), sizeof(ptrail_data), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
-GattCharacteristic predata = GattCharacteristic(uuid_predata, predata_data, sizeof(predata_data), sizeof(predata_data), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
-GattCharacteristic code = GattCharacteristic(uuid_code, code_data, sizeof(code_data), sizeof(code_data), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
-
-GattCharacteristic *characteristics[] = {&header, &one, &zero, &ptrail, &predata, &code};
-GattService ir_service = GattService(uuid_service, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
\ No newline at end of file
--- a/main.cpp	Tue Jul 15 08:49:45 2014 +0000
+++ b/main.cpp	Wed Jul 23 13:01:27 2014 +0000
@@ -1,103 +1,40 @@
 #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);
+#define LOG_LEVEL_VERBOSE
+#include "Puck.h"
 
-const static uint8_t beaconPayload[] = {
-    0x00, 0x00, // Company identifier code (0x004C == Apple) - Should be all zero until we figure out this weird iOS bug
-    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)
-};
+Puck* puck = &Puck::getPuck();
 
-extern GattService ir_service;
-extern GattCharacteristic header, one, zero, ptrail, predata, code;
+const UUID IR_SERVICE_UUID = stringToUUID("bftj ir         ");
+const UUID HEADER_UUID     = stringToUUID("bftj ir header  ");
+const UUID ONE_UUID        = stringToUUID("bftj ir one     ");
+const UUID ZERO_UUID       = stringToUUID("bftj ir zero    ");
+const UUID PTRAIL_UUID     = stringToUUID("bftj ir ptrail  ");
+const UUID PREDATA_UUID    = stringToUUID("bftj ir predata ");
+const UUID CODE_UUID       = stringToUUID("bftj ir code    ");
 
-bool received_ir_transmission = false;
-bool device_disconnected = true;
 
-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);
-            for (int i=0; i<max_length; i++) {
-                py.printf("Got value: %d\n", characteristic->getValuePtr()[i]);
-            }
-            break;
-        }
-    }
-
-    if (code.getHandle() == handle) {
-        py.printf("Received complete instruction\n");
-        received_ir_transmission = true;
-    }
+void onIRCodeWrite(uint8_t* value) {
+    LOG_INFO("Going to fire IR code...\n");
+    fireIRCode(puck->getCharacteristicValue(HEADER_UUID),
+               puck->getCharacteristicValue(ONE_UUID), 
+               puck->getCharacteristicValue(ZERO_UUID),
+               puck->getCharacteristicValue(PTRAIL_UUID),
+               puck->getCharacteristicValue(PREDATA_UUID),
+               puck->getCharacteristicValue(CODE_UUID));
+    LOG_INFO("Fire complete!\n");
 }
 
-void disconnectionCallback(void)
-{
-    py.printf("Disconnected!\n");
-    device_disconnected = true;
-}
 
-void connectionCallback(void)
-{
-    py.printf("Connected!\n");
-    device_disconnected = false;
-}
-
-void onDataSent(uint16_t data)
-{
-    py.printf("onDataSent!\n");
-}
-
-int main()
-{
-    py.printf("Start of main\n");
-
-    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("Listening..\n");
-
-    while (true) {
-        ble.waitForEvent();
-        if (received_ir_transmission && device_disconnected) {
-            fireIRCode(header.getValuePtr(), one.getValuePtr(), zero.getValuePtr(), ptrail.getValuePtr(), predata.getValuePtr(), code.getValuePtr());
-            received_ir_transmission = false;
-            ble.startAdvertising();
-        }
-        myled = !myled;
-    }
+int main() {
+    puck->addCharacteristic(IR_SERVICE_UUID, HEADER_UUID, 4);
+    puck->addCharacteristic(IR_SERVICE_UUID, ONE_UUID, 4);
+    puck->addCharacteristic(IR_SERVICE_UUID, ZERO_UUID, 4);
+    puck->addCharacteristic(IR_SERVICE_UUID, PTRAIL_UUID, 2);
+    puck->addCharacteristic(IR_SERVICE_UUID, PREDATA_UUID, 2);
+    puck->addCharacteristic(IR_SERVICE_UUID, CODE_UUID, 2);
+    puck->init(0xABBA);
+    puck->onCharacteristicWrite(CODE_UUID, onIRCodeWrite);
+    while (puck->drive());
 }
\ No newline at end of file
--- a/nRF51822.lib	Tue Jul 15 08:49:45 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/teams/Nordic-Semiconductor/code/nRF51822/#7174913c9d67