.

Dependencies:   BLE_API TxIR mbed nRF51822

Fork of ir-puck by Nordic Pucks

Committer:
aleksanb
Date:
Wed Jul 09 14:50:18 2014 +0000
Revision:
2:b1bffa31a634
Parent:
1:e92c3b50191d
Forked for PRQ reasons.

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
aleksanb 1:e92c3b50191d 28 int received_ir_transmission = 0;
sigveseb 0:c94311378ec1 29 void onDataWritten(uint16_t handle)
sigveseb 0:c94311378ec1 30 {
sigveseb 0:c94311378ec1 31 py.printf("Data written! %i\n", handle);
sigveseb 0:c94311378ec1 32 for (int i = 0; i < ir_service.getCharacteristicCount(); i++) {
sigveseb 0:c94311378ec1 33 GattCharacteristic* characteristic = ir_service.getCharacteristic(i);
sigveseb 0:c94311378ec1 34 characteristic->getMaxLength();
sigveseb 0:c94311378ec1 35 if (characteristic->getHandle() == handle) {
sigveseb 0:c94311378ec1 36 uint16_t max_length = characteristic->getMaxLength();
sigveseb 0:c94311378ec1 37 ble.readCharacteristicValue(handle, characteristic->getValuePtr(), &max_length);
aleksanb 1:e92c3b50191d 38 for (int i=0; i<max_length; i++) {
aleksanb 1:e92c3b50191d 39 py.printf("Got value: %d\n", characteristic->getValuePtr()[i]);
aleksanb 1:e92c3b50191d 40 }
sigveseb 0:c94311378ec1 41 break;
sigveseb 0:c94311378ec1 42 }
sigveseb 0:c94311378ec1 43 }
aleksanb 1:e92c3b50191d 44
sigveseb 0:c94311378ec1 45 if (code.getHandle() == handle) {
aleksanb 1:e92c3b50191d 46 received_ir_transmission = 1;
sigveseb 0:c94311378ec1 47 }
sigveseb 0:c94311378ec1 48 }
sigveseb 0:c94311378ec1 49
sigveseb 0:c94311378ec1 50 void disconnectionCallback(void)
sigveseb 0:c94311378ec1 51 {
sigveseb 0:c94311378ec1 52 py.printf("Disconnected!\n");
sigveseb 0:c94311378ec1 53 py.printf("Restarting the advertising process\n");
sigveseb 0:c94311378ec1 54 ble.startAdvertising();
sigveseb 0:c94311378ec1 55 }
sigveseb 0:c94311378ec1 56
sigveseb 0:c94311378ec1 57 void connectionCallback(void)
sigveseb 0:c94311378ec1 58 {
aleksanb 1:e92c3b50191d 59 py.printf("Connected!\n");
sigveseb 0:c94311378ec1 60 }
sigveseb 0:c94311378ec1 61
sigveseb 0:c94311378ec1 62 void onDataSent(uint16_t data)
sigveseb 0:c94311378ec1 63 {
sigveseb 0:c94311378ec1 64 py.printf("onDataSent!\n");
sigveseb 0:c94311378ec1 65 }
sigveseb 0:c94311378ec1 66
aleksanb 1:e92c3b50191d 67 int main()
aleksanb 1:e92c3b50191d 68 {
aleksanb 1:e92c3b50191d 69 py.printf("Start of main\n");
aleksanb 1:e92c3b50191d 70
sigveseb 0:c94311378ec1 71 ble.init();
sigveseb 0:c94311378ec1 72 ble.onConnection(connectionCallback);
sigveseb 0:c94311378ec1 73 ble.onDisconnection(disconnectionCallback);
sigveseb 0:c94311378ec1 74 ble.onDataWritten(onDataWritten);
sigveseb 0:c94311378ec1 75 ble.onDataSent(onDataSent);
sigveseb 0:c94311378ec1 76 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
sigveseb 0:c94311378ec1 77 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
sigveseb 0:c94311378ec1 78 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
aleksanb 1:e92c3b50191d 79
sigveseb 0:c94311378ec1 80 ble.accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA,
aleksanb 1:e92c3b50191d 81 beaconPayload, sizeof(beaconPayload));
aleksanb 1:e92c3b50191d 82
sigveseb 0:c94311378ec1 83 ble.startAdvertising();
sigveseb 0:c94311378ec1 84
sigveseb 0:c94311378ec1 85 ble.addService(ir_service);
aleksanb 1:e92c3b50191d 86
sigveseb 0:c94311378ec1 87 myled = 1;
aleksanb 1:e92c3b50191d 88
aleksanb 1:e92c3b50191d 89 py.printf("Listening..\n");
sigveseb 0:c94311378ec1 90
sigveseb 0:c94311378ec1 91 while (true) {
sigveseb 0:c94311378ec1 92 ble.waitForEvent();
aleksanb 1:e92c3b50191d 93 if (received_ir_transmission == 1) {
aleksanb 1:e92c3b50191d 94 fireIRCode(header.getValuePtr(), one.getValuePtr(), zero.getValuePtr(), ptrail.getValuePtr(), predata.getValuePtr(), code.getValuePtr());
aleksanb 1:e92c3b50191d 95 received_ir_transmission = 0;
aleksanb 1:e92c3b50191d 96 }
sigveseb 0:c94311378ec1 97 myled = !myled;
sigveseb 0:c94311378ec1 98 }
sigveseb 0:c94311378ec1 99 }