ST
/
mbed-os-example-ble-BatteryLevel
BLE BatteryLevel example
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 /* mbed Microcontroller Library 00002 * Copyright (c) 2006-2014 ARM Limited 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 00017 #include <events/mbed_events.h> 00018 #include <mbed.h> 00019 #include "ble/BLE.h" 00020 #include "ble/Gap.h" 00021 #include "ble/services/BatteryService.h" 00022 00023 DigitalOut led1(LED1, 1); 00024 00025 const static char DEVICE_NAME[] = "BATTERY"; 00026 static const uint16_t uuid16_list[] = {GattService::UUID_BATTERY_SERVICE}; 00027 00028 static uint8_t batteryLevel = 50; 00029 static BatteryService* batteryServicePtr; 00030 00031 static EventQueue eventQueue(/* event count */ 16 * EVENTS_EVENT_SIZE); 00032 00033 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) 00034 { 00035 BLE::Instance().gap().startAdvertising(); 00036 } 00037 00038 void updateSensorValue() { 00039 batteryLevel++; 00040 if (batteryLevel > 100) { 00041 batteryLevel = 20; 00042 } 00043 00044 batteryServicePtr->updateBatteryLevel(batteryLevel); 00045 } 00046 00047 void blinkCallback(void) 00048 { 00049 led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */ 00050 00051 BLE &ble = BLE::Instance(); 00052 if (ble.gap().getState().connected) { 00053 eventQueue.call(updateSensorValue); 00054 } 00055 } 00056 00057 /** 00058 * This function is called when the ble initialization process has failled 00059 */ 00060 void onBleInitError(BLE &ble, ble_error_t error) 00061 { 00062 /* Initialization error handling should go here */ 00063 } 00064 00065 /** 00066 * Callback triggered when the ble initialization process has finished 00067 */ 00068 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) 00069 { 00070 BLE& ble = params->ble; 00071 ble_error_t error = params->error; 00072 00073 if (error != BLE_ERROR_NONE) { 00074 /* In case of error, forward the error handling to onBleInitError */ 00075 onBleInitError(ble, error); 00076 return; 00077 } 00078 00079 /* Ensure that it is the default instance of BLE */ 00080 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { 00081 return; 00082 } 00083 00084 ble.gap().onDisconnection(disconnectionCallback); 00085 00086 /* Setup primary service */ 00087 batteryServicePtr = new BatteryService(ble, batteryLevel); 00088 00089 /* Setup advertising */ 00090 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); 00091 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *) uuid16_list, sizeof(uuid16_list)); 00092 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *) DEVICE_NAME, sizeof(DEVICE_NAME)); 00093 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); 00094 ble.gap().setAdvertisingInterval(1000); /* 1000ms */ 00095 ble.gap().startAdvertising(); 00096 } 00097 00098 void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) { 00099 BLE &ble = BLE::Instance(); 00100 eventQueue.call(Callback<void()>(&ble, &BLE::processEvents)); 00101 } 00102 00103 int main() 00104 { 00105 eventQueue.call_every(500, blinkCallback); 00106 00107 BLE &ble = BLE::Instance(); 00108 ble.onEventsToProcess(scheduleBleEventsProcessing); 00109 ble.init(bleInitComplete); 00110 00111 eventQueue.dispatch_forever(); 00112 00113 return 0; 00114 }
Generated on Wed Jul 13 2022 19:59:23 by 1.7.2