ir-puck
Dependencies: IRSender Puck mbed
Fork of ir-puck by
Diff: main.cpp
- 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