test
Dependencies: BLE_API mbed nRF51822
Fork of Connect_Test4 by
Diff: main.cpp
- Revision:
- 8:60ede963dfe2
- Parent:
- 7:f6814152873c
- Child:
- 9:b33f42191584
diff -r f6814152873c -r 60ede963dfe2 main.cpp --- 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 +}