Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of BLE_GATT_Example by
Revision 8:60ede963dfe2, committed 2015-03-09
- Comitter:
- mbedAustin
- Date:
- Mon Mar 09 19:06:45 2015 +0000
- Parent:
- 7:f6814152873c
- Child:
- 9:b33f42191584
- Commit message:
- Got everything working
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Mar 09 15:25:43 2015 +0000
+++ b/main.cpp Mon Mar 09 19:06:45 2015 +0000
@@ -2,50 +2,66 @@
#include "BLEDevice.h"
#include "CustomService.h"
-
-// BLE object
BLEDevice ble;
-
-// LED object
DigitalOut led(LED1);
const static char DEVICE_NAME[] = "ChangeMe!!"; // change this
-static const uint16_t uuid16_list[] = {0xFFFF}; //Custom UUID, FF is reserved for development
+static const uint16_t uuid16_list[] = {0xFFFF}; //Custom UUID, FFFF is reserved for development
// Set Up Characteristics
-static uint8_t readValue[1] = {0x00};
-GattCharacteristic readChar(0xAAAA /* read char UUID*/, readValue, sizeof(readValue), sizeof(readValue),
- GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
+static uint8_t readValue[10] = {0x00};
+GattCharacteristic readChar(0xA001 /* read char UUID*/, readValue, sizeof(readValue), sizeof(readValue),
+ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
-static uint8_t writeValue[1] = {0x00};
-GattCharacteristic writeChar(0xBBBB /*write char UUID*/, writeValue, sizeof(writeValue), sizeof(writeValue),
- GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
-
-GattCharacteristic *characteristics[] = {&readChar, &writeChar};
+static uint8_t writeValue[10] = {0x00};
+GattCharacteristic writeChar(0xA002 /*write char UUID*/, writeValue, sizeof(writeValue), sizeof(writeValue),
+ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
// Set up custom service
-GattService customService(0x221D /*Service UUID*/, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
+GattCharacteristic *characteristics[] = {&readChar, &writeChar};
+GattService customService(0xA000 /*Service UUID*/, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
-// Restart advertising when phone app disconnects
+/*
+ * Restart advertising when phone app disconnects
+*/
void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
{
- ble.startAdvertising(); // restart advertising
+ ble.startAdvertising();
}
-// handle writes to writeCharacteristic
+/*
+ * handle writes to writeCharacteristic
+*/
void writeCharCallback(const GattCharacteristicWriteCBParams *params)
{
- led = params->data[0];
- printf("LED Written To, value=%x",params->data[0]);
- // TODO: update the readChar value to match write char, or better yet give it an english value
- // TODO: update with info from here : http://developer.mbed.org/forum/team-63-Bluetooth-Low-Energy-community/topic/5502/
+ // check to see what characteristic was written, by handle
+ if(params->charHandle == writeChar.getValueHandle()) {
+ // toggle LED if only 1 byte is written
+ if(params->len == 1) {
+ led = params->data[0];
+ }
+ // print the data if more than 1 byte is written
+ else {
+ for(int x=0; x < params->len; x++) {
+ printf("%x",params->data[x]);
+ }
+ printf("\n\r"); // print newline
+ }
+ // update the readChar with the value of writeChar
+ ble.updateCharacteristicValue(readChar.getValueHandle(),params->data,params->len);
+ }
}
+/*
+ * main loop
+*/
int
main(void)
{
- led = 1; // turn LED off
+ /* initialize stuff */
+ printf("\n\r********* Starting Main Loop *********\n\r");
+ led = 1; // turn LED off (led is inverted)
ble.init();
ble.onDisconnection(disconnectionCallback);
ble.onDataWritten(writeCharCallback); //TODO: this is not correct, figure out correct syntax
@@ -56,17 +72,12 @@
ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); // add name
ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); // UUID's broadcast in advertising packet
ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
-
+ // add our custom service
ble.addService(customService); // Add our custom service to device
ble.startAdvertising(); // start advertising
while (true) {
ble.waitForEvent(); //Save power
}
-
-
- // TODO: impliment the rest of triggering for LED based on Write of characteristic.
- // TODO: impliment a read characteristic that sends text back to app
- // take a look at http://developer.mbed.org/teams/Bluetooth-Low-Energy/code/BLE_GroveColourSensor/file/000c8f8c7f03/main.cpp for inspiration.
-}
\ No newline at end of file
+}
