231 lines
7.1 KiB
C
231 lines
7.1 KiB
C
|
|
/**
|
||
|
|
*****************************************************************************************
|
||
|
|
* Copyright(c) 2017, Realtek Semiconductor Corporation. All rights reserved.
|
||
|
|
*****************************************************************************************
|
||
|
|
* @file bas.h
|
||
|
|
* @brief Head file for using battery service.
|
||
|
|
* @details BAS data structs and external functions declaration.
|
||
|
|
* @author
|
||
|
|
* @date
|
||
|
|
* @version v1.0
|
||
|
|
* *************************************************************************************
|
||
|
|
*/
|
||
|
|
|
||
|
|
/* Define to prevent recursive inclusion */
|
||
|
|
#ifndef _BAS_H_
|
||
|
|
#define _BAS_H_
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C" {
|
||
|
|
#endif /* __cplusplus */
|
||
|
|
|
||
|
|
/* Add Includes here */
|
||
|
|
#include "profile_server.h"
|
||
|
|
|
||
|
|
|
||
|
|
/** @defgroup BAS Battery Service
|
||
|
|
* @brief Battery service
|
||
|
|
* @details
|
||
|
|
|
||
|
|
The Battery Service exposes the state of a battery within a device.
|
||
|
|
|
||
|
|
Battery Service generally makes up a profile with some other services, and it can provide the state of a battery within a device.
|
||
|
|
|
||
|
|
The default supported feature provided by BAS is the notify property of battery level characteristic,
|
||
|
|
and the application developers can modify the feature supported by BAS according to their own requirements.
|
||
|
|
The specific configuration process can be achieved by modifying file @ref bas_config.h.
|
||
|
|
|
||
|
|
* <b>Example usage</b>
|
||
|
|
* \code{.c}
|
||
|
|
|
||
|
|
#define BAS_BATTERY_LEVEL_NOTIFY_SUPPORT 1
|
||
|
|
|
||
|
|
* \endcode
|
||
|
|
|
||
|
|
Application shall register battery service when initialization through @ref bas_add_service function.
|
||
|
|
|
||
|
|
Application can set the battery level of BAS through @ref bas_set_parameter function.
|
||
|
|
|
||
|
|
Application can send the battery level value of BAS to the client with a notification through @ref bas_battery_level_value_notify function.
|
||
|
|
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/*============================================================================*
|
||
|
|
* Macros
|
||
|
|
*============================================================================*/
|
||
|
|
/** @defgroup BAS_Exported_Macros BAS Exported Macros
|
||
|
|
* @brief
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
#define BAS_READ_BATTERY_LEVEL 1
|
||
|
|
#define BAS_NOTIFY_BATTERY_LEVEL_ENABLE 1
|
||
|
|
#define BAS_NOTIFY_BATTERY_LEVEL_DISABLE 2
|
||
|
|
|
||
|
|
/** End of BAS_Exported_Macros
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
/*============================================================================*
|
||
|
|
* Types
|
||
|
|
*============================================================================*/
|
||
|
|
/** @defgroup BAS_Exported_Types BAS Exported Types
|
||
|
|
* @brief
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Battery service parameter type
|
||
|
|
*/
|
||
|
|
typedef enum
|
||
|
|
{
|
||
|
|
BAS_PARAM_BATTERY_LEVEL = 0x01,
|
||
|
|
} T_BAS_PARAM_TYPE;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief set battery service parameter upstream message data
|
||
|
|
*/
|
||
|
|
typedef union
|
||
|
|
{
|
||
|
|
uint8_t notification_indification_index;
|
||
|
|
uint8_t read_value_index;
|
||
|
|
} T_BAS_UPSTREAM_MSG_DATA;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief set battery service parameter upstream callback data
|
||
|
|
*/
|
||
|
|
typedef struct
|
||
|
|
{
|
||
|
|
uint8_t conn_id;
|
||
|
|
T_SERVICE_CALLBACK_TYPE msg_type;
|
||
|
|
T_BAS_UPSTREAM_MSG_DATA msg_data;
|
||
|
|
} T_BAS_CALLBACK_DATA;
|
||
|
|
|
||
|
|
/** End of BAS_Exported_Types
|
||
|
|
* @}
|
||
|
|
*/
|
||
|
|
|
||
|
|
|
||
|
|
/*============================================================================*
|
||
|
|
* Functions
|
||
|
|
*============================================================================*/
|
||
|
|
/** @defgroup BAS_Exported_Functions BAS Exported Functions
|
||
|
|
* @brief
|
||
|
|
* @{
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Add battery service to the BLE stack database.
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* @param[in] p_func Callback when service attribute was read, write or cccd update.
|
||
|
|
* @return Service id generated by the BLE stack: @ref T_SERVER_ID.
|
||
|
|
* @retval 0xFF Operation failure.
|
||
|
|
* @retval Others Service id assigned by stack.
|
||
|
|
*
|
||
|
|
* <b>Example usage</b>
|
||
|
|
* \code{.c}
|
||
|
|
void profile_init()
|
||
|
|
{
|
||
|
|
server_init(1);
|
||
|
|
bas_id = bas_add_service(app_handle_profile_message);
|
||
|
|
}
|
||
|
|
* \endcode
|
||
|
|
*/
|
||
|
|
T_SERVER_ID bas_add_service(void *p_func);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Set a battery service parameter.
|
||
|
|
*
|
||
|
|
* NOTE: You can call this function with a battery service parameter type and it will set the
|
||
|
|
* battery service parameter. Battery service parameters are defined in @ref T_BAS_PARAM_TYPE.
|
||
|
|
* If the "len" field sets to the size of a "uint16_t" ,the
|
||
|
|
* "p_value" field must point to a data with type of "uint16_t".
|
||
|
|
*
|
||
|
|
* @param[in] param_type Battery service parameter type: @ref T_BAS_PARAM_TYPE
|
||
|
|
* @param[in] length Length of data to write
|
||
|
|
* @param[in] p_value Pointer to data to write. This is dependent on
|
||
|
|
the parameter type and will be cast to the appropriate data type.
|
||
|
|
If param_type is set to @ref BAS_PARAM_BATTERY_LEVEL, p_value pointer to the current
|
||
|
|
charge level of a battery. Unit is org.bluetooth.unit.percentage. Minimum value is 0,
|
||
|
|
and maximum value is 100. 100% represents fully charged while 0% represents fully discharged.
|
||
|
|
*
|
||
|
|
* @return Operation result.
|
||
|
|
* @retval true Operation success.
|
||
|
|
* @retval false Operation failure.
|
||
|
|
*
|
||
|
|
* <b>Example usage</b>
|
||
|
|
* \code{.c}
|
||
|
|
void test(void)
|
||
|
|
{
|
||
|
|
uint8_t battery_level = 80;
|
||
|
|
bas_set_parameter(BAS_PARAM_BATTERY_LEVEL, 1, &battery_level);
|
||
|
|
}
|
||
|
|
* \endcode
|
||
|
|
*/
|
||
|
|
bool bas_set_parameter(T_BAS_PARAM_TYPE param_type, uint8_t length, uint8_t *p_value);
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Send notify battery level notification data .
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* @param[in] conn_id Connection id.
|
||
|
|
* @param[in] service_id Service id.
|
||
|
|
* @param[in] battery_level The current charge level of a battery.
|
||
|
|
Unit is org.bluetooth.unit.percentage. Minimum value is 0, and maximum value is 100.
|
||
|
|
100% represents fully charged while 0% represents fully discharged.
|
||
|
|
* @return Operation result.
|
||
|
|
* @retval true Operation success.
|
||
|
|
* @retval false Operation failure.
|
||
|
|
*
|
||
|
|
* <b>Example usage</b>
|
||
|
|
* \code{.c}
|
||
|
|
void test(void)
|
||
|
|
{
|
||
|
|
uint8_t battery_level = 90;
|
||
|
|
bas_battery_level_value_notify(conn_id, bas_id, battery_level);
|
||
|
|
}
|
||
|
|
* \endcode
|
||
|
|
*/
|
||
|
|
bool bas_battery_level_value_notify(uint8_t conn_id, T_SERVER_ID service_id, uint8_t battery_level);
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Confirm for read battery level value request.
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* @param[in] conn_id Connection id.
|
||
|
|
* @param[in] service_id Service id.
|
||
|
|
* @param[in] battery_level The current charge level of a battery.
|
||
|
|
Unit is org.bluetooth.unit.percentage. Minimum value is 0, and maximum value is 100.
|
||
|
|
100% represents fully charged while 0% represents fully discharged.
|
||
|
|
|
||
|
|
* @return Operation result.
|
||
|
|
* @retval true Operation success.
|
||
|
|
* @retval false Operation failure.
|
||
|
|
*
|
||
|
|
* <b>Example usage</b>
|
||
|
|
* \code{.c}
|
||
|
|
void test(void)
|
||
|
|
{
|
||
|
|
uint8_t battery_level = 90;
|
||
|
|
bas_battery_level_value_read_confirm(conn_id, bas_id, battery_level);
|
||
|
|
}
|
||
|
|
* \endcode
|
||
|
|
*/
|
||
|
|
bool bas_battery_level_value_read_confirm(uint8_t conn_id, T_SERVER_ID service_id,
|
||
|
|
uint8_t battery_level);
|
||
|
|
|
||
|
|
/** @} End of BAS_Exported_Functions */
|
||
|
|
|
||
|
|
/** @} End of BAS */
|
||
|
|
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif /* __cplusplus */
|
||
|
|
|
||
|
|
#endif /* _BAS_H_ */
|