Added the battery critical status char to bas service as per bas_1.1 spec. Updated BSIM test for BAS service to test the INDs of BAS critical characteristic. Signed-off-by: Nithin Ramesh Myliattil <niym@demant.com>
186 lines
5.3 KiB
C
186 lines
5.3 KiB
C
/*
|
||
* Copyright (c) 2024 Demant A/S
|
||
*
|
||
* SPDX-License-Identifier: Apache-2.0
|
||
*/
|
||
|
||
#ifndef BT_BAS_INTERNAL_H_
|
||
#define BT_BAS_INTERNAL_H_
|
||
|
||
#include <sys/types.h>
|
||
#include <zephyr/sys/atomic.h>
|
||
#include <zephyr/types.h>
|
||
|
||
/**
|
||
* @brief Battery level status structure definition.
|
||
*/
|
||
struct bt_bas_bls {
|
||
|
||
/** @brief Flags Field
|
||
*
|
||
* The values of this field are defined below.
|
||
*
|
||
* - bit 0: Identifier Present
|
||
* - Indicates whether the identifier field is present.
|
||
* - bit 1: Battery Level Present
|
||
* - Indicates whether the battery level field is present.
|
||
* - bit 2: Additional Status Present
|
||
* - Indicates whether the additional status field is present.
|
||
* - bit 3–7: RFU (Reserved for Future Use)
|
||
* - Reserved bits for future use; should be set to zero.
|
||
*/
|
||
uint8_t flags;
|
||
|
||
/** @brief Power State
|
||
*
|
||
* The values of this field are defined below.
|
||
*
|
||
* - bit 0: Battery Present
|
||
* - 0 = No
|
||
* - 1 = Yes
|
||
* - bit 1–2: Wired External Power Source Connected
|
||
* - 0 = No
|
||
* - 1 = Yes
|
||
* - 2 = Unknown
|
||
* - 3 = RFU
|
||
* - bit 3–4: Wireless External Power Source Connected
|
||
* - 0 = No
|
||
* - 1 = Yes
|
||
* - 2 = Unknown
|
||
* - 3 = RFU
|
||
* - bit 5–6: Battery Charge State
|
||
* - 0 = Unknown
|
||
* - 1 = Charging
|
||
* - 2 = Discharging: Active
|
||
* - 3 = Discharging: Inactive
|
||
* - bit 7–8: Battery Charge Level
|
||
* - 0 = Unknown
|
||
* - 1 = Good
|
||
* - 2 = Low
|
||
* - 3 = Critical
|
||
* - bit 9–11: Charging Type
|
||
* - 0 = Unknown or Not Charging
|
||
* - 1 = Constant Current
|
||
* - 2 = Constant Voltage
|
||
* - 3 = Trickle
|
||
* - 4 = Float
|
||
* - 5–7 = RFU
|
||
* - bit 12–14: Charging Fault Reason
|
||
* - Bit 12: Battery
|
||
* - Bit 13: External Power source
|
||
* - Bit 14: Other
|
||
* - bit 15: RFU
|
||
*/
|
||
uint16_t power_state;
|
||
|
||
#if defined(CONFIG_BT_BAS_BLS_IDENTIFIER_PRESENT)
|
||
/** Identifier for the battery, range 0x0000 to 0xFFFF.*/
|
||
uint16_t identifier;
|
||
#endif /* CONFIG_BT_BAS_BLS_IDENTIFIER_PRESENT */
|
||
|
||
#if defined(CONFIG_BT_BAS_BLS_BATTERY_LEVEL_PRESENT)
|
||
/** Current battery level */
|
||
uint8_t battery_level;
|
||
#endif /* CONFIG_BT_BAS_BLS_BATTERY_LEVEL_PRESENT */
|
||
|
||
#if defined(CONFIG_BT_BAS_BLS_ADDITIONAL_STATUS_PRESENT)
|
||
|
||
/** @brief Additional Status
|
||
*
|
||
* The values of this field are defined below.
|
||
*
|
||
* - bit 0–1: Service Required
|
||
* - 0 = False
|
||
* - 1 = True
|
||
* - 2 = Unknown
|
||
* - 3 = RFU
|
||
* - bit 2: Battery Fault
|
||
* - 0 = False or Unknown
|
||
* - 1 = Yes
|
||
* - bit 3–7: RFU
|
||
*/
|
||
uint8_t additional_status;
|
||
|
||
#endif /* CONFIG_BT_BAS_BLS_ADDITIONAL_STATUS_PRESENT */
|
||
|
||
} __packed;
|
||
|
||
/**
|
||
* @brief Initialize the Battery Level Status Module.
|
||
*
|
||
*/
|
||
void bt_bas_bls_init(void);
|
||
|
||
/**
|
||
* @brief Read the Battery Critical Status characteristic.
|
||
*
|
||
* @param conn Pointer to the Bluetooth connection object representing the client requesting
|
||
* the characteristic.
|
||
* @param attr Pointer to the GATT attribute of Battery Critical Status characteristic.
|
||
* @param buf Buffer to store the read value.
|
||
* @param len Length of the buffer.
|
||
* @param offset Offset within the characteristic value to start reading.
|
||
*
|
||
* @return The number of bytes read and sent to the client, or a negative error code on failure.
|
||
*/
|
||
ssize_t bt_bas_bcs_read_critical_status(struct bt_conn *conn, const struct bt_gatt_attr *attr,
|
||
void *buf, uint16_t len, uint16_t offset);
|
||
|
||
/**
|
||
* @brief Callback function for BCS Client Characteristic Configuration changes.
|
||
*
|
||
*
|
||
* @param attr Pointer to the GATT attribute of battery critical status char.
|
||
* @param value The new value of the CCC. This value indicates whether
|
||
* notifications or indications are enabled or disabled.
|
||
*/
|
||
void bt_bas_bcs_ccc_cfg_changed(const struct bt_gatt_attr *attr, uint16_t value);
|
||
|
||
/**
|
||
* @brief Set the battery level characteristic value.
|
||
*
|
||
* @param battery_level The new battery level value in percent (0-100).
|
||
*/
|
||
void bt_bas_bls_set_battery_level(uint8_t battery_level);
|
||
|
||
/**
|
||
* @brief Set the battery critical state flag.
|
||
*
|
||
* @param critical_state The battery critical state to set (true for critical, false otherwise).
|
||
*/
|
||
void bt_bas_bcs_set_battery_critical_state(bool critical_state);
|
||
|
||
/**
|
||
* @brief Set the immediate service required flag.
|
||
*
|
||
* @param service_required The immediate service required status to set.
|
||
*/
|
||
void bt_bas_bcs_set_immediate_service_required(bool service_required);
|
||
|
||
/**
|
||
* @brief Read the Battery Level Status characteristic.
|
||
*
|
||
* @param conn Pointer to the Bluetooth connection object representing the client requesting
|
||
* the characteristic.
|
||
* @param attr Pointer to the GATT attribute representing the Battery Level Status characteristic.
|
||
* @param buf Buffer to store the read value.
|
||
* @param len Length of the buffer.
|
||
* @param offset Offset within the characteristic value to start reading.
|
||
*
|
||
* @return The number of bytes read and sent to the client, or a negative error code on failure.
|
||
*/
|
||
ssize_t bt_bas_bls_read_blvl_status(struct bt_conn *conn, const struct bt_gatt_attr *attr,
|
||
void *buf, uint16_t len, uint16_t offset);
|
||
|
||
/**
|
||
* @brief Retrieve the Bluetooth GATT attribute for the BAS service by index.
|
||
*
|
||
* @param index The index of the attribute within the BAS service.
|
||
*
|
||
* @return Pointer to the Bluetooth GATT attribute if the index is valid,
|
||
* otherwise NULL if the index is out of bounds.
|
||
*/
|
||
const struct bt_gatt_attr *bt_bas_get_bas_attr(uint16_t index);
|
||
|
||
#endif /* BT_BAS_INTERNAL_H_ */
|