183 lines
5.7 KiB
C
183 lines
5.7 KiB
C
#ifndef _ANPC_H_
|
|
#define _ANPC_H_
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @addtogroup ANPC Alert Notification Profile Client
|
|
* @ingroup ANP
|
|
* @brief Phone Alert Notification Profile Client
|
|
* @{
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
* INCLUDE FILES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
#include "rwip_config.h"
|
|
|
|
#if (BLE_AN_CLIENT)
|
|
#include "anp_common.h"
|
|
#include "ke_task.h"
|
|
#include "prf_types.h"
|
|
#include "prf_utils.h"
|
|
#include "anpc_task.h"
|
|
|
|
/*
|
|
* DEFINES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// Maximum number of Alert Notification Client task instances
|
|
#define ANPC_IDX_MAX (BLE_CONNECTION_MAX)
|
|
|
|
/*
|
|
* ENUMERATIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// Possible states of the ANPC task
|
|
enum anpc_states
|
|
{
|
|
/// Free state
|
|
ANPC_FREE,
|
|
/// Idle state
|
|
ANPC_IDLE,
|
|
/// Connected state
|
|
ANPC_DISCOVERING,
|
|
/// Busy state
|
|
ANPC_BUSY,
|
|
|
|
/// Number of defined states.
|
|
ANPC_STATE_MAX
|
|
};
|
|
|
|
/// Codes for reading/writing a ANS characteristic with one single request
|
|
enum anpc_rd_wr_ntf_codes
|
|
{
|
|
/// Read ANS Supported New Alert Category
|
|
ANPC_RD_SUP_NEW_ALERT_CAT = ANPC_CHAR_SUP_NEW_ALERT_CAT,
|
|
/// NTF New Alert
|
|
ANPC_NTF_NEW_ALERT = ANPC_CHAR_NEW_ALERT,
|
|
/// Read ANS Supported Unread Alert Category
|
|
ANPC_RD_SUP_UNREAD_ALERT_CAT = ANPC_CHAR_SUP_UNREAD_ALERT_CAT,
|
|
/// NTF Unread Alert Categories
|
|
ANPC_NTF_UNREAD_ALERT = ANPC_CHAR_UNREAD_ALERT_STATUS,
|
|
/// Write ANS Alert Notification Control Point
|
|
ANPC_WR_ALERT_NTF_CTNL_PT = ANPC_CHAR_ALERT_NTF_CTNL_PT,
|
|
|
|
/// Read/Write ANS New Alert Client Characteristic Configuration Descriptor
|
|
ANPC_RD_WR_NEW_ALERT_CFG = (ANPC_DESC_NEW_ALERT_CL_CFG | ANPC_DESC_MASK),
|
|
/// Read ANS Unread Alert Status Client Characteristic Configuration Descriptor
|
|
ANPC_RD_WR_UNREAD_ALERT_STATUS_CFG = (ANPC_DESC_UNREAD_ALERT_STATUS_CL_CFG | ANPC_DESC_MASK),
|
|
};
|
|
|
|
/*
|
|
* STRUCTURES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
/// Command Message Basic Structure
|
|
struct anpc_cmd
|
|
{
|
|
/// Operation Code
|
|
uint8_t operation;
|
|
|
|
/// MORE DATA
|
|
};
|
|
|
|
struct anpc_cnx_env
|
|
{
|
|
/// Last requested UUID(to keep track of the two services and char)
|
|
uint16_t last_uuid_req;
|
|
/// Last characteristic code used in a read or a write request
|
|
uint16_t last_char_code;
|
|
/// Counter used to check service uniqueness
|
|
uint8_t nb_svc;
|
|
/// Current operation code
|
|
void *operation;
|
|
/// Phone Alert Status Service Characteristics
|
|
struct anpc_ans_content ans;
|
|
};
|
|
|
|
/// Alert Notification Profile Client environment variable
|
|
struct anpc_env_tag
|
|
{
|
|
/// profile environment
|
|
prf_env_t prf_env;
|
|
/// Environment variable pointer for each connections
|
|
struct anpc_cnx_env* env[ANPC_IDX_MAX];
|
|
/// State of different task instances
|
|
ke_state_t state[ANPC_IDX_MAX];
|
|
};
|
|
|
|
/*
|
|
* GLOBAL FUNCTION DECLARATIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Send Alert Notification ATT DB discovery results to ANPC host.
|
|
* @param[in] paspc_env environment variable
|
|
* @param[in] conidx Connection index
|
|
* @param[in] status Satus
|
|
****************************************************************************************
|
|
*/
|
|
void anpc_enable_rsp_send(struct anpc_env_tag *anpc_env, uint8_t conidx, uint8_t status);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Initialization of the ANPC module.
|
|
* This function performs all the initializations of the ANPC module.
|
|
****************************************************************************************
|
|
*/
|
|
bool anpc_found_next_alert_cat(struct anpc_env_tag *idx_env, uint8_t conidx,
|
|
struct anp_cat_id_bit_mask cat_id);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Initialization of the ANPC module.
|
|
* This function performs all the initializations of the ANPC module.
|
|
****************************************************************************************
|
|
*/
|
|
void anpc_write_alert_ntf_ctnl_pt(struct anpc_env_tag *idx_env, uint8_t conidx,
|
|
uint8_t cmd_id, uint8_t cat_id);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Send a ANPC_CMP_EVT message to the task which enabled the profile
|
|
****************************************************************************************
|
|
*/
|
|
void anpc_send_cmp_evt(struct anpc_env_tag *anpc_env, uint8_t conidx, uint8_t operation, uint8_t status);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Retrieve ANP client profile interface
|
|
* @return ANP client profile interface
|
|
****************************************************************************************
|
|
*/
|
|
const struct prf_task_cbs* anpc_prf_itf_get(void);
|
|
|
|
/*
|
|
* TASK DESCRIPTOR DECLARATIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* Initialize task handler
|
|
*
|
|
* @param task_desc Task descriptor to fill
|
|
****************************************************************************************
|
|
*/
|
|
void anpc_task_init(struct ke_task_desc *task_desc);
|
|
|
|
#endif //(BLE_AN_CLIENT)
|
|
|
|
/// @} ANPC
|
|
|
|
#endif //(_ANPC_H_)
|