Line data Source code
1 0 : /* 2 : * Copyright (c) 2024 Demant A/S 3 : * Copyright (c) 2018 Nordic Semiconductor ASA 4 : * Copyright (c) 2016 Intel Corporation 5 : * 6 : * SPDX-License-Identifier: Apache-2.0 7 : */ 8 : 9 : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_BAS_H_ 10 : #define ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_BAS_H_ 11 : 12 : /** 13 : * @brief Battery Service (BAS) 14 : * @defgroup bt_bas Battery Service (BAS) 15 : * @ingroup bluetooth 16 : * @{ 17 : * 18 : * [Experimental] Users should note that the APIs can change 19 : * as a part of ongoing development. 20 : */ 21 : 22 : #include <stdint.h> 23 : #include <zephyr/sys/util.h> 24 : 25 : #ifdef __cplusplus 26 : extern "C" { 27 : #endif 28 : 29 : /** 30 : * @brief Battery Critical Status Characteristic flags. 31 : * 32 : * Enumeration for the flags indicating the presence 33 : * of various fields in the Battery Critical Status characteristic. 34 : */ 35 1 : enum bt_bas_bcs_flags { 36 : /** Battery Critical Status Bit 0: Critical Power State */ 37 : BT_BAS_BCS_BATTERY_CRITICAL_STATE = BIT(0), 38 : 39 : /** Battery Critical Status Bit 1: Immediate Service Required */ 40 : BT_BAS_BCS_IMMEDIATE_SERVICE_REQUIRED = BIT(1), 41 : }; 42 : 43 : /** 44 : * @brief Battery Level Status Characteristic flags. 45 : * 46 : * Enumeration for the flags indicating the presence 47 : * of various fields in the Battery Level Status characteristic. 48 : */ 49 1 : enum bt_bas_bls_flags { 50 : /** Bit indicating that the Battery Level Status identifier is present. */ 51 : BT_BAS_BLS_FLAG_IDENTIFIER_PRESENT = BIT(0), 52 : 53 : /** Bit indicating that the Battery Level is present. */ 54 : BT_BAS_BLS_FLAG_BATTERY_LEVEL_PRESENT = BIT(1), 55 : 56 : /** Bit indicating that additional status information is present. */ 57 : BT_BAS_BLS_FLAG_ADDITIONAL_STATUS_PRESENT = BIT(2), 58 : }; 59 : 60 : /** @brief Battery Present Status 61 : * 62 : * Enumeration for the presence of the battery. 63 : */ 64 1 : enum bt_bas_bls_battery_present { 65 : /** Battery is not present. */ 66 : BT_BAS_BLS_BATTERY_NOT_PRESENT = 0, 67 : 68 : /** Battery is present. */ 69 : BT_BAS_BLS_BATTERY_PRESENT = 1 70 : }; 71 : 72 : /** @brief Wired External Power Source Status 73 : * 74 : * Enumeration for the status of the wired external power source. 75 : */ 76 1 : enum bt_bas_bls_wired_power_source { 77 : /** Wired external power source is not connected. */ 78 : BT_BAS_BLS_WIRED_POWER_NOT_CONNECTED = 0, 79 : 80 : /** Wired external power source is connected. */ 81 : BT_BAS_BLS_WIRED_POWER_CONNECTED = 1, 82 : 83 : /** Wired external power source status is unknown. */ 84 : BT_BAS_BLS_WIRED_POWER_UNKNOWN = 2 85 : }; 86 : 87 : /** @brief Wireless External Power Source Status 88 : * 89 : * Enumeration for the status of the wireless external power source. 90 : */ 91 1 : enum bt_bas_bls_wireless_power_source { 92 : /** Wireless external power source is not connected. */ 93 : BT_BAS_BLS_WIRELESS_POWER_NOT_CONNECTED = 0, 94 : 95 : /** Wireless external power source is connected. */ 96 : BT_BAS_BLS_WIRELESS_POWER_CONNECTED = 1, 97 : 98 : /** Wireless external power source status is unknown. */ 99 : BT_BAS_BLS_WIRELESS_POWER_UNKNOWN = 2 100 : }; 101 : 102 : /** @brief Battery Charge State 103 : * 104 : * Enumeration for the charge state of the battery. 105 : */ 106 1 : enum bt_bas_bls_battery_charge_state { 107 : /** Battery charge state is unknown. */ 108 : BT_BAS_BLS_CHARGE_STATE_UNKNOWN = 0, 109 : 110 : /** Battery is currently charging. */ 111 : BT_BAS_BLS_CHARGE_STATE_CHARGING = 1, 112 : 113 : /** Battery is discharging actively. */ 114 : BT_BAS_BLS_CHARGE_STATE_DISCHARGING_ACTIVE = 2, 115 : 116 : /** Battery is discharging but inactive. */ 117 : BT_BAS_BLS_CHARGE_STATE_DISCHARGING_INACTIVE = 3 118 : }; 119 : 120 : /** @brief Battery Charge Level 121 : * 122 : * Enumeration for the level of charge in the battery. 123 : */ 124 1 : enum bt_bas_bls_battery_charge_level { 125 : /** Battery charge level is unknown. */ 126 : BT_BAS_BLS_CHARGE_LEVEL_UNKNOWN = 0, 127 : 128 : /** Battery charge level is good. */ 129 : BT_BAS_BLS_CHARGE_LEVEL_GOOD = 1, 130 : 131 : /** Battery charge level is low. */ 132 : BT_BAS_BLS_CHARGE_LEVEL_LOW = 2, 133 : 134 : /** Battery charge level is critical. */ 135 : BT_BAS_BLS_CHARGE_LEVEL_CRITICAL = 3 136 : }; 137 : 138 : /** @brief Battery Charge Type 139 : * 140 : * Enumeration for the type of charging applied to the battery. 141 : */ 142 1 : enum bt_bas_bls_battery_charge_type { 143 : /** Battery charge type is unknown or not charging. */ 144 : BT_BAS_BLS_CHARGE_TYPE_UNKNOWN = 0, 145 : 146 : /** Battery is charged using constant current. */ 147 : BT_BAS_BLS_CHARGE_TYPE_CONSTANT_CURRENT = 1, 148 : 149 : /** Battery is charged using constant voltage. */ 150 : BT_BAS_BLS_CHARGE_TYPE_CONSTANT_VOLTAGE = 2, 151 : 152 : /** Battery is charged using trickle charge. */ 153 : BT_BAS_BLS_CHARGE_TYPE_TRICKLE = 3, 154 : 155 : /** Battery is charged using float charge. */ 156 : BT_BAS_BLS_CHARGE_TYPE_FLOAT = 4 157 : }; 158 : 159 : /** @brief Charging Fault Reason 160 : * 161 : * Enumeration for the reasons of charging faults. 162 : */ 163 1 : enum bt_bas_bls_charging_fault_reason { 164 : /** No charging fault. */ 165 : BT_BAS_BLS_FAULT_REASON_NONE = 0, 166 : 167 : /** Charging fault due to battery issue. */ 168 : BT_BAS_BLS_FAULT_REASON_BATTERY = BIT(0), 169 : 170 : /** Charging fault due to external power source issue. */ 171 : BT_BAS_BLS_FAULT_REASON_EXTERNAL_POWER = BIT(1), 172 : 173 : /** Charging fault for other reasons. */ 174 : BT_BAS_BLS_FAULT_REASON_OTHER = BIT(2) 175 : }; 176 : 177 : /** @brief Service Required Status 178 : * 179 : * Enumeration for whether the service is required. 180 : */ 181 1 : enum bt_bas_bls_service_required { 182 : /** Service is not required. */ 183 : BT_BAS_BLS_SERVICE_REQUIRED_FALSE = 0, 184 : 185 : /** Service is required. */ 186 : BT_BAS_BLS_SERVICE_REQUIRED_TRUE = 1, 187 : 188 : /** Service requirement is unknown. */ 189 : BT_BAS_BLS_SERVICE_REQUIRED_UNKNOWN = 2 190 : }; 191 : 192 : /** @brief Battery Fault Status 193 : * 194 : * Enumeration for the fault status of the battery. 195 : */ 196 1 : enum bt_bas_bls_battery_fault { 197 : /** No battery fault. */ 198 : BT_BAS_BLS_BATTERY_FAULT_NO = 0, 199 : 200 : /** Battery fault present. */ 201 : BT_BAS_BLS_BATTERY_FAULT_YES = 1 202 : }; 203 : 204 : /** @brief Read battery level value. 205 : * 206 : * Read the characteristic value of the battery level 207 : * 208 : * @return The battery level in percent. 209 : */ 210 1 : uint8_t bt_bas_get_battery_level(void); 211 : 212 : /** @brief Update battery level value. 213 : * 214 : * Update the characteristic value of the battery level 215 : * This will send a GATT notification to all current subscribers. 216 : * 217 : * @param level The battery level in percent. 218 : * 219 : * @return Zero in case of success and error code in case of error. 220 : */ 221 1 : int bt_bas_set_battery_level(uint8_t level); 222 : 223 : /** 224 : * @brief Set the battery present status. 225 : * 226 : * @param present The battery present status to set. 227 : */ 228 1 : void bt_bas_bls_set_battery_present(enum bt_bas_bls_battery_present present); 229 : 230 : /** 231 : * @brief Set the wired external power source status. 232 : * 233 : * @param source The wired external power source status to set. 234 : */ 235 1 : void bt_bas_bls_set_wired_external_power_source(enum bt_bas_bls_wired_power_source source); 236 : 237 : /** 238 : * @brief Set the wireless external power source status. 239 : * 240 : * @param source The wireless external power source status to set. 241 : */ 242 1 : void bt_bas_bls_set_wireless_external_power_source(enum bt_bas_bls_wireless_power_source source); 243 : 244 : /** 245 : * @brief Set the battery charge state. 246 : * 247 : * @param state The battery charge state to set. 248 : */ 249 1 : void bt_bas_bls_set_battery_charge_state(enum bt_bas_bls_battery_charge_state state); 250 : 251 : /** 252 : * @brief Set the battery charge level. 253 : * 254 : * @param level The battery charge level to set. 255 : */ 256 1 : void bt_bas_bls_set_battery_charge_level(enum bt_bas_bls_battery_charge_level level); 257 : 258 : /** 259 : * @brief Set the battery charge type. 260 : * 261 : * @param type The battery charge type to set. 262 : */ 263 1 : void bt_bas_bls_set_battery_charge_type(enum bt_bas_bls_battery_charge_type type); 264 : 265 : /** 266 : * @brief Set the charging fault reason. 267 : * 268 : * @param reason The charging fault reason to set. 269 : */ 270 1 : void bt_bas_bls_set_charging_fault_reason(enum bt_bas_bls_charging_fault_reason reason); 271 : 272 : /** 273 : * @brief Set the identifier of the battery. 274 : * 275 : * @kconfig_dep{CONFIG_BT_BAS_BLS_IDENTIFIER_PRESENT} 276 : * 277 : * @param identifier Identifier to set. 278 : */ 279 1 : void bt_bas_bls_set_identifier(uint16_t identifier); 280 : 281 : /** 282 : * @brief Set the service required status. 283 : * 284 : * @kconfig_dep{CONFIG_BT_BAS_BLS_ADDITIONAL_STATUS_PRESENT} 285 : * 286 : * @param value Service required status to set. 287 : */ 288 1 : void bt_bas_bls_set_service_required(enum bt_bas_bls_service_required value); 289 : 290 : /** 291 : * @brief Set the battery fault status. 292 : * 293 : * @kconfig_dep{CONFIG_BT_BAS_BLS_ADDITIONAL_STATUS_PRESENT} 294 : * 295 : * @param value Battery fault status to set. 296 : */ 297 1 : void bt_bas_bls_set_battery_fault(enum bt_bas_bls_battery_fault value); 298 : 299 : #ifdef __cplusplus 300 : } 301 : #endif 302 : 303 : /** 304 : * @} 305 : */ 306 : 307 : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_BAS_H_ */