ir-puck

Dependencies:   IRSender Puck mbed

Fork of ir-puck by Nordic Pucks

Revision:
13:f016a0bc4a7d
Parent:
5:3642c0af497e
Child:
14:b00d0c5ba8e3
--- a/main.cpp	Wed Jul 23 13:06:57 2014 +0000
+++ b/main.cpp	Fri Aug 01 12:37:29 2014 +0000
@@ -1,40 +1,62 @@
 #include "mbed.h"
-#include "IR.h"
+#include "TxIR.hpp"
 
 #define LOG_LEVEL_VERBOSE
 #include "Puck.h"
 
 Puck* puck = &Puck::getPuck();
 
+TxIR txir(p14);
+
 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    ");
+const UUID COMMAND_UUID    = stringToUUID("bftj ir command ");
+const UUID DATA_UUID       = stringToUUID("bftj ir data    ");
+const UUID PERIOD_UUID     = stringToUUID("bftj ir period  ");
+
+unsigned int dataBuffer[100];
+uint8_t period = 26;
+int receiveIndex;
+
+#define COMMAND_BEGIN_CODE_TRANSMISSION 0
+#define COMMAND_END_CODE_TRANSMISSION 1
 
 
-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 onCommandWrite(uint8_t* value) {
+    LOG_VERBOSE("Got command: %i\n", value[0]);
+    switch(value[0]) {
+        case COMMAND_BEGIN_CODE_TRANSMISSION:
+            receiveIndex = 0;
+            break;
+        case COMMAND_END_CODE_TRANSMISSION:
+            LOG_INFO("Going to fire IR code...\n");
+            txir.txSeq(period, 200, dataBuffer);
+            LOG_INFO("Fire complete!\n");
+            break;
+    }
+}
+
+
+void onDataWrite(uint8_t* value) {
+    LOG_VERBOSE("Got data, index: %i\n", receiveIndex);
+    for(int i = 0; i < 20 && receiveIndex < 100; i += 2) {
+        dataBuffer[receiveIndex++] = (value[i] << 8) | value[i + 1];
+    }
+}
+
+
+void onPeriodWrite(uint8_t* value) {
+    period = value[0];    
+    LOG_VERBOSE("Period is now: %i\n", period);
 }
 
 
 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->addCharacteristic(IR_SERVICE_UUID, COMMAND_UUID, 1);
+    puck->addCharacteristic(IR_SERVICE_UUID, DATA_UUID, 20);
+    puck->addCharacteristic(IR_SERVICE_UUID, PERIOD_UUID, 1);
     puck->init(0xABBA);
-    puck->onCharacteristicWrite(CODE_UUID, onIRCodeWrite);
+    puck->onCharacteristicWrite(COMMAND_UUID, onCommandWrite);
+    puck->onCharacteristicWrite(DATA_UUID, onDataWrite);
+    puck->onCharacteristicWrite(PERIOD_UUID, onPeriodWrite);
     while (puck->drive());
 }
\ No newline at end of file