pinebuds/services/ble_profiles/htp/htpc/api/htpc_task.h
2022-08-15 17:20:27 +08:00

216 lines
5.3 KiB
C

#ifndef HTPC_TASK_H_
#define HTPC_TASK_H_
/**
****************************************************************************************
* @addtogroup HTPCTASK Health Thermometer Profile Collector Task
* @ingroup HTPC
* @brief Health Thermometer Profile Collector Task
*
* The HTPCTASK is responsible for handling the messages coming in and out of the
* @ref HTPC monitor block of the BLE Host.
*
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include "rwip_task.h" // Task definitions
#include "htp_common.h"
/*
* DEFINES
****************************************************************************************
*/
/// Message id
enum htpc_msg_id
{
/// Start the Health Thermometer Collector profile - at connection
HTPC_ENABLE_REQ = TASK_FIRST_MSG(TASK_ID_HTPC),
/// Confirm that cfg connection has finished with discovery results, or that normal cnx started
HTPC_ENABLE_RSP,
/// Write Health Thermometer Notification Configuration Value request
HTPC_HEALTH_TEMP_NTF_CFG_REQ,
/// Write Health Thermometer Notification Configuration Value response
HTPC_HEALTH_TEMP_NTF_CFG_RSP,
///APP request for measurement interval write
HTPC_WR_MEAS_INTV_REQ,
///APP request for measurement interval write
HTPC_WR_MEAS_INTV_RSP,
/// Temperature value received from peer sensor
HTPC_TEMP_IND,
/// Measurement interval update indication received from peer sensor
HTPC_MEAS_INTV_IND,
/// Generic message to read a HTP characteristic value
HTPC_RD_CHAR_REQ,
/// Read HTP characteristic value response
HTPC_RD_CHAR_RSP,
};
/// Health Thermometer Service Characteristics - Char. Code
enum htpc_chars
{
/// Temperature Measurement
HTPC_CHAR_HTS_TEMP_MEAS = 0x0,
/// Temperature Type
HTPC_CHAR_HTS_TEMP_TYPE,
/// Intermediate Temperature
HTPC_CHAR_HTS_INTM_TEMP,
/// Measurement Interval
HTPC_CHAR_HTS_MEAS_INTV,
HTPC_CHAR_HTS_MAX,
};
/// Health Thermometer Service Characteristic Descriptors
enum htpc_descs
{
/// Temp. Meas. Client Config
HTPC_DESC_HTS_TEMP_MEAS_CLI_CFG,
/// Intm. Meas. Client Config
HTPC_DESC_HTS_INTM_MEAS_CLI_CFG,
/// Meas. Intv. Client Config
HTPC_DESC_HTS_MEAS_INTV_CLI_CFG,
/// Meas. Intv. Valid Range,
HTPC_DESC_HTS_MEAS_INTV_VAL_RGE,
HTPC_DESC_HTS_MAX,
};
/// Internal codes for reading a HTS characteristic with one single request
enum htpc_rd_char
{
///Read HTS Temp. Type
HTPC_RD_TEMP_TYPE = 0,
///Read HTS Measurement Interval
HTPC_RD_MEAS_INTV,
///Read HTS Temperature Measurement Client Cfg. Desc
HTPC_RD_TEMP_MEAS_CLI_CFG,
///Read HTS Intermediate Temperature Client Cfg. Desc
HTPC_RD_INTM_TEMP_CLI_CFG,
///Read HTS Measurement Interval Client Cfg. Desc
HTPC_RD_MEAS_INTV_CLI_CFG,
///Read HTS Measurement Interval Client Cfg. Desc
HTPC_RD_MEAS_INTV_VAL_RGE,
};
/*
* TYPE DEFINITIONS
****************************************************************************************
*/
/**
* Structure containing the characteristics handles, value handles and descriptors for
* the Health Thermometer Service
*/
struct htpc_hts_content
{
/// service info
struct prf_svc svc;
/// Characteristic info:
struct prf_char_inf chars[HTPC_CHAR_HTS_MAX];
/// Descriptor handles:
struct prf_char_desc_inf descs[HTPC_DESC_HTS_MAX];
};
/// Parameters of the @ref HTPC_ENABLE_REQ message
struct htpc_enable_req
{
///Connection type
uint8_t con_type;
///Existing handle values hts
struct htpc_hts_content hts;
};
/// Parameters of the @ref HTPC_ENABLE_RSP message
struct htpc_enable_rsp
{
///status
uint8_t status;
/// HTS handle values and characteristic properties
struct htpc_hts_content hts;
};
///Parameters of the @ref HTPC_HEALTH_TEMP_NTF_CFG_REQ message
struct htpc_health_temp_ntf_cfg_req
{
///Stop/notify/indicate value to configure into the peer characteristic
uint16_t cfg_val;
///Own code for differentiating between Temperature Measurement, Intermediate Temperature and Measurement Interval chars
uint8_t char_code;
};
///Parameters of the @ref HTPC_HEALTH_TEMP_NTF_CFG_RSP message
struct htpc_health_temp_ntf_cfg_rsp
{
///status
uint8_t status;
};
///Parameters of the @ref HTPC_WR_MEAS_INTV_REQ message
struct htpc_wr_meas_intv_req
{
///Interval value
uint16_t intv;
};
///Parameters of the @ref HTPC_WR_MEAS_INTV_RSP message
struct htpc_wr_meas_intv_rsp
{
///status
uint8_t status;
};
///Parameters of the @ref HTPC_TEMP_IND message
struct htpc_temp_ind
{
/// Temperature Measurement Structure
struct htp_temp_meas temp_meas;
/// Stable or intermediary type of temperature
bool stable_meas;
};
///Parameters of @ref HTPC_MEAS_INTV_IND message
struct htpc_meas_intv_ind
{
///Interval
uint16_t intv;
};
///Parameters of the @ref HTPC_RD_CHAR_REQ message
struct htpc_rd_char_req
{
///Characteristic value code (@see enum htpc_rd_char)
uint8_t char_code;
};
///Parameters of the @ref HTPC_RD_CHAR_RSP message
struct htpc_rd_char_rsp
{
/// Attribute data information
struct prf_att_info info;
};
/// @} HTPCTASK
#endif // HTPC_TASK_H_