L0_BlueNRG_Test_Client
Dependencies: BLE_API BLE_BlueNRG mbed
Fork of L0_BlueNRG_Test by
Diff: main.cpp
- Revision:
- 1:3b1c20952274
- Parent:
- 0:e0204b0e5541
- Child:
- 2:cf54be3a9e6a
diff -r e0204b0e5541 -r 3b1c20952274 main.cpp --- a/main.cpp Mon Jul 14 14:18:53 2014 +0000 +++ b/main.cpp Fri Jul 25 07:08:14 2014 +0000 @@ -2,37 +2,111 @@ DigitalOut myled(LED1); -#ifdef __cplusplus -extern "C" { -#endif +#include "btle.h" +//#include "BlueNRGDevice.h"//User does not use any platform specific header file +#include "BLEDevice.h" +#include "UUID.h" + +BLEDevice dev; + +#define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console; + * it will have an impact on code-size and power consumption. */ + +#if NEED_CONSOLE_OUTPUT +Serial pc(USBTX, USBRX); +#define DEBUG(...) { pc.printf(__VA_ARGS__); } +#else +#define DEBUG(...) /* nothing */ +#endif /* #if NEED_CONSOLE_OUTPUT */ + +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); -#include "stm32l0xx_bluenrg_shield_bsp.h" -#include "hci.h" -#include "bluenrg_hci.h" -#include "hci_internal.h" -#include "bluenrg_hci_internal.h" +/*********128 bit UUIDs. Not defined in GattCharacteristic.h and GattService.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; + + +void onConnectionCallback(void) { + myled = 1; // LED is ON + DEBUG("Connected BlueNRG!!"); + } + +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; +} -#include <stdio.h> -#include <string.h> - -#ifdef __cplusplus - } -#endif +int main() { + + 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..."); + dev.init(); + + dev.onConnection(onConnectionCallback); + //TODO. + //dev.setAddress(Gap::ADDR_TYPE_PUBLIC, device_address);//Does not work after gap/gatt init. + //TODO. + + static uint8_t hrmCounter = 100; + static uint8_t bpm[2] = {0x00, hrmCounter}; + GattCharacteristic hrmRate(GattCharacteristic::UUID_HEART_RATE_MEASUREMENT_CHAR, bpm, sizeof(bpm), sizeof(bpm), + GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); -#include "btle.h" + GattCharacteristic *hrmChars[] = {&hrmRate }; + GattService hrmService(GattService::UUID_HEART_RATE_SERVICE, hrmChars, sizeof(hrmChars) / sizeof(GattCharacteristic *)); -int main() { + 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}; + + //Append128bitUUID(uuid128_list, HRM_SERVICE_UUID_128); + + /* setup advertising */ + dev.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); - btle_init(); //Init the BlueNRG Shield + //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..."); + dev.startAdvertising(); + + dev.addService(hrmService); while(1) { - myled = 1; // LED is ON - wait(0.5); // 500 ms - myled = 0; // LED is OFF - wait(0.5); // 500 ms - - HCI_Process(); - User_Process();//Start Advertising + //myled = 1; // LED is ON + //wait(0.5); // 500 ms + //myled = 0; // LED is OFF + //wait(0.5); // 500 ms + //DEBUG("Testing BlueNRG!!"); + dev.waitForEvent(); } }