Demo Glucose Service

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_HeartRate by Bluetooth Low Energy

BLE_Glucose_demo implements the Glucose Service which enables a collector device to connect and interact with.

There is a brief sample code edited with Android Studio for demo this BLE_Glucose_demo example, and it is public on github, everyone can clone it by this URL: https://github.com/Marcomissyou/BluetoothLeGlucose.git. It is convenient for you to development your BLE idea.

There is also provided apk file so you can download and install it directly then demo this code, but make sure your Android phone supports Bluetooth 4.0. /media/uploads/Marcomissyou/bleglucoseservice.apk

Committer:
Marcomissyou
Date:
Thu Jul 02 01:32:04 2015 +0000
Revision:
66:72ca05b7a092
Parent:
65:e419508fefc4
Child:
67:aa3a1bbed328
BLE HID demo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ktownsend 0:87a7fc231fae 1 #include "mbed.h"
Marcomissyou 65:e419508fefc4 2 #include "BLE.h"
Marcomissyou 65:e419508fefc4 3 #include "BatteryService.h"
rgrover1 42:06ebef2e0e44 4 #include "DeviceInformationService.h"
Marcomissyou 65:e419508fefc4 5 #include "HIDService.h"
Marcomissyou 63:fc6117c32419 6
Rohit Grover 10:2436164b692e 7 BLEDevice ble;
Marcomissyou 63:fc6117c32419 8 DigitalOut led01(LED1);
Marcomissyou 63:fc6117c32419 9 Serial uart(p25,p23);
Marcomissyou 65:e419508fefc4 10
Marcomissyou 65:e419508fefc4 11 unsigned char keyData;
Marcomissyou 65:e419508fefc4 12 bool is_input = false;
Marcomissyou 65:e419508fefc4 13 static const char DEVICE_NAME[] = "HID_Keyboard";
Marcomissyou 65:e419508fefc4 14 static const uint16_t uuid16_list[] = {GattService::UUID_HUMAN_INTERFACE_DEVICE_SERVICE};
rgrover1 39:6390604f904c 15 static volatile bool triggerSensorPolling = false;
Marcomissyou 65:e419508fefc4 16
rgrover1 41:9cef0129da5f 17 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
ktownsend 0:87a7fc231fae 18 {
rgrover1 46:ee7c55907f36 19 ble.startAdvertising(); // restart advertising
rgrover1 7:daab8ba5139e 20 }
Marcomissyou 65:e419508fefc4 21
Marcomissyou 65:e419508fefc4 22
Marcomissyou 65:e419508fefc4 23 static uint8_t key_press_scan_buff[30];
Marcomissyou 65:e419508fefc4 24 static uint8_t modifyKey[30];
ktownsend 0:87a7fc231fae 25 int main(void)
Marcomissyou 65:e419508fefc4 26 { uart.baud(9600);
Marcomissyou 65:e419508fefc4 27 uart.printf("Starting HID Service\n");
Marcomissyou 65:e419508fefc4 28 //uart.attach(&uart_rx);
Marcomissyou 63:fc6117c32419 29 led01 = 1;
Rohit Grover 15:7ba28817e31e 30 ble.init();
Marcomissyou 66:72ca05b7a092 31 bool enableBonding = false;
Marcomissyou 65:e419508fefc4 32 bool requireMITM = false;
Marcomissyou 65:e419508fefc4 33 ble.initializeSecurity(enableBonding, requireMITM);
rgrover1 7:daab8ba5139e 34 ble.onDisconnection(disconnectionCallback);
Marcomissyou 63:fc6117c32419 35
rgrover1 45:98c5a34b07a4 36 /* Setup primary service. */
Marcomissyou 65:e419508fefc4 37 HIDService hidService(ble);
mbedAustin 55:3a7d497a3e03 38 /* Setup auxiliary service. */
Marcomissyou 65:e419508fefc4 39 DeviceInformationService deviceInfo(ble, "ARM", "CYNTEC", "SN1", "hw-rev1", "fw-rev1", "soft-rev1");
rgrover1 45:98c5a34b07a4 40 /* Setup advertising. */
Marcomissyou 65:e419508fefc4 41 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
Marcomissyou 65:e419508fefc4 42 ble.accumulateAdvertisingPayload(GapAdvertisingData::KEYBOARD);
Rohit Grover 29:76d865c718a6 43 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
rgrover1 40:e73130c6f2bb 44 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
rgrover1 7:daab8ba5139e 45 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
rgrover1 56:83623419d5e4 46 ble.setAdvertisingInterval(1000);
rgrover1 7:daab8ba5139e 47 ble.startAdvertising();
Marcomissyou 65:e419508fefc4 48 uart.printf("Starting advertising\n");
Marcomissyou 65:e419508fefc4 49 int index = 0;
mbedAustin 55:3a7d497a3e03 50 while (1) {
Marcomissyou 65:e419508fefc4 51 if (uart.readable() == 1) {
Marcomissyou 65:e419508fefc4 52 keyData = uart.getc();
Marcomissyou 65:e419508fefc4 53 uart.putc(keyData);
Marcomissyou 65:e419508fefc4 54 if(keyData <= 0x39 && keyData >= 0x30){ //number
Marcomissyou 65:e419508fefc4 55 if(keyData == 0x30){
Marcomissyou 65:e419508fefc4 56 modifyKey[index] = 0x00;
Marcomissyou 65:e419508fefc4 57 key_press_scan_buff[index] = 0x27;
Marcomissyou 65:e419508fefc4 58 } else {
Marcomissyou 65:e419508fefc4 59 modifyKey[index] = 0x00;
Marcomissyou 65:e419508fefc4 60 key_press_scan_buff[index] = keyData-0x13;
Marcomissyou 65:e419508fefc4 61 }
Marcomissyou 65:e419508fefc4 62 } else if(keyData <= 0x7a && keyData >= 0x61 ){ //lowercase letters
Marcomissyou 65:e419508fefc4 63 modifyKey[index] = 0x00;
Marcomissyou 65:e419508fefc4 64 key_press_scan_buff[index] = keyData-0x5d;
Marcomissyou 65:e419508fefc4 65 } else if(keyData <= 0x5a && keyData >= 0x41){ //uppercase letters
Marcomissyou 65:e419508fefc4 66 modifyKey[index] = 0x02;
Marcomissyou 65:e419508fefc4 67 key_press_scan_buff[index] = keyData-0x3d;
Marcomissyou 65:e419508fefc4 68 } else if (keyData == 0x20) {
Marcomissyou 65:e419508fefc4 69 modifyKey[index] = 0x00;
Marcomissyou 65:e419508fefc4 70 key_press_scan_buff[index] = 0x2c;
Marcomissyou 65:e419508fefc4 71 } else {
Marcomissyou 65:e419508fefc4 72 modifyKey[index] = 0x00;
Marcomissyou 65:e419508fefc4 73 //key_press_scan_buff[index] = 0x28;
Marcomissyou 65:e419508fefc4 74 //key_press_scan_buff[index++] = 0x73;
Marcomissyou 65:e419508fefc4 75 key_press_scan_buff[index] = 0x73;
Marcomissyou 65:e419508fefc4 76 }
Marcomissyou 65:e419508fefc4 77 index++;
Marcomissyou 65:e419508fefc4 78 if(keyData == 0x0a && ble.getGapState().connected){
Marcomissyou 65:e419508fefc4 79 for(int i = 0; i < index; i++){
Marcomissyou 65:e419508fefc4 80 //uart.putc(key_press_scan_buff[i]);
Marcomissyou 65:e419508fefc4 81 hidService.updateReport(modifyKey[i], key_press_scan_buff[i]);
Marcomissyou 65:e419508fefc4 82 wait(0.1);
Marcomissyou 63:fc6117c32419 83 }
Marcomissyou 65:e419508fefc4 84 index = 0;
Marcomissyou 65:e419508fefc4 85 memset(modifyKey, 0, 30);
Marcomissyou 65:e419508fefc4 86 memset(key_press_scan_buff, 0, 30);
Marcomissyou 65:e419508fefc4 87 }
Marcomissyou 65:e419508fefc4 88
Rohit Grover 36:ea2a1b4f51c1 89 }
ktownsend 0:87a7fc231fae 90 }
Marcomissyou 65:e419508fefc4 91 }