.

Dependencies:   BLE_API TxIR mbed nRF51822

Fork of ir-puck by Nordic Pucks

Committer:
sigveseb
Date:
Wed Jul 02 10:48:58 2014 +0000
Revision:
0:c94311378ec1
Child:
1:e92c3b50191d
.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sigveseb 0:c94311378ec1 1 #include "mbed.h"
sigveseb 0:c94311378ec1 2 #include "BLEDevice.h"
sigveseb 0:c94311378ec1 3 #include "IR.h"
sigveseb 0:c94311378ec1 4 #include "nRF51822n.h"
sigveseb 0:c94311378ec1 5
sigveseb 0:c94311378ec1 6 BLEDevice ble;
sigveseb 0:c94311378ec1 7
sigveseb 0:c94311378ec1 8 DigitalOut myled(LED1);
sigveseb 0:c94311378ec1 9 DigitalOut yourled(LED2);
sigveseb 0:c94311378ec1 10 nRF51822n nrf;
sigveseb 0:c94311378ec1 11
sigveseb 0:c94311378ec1 12 Serial py(USBTX, USBRX);
sigveseb 0:c94311378ec1 13
sigveseb 0:c94311378ec1 14 const static uint8_t beaconPayload[] = {
sigveseb 0:c94311378ec1 15 0x00, 0x4C, // Company identifier code (0x004C == Apple)
sigveseb 0:c94311378ec1 16 0x02, // ID
sigveseb 0:c94311378ec1 17 0x15, // length of the remaining payload
sigveseb 0:c94311378ec1 18 0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, // UUID
sigveseb 0:c94311378ec1 19 0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61,
sigveseb 0:c94311378ec1 20 0x13, 0x37, // the major value to differenciate a location
sigveseb 0:c94311378ec1 21 0xFA, 0xCE, // the minor value to differenciate a location
sigveseb 0:c94311378ec1 22 0xC8 // 2's complement of the Tx power (-56dB)
sigveseb 0:c94311378ec1 23 };
sigveseb 0:c94311378ec1 24
sigveseb 0:c94311378ec1 25 extern GattService ir_service;
sigveseb 0:c94311378ec1 26 extern GattCharacteristic header, one, zero, ptrail, predata, code;
sigveseb 0:c94311378ec1 27
sigveseb 0:c94311378ec1 28 void onDataWritten(uint16_t handle)
sigveseb 0:c94311378ec1 29 {
sigveseb 0:c94311378ec1 30 py.printf("Data written! %i\n", handle);
sigveseb 0:c94311378ec1 31 for (int i = 0; i < ir_service.getCharacteristicCount(); i++) {
sigveseb 0:c94311378ec1 32 GattCharacteristic* characteristic = ir_service.getCharacteristic(i);
sigveseb 0:c94311378ec1 33 characteristic->getMaxLength();
sigveseb 0:c94311378ec1 34 if (characteristic->getHandle() == handle) {
sigveseb 0:c94311378ec1 35 uint16_t max_length = characteristic->getMaxLength();
sigveseb 0:c94311378ec1 36 ble.readCharacteristicValue(handle, characteristic->getValuePtr(), &max_length);
sigveseb 0:c94311378ec1 37 break;
sigveseb 0:c94311378ec1 38 }
sigveseb 0:c94311378ec1 39 }
sigveseb 0:c94311378ec1 40
sigveseb 0:c94311378ec1 41 if (code.getHandle() == handle) {
sigveseb 0:c94311378ec1 42 fireIRCode(header.getValuePtr(), one.getValuePtr(), zero.getValuePtr(), ptrail.getValuePtr(), predata.getValuePtr(), code.getValuePtr());
sigveseb 0:c94311378ec1 43 }
sigveseb 0:c94311378ec1 44 }
sigveseb 0:c94311378ec1 45
sigveseb 0:c94311378ec1 46 void disconnectionCallback(void)
sigveseb 0:c94311378ec1 47 {
sigveseb 0:c94311378ec1 48 py.printf("Disconnected!\n");
sigveseb 0:c94311378ec1 49 py.printf("Restarting the advertising process\n");
sigveseb 0:c94311378ec1 50 ble.startAdvertising();
sigveseb 0:c94311378ec1 51 }
sigveseb 0:c94311378ec1 52
sigveseb 0:c94311378ec1 53 void connectionCallback(void)
sigveseb 0:c94311378ec1 54 {
sigveseb 0:c94311378ec1 55 py.printf("Connected!\n");
sigveseb 0:c94311378ec1 56 }
sigveseb 0:c94311378ec1 57
sigveseb 0:c94311378ec1 58 void onDataSent(uint16_t data)
sigveseb 0:c94311378ec1 59 {
sigveseb 0:c94311378ec1 60 py.printf("onDataSent!\n");
sigveseb 0:c94311378ec1 61 }
sigveseb 0:c94311378ec1 62
sigveseb 0:c94311378ec1 63 int main() {
sigveseb 0:c94311378ec1 64 ble.init();
sigveseb 0:c94311378ec1 65 ble.onConnection(connectionCallback);
sigveseb 0:c94311378ec1 66 ble.onDisconnection(disconnectionCallback);
sigveseb 0:c94311378ec1 67 ble.onDataWritten(onDataWritten);
sigveseb 0:c94311378ec1 68 ble.onDataSent(onDataSent);
sigveseb 0:c94311378ec1 69 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
sigveseb 0:c94311378ec1 70 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
sigveseb 0:c94311378ec1 71 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
sigveseb 0:c94311378ec1 72
sigveseb 0:c94311378ec1 73
sigveseb 0:c94311378ec1 74 ble.accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA,
sigveseb 0:c94311378ec1 75 beaconPayload, sizeof(beaconPayload));
sigveseb 0:c94311378ec1 76
sigveseb 0:c94311378ec1 77 ble.startAdvertising();
sigveseb 0:c94311378ec1 78
sigveseb 0:c94311378ec1 79 ble.addService(ir_service);
sigveseb 0:c94311378ec1 80
sigveseb 0:c94311378ec1 81 myled = 1;
sigveseb 0:c94311378ec1 82
sigveseb 0:c94311378ec1 83 py.printf("Starting up.\n");
sigveseb 0:c94311378ec1 84
sigveseb 0:c94311378ec1 85
sigveseb 0:c94311378ec1 86
sigveseb 0:c94311378ec1 87 while (true) {
sigveseb 0:c94311378ec1 88 ble.waitForEvent();
sigveseb 0:c94311378ec1 89 myled = !myled;
sigveseb 0:c94311378ec1 90 }
sigveseb 0:c94311378ec1 91
sigveseb 0:c94311378ec1 92 }