L0_BlueNRG_Test_Client

Dependencies:   BLE_API BLE_BlueNRG mbed

Fork of L0_BlueNRG_Test by Mridupawan Das

main.cpp

Committer:
mridup
Date:
2014-07-25
Revision:
1:3b1c20952274
Parent:
0:e0204b0e5541
Child:
2:cf54be3a9e6a

File content as of revision 1:3b1c20952274:

#include "mbed.h"

DigitalOut myled(LED1);

#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);

/*********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; 
}

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);

    GattCharacteristic *hrmChars[] = {&hrmRate };
    GattService hrmService(GattService::UUID_HEART_RATE_SERVICE, hrmChars, sizeof(hrmChars) / sizeof(GattCharacteristic *));

    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);
    
    //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
        //DEBUG("Testing BlueNRG!!");
        dev.waitForEvent();
    }
}