ir-puck
Dependencies: Puck IRSender mbed
Fork of ir-puck by
main.cpp
- Committer:
- aleksanb
- Date:
- 2014-07-09
- Revision:
- 1:e92c3b50191d
- Parent:
- 0:c94311378ec1
- Child:
- 4:24d9873936e6
File content as of revision 1:e92c3b50191d:
#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; int received_ir_transmission = 0; 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) { received_ir_transmission = 1; } } 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() { 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 == 1) { fireIRCode(header.getValuePtr(), one.getValuePtr(), zero.getValuePtr(), ptrail.getValuePtr(), predata.getValuePtr(), code.getValuePtr()); received_ir_transmission = 0; } myled = !myled; } }