1d62aa1c5SMilanka Ringwald /* 2d62aa1c5SMilanka Ringwald * Copyright (C) 2024 BlueKitchen GmbH 3d62aa1c5SMilanka Ringwald * 4d62aa1c5SMilanka Ringwald * Redistribution and use in source and binary forms, with or without 5d62aa1c5SMilanka Ringwald * modification, are permitted provided that the following conditions 6d62aa1c5SMilanka Ringwald * are met: 7d62aa1c5SMilanka Ringwald * 8d62aa1c5SMilanka Ringwald * 1. Redistributions of source code must retain the above copyright 9d62aa1c5SMilanka Ringwald * notice, this list of conditions and the following disclaimer. 10d62aa1c5SMilanka Ringwald * 2. Redistributions in binary form must reproduce the above copyright 11d62aa1c5SMilanka Ringwald * notice, this list of conditions and the following disclaimer in the 12d62aa1c5SMilanka Ringwald * documentation and/or other materials provided with the distribution. 13d62aa1c5SMilanka Ringwald * 3. Neither the name of the copyright holders nor the names of 14d62aa1c5SMilanka Ringwald * contributors may be used to endorse or promote products derived 15d62aa1c5SMilanka Ringwald * from this software without specific prior written permission. 16d62aa1c5SMilanka Ringwald * 4. Any redistribution, use, or modification is done solely for 17d62aa1c5SMilanka Ringwald * personal benefit and not for any commercial purpose or for 18d62aa1c5SMilanka Ringwald * monetary gain. 19d62aa1c5SMilanka Ringwald * 20d62aa1c5SMilanka Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 21d62aa1c5SMilanka Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22d62aa1c5SMilanka Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 23d62aa1c5SMilanka Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BLUEKITCHEN 24d62aa1c5SMilanka Ringwald * GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 25d62aa1c5SMilanka Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 26d62aa1c5SMilanka Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 27d62aa1c5SMilanka Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 28d62aa1c5SMilanka Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 29d62aa1c5SMilanka Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 30d62aa1c5SMilanka Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31d62aa1c5SMilanka Ringwald * SUCH DAMAGE. 32d62aa1c5SMilanka Ringwald * 33d62aa1c5SMilanka Ringwald * Please inquire about commercial licensing options at 34d62aa1c5SMilanka Ringwald * [email protected] 35d62aa1c5SMilanka Ringwald * 36d62aa1c5SMilanka Ringwald */ 37d62aa1c5SMilanka Ringwald 38d62aa1c5SMilanka Ringwald /** 39d62aa1c5SMilanka Ringwald * @title Battery Service Server v1.1 40d62aa1c5SMilanka Ringwald * 41d62aa1c5SMilanka Ringwald */ 42d62aa1c5SMilanka Ringwald 43d62aa1c5SMilanka Ringwald #ifndef BATTERY_SERVICE_V1_SERVER_H 44d62aa1c5SMilanka Ringwald #define BATTERY_SERVICE_V1_SERVER_H 45d62aa1c5SMilanka Ringwald 46d62aa1c5SMilanka Ringwald #include <stdint.h> 47d62aa1c5SMilanka Ringwald 48d62aa1c5SMilanka Ringwald #if defined __cplusplus 49d62aa1c5SMilanka Ringwald extern "C" { 50d62aa1c5SMilanka Ringwald #endif 51d62aa1c5SMilanka Ringwald 52d62aa1c5SMilanka Ringwald /** 53d62aa1c5SMilanka Ringwald * @text The Battery Service allows to query your device's battery level in a standardized way. 54d62aa1c5SMilanka Ringwald * 55d62aa1c5SMilanka Ringwald * To use with your application, add `#import <battery_service.gatt>` to your .gatt file. 56d62aa1c5SMilanka Ringwald * After adding it to your .gatt file, you call *battery_service_server_init(value)* with the 57d62aa1c5SMilanka Ringwald * current value of your battery. The valid range for the battery level is 0-100. 58d62aa1c5SMilanka Ringwald * 59d62aa1c5SMilanka Ringwald * If the battery level changes, you can call *battery_service_server_set_battery_value(value)*. 60d62aa1c5SMilanka Ringwald * The service supports sending Notifications if the client enables them. 61d62aa1c5SMilanka Ringwald */ 62*e5ae30daSMilanka Ringwald #define BATTERY_SERVICE_MAX_STRING_LEN 32 63*e5ae30daSMilanka Ringwald 64*e5ae30daSMilanka Ringwald typedef enum { 65*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_BATTERY_LEVEL = 0, 66*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_BATTERY_LEVEL_STATUS, 67*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_ESTIMATED_SERVICE_DATE, 68*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_BATTERY_CRITCAL_STATUS, 69*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_BATTERY_ENERGY_STATUS, 70*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_BATTERY_TIME_STATUS, 71*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_BATTERY_HEALTH_STATUS, 72*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_BATTERY_HEALTH_INFORMATION, 73*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_BATTERY_INFORMATION, 74*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_MANUFACTURER_NAME_STRING, 75*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_MODEL_NUMBER_STRING, 76*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_SERIAL_NUMBER_STRING, 77*e5ae30daSMilanka Ringwald BAS_CHARACTERISTIC_INDEX_NUM 78*e5ae30daSMilanka Ringwald } bas_characteristic_index_t; 79*e5ae30daSMilanka Ringwald 80*e5ae30daSMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_ENERGY_STATUS flags: 81*e5ae30daSMilanka Ringwald #define BATTERY_ENERGY_STATUS_BITMASK_EXTERNAL_SOURCE_POWER_PRESENT 0x01 82*e5ae30daSMilanka Ringwald #define BATTERY_ENERGY_STATUS_BITMASK_PRESENT_VOLTAGE_PRESENT 0x02 83*e5ae30daSMilanka Ringwald #define BATTERY_ENERGY_STATUS_BITMASK_AVAILABLE_ENERGY_PRESENT 0x04 84*e5ae30daSMilanka Ringwald #define BATTERY_ENERGY_STATUS_BITMASK_AVAILABLE_BATTERY_CAPACITY_PRESENT 0x08 85*e5ae30daSMilanka Ringwald #define BATTERY_ENERGY_STATUS_BITMASK_CHARGE_RATE_PRESENT 0x10 86*e5ae30daSMilanka Ringwald #define BATTERY_ENERGY_STATUS_BITMASK_AVAILABLE_ENERGY_AT_LAST_CHARGE_PRESENT 0x20 87*e5ae30daSMilanka Ringwald #define BATTERY_ENERGY_STATUS_BITMASK_RFU 0x40 88*e5ae30daSMilanka Ringwald 89*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_STATUS_BITMASK_IDENTIFIER_PRESENT 0x01 90*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_STATUS_BITMASK_BATTERY_LEVEL_PRESENT 0x02 91*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_STATUS_BITMASK_ADDITIONAL_STATUS_PRESENT 0x04 92*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_STATUS_BITMASK_RFU 0x08 93*e5ae30daSMilanka Ringwald 94*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_POWER_STATE_BITMASK_EXTERNAL_BATTERY_PRESENT 0x0001 // 0 = No, 1 = Yes 95*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_POWER_STATE_BITMASK_WIRED_EXTERNAL_POWER_SOURCE_CONNECTED 0x0004 // 0 = No, 1 = Yes, 2 = Unknown, 3 = RFU 96*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_POWER_STATE_BITMASK_WIRELESS_EXTERNAL_POWER_SOURCE_CONNECTED 0x0010 // 0 = No, 1 = Yes, 2 = Unknown, 3 = RFU 97*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_POWER_STATE_BITMASK_BATTERY_CHARGE_STATE 0x0040 // 0 = Unknown, 1 = Charging, 2 = Discharging: Active 3 = Discharging: Inactive 98*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_POWER_STATE_BITMASK_BATTERY_CHARGE_LEVEL 0x0100 // 0 = Unknown, 1 = Good, 2 = Low, 3 = Critical 99*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_POWER_STATE_BITMASK_CHARGING_TYPE 0x0400 // 0 = Unknown or Not Charging 1 = Constant Current, 2 = Constant Voltage, 3 = Trickle, 4 = Float, 5–7 = RFU 100*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_POWER_STATE_BITMASK_CHARGING_FAULT_REASON 0x2000 // Bit 12: Battery, Bit 13: External Power source, Bit 14: Other 101*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_POWER_STATE_BITMASK_RFU 0x4000 102*e5ae30daSMilanka Ringwald 103*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_ADDITIONAL_STATUS_BITMASK_SERVICE_REQUIRED 0x01 // 0 = No, 1 = Yes, 2 = Unknown, 3 = RFU 104*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_ADDITIONAL_STATUS_BITMASK_BATTERY_FAULT 0x02 // 0 = No or Unknown, 1 = Yes 105*e5ae30daSMilanka Ringwald #define BATTERY_LEVEL_ADDITIONAL_STATUS_BITMASK_RFU 0x04 106*e5ae30daSMilanka Ringwald 107*e5ae30daSMilanka Ringwald #define BATTERY_CRITCAL_STATUS_BITMASK_CRITICAL_POWER_STATE 0x01 108*e5ae30daSMilanka Ringwald #define BATTERY_CRITCAL_STATUS_BITMASK_IMMEDIATE_SERVICE_REQUIRED 0x02 109*e5ae30daSMilanka Ringwald #define BATTERY_CRITCAL_STATUS_BITMASK_RFU 0x04 110*e5ae30daSMilanka Ringwald 111*e5ae30daSMilanka Ringwald #define BATTERY_TIME_STATUS_BITMASK_TIME_UNTIL_DISCHARGED_ON_STANDBY_PRESENT 0x01 112*e5ae30daSMilanka Ringwald #define BATTERY_TIME_STATUS_BITMASK_TIME_UNTIL_RECHARGED_PRESENT 0x02 113*e5ae30daSMilanka Ringwald #define BATTERY_TIME_STATUS_BITMASK_RFU 0x04 114*e5ae30daSMilanka Ringwald 115*e5ae30daSMilanka Ringwald #define BATTERY_HEALTH_STATUS_BITMASK_HEALTH_SUMMARY_PRESENT 0x01 116*e5ae30daSMilanka Ringwald #define BATTERY_HEALTH_STATUS_BITMASK_CYCLE_COUNT_PRESENT 0x02 117*e5ae30daSMilanka Ringwald #define BATTERY_HEALTH_STATUS_BITMASK_CURRENT_TEMPERATURE_PRESENT 0x04 118*e5ae30daSMilanka Ringwald #define BATTERY_HEALTH_STATUS_BITMASK_DEEP_DISCHARGE_COUNT_PRESENT 0x08 119*e5ae30daSMilanka Ringwald #define BATTERY_HEALTH_STATUS_BITMASK_RFU 0x10 120*e5ae30daSMilanka Ringwald 121*e5ae30daSMilanka Ringwald #define BATTERY_HEALTH_INFORMATION_BITMASK_CYCLE_COUNT_DESIGNED_LIFETIME_PRESENT 0x01 122*e5ae30daSMilanka Ringwald #define BATTERY_HEALTH_INFORMATION_BITMASK_DESIGNED_OPERATING_TEMPERATURE_PRESENT 0x02 123*e5ae30daSMilanka Ringwald #define BATTERY_HEALTH_INFORMATION_BITMASK_RFU 0x04 124*e5ae30daSMilanka Ringwald 125*e5ae30daSMilanka Ringwald #define BATTERY_INFORMATION_BITMASK_MANUFACTURE_DATE_PRESENT 0x0001 126*e5ae30daSMilanka Ringwald #define BATTERY_INFORMATION_BITMASK_EXPIRATION_DATE_PRESENT 0x0002 127*e5ae30daSMilanka Ringwald #define BATTERY_INFORMATION_BITMASK_DESIGNED_CAPACITY_PRESENT 0x0004 128*e5ae30daSMilanka Ringwald #define BATTERY_INFORMATION_BITMASK_LOW_ENERGY_PRESENT 0x0008 129*e5ae30daSMilanka Ringwald #define BATTERY_INFORMATION_BITMASK_CRITICAL_ENERGY_PRESENT 0x0010 130*e5ae30daSMilanka Ringwald #define BATTERY_INFORMATION_BITMASK_CHEMISTRY_PRESENT 0x0020 131*e5ae30daSMilanka Ringwald #define BATTERY_INFORMATION_BITMASK_NOMINAL_VOLTAGE_PRESENT 0x0040 132*e5ae30daSMilanka Ringwald #define BATTERY_INFORMATION_BITMASK_AGGREGATION_GROUP_PRESENT 0x0080 133*e5ae30daSMilanka Ringwald #define BATTERY_INFORMATION_BITMASK_RFU 0x0100 134*e5ae30daSMilanka Ringwald 135*e5ae30daSMilanka Ringwald #define BATTERY_INFROMATION_FEATURE_BITMASK_REPLACEABLE 0x01 136*e5ae30daSMilanka Ringwald #define BATTERY_INFROMATION_FEATURE_BITMASK_RECHARGEABLE 0x02 137*e5ae30daSMilanka Ringwald #define BATTERY_INFROMATION_FEATURE_BITMASK_RFU 0x04 138*e5ae30daSMilanka Ringwald 139d62aa1c5SMilanka Ringwald struct battery_service_v1; 140d62aa1c5SMilanka Ringwald 141d62aa1c5SMilanka Ringwald typedef struct { 142*e5ae30daSMilanka Ringwald uint16_t year; 143*e5ae30daSMilanka Ringwald uint8_t month; 144*e5ae30daSMilanka Ringwald uint8_t day; 145*e5ae30daSMilanka Ringwald } btstack_utc_date_t; 146*e5ae30daSMilanka Ringwald 147*e5ae30daSMilanka Ringwald typedef struct { 148*e5ae30daSMilanka Ringwald uint8_t hours; 149*e5ae30daSMilanka Ringwald uint8_t minutes; 150*e5ae30daSMilanka Ringwald uint8_t seconds; 151*e5ae30daSMilanka Ringwald } btstack_utc_time_t; 152*e5ae30daSMilanka Ringwald 153*e5ae30daSMilanka Ringwald typedef struct { 154d62aa1c5SMilanka Ringwald hci_con_handle_t con_handle; 155d62aa1c5SMilanka Ringwald 156d62aa1c5SMilanka Ringwald btstack_context_callback_registration_t scheduled_tasks_callback; 157d62aa1c5SMilanka Ringwald uint8_t scheduled_tasks; 158*e5ae30daSMilanka Ringwald uint16_t configurations[BAS_CHARACTERISTIC_INDEX_NUM]; 159d62aa1c5SMilanka Ringwald 160d62aa1c5SMilanka Ringwald struct battery_service_v1 * service; 161d62aa1c5SMilanka Ringwald } battery_service_v1_server_connection_t; 162d62aa1c5SMilanka Ringwald 163*e5ae30daSMilanka Ringwald typedef struct { 164*e5ae30daSMilanka Ringwald uint16_t value_handle; 165*e5ae30daSMilanka Ringwald uint16_t client_configuration_handle; 166*e5ae30daSMilanka Ringwald } bas_characteristic_t; 167*e5ae30daSMilanka Ringwald 168d62aa1c5SMilanka Ringwald 169d62aa1c5SMilanka Ringwald typedef struct battery_service_v1 { 170d62aa1c5SMilanka Ringwald btstack_linked_item_t item; 171d62aa1c5SMilanka Ringwald 172d62aa1c5SMilanka Ringwald // service 173d62aa1c5SMilanka Ringwald uint16_t start_handle; 174d62aa1c5SMilanka Ringwald uint16_t end_handle; 175d62aa1c5SMilanka Ringwald uint8_t index; 176d62aa1c5SMilanka Ringwald 177d62aa1c5SMilanka Ringwald att_service_handler_t service_handler; 178d62aa1c5SMilanka Ringwald 179*e5ae30daSMilanka Ringwald bas_characteristic_t characteristics[BAS_CHARACTERISTIC_INDEX_NUM]; 180*e5ae30daSMilanka Ringwald 181d62aa1c5SMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_LEVEL 182d62aa1c5SMilanka Ringwald uint8_t battery_value; 183d62aa1c5SMilanka Ringwald 184*e5ae30daSMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_LEVEL_STATUS 185*e5ae30daSMilanka Ringwald struct { 186*e5ae30daSMilanka Ringwald uint8_t flags; 187*e5ae30daSMilanka Ringwald uint16_t power_state_flags; 188*e5ae30daSMilanka Ringwald 189*e5ae30daSMilanka Ringwald uint16_t identifier; 190*e5ae30daSMilanka Ringwald uint8_t battery_level; 191*e5ae30daSMilanka Ringwald uint8_t additional_status_flags; 192*e5ae30daSMilanka Ringwald } battery_level; 193*e5ae30daSMilanka Ringwald 194*e5ae30daSMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_ESTIMATED_SERVICE_DATE 195*e5ae30daSMilanka Ringwald uint32_t estimated_service_date_days; 196*e5ae30daSMilanka Ringwald 197*e5ae30daSMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_CRITCAL_STATUS 198*e5ae30daSMilanka Ringwald uint8_t battery_critcal_status_flags; 199*e5ae30daSMilanka Ringwald 200*e5ae30daSMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_ENERGY_STATUS 201*e5ae30daSMilanka Ringwald struct { 202*e5ae30daSMilanka Ringwald uint8_t flags; 203*e5ae30daSMilanka Ringwald uint16_t external_source_power_medfloat16; 204*e5ae30daSMilanka Ringwald uint16_t present_voltage_medfloat16; 205*e5ae30daSMilanka Ringwald uint16_t available_energy_medfloat16; 206*e5ae30daSMilanka Ringwald uint16_t available_battery_capacity_medfloat16; 207*e5ae30daSMilanka Ringwald uint16_t charge_rate_medfloat16; 208*e5ae30daSMilanka Ringwald uint16_t available_energy_at_last_charge_medfloat16; 209*e5ae30daSMilanka Ringwald } energy_status; 210*e5ae30daSMilanka Ringwald 211*e5ae30daSMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_TIME_STATUS 212*e5ae30daSMilanka Ringwald struct { 213*e5ae30daSMilanka Ringwald uint8_t flags; 214*e5ae30daSMilanka Ringwald 215*e5ae30daSMilanka Ringwald // A value of 0xFFFFFF represents: Unknown 216*e5ae30daSMilanka Ringwald // A value of 0xFFFFFE represents: Greater than 0xFFFFFD 217*e5ae30daSMilanka Ringwald uint32_t time_until_discharged_minutes; 218*e5ae30daSMilanka Ringwald uint32_t time_until_discharged_on_standby_minutes; 219*e5ae30daSMilanka Ringwald uint32_t time_until_recharged_minutes; 220*e5ae30daSMilanka Ringwald } time_status; 221*e5ae30daSMilanka Ringwald 222*e5ae30daSMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_HEALTH_STATUS 223*e5ae30daSMilanka Ringwald struct { 224*e5ae30daSMilanka Ringwald uint8_t flags; 225*e5ae30daSMilanka Ringwald uint8_t summary; // Allowed range is 0 to 100. 226*e5ae30daSMilanka Ringwald uint16_t cycle_count; 227*e5ae30daSMilanka Ringwald int8_t current_temperature_degree_celsius; 228*e5ae30daSMilanka Ringwald uint16_t deep_discharge_count; 229*e5ae30daSMilanka Ringwald } health_status; 230*e5ae30daSMilanka Ringwald 231*e5ae30daSMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_HEALTH_INFORMATION 232*e5ae30daSMilanka Ringwald struct { 233*e5ae30daSMilanka Ringwald uint8_t flags; 234*e5ae30daSMilanka Ringwald uint16_t cycle_count_designed_lifetime; 235*e5ae30daSMilanka Ringwald 236*e5ae30daSMilanka Ringwald // A raw value of 0x7F represents: Greater than 126. 237*e5ae30daSMilanka Ringwald // A raw value of 0x80 represents: Less than -127. 238*e5ae30daSMilanka Ringwald int8_t min_designed_operating_temperature_degree_celsius; 239*e5ae30daSMilanka Ringwald int8_t max_designed_operating_temperature_degree_celsius; 240*e5ae30daSMilanka Ringwald } health_information; 241*e5ae30daSMilanka Ringwald 242*e5ae30daSMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_BATTERY_INFORMATION 243*e5ae30daSMilanka Ringwald struct { 244*e5ae30daSMilanka Ringwald uint16_t flags; 245*e5ae30daSMilanka Ringwald uint8_t features; 246*e5ae30daSMilanka Ringwald 247*e5ae30daSMilanka Ringwald uint32_t manufacture_date_days; 248*e5ae30daSMilanka Ringwald uint32_t expiration_date_days; 249*e5ae30daSMilanka Ringwald 250*e5ae30daSMilanka Ringwald uint16_t designed_capacity_kWh_medfloat16; 251*e5ae30daSMilanka Ringwald uint16_t low_energy_kWh_medfloat16; 252*e5ae30daSMilanka Ringwald uint16_t critical_energy_kWh_medfloat16; 253*e5ae30daSMilanka Ringwald uint8_t chemistry; 254*e5ae30daSMilanka Ringwald uint16_t nominal_voltage_medfloat16; 255*e5ae30daSMilanka Ringwald uint8_t aggregation_group; // 0: not in group, 255: RFU 256*e5ae30daSMilanka Ringwald } information; 257*e5ae30daSMilanka Ringwald 258*e5ae30daSMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_MANUFACTURER_NAME_STRING 259*e5ae30daSMilanka Ringwald uint8_t manufacturer_name[BATTERY_SERVICE_MAX_STRING_LEN]; 260*e5ae30daSMilanka Ringwald uint8_t manufacturer_name_len; 261*e5ae30daSMilanka Ringwald 262*e5ae30daSMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_MODEL_NUMBER_STRING 263*e5ae30daSMilanka Ringwald uint8_t model_number[BATTERY_SERVICE_MAX_STRING_LEN]; 264*e5ae30daSMilanka Ringwald uint8_t model_number_len; 265*e5ae30daSMilanka Ringwald 266*e5ae30daSMilanka Ringwald // ORG_BLUETOOTH_CHARACTERISTIC_SERIAL_NUMBER_STRING 267*e5ae30daSMilanka Ringwald uint8_t serial_number[BATTERY_SERVICE_MAX_STRING_LEN]; 268*e5ae30daSMilanka Ringwald uint8_t serial_number_len; 269*e5ae30daSMilanka Ringwald 270d62aa1c5SMilanka Ringwald uint8_t connections_max_num; 271d62aa1c5SMilanka Ringwald battery_service_v1_server_connection_t * connections; 272d62aa1c5SMilanka Ringwald } battery_service_v1_t; 273d62aa1c5SMilanka Ringwald 274d62aa1c5SMilanka Ringwald /* API_START */ 275d62aa1c5SMilanka Ringwald 276d62aa1c5SMilanka Ringwald /** 277d62aa1c5SMilanka Ringwald * @brief Init Battery Service Server with ATT DB 278d62aa1c5SMilanka Ringwald */ 279d62aa1c5SMilanka Ringwald void battery_service_v1_server_init(void); 280d62aa1c5SMilanka Ringwald 281d62aa1c5SMilanka Ringwald void battery_service_v1_server_register(battery_service_v1_t *service, battery_service_v1_server_connection_t *connections, uint8_t connection_max_num); 282d62aa1c5SMilanka Ringwald 283d62aa1c5SMilanka Ringwald void battery_service_v1_server_deregister(battery_service_v1_t *service); 284d62aa1c5SMilanka Ringwald /** 285d62aa1c5SMilanka Ringwald * @brief Update battery value 286d62aa1c5SMilanka Ringwald * @note triggers notifications if subscribed 287d62aa1c5SMilanka Ringwald * @param battery_value in range 0-100 288d62aa1c5SMilanka Ringwald */ 289d62aa1c5SMilanka Ringwald void battery_service_v1_server_set_battery_value(battery_service_v1_t * service, uint8_t value); 290d62aa1c5SMilanka Ringwald 291d62aa1c5SMilanka Ringwald void battery_service_v1_server_deinit(void); 292d62aa1c5SMilanka Ringwald 293d62aa1c5SMilanka Ringwald /* API_END */ 294d62aa1c5SMilanka Ringwald 295d62aa1c5SMilanka Ringwald #if defined __cplusplus 296d62aa1c5SMilanka Ringwald } 297d62aa1c5SMilanka Ringwald #endif 298d62aa1c5SMilanka Ringwald 299d62aa1c5SMilanka Ringwald #endif 300d62aa1c5SMilanka Ringwald 301