test 4

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_EvothingsExample_GATT by Austin Blackstone

Committer:
mbedAustin
Date:
Mon Mar 09 15:25:43 2015 +0000
Revision:
7:f6814152873c
Parent:
6:97b22b5bfbb8
Child:
8:60ede963dfe2
changed default name to match Evothings Example, added UUID's to braodcast in advertising packet

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
mbedAustin 1:94152e7d8b5c 6 // BLE object
mbedAustin 1:94152e7d8b5c 7 BLEDevice ble;
mbedAustin 1:94152e7d8b5c 8
mbedAustin 1:94152e7d8b5c 9 // LED object
mbedAustin 1:94152e7d8b5c 10 DigitalOut led(LED1);
mbedAustin 1:94152e7d8b5c 11
mbedAustin 7:f6814152873c 12 const static char DEVICE_NAME[] = "ChangeMe!!"; // change this
mbedAustin 7:f6814152873c 13 static const uint16_t uuid16_list[] = {0xFFFF}; //Custom UUID, FF is reserved for development
mbedAustin 1:94152e7d8b5c 14
mbedAustin 2:e84c13abc479 15 // Set Up Characteristics
mbedAustin 2:e84c13abc479 16 static uint8_t readValue[1] = {0x00};
mbedAustin 2:e84c13abc479 17 GattCharacteristic readChar(0xAAAA /* read char UUID*/, readValue, sizeof(readValue), sizeof(readValue),
mbedAustin 2:e84c13abc479 18 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
mbedAustin 2:e84c13abc479 19
mbedAustin 2:e84c13abc479 20 static uint8_t writeValue[1] = {0x00};
mbedAustin 2:e84c13abc479 21 GattCharacteristic writeChar(0xBBBB /*write char UUID*/, writeValue, sizeof(writeValue), sizeof(writeValue),
mbedAustin 2:e84c13abc479 22 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
mbedAustin 2:e84c13abc479 23
mbedAustin 2:e84c13abc479 24 GattCharacteristic *characteristics[] = {&readChar, &writeChar};
mbedAustin 2:e84c13abc479 25
mbedAustin 2:e84c13abc479 26 // Set up custom service
mbedAustin 2:e84c13abc479 27 GattService customService(0x221D /*Service UUID*/, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
mbedAustin 2:e84c13abc479 28
mbedAustin 2:e84c13abc479 29
mbedAustin 1:94152e7d8b5c 30 // Restart advertising when phone app disconnects
mbedAustin 1:94152e7d8b5c 31 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
mbedAustin 1:94152e7d8b5c 32 {
mbedAustin 1:94152e7d8b5c 33 ble.startAdvertising(); // restart advertising
mbedAustin 1:94152e7d8b5c 34 }
mbedAustin 0:cd5b6733aeb1 35
mbedAustin 7:f6814152873c 36 // handle writes to writeCharacteristic
mbedAustin 4:7ef90665b399 37 void writeCharCallback(const GattCharacteristicWriteCBParams *params)
mbedAustin 3:0fb60f81f693 38 {
mbedAustin 5:d0548c64e2e7 39 led = params->data[0];
mbedAustin 5:d0548c64e2e7 40 printf("LED Written To, value=%x",params->data[0]);
mbedAustin 6:97b22b5bfbb8 41 // TODO: update the readChar value to match write char, or better yet give it an english value
mbedAustin 7:f6814152873c 42 // TODO: update with info from here : http://developer.mbed.org/forum/team-63-Bluetooth-Low-Energy-community/topic/5502/
mbedAustin 3:0fb60f81f693 43 }
mbedAustin 0:cd5b6733aeb1 44
mbedAustin 0:cd5b6733aeb1 45 int
mbedAustin 0:cd5b6733aeb1 46 main(void)
mbedAustin 0:cd5b6733aeb1 47 {
mbedAustin 7:f6814152873c 48 led = 1; // turn LED off
mbedAustin 2:e84c13abc479 49 ble.init();
mbedAustin 2:e84c13abc479 50 ble.onDisconnection(disconnectionCallback);
mbedAustin 4:7ef90665b399 51 ble.onDataWritten(writeCharCallback); //TODO: this is not correct, figure out correct syntax
mbedAustin 2:e84c13abc479 52
mbedAustin 2:e84c13abc479 53 /* setup advertising */
mbedAustin 7:f6814152873c 54 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); // BLE only, no classic BT
mbedAustin 7:f6814152873c 55 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // advertising type
mbedAustin 7:f6814152873c 56 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); // add name
mbedAustin 7:f6814152873c 57 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); // UUID's broadcast in advertising packet
mbedAustin 2:e84c13abc479 58 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
mbedAustin 7:f6814152873c 59
mbedAustin 2:e84c13abc479 60
mbedAustin 2:e84c13abc479 61 ble.addService(customService); // Add our custom service to device
mbedAustin 2:e84c13abc479 62
mbedAustin 7:f6814152873c 63 ble.startAdvertising(); // start advertising
mbedAustin 2:e84c13abc479 64 while (true) {
mbedAustin 2:e84c13abc479 65 ble.waitForEvent(); //Save power
mbedAustin 2:e84c13abc479 66 }
mbedAustin 2:e84c13abc479 67
mbedAustin 1:94152e7d8b5c 68
mbedAustin 1:94152e7d8b5c 69 // TODO: impliment the rest of triggering for LED based on Write of characteristic.
mbedAustin 1:94152e7d8b5c 70 // TODO: impliment a read characteristic that sends text back to app
mbedAustin 1:94152e7d8b5c 71 // take a look at http://developer.mbed.org/teams/Bluetooth-Low-Energy/code/BLE_GroveColourSensor/file/000c8f8c7f03/main.cpp for inspiration.
mbedAustin 0:cd5b6733aeb1 72 }