ir-puck
Dependencies: IRSender Puck mbed
Fork of ir-puck by
Revision 5:3642c0af497e, committed 2014-07-23
- 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
--- 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