Mbed OS Reference
Loading...
Searching...
No Matches
BatteryService.h
1/* mbed Microcontroller Library
2 * Copyright (c) 2006-2020 ARM Limited
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19/* MBED_DEPRECATED */
20#warning "These services are deprecated and will be removed. Please see services.md for details about replacement services."
21
22#ifndef MBED_BLE_BATTERY_SERVICE_H__
23#define MBED_BLE_BATTERY_SERVICE_H__
24
25#if BLE_FEATURE_GATT_SERVER
26
27#include "platform/mbed_assert.h"
28
29#include "ble/BLE.h"
30#include "ble/Gap.h"
31#include "ble/GattServer.h"
32
33/**
34 * BLE Battery service.
35 *
36 * @par purpose
37 *
38 * The battery service exposes the charge level of the battery of the device.
39 * This information is exposed as a percentage from 0% to 100%; a value of 0%
40 * represents a fully discharged battery, and a value of 100% represents a
41 * fully charged battery.
42 *
43 * Clients can read the current charge level and subscribe to server initiated
44 * updates of the charge level. The server delivers these updates to the subscribed
45 * client in a notification packet.
46 *
47 * The subscription mechanism is useful to save power; it avoids unecessary data
48 * traffic between the client and the server, which may be induced by polling the
49 * battery level characteristic value.
50 *
51 * @par usage
52 *
53 * When this class is instantiated, it adds a battery service in the GattServer.
54 *
55 * The application code can use the function updateBatteryLevel() to update the
56 * charge level that the service exposes and to notify the subscribed client that the
57 * value changed.
58 *
59 * @note You can find specification of the battery service here:
60 * https://www.bluetooth.com/specifications/gatt
61 *
62 * @attention Multiple instances of this battery service are not supported.
63 */
65public:
66 /**
67 * Instantiate a battery service.
68 *
69 * The construction of a BatteryService adds a GATT battery service in @p
70 * _ble GattServer and sets the initial charge level of the battery to @p
71 * level.
72 *
73 * @param[in] _ble BLE device which will host the battery service.
74 * @param[in] level Initial charge level of the battery. It is a percentage
75 * where 0% means that the battery is fully discharged and 100% means that
76 * the battery is fully charged.
77 */
78 BatteryService(BLE &_ble, uint8_t level = 100) :
79 ble(_ble),
80 batteryLevel(level),
82 GattCharacteristic::UUID_BATTERY_LEVEL_CHAR,
84 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY
85 )
86 {
87 MBED_ASSERT(level <= 100);
89 GattService batteryService(
91 charTable,
92 sizeof(charTable) / sizeof(charTable[0])
93 );
94
95 ble.gattServer().addService(batteryService);
96 }
97
98 /**
99 * Update the battery charge level that the service exposes.
100 *
101 * The server sends a notification of the new value to clients that have
102 * subscribed to the battery level characteristic updates, and clients
103 * reading the charge level after the update obtain the updated value.
104 *
105 * @param newLevel Charge level of the battery. It is a percentage of the
106 * remaining charge between 0% and 100%.
107 *
108 * @attention This function must be called in the execution context of the
109 * BLE stack.
110 */
111 void updateBatteryLevel(uint8_t newLevel)
112 {
113 MBED_ASSERT(newLevel <= 100);
114 batteryLevel = newLevel;
115 ble.gattServer().write(
118 1
119 );
120 }
121
122protected:
123 /**
124 * Reference to the underlying BLE instance that this object is attached to.
125 *
126 * The services and characteristics are registered in the GattServer of
127 * this BLE instance.
128 */
130
131 /**
132 * The current battery level represented as an integer from 0% to 100%.
133 */
135
136 /**
137 * The GATT characteristic, which exposes the charge level.
138 */
140};
141
142#endif // BLE_FEATURE_GATT_SERVER
143
144#endif /* #ifndef MBED_BLE_BATTERY_SERVICE_H__*/
BLE Battery service.
BatteryService(BLE &_ble, uint8_t level=100)
Instantiate a battery service.
BLE & ble
Reference to the underlying BLE instance that this object is attached to.
void updateBatteryLevel(uint8_t newLevel)
Update the battery charge level that the service exposes.
uint8_t batteryLevel
The current battery level represented as an integer from 0% to 100%.
ReadOnlyGattCharacteristic< uint8_t > batteryLevelCharacteristic
The GATT characteristic, which exposes the charge level.
Representation of a GattServer characteristic.
GattAttribute::Handle_t getValueHandle() const
Get the characteristic's value attribute handle in the ATT table.
Representation of a GattServer service.
@ UUID_BATTERY_SERVICE
UUID of the Battery service.
Helper class that represents a read only GattCharacteristic.
Abstract away BLE-capable radio transceivers or SOCs.
Definition: BLE.h:137
#define MBED_ASSERT(expr)
MBED_ASSERT Declare runtime assertions: results in runtime error if condition is false.
Definition: mbed_assert.h:66
Entry namespace for all BLE API definitions.