Firmware for Keewi v1 electronic board
Dependencies: BLE_API mbed nRF51822
Fork of Keewi_v1 by
main.cpp@1:e60b7762dd79, 2014-07-18 (annotated)
- Committer:
- clemberto
- Date:
- Fri Jul 18 10:42:51 2014 +0000
- Revision:
- 1:e60b7762dd79
- Parent:
- 0:4f6fbeb69f11
- Child:
- 2:8ebada2e4924
CSC profile connecting
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
clemberto | 0:4f6fbeb69f11 | 1 | /* mbed Microcontroller Library |
clemberto | 0:4f6fbeb69f11 | 2 | * Copyright (c) 2006-2013 ARM Limited |
clemberto | 0:4f6fbeb69f11 | 3 | * |
clemberto | 0:4f6fbeb69f11 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
clemberto | 0:4f6fbeb69f11 | 5 | * you may not use this file except in compliance with the License. |
clemberto | 0:4f6fbeb69f11 | 6 | * You may obtain a copy of the License at |
clemberto | 0:4f6fbeb69f11 | 7 | * |
clemberto | 0:4f6fbeb69f11 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
clemberto | 0:4f6fbeb69f11 | 9 | * |
clemberto | 0:4f6fbeb69f11 | 10 | * Unless required by applicable law or agreed to in writing, software |
clemberto | 0:4f6fbeb69f11 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
clemberto | 0:4f6fbeb69f11 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
clemberto | 0:4f6fbeb69f11 | 13 | * See the License for the specific language governing permissions and |
clemberto | 0:4f6fbeb69f11 | 14 | * limitations under the License. |
clemberto | 0:4f6fbeb69f11 | 15 | */ |
clemberto | 0:4f6fbeb69f11 | 16 | |
clemberto | 0:4f6fbeb69f11 | 17 | #include "mbed.h" |
clemberto | 0:4f6fbeb69f11 | 18 | #include "BLEDevice.h" |
clemberto | 0:4f6fbeb69f11 | 19 | |
clemberto | 0:4f6fbeb69f11 | 20 | BLEDevice ble; |
clemberto | 0:4f6fbeb69f11 | 21 | DigitalOut led1(LED1); |
clemberto | 0:4f6fbeb69f11 | 22 | |
clemberto | 1:e60b7762dd79 | 23 | #define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console; |
clemberto | 0:4f6fbeb69f11 | 24 | * it will have an impact on code-size and power consumption. */ |
clemberto | 0:4f6fbeb69f11 | 25 | |
clemberto | 0:4f6fbeb69f11 | 26 | #if NEED_CONSOLE_OUTPUT |
clemberto | 0:4f6fbeb69f11 | 27 | Serial pc(USBTX, USBRX); |
clemberto | 1:e60b7762dd79 | 28 | |
clemberto | 0:4f6fbeb69f11 | 29 | #define DEBUG(...) { pc.printf(__VA_ARGS__); } |
clemberto | 0:4f6fbeb69f11 | 30 | #else |
clemberto | 0:4f6fbeb69f11 | 31 | #define DEBUG(...) /* nothing */ |
clemberto | 0:4f6fbeb69f11 | 32 | #endif /* #if NEED_CONSOLE_OUTPUT */ |
clemberto | 0:4f6fbeb69f11 | 33 | |
clemberto | 1:e60b7762dd79 | 34 | const static char DEVICE_NAME[] = "Keewi v1"; |
clemberto | 0:4f6fbeb69f11 | 35 | |
clemberto | 1:e60b7762dd79 | 36 | // DEVICE_NAME_UUID = '2A00'; // Nordic fixed this to nRF5, can be written |
clemberto | 1:e60b7762dd79 | 37 | |
clemberto | 1:e60b7762dd79 | 38 | // Temperature 0-100 C, simulated |
clemberto | 1:e60b7762dd79 | 39 | static uint8_t temperature = 32; |
clemberto | 1:e60b7762dd79 | 40 | GattCharacteristic tempMeas(GattCharacteristic::UUID_TEMPERATURE_MEASUREMENT_CHAR, (uint8_t *)temperature, sizeof(temperature), sizeof(temperature), |
clemberto | 1:e60b7762dd79 | 41 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); |
clemberto | 1:e60b7762dd79 | 42 | GattCharacteristic *temperatureChars[] = {&tempMeas }; |
clemberto | 1:e60b7762dd79 | 43 | // TODO: config service Health thermo |
clemberto | 1:e60b7762dd79 | 44 | GattService temperatureService(GattService::UUID_HEALTH_THERMOMETER_SERVICE, temperatureChars, sizeof(temperatureChars) / sizeof(GattCharacteristic *)); |
clemberto | 1:e60b7762dd79 | 45 | |
clemberto | 1:e60b7762dd79 | 46 | // SYSTEM |
clemberto | 1:e60b7762dd79 | 47 | static char systemId = 'A'; |
clemberto | 1:e60b7762dd79 | 48 | GattCharacteristic systemID(GattCharacteristic::UUID_SYSTEM_ID_CHAR, (uint8_t *)systemId, sizeof(systemId), sizeof(systemId), |
clemberto | 1:e60b7762dd79 | 49 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
clemberto | 1:e60b7762dd79 | 50 | GattCharacteristic *systemChars[] = {&systemID }; |
clemberto | 1:e60b7762dd79 | 51 | GattService systemService(GattService::UUID_DEVICE_INFORMATION_SERVICE, systemChars, sizeof(systemChars) / sizeof(GattCharacteristic *)); |
clemberto | 1:e60b7762dd79 | 52 | |
clemberto | 1:e60b7762dd79 | 53 | // MODEL |
clemberto | 1:e60b7762dd79 | 54 | static char model[31] = "mBed nRF51822"; |
clemberto | 1:e60b7762dd79 | 55 | GattCharacteristic modelID(GattCharacteristic::UUID_MODEL_NUMBER_STRING_CHAR, (uint8_t *)model, sizeof(model), sizeof(model), |
clemberto | 1:e60b7762dd79 | 56 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
clemberto | 1:e60b7762dd79 | 57 | GattCharacteristic *modelChars[] = {&modelID }; |
clemberto | 1:e60b7762dd79 | 58 | GattService modelService(GattService::UUID_DEVICE_INFORMATION_SERVICE, modelChars, sizeof(modelChars) / sizeof(GattCharacteristic *)); |
clemberto | 1:e60b7762dd79 | 59 | |
clemberto | 1:e60b7762dd79 | 60 | // Firmware |
clemberto | 1:e60b7762dd79 | 61 | static char fwversion[31] = "Firmware: 0216"; |
clemberto | 1:e60b7762dd79 | 62 | GattCharacteristic fwChars(GattCharacteristic::UUID_FIRMWARE_REVISION_STRING_CHAR, (uint8_t *)fwversion, sizeof(fwversion), sizeof(fwversion), |
clemberto | 1:e60b7762dd79 | 63 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
clemberto | 1:e60b7762dd79 | 64 | GattCharacteristic *firmwareChars[] = {&fwChars }; |
clemberto | 1:e60b7762dd79 | 65 | GattService firmwareService(GattService::UUID_DEVICE_INFORMATION_SERVICE, firmwareChars, sizeof(firmwareChars) / sizeof(GattCharacteristic *)); |
clemberto | 1:e60b7762dd79 | 66 | |
clemberto | 1:e60b7762dd79 | 67 | // Software |
clemberto | 1:e60b7762dd79 | 68 | static char swversion[31] = "Sensor build (0001)"; |
clemberto | 1:e60b7762dd79 | 69 | GattCharacteristic swChars(GattCharacteristic::UUID_SOFTWARE_REVISION_STRING_CHAR, (uint8_t *)swversion, sizeof(swversion), sizeof(swversion), |
clemberto | 1:e60b7762dd79 | 70 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
clemberto | 1:e60b7762dd79 | 71 | GattCharacteristic *softwareChars[] = {&swChars }; |
clemberto | 1:e60b7762dd79 | 72 | GattService softwareService(GattService::UUID_DEVICE_INFORMATION_SERVICE, softwareChars, sizeof(softwareChars) / sizeof(GattCharacteristic *)); |
clemberto | 1:e60b7762dd79 | 73 | // Hardware |
clemberto | 1:e60b7762dd79 | 74 | static char hwversion[31] = "Sensor hw proto 0"; |
clemberto | 1:e60b7762dd79 | 75 | GattCharacteristic hwChars(GattCharacteristic::UUID_HARDWARE_REVISION_STRING_CHAR, (uint8_t *)hwversion, sizeof(hwversion), sizeof(hwversion), |
clemberto | 1:e60b7762dd79 | 76 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
clemberto | 1:e60b7762dd79 | 77 | GattCharacteristic *hardwareChars[] = {&hwChars }; |
clemberto | 1:e60b7762dd79 | 78 | GattService hardwareService(GattService::UUID_DEVICE_INFORMATION_SERVICE, hardwareChars, sizeof(hardwareChars) / sizeof(GattCharacteristic *)); |
clemberto | 1:e60b7762dd79 | 79 | // Manufacturer |
clemberto | 1:e60b7762dd79 | 80 | static char vendor[31] = "Busybee.io"; |
clemberto | 1:e60b7762dd79 | 81 | GattCharacteristic vendorChars(GattCharacteristic::UUID_MANUFACTURER_NAME_STRING_CHAR, (uint8_t *)vendor, sizeof(vendor), sizeof(vendor), |
clemberto | 1:e60b7762dd79 | 82 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
clemberto | 1:e60b7762dd79 | 83 | GattCharacteristic *manufacturerChars[] = {&vendorChars }; |
clemberto | 1:e60b7762dd79 | 84 | GattService manufacturerService(GattService::UUID_DEVICE_INFORMATION_SERVICE, manufacturerChars, sizeof(manufacturerChars) / sizeof(GattCharacteristic *)); |
clemberto | 1:e60b7762dd79 | 85 | // Serial number |
clemberto | 1:e60b7762dd79 | 86 | static char serial[31] = "1234567890"; |
clemberto | 1:e60b7762dd79 | 87 | GattCharacteristic serialChars(GattCharacteristic::UUID_SERIAL_NUMBER_STRING_CHAR, (uint8_t *)serial, sizeof(serial), sizeof(serial), |
clemberto | 1:e60b7762dd79 | 88 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
clemberto | 1:e60b7762dd79 | 89 | GattCharacteristic *serialNumberChars[] = {&serialChars }; |
clemberto | 1:e60b7762dd79 | 90 | GattService serialNumberService(GattService::UUID_DEVICE_INFORMATION_SERVICE, serialNumberChars, sizeof(serialNumberChars) / sizeof(GattCharacteristic *)); |
clemberto | 1:e60b7762dd79 | 91 | |
clemberto | 1:e60b7762dd79 | 92 | static uint8_t batteryLevel = 100; |
clemberto | 1:e60b7762dd79 | 93 | GattCharacteristic batteryPercentage(GattCharacteristic::UUID_BATTERY_LEVEL_CHAR, (uint8_t *)batteryLevel, sizeof(batteryLevel), sizeof(batteryLevel), |
clemberto | 1:e60b7762dd79 | 94 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); |
clemberto | 1:e60b7762dd79 | 95 | GattCharacteristic *batteryChars[] = {&batteryPercentage }; |
clemberto | 1:e60b7762dd79 | 96 | GattService batteryService(GattService::UUID_BATTERY_SERVICE, batteryChars, sizeof(batteryChars) / sizeof(GattCharacteristic *)); |
clemberto | 1:e60b7762dd79 | 97 | |
clemberto | 1:e60b7762dd79 | 98 | |
clemberto | 1:e60b7762dd79 | 99 | /* CSC Service */ |
clemberto | 0:4f6fbeb69f11 | 100 | /* Service: https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.cycling_speed_and_cadence.xml*/ |
clemberto | 0:4f6fbeb69f11 | 101 | /* CSC Mes: https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.csc_measurement.xml */ |
clemberto | 0:4f6fbeb69f11 | 102 | /* Feature: https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.csc_feature.xml */ |
clemberto | 0:4f6fbeb69f11 | 103 | /* Location: https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.sensor_location.xml */ |
clemberto | 0:4f6fbeb69f11 | 104 | /* Control point: https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.sc_control_point.xml */ |
clemberto | 1:e60b7762dd79 | 105 | static uint8_t cscWheelRevolutionDataSPresent = 1; |
clemberto | 1:e60b7762dd79 | 106 | static uint8_t cscCrankRevolutionDataSPresent = 1; |
clemberto | 1:e60b7762dd79 | 107 | static uint32_t cscCumulativeWheelRevolutions = 0; |
clemberto | 0:4f6fbeb69f11 | 108 | static uint16_t cscLastWheelEventTime = 0; // Unit is second & has a resolution of 1/1024s. |
clemberto | 0:4f6fbeb69f11 | 109 | static uint16_t cscCumulativeCrankRevolutions = 0; |
clemberto | 0:4f6fbeb69f11 | 110 | static uint16_t cscLastCrankEventTime = 0; // Unit is second & has a resolution of 1/1024s. |
clemberto | 1:e60b7762dd79 | 111 | static uint8_t csc_mes_flags = (cscCrankRevolutionDataSPresent << 1) + cscWheelRevolutionDataSPresent; |
clemberto | 1:e60b7762dd79 | 112 | static uint8_t csc_mes[] = {csc_mes_flags, cscCumulativeWheelRevolutions & 0x000000FF, cscCumulativeWheelRevolutions & 0x0000FF00, cscCumulativeWheelRevolutions & 0x00FF0000, cscCumulativeWheelRevolutions & 0xFF000000, cscLastWheelEventTime & 0x00FF, cscLastWheelEventTime & 0xFF00, cscCumulativeCrankRevolutions & 0x00FF, cscCumulativeCrankRevolutions & 0xFF00, cscLastCrankEventTime & 0x00FF, cscLastCrankEventTime & 0xFF00 }; |
clemberto | 1:e60b7762dd79 | 113 | //static uint8_t csc_mes[5] = { (cscCrankRevolutionDataSPresent << 1) + cscWheelRevolutionDataSPresent, cscCumulativeWheelRevolutions & 0x000000FF, cscLastWheelEventTime & 0x00FF, cscCumulativeCrankRevolutions & 0x00FF, cscLastCrankEventTime & 0x00FF }; |
clemberto | 1:e60b7762dd79 | 114 | |
clemberto | 1:e60b7762dd79 | 115 | GattCharacteristic cscMeasurement(GattCharacteristic::UUID_CSC_MEASUREMENT_CHAR, csc_mes, sizeof(csc_mes), sizeof(csc_mes), |
clemberto | 1:e60b7762dd79 | 116 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); |
clemberto | 0:4f6fbeb69f11 | 117 | |
clemberto | 0:4f6fbeb69f11 | 118 | static bool cscWheelRevolutionDataSupported = true; |
clemberto | 0:4f6fbeb69f11 | 119 | static bool cscWCrankRevolutionDataSupported = true; |
clemberto | 1:e60b7762dd79 | 120 | static bool cscMultipleSensorLocationsSupported = false; |
clemberto | 1:e60b7762dd79 | 121 | static uint8_t csc_feat_flags = (cscWheelRevolutionDataSupported << 2) + (cscWCrankRevolutionDataSupported << 1) + cscMultipleSensorLocationsSupported; |
clemberto | 1:e60b7762dd79 | 122 | static uint8_t csc_feat[2] = { 0x00, csc_feat_flags }; |
clemberto | 1:e60b7762dd79 | 123 | GattCharacteristic cscFeature(GattCharacteristic::UUID_CSC_FEATURE_CHAR, csc_feat, sizeof(csc_feat), sizeof(csc_feat), |
clemberto | 1:e60b7762dd79 | 124 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
clemberto | 0:4f6fbeb69f11 | 125 | |
clemberto | 0:4f6fbeb69f11 | 126 | static const uint8_t location = 0x09; /* Front Hub */ |
clemberto | 1:e60b7762dd79 | 127 | GattCharacteristic cscLocation(GattCharacteristic::UUID_SENSOR_LOCATION, |
clemberto | 0:4f6fbeb69f11 | 128 | (uint8_t *)&location, sizeof(location), sizeof(location), |
clemberto | 0:4f6fbeb69f11 | 129 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
clemberto | 1:e60b7762dd79 | 130 | |
clemberto | 1:e60b7762dd79 | 131 | /* TODO: implement a Write charac. cf. wheelSizeCallback() |
clemberto | 1:e60b7762dd79 | 132 | GattCharacteristic cscCtrlPoint(GattCharacteristic::UUID_CSC_MEASUREMENT_CHAR, |
clemberto | 1:e60b7762dd79 | 133 | (uint8_t *)&location, sizeof(location), sizeof(location), |
clemberto | 1:e60b7762dd79 | 134 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE); |
clemberto | 1:e60b7762dd79 | 135 | */ |
clemberto | 1:e60b7762dd79 | 136 | GattCharacteristic *cscChars[] = {&cscMeasurement, &cscFeature, }; //&cscLocation, &cscControlPoint, |
clemberto | 0:4f6fbeb69f11 | 137 | GattService cscService(GattService::UUID_CYCLING_SPEED_AND_CADENCE, cscChars, sizeof(cscChars) / sizeof(GattCharacteristic *)); |
clemberto | 0:4f6fbeb69f11 | 138 | |
clemberto | 1:e60b7762dd79 | 139 | static const uint16_t uuid16_list[] = {GattService::UUID_CYCLING_SPEED_AND_CADENCE}; |
clemberto | 1:e60b7762dd79 | 140 | |
clemberto | 1:e60b7762dd79 | 141 | void wheelSizeCallback() { |
clemberto | 1:e60b7762dd79 | 142 | DEBUG("Wheel size request ack!"); |
clemberto | 1:e60b7762dd79 | 143 | return; |
clemberto | 1:e60b7762dd79 | 144 | } |
clemberto | 1:e60b7762dd79 | 145 | |
clemberto | 0:4f6fbeb69f11 | 146 | |
clemberto | 0:4f6fbeb69f11 | 147 | void disconnectionCallback(void) |
clemberto | 0:4f6fbeb69f11 | 148 | { |
clemberto | 0:4f6fbeb69f11 | 149 | DEBUG("Disconnected!\n\r"); |
clemberto | 0:4f6fbeb69f11 | 150 | DEBUG("Restarting the advertising process\n\r"); |
clemberto | 0:4f6fbeb69f11 | 151 | ble.startAdvertising(); |
clemberto | 0:4f6fbeb69f11 | 152 | } |
clemberto | 0:4f6fbeb69f11 | 153 | |
clemberto | 0:4f6fbeb69f11 | 154 | /** |
clemberto | 1:e60b7762dd79 | 155 | * Triggered periodically by the 'ticker' interrupt; updates cycling stats & battery value. |
clemberto | 0:4f6fbeb69f11 | 156 | */ |
clemberto | 0:4f6fbeb69f11 | 157 | void periodicCallback(void) |
clemberto | 0:4f6fbeb69f11 | 158 | { |
clemberto | 0:4f6fbeb69f11 | 159 | led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */ |
clemberto | 0:4f6fbeb69f11 | 160 | |
clemberto | 0:4f6fbeb69f11 | 161 | if (ble.getGapState().connected) { |
clemberto | 1:e60b7762dd79 | 162 | DEBUG("Ble connected!"); |
clemberto | 1:e60b7762dd79 | 163 | led1 = 1; |
clemberto | 1:e60b7762dd79 | 164 | |
clemberto | 1:e60b7762dd79 | 165 | /* Update the CSC measurement */ |
clemberto | 0:4f6fbeb69f11 | 166 | cscCumulativeWheelRevolutions+=3; |
clemberto | 1:e60b7762dd79 | 167 | cscCumulativeCrankRevolutions+=2; |
clemberto | 1:e60b7762dd79 | 168 | cscLastWheelEventTime++; |
clemberto | 1:e60b7762dd79 | 169 | cscLastCrankEventTime++; |
clemberto | 0:4f6fbeb69f11 | 170 | |
clemberto | 1:e60b7762dd79 | 171 | // Update the battery level |
clemberto | 1:e60b7762dd79 | 172 | batteryLevel--; |
clemberto | 1:e60b7762dd79 | 173 | ble.updateCharacteristicValue(batteryPercentage.getHandle(), &batteryLevel, sizeof(batteryLevel)); |
clemberto | 1:e60b7762dd79 | 174 | |
clemberto | 1:e60b7762dd79 | 175 | uint8_t new_csc_mes[] = {csc_mes_flags, cscCumulativeWheelRevolutions & 0x000000FF, cscCumulativeWheelRevolutions & 0x0000FF00, cscCumulativeWheelRevolutions & 0x00FF0000, cscCumulativeWheelRevolutions & 0xFF000000, cscLastWheelEventTime & 0x00FF, cscLastWheelEventTime & 0xFF00, cscCumulativeCrankRevolutions & 0x00FF, cscCumulativeCrankRevolutions & 0xFF00, cscLastCrankEventTime & 0x00FF, cscLastCrankEventTime & 0xFF00 }; |
clemberto | 1:e60b7762dd79 | 176 | |
clemberto | 1:e60b7762dd79 | 177 | ble.updateCharacteristicValue(cscMeasurement.getHandle(), new_csc_mes, sizeof(new_csc_mes)); |
clemberto | 0:4f6fbeb69f11 | 178 | } |
clemberto | 0:4f6fbeb69f11 | 179 | } |
clemberto | 0:4f6fbeb69f11 | 180 | |
clemberto | 0:4f6fbeb69f11 | 181 | int main(void) |
clemberto | 0:4f6fbeb69f11 | 182 | { |
clemberto | 0:4f6fbeb69f11 | 183 | led1 = 1; |
clemberto | 0:4f6fbeb69f11 | 184 | Ticker ticker; |
clemberto | 0:4f6fbeb69f11 | 185 | ticker.attach(periodicCallback, 1); |
clemberto | 0:4f6fbeb69f11 | 186 | |
clemberto | 1:e60b7762dd79 | 187 | DEBUG("Initialized the nRF51822\n\r"); |
clemberto | 0:4f6fbeb69f11 | 188 | ble.init(); |
clemberto | 0:4f6fbeb69f11 | 189 | ble.onDisconnection(disconnectionCallback); |
clemberto | 1:e60b7762dd79 | 190 | ble.onDataSent(wheelSizeCallback); |
clemberto | 0:4f6fbeb69f11 | 191 | |
clemberto | 0:4f6fbeb69f11 | 192 | /* setup advertising */ |
clemberto | 1:e60b7762dd79 | 193 | ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); // |
clemberto | 0:4f6fbeb69f11 | 194 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t*)uuid16_list, sizeof(uuid16_list)); |
clemberto | 1:e60b7762dd79 | 195 | ble.accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_CYCLING); |
clemberto | 0:4f6fbeb69f11 | 196 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); |
clemberto | 0:4f6fbeb69f11 | 197 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
clemberto | 0:4f6fbeb69f11 | 198 | ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ |
clemberto | 0:4f6fbeb69f11 | 199 | ble.startAdvertising(); |
clemberto | 1:e60b7762dd79 | 200 | |
clemberto | 1:e60b7762dd79 | 201 | /* Setup services */ |
clemberto | 1:e60b7762dd79 | 202 | ble.addService(cscService); |
clemberto | 1:e60b7762dd79 | 203 | /*ble.addService(batteryService); |
clemberto | 1:e60b7762dd79 | 204 | //ble.addService(firmwareService); |
clemberto | 1:e60b7762dd79 | 205 | ble.addService(manufacturerService); |
clemberto | 1:e60b7762dd79 | 206 | ble.addService(modelService); |
clemberto | 1:e60b7762dd79 | 207 | ble.addService(temperatureService); |
clemberto | 1:e60b7762dd79 | 208 | */ |
clemberto | 1:e60b7762dd79 | 209 | DEBUG("Initialized the BLE stack\n\r"); |
clemberto | 0:4f6fbeb69f11 | 210 | |
clemberto | 1:e60b7762dd79 | 211 | DEBUG("feat val = %d - mes val = %d", csc_feat_flags, csc_mes_flags); |
clemberto | 1:e60b7762dd79 | 212 | DEBUG("\r\n"); |
clemberto | 0:4f6fbeb69f11 | 213 | |
clemberto | 0:4f6fbeb69f11 | 214 | while (true) { |
clemberto | 0:4f6fbeb69f11 | 215 | ble.waitForEvent(); |
clemberto | 0:4f6fbeb69f11 | 216 | } |
clemberto | 0:4f6fbeb69f11 | 217 | } |