L0_BlueNRG_Test_Client
Dependencies: BLE_API BLE_BlueNRG mbed
Fork of L0_BlueNRG_Test by
Revision 4:17e1861df93f, committed 2014-11-20
- Comitter:
- Deepti
- Date:
- Thu Nov 20 09:12:32 2014 +0000
- Parent:
- 3:ab24e6c72ae3
- Commit message:
- BLueNRG_Master functionality
Changed in this revision
BLE_BlueNRG.lib | Show annotated file Show diff for this revision Revisions of this file |
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/BLE_BlueNRG.lib Thu Aug 28 05:58:36 2014 +0000 +++ b/BLE_BlueNRG.lib Thu Nov 20 09:12:32 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mridup/code/BLE_BlueNRG/#1a0220f508ca +http://mbed.org/users/mridup/code/BLE_BlueNRG/#7631cf7f282b
--- a/main.cpp Thu Aug 28 05:58:36 2014 +0000 +++ b/main.cpp Thu Nov 20 09:12:32 2014 +0000 @@ -1,180 +1,57 @@ #include "mbed.h" -DigitalOut myled(LED1); #include "debug.h" #include "btle.h" -//#include "BlueNRGDevice.h"//User does not use any platform specific header file -#include "BLEDevice.h" -#include "UUID.h" -#include "Utils.h" - -BLEDevice dev; - -const static char DEVICE_NAME[] = "STBLUE_NRG"; -const uint8_t device_address[6] = { 0x12, 0x34, 0x00, 0xe1, 0x80, 0x02 }; //Peripheral address - -void Append128bitUUID(uint8_t *uuid128_list, const LongUUID_t HRM_SERVICE_UUID_128); -void print_array(uint8_t *array); - -/*********128 bit UUIDs. Not defined in GattCharacteristic.h and GattService.h*************/ +#include "BlueNRG_Master.h" -#define MAX_SERVICES_NOS 1 -//typedef uint8_t UUID_128_BIT[16]; -const LongUUID_t HEART_RATE_CHAR_UUID_128 = {0x42,0x82,0x1a,0x40, 0xe4,0x77, 0x11,0xe2, 0x82,0xd0, 0x00,0x02,0xa5,0xd5,0xc5,0x1a}; -const LongUUID_t HRM_SERVICE_UUID_128 = {0x42,0x82,0x1a,0x40, 0xe4,0x77, 0x11,0xe2, 0x82,0xd0, 0x00,0x02,0xa5,0xd5,0xc5,0x1b}; - -uint8_t UUID_Count=0; - -static uint8_t hrmCounter = 100; -static uint8_t bpm[2] = {0x00, hrmCounter}; -static uint8_t hcpCounter = 99; -static uint8_t hcp[2] = {0x00, hrmCounter}; - -GattCharacteristic hrmRate(GattCharacteristic::UUID_HEART_RATE_MEASUREMENT_CHAR, bpm, sizeof(bpm), sizeof(bpm), - GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY|GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ - /*GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE*/); - -GattCharacteristic hcpControlPoint(GattCharacteristic::UUID_HEART_RATE_CONTROL_POINT_CHAR, hcp, sizeof(hcp), sizeof(hcp), - GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE| - GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE|GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); +extern Serial pc; +DigitalOut myled(LED1); +#define BDADDR_SIZE 6 -GattCharacteristic *hrmChars[] = {&hrmRate, &hcpControlPoint }; -UUID HRMSERVICE(GattService::UUID_HEART_RATE_SERVICE); -GattService hrmService(HRMSERVICE/*GattService::UUID_HEART_RATE_SERVICE*/, hrmChars, sizeof(hrmChars) / sizeof(GattCharacteristic *)); +//BlueNRG_Master dev; -uint8_t uuid128_list[16*MAX_SERVICES_NOS];// = {HRM_SERVICE_UUID_128[0], HRM_SERVICE_UUID_128[1]}; -static const uint16_t uuid16_list[] = {GattService::UUID_HEART_RATE_SERVICE}; - -void disconnectionCallback(uint16_t Handle_t) -{ - DEBUG("Disconnected!\n\r"); - DEBUG("Restarting the advertising process\n\r"); - dev.startAdvertising(); -} - -void onWriteCallback(uint16_t attributeHandle) { - DEBUG("Write Callback!!\n\r"); - } - -void onConnectionCallback(uint16_t Handle_t) { - //myled = 1; // LED is ON - DEBUG("Connected BlueNRG!!\n\r"); - } +uint8_t BlueNRG_Master::bdaddr[6]= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +BlueNRG_Master dev; -void onNotifyEnabled(uint16_t charHandle) { - //myled = 1; // LED is ON - DEBUG("onNotifyEnabled!!\n\r"); - } +int main() +{ -void onNotifyDisabled(uint16_t charHandle) { - //myled = 1; // LED is ON - DEBUG("onNotifyDisabled!!\n\r"); - } - -void onDataSentNotify() { - //myled = 1; // LED is ON - DEBUG("on Data Sent Notify!!\n\r"); - } - -void Append128bitUUID(uint8_t *array, const LongUUID_t SERVICE_UUID_128) -{ - for(int x=0;x<16; x++) - { - array[x+UUID_Count*16]=SERVICE_UUID_128[x]; - } - UUID_Count++; - return; -} -/** - * Triggered periodically by the 'ticker' interrupt; updates hrmCounter. - */ -void periodicCallback(void) -{ - //myled = !myled; /* Do blinky on LED1 while we're waiting for BLE events */ - - if (dev.getGapState().connected) { - hrmCounter++; - if (hrmCounter == 175) { - //hrmCounter = 100; - dev.disconnect(); - } - bpm[1] = hrmCounter; - uint16_t t = sizeof(bpm); - //DEBUG("Char Handle 0x%x OK.",hrmRate.getHandle()); - //dev.readCharacteristicValue(hrmRate.getHandle(), bpm, (uint16_t *const)t); - dev.updateCharacteristicValue(hrmRate.getHandle(), bpm, sizeof(bpm)); - //DEBUG("Ticker CB..\n\r"); - } //else DEBUG("Not Connected..\n\r"); - else //if not connected - { - hrmCounter++; - if (hrmCounter == 150) { - //hrmCounter = 100; - //dev.stopAdvertising();//can also test stop Advertising from here? - } - } -} - -int main() { + BlueNRG_Master::getInstance().btle_M_init(true); + + DEBUG(" Initialization completed\n "); + + ble_error_t error = BlueNRG_Master::getInstance().scan_ble_devices(0x4000, 0x4000,0x00,0x00); - Ticker ticker; //For Tick interrupt if used later on (periodic data updates?) - - - //LongUUID_t HEART_RATE_CHAR_UUID_128, HRM_SERVICE_UUID_128; - //COPY_HRM_SERVICE_UUID(HRM_SERVICE_UUID_128); - //COPY_HRM_CHAR_UUID(HEART_RATE_CHAR_UUID_128); - UUID heart_rate_char_UUID = UUID(HEART_RATE_CHAR_UUID_128); - UUID hrm_service_UUID = UUID(HRM_SERVICE_UUID_128); - - myled = 0;//Switch OFF LED1 - - DEBUG("Initializing BlueNRG...\n\r"); - dev.init(); - - dev.onConnection(onConnectionCallback); - dev.onDisconnection(disconnectionCallback); - dev.onDataWritten(onWriteCallback); - dev.onUpdatesEnabled(onNotifyEnabled); - dev.onDataSent(onDataSentNotify); - dev.onUpdatesDisabled(onNotifyDisabled); - - //TODO. - //dev.setAddress(Gap::ADDR_TYPE_PUBLIC, device_address);//Will reset the device and re-init() - //TODO. - - //Append128bitUUID(uuid128_list, HRM_SERVICE_UUID_128); - - /* setup advertising */ - dev.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); - - //TODO:IMP STUFF: 128bit list is basically a uint8_t list. User should know how many services he supports and define the number in MAX_SERVICES_NOS - dev.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t*)uuid16_list, sizeof(uuid16_list)); - - dev.accumulateAdvertisingPayload(GapAdvertisingData::HEART_RATE_SENSOR_HEART_RATE_BELT); - - dev.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); - dev.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); - dev.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ - DEBUG("Starting Advertising...\n\r"); - dev.startAdvertising(); - - dev.addService(hrmService); - //ticker.attach(periodicCallback, 1); Multi threading and called from ISR context does not work! - - while(1) { + if(error == BLE_ERROR_NONE) + { + while(1) + { + DEBUG(" IN WHILE LOOP \n"); + myled = 1; // LED is ON + wait(0.5); // 500 ms + myled = 0; // LED is OFF + wait(0.5); // 500 ms + //DEBUG("tic!\n\r"); + BlueNRG_Master::getInstance().waitForEvent(); + } + } + else + DEBUG(" NO DEVICE DISCOVERED"); - myled = 1; // LED is ON - wait(0.5); // 500 ms - myled = 0; // LED is OFF - wait(0.5); // 500 ms - //DEBUG("tic!\n\r"); - periodicCallback();//Works from here!! - - dev.waitForEvent(); - } + //ble_error_t conn_error = BlueNRG_Master::create_connection(0x4000,0x4000, 0x00, BlueNRG_Master::bdaddr, + //0x00, 0x0006,0x0028, 0x0000, + //0x03E8, 0x0000, 0x03E8); + + + //ble_error_t disc_service_error = BlueNRG_Master::disc_all_prim_services(BlueNRG_Master::m_connectionHandle); + + //pc.printf("%u", disc_service_error);*/ + return 0; + } +