zephyr/subsys/bluetooth/services/bas/bas_internal.h
Nithin Ramesh Myliattil baa5683e59 bluetooth: BAS: add battery level status char to bas service
Added the battery level status char to bas service
as per bas_1.1 spec. Added BSIM test for BAS service
to test the NTF/INDs of BAS characteristics.

Signed-off-by: Nithin Ramesh Myliattil <niym@demant.com>
2024-08-20 18:59:14 -04:00

147 lines
3.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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 37: 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 12: Wired External Power Source Connected
* - 0 = No
* - 1 = Yes
* - 2 = Unknown
* - 3 = RFU
* - bit 34: Wireless External Power Source Connected
* - 0 = No
* - 1 = Yes
* - 2 = Unknown
* - 3 = RFU
* - bit 56: Battery Charge State
* - 0 = Unknown
* - 1 = Charging
* - 2 = Discharging: Active
* - 3 = Discharging: Inactive
* - bit 78: Battery Charge Level
* - 0 = Unknown
* - 1 = Good
* - 2 = Low
* - 3 = Critical
* - bit 911: Charging Type
* - 0 = Unknown or Not Charging
* - 1 = Constant Current
* - 2 = Constant Voltage
* - 3 = Trickle
* - 4 = Float
* - 57 = RFU
* - bit 1214: 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 01: Service Required
* - 0 = False
* - 1 = True
* - 2 = Unknown
* - 3 = RFU
* - bit 2: Battery Fault
* - 0 = False or Unknown
* - 1 = Yes
* - bit 37: 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 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 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_ */