test 4

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_EvothingsExample_GATT by Austin Blackstone

Committer:
mbedAustin
Date:
Mon Mar 09 19:06:45 2015 +0000
Revision:
8:60ede963dfe2
Parent:
7:f6814152873c
Child:
9:b33f42191584
Got everything working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedAustin 0:cd5b6733aeb1 1 #include "mbed.h"
mbedAustin 0:cd5b6733aeb1 2 #include "BLEDevice.h"
mbedAustin 1:94152e7d8b5c 3 #include "CustomService.h"
mbedAustin 1:94152e7d8b5c 4
mbedAustin 1:94152e7d8b5c 5 BLEDevice ble;
mbedAustin 1:94152e7d8b5c 6 DigitalOut led(LED1);
mbedAustin 1:94152e7d8b5c 7
mbedAustin 7:f6814152873c 8 const static char DEVICE_NAME[] = "ChangeMe!!"; // change this
mbedAustin 8:60ede963dfe2 9 static const uint16_t uuid16_list[] = {0xFFFF}; //Custom UUID, FFFF is reserved for development
mbedAustin 1:94152e7d8b5c 10
mbedAustin 2:e84c13abc479 11 // Set Up Characteristics
mbedAustin 8:60ede963dfe2 12 static uint8_t readValue[10] = {0x00};
mbedAustin 8:60ede963dfe2 13 GattCharacteristic readChar(0xA001 /* read char UUID*/, readValue, sizeof(readValue), sizeof(readValue),
mbedAustin 8:60ede963dfe2 14 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
mbedAustin 2:e84c13abc479 15
mbedAustin 8:60ede963dfe2 16 static uint8_t writeValue[10] = {0x00};
mbedAustin 8:60ede963dfe2 17 GattCharacteristic writeChar(0xA002 /*write char UUID*/, writeValue, sizeof(writeValue), sizeof(writeValue),
mbedAustin 8:60ede963dfe2 18 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
mbedAustin 2:e84c13abc479 19
mbedAustin 2:e84c13abc479 20 // Set up custom service
mbedAustin 8:60ede963dfe2 21 GattCharacteristic *characteristics[] = {&readChar, &writeChar};
mbedAustin 8:60ede963dfe2 22 GattService customService(0xA000 /*Service UUID*/, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
mbedAustin 2:e84c13abc479 23
mbedAustin 2:e84c13abc479 24
mbedAustin 8:60ede963dfe2 25 /*
mbedAustin 8:60ede963dfe2 26 * Restart advertising when phone app disconnects
mbedAustin 8:60ede963dfe2 27 */
mbedAustin 1:94152e7d8b5c 28 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
mbedAustin 1:94152e7d8b5c 29 {
mbedAustin 8:60ede963dfe2 30 ble.startAdvertising();
mbedAustin 1:94152e7d8b5c 31 }
mbedAustin 0:cd5b6733aeb1 32
mbedAustin 8:60ede963dfe2 33 /*
mbedAustin 8:60ede963dfe2 34 * handle writes to writeCharacteristic
mbedAustin 8:60ede963dfe2 35 */
mbedAustin 4:7ef90665b399 36 void writeCharCallback(const GattCharacteristicWriteCBParams *params)
mbedAustin 3:0fb60f81f693 37 {
mbedAustin 8:60ede963dfe2 38 // check to see what characteristic was written, by handle
mbedAustin 8:60ede963dfe2 39 if(params->charHandle == writeChar.getValueHandle()) {
mbedAustin 8:60ede963dfe2 40 // toggle LED if only 1 byte is written
mbedAustin 8:60ede963dfe2 41 if(params->len == 1) {
mbedAustin 8:60ede963dfe2 42 led = params->data[0];
mbedAustin 8:60ede963dfe2 43 }
mbedAustin 8:60ede963dfe2 44 // print the data if more than 1 byte is written
mbedAustin 8:60ede963dfe2 45 else {
mbedAustin 8:60ede963dfe2 46 for(int x=0; x < params->len; x++) {
mbedAustin 8:60ede963dfe2 47 printf("%x",params->data[x]);
mbedAustin 8:60ede963dfe2 48 }
mbedAustin 8:60ede963dfe2 49 printf("\n\r"); // print newline
mbedAustin 8:60ede963dfe2 50 }
mbedAustin 8:60ede963dfe2 51 // update the readChar with the value of writeChar
mbedAustin 8:60ede963dfe2 52 ble.updateCharacteristicValue(readChar.getValueHandle(),params->data,params->len);
mbedAustin 8:60ede963dfe2 53 }
mbedAustin 3:0fb60f81f693 54 }
mbedAustin 0:cd5b6733aeb1 55
mbedAustin 8:60ede963dfe2 56 /*
mbedAustin 8:60ede963dfe2 57 * main loop
mbedAustin 8:60ede963dfe2 58 */
mbedAustin 0:cd5b6733aeb1 59 int
mbedAustin 0:cd5b6733aeb1 60 main(void)
mbedAustin 0:cd5b6733aeb1 61 {
mbedAustin 8:60ede963dfe2 62 /* initialize stuff */
mbedAustin 8:60ede963dfe2 63 printf("\n\r********* Starting Main Loop *********\n\r");
mbedAustin 8:60ede963dfe2 64 led = 1; // turn LED off (led is inverted)
mbedAustin 2:e84c13abc479 65 ble.init();
mbedAustin 2:e84c13abc479 66 ble.onDisconnection(disconnectionCallback);
mbedAustin 4:7ef90665b399 67 ble.onDataWritten(writeCharCallback); //TODO: this is not correct, figure out correct syntax
mbedAustin 2:e84c13abc479 68
mbedAustin 2:e84c13abc479 69 /* setup advertising */
mbedAustin 7:f6814152873c 70 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); // BLE only, no classic BT
mbedAustin 7:f6814152873c 71 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // advertising type
mbedAustin 7:f6814152873c 72 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); // add name
mbedAustin 7:f6814152873c 73 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); // UUID's broadcast in advertising packet
mbedAustin 2:e84c13abc479 74 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
mbedAustin 2:e84c13abc479 75
mbedAustin 8:60ede963dfe2 76 // add our custom service
mbedAustin 2:e84c13abc479 77 ble.addService(customService); // Add our custom service to device
mbedAustin 2:e84c13abc479 78
mbedAustin 7:f6814152873c 79 ble.startAdvertising(); // start advertising
mbedAustin 2:e84c13abc479 80 while (true) {
mbedAustin 2:e84c13abc479 81 ble.waitForEvent(); //Save power
mbedAustin 2:e84c13abc479 82 }
mbedAustin 8:60ede963dfe2 83 }