331 lines
7.9 KiB
C
331 lines
7.9 KiB
C
#ifndef _HOGPRH_TASK_H_
|
|
#define _HOGPRH_TASK_H_
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @addtogroup HOGPRHTASK HID Over GATT Profile Report Host Task
|
|
* @ingroup HOGPRH
|
|
* @brief HID Over GATT Profile Report Host Task
|
|
*
|
|
* The HOGPRHTASK is responsible for handling the messages coming in and out of the
|
|
* @ref HOGPRH monitor block of the BLE Host.
|
|
*
|
|
* @{
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
* INCLUDE FILES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
#include "rwip_task.h" // Task definitions
|
|
#include "prf_types.h"
|
|
#include "hogp_common.h"
|
|
|
|
/*
|
|
* DEFINES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
/// Maximal number of hids instances that can be handled
|
|
#define HOGPRH_NB_HIDS_INST_MAX (2)
|
|
/// Maximal number of Report Char. that can be added in the DB for one HIDS - Up to 11
|
|
#define HOGPRH_NB_REPORT_INST_MAX (5)
|
|
|
|
/// Maximal length of Report Map Char. Value
|
|
#define HOGPRH_REPORT_MAP_MAX_LEN (512)
|
|
|
|
/*
|
|
* ENUMERATIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
enum hogprh_msg_id
|
|
{
|
|
/// Start the HID Over GATT profile - at connection
|
|
HOGPRH_ENABLE_REQ = TASK_FIRST_MSG(TASK_ID_HOGPRH),
|
|
///Confirm that cfg connection has finished with discovery results, or that normal cnx started
|
|
HOGPRH_ENABLE_RSP,
|
|
|
|
/// Read Characteristic Value Request
|
|
HOGPRH_READ_INFO_REQ,
|
|
/// Read Characteristic Value Request
|
|
HOGPRH_READ_INFO_RSP,
|
|
|
|
/// Write/Configure peer device attribute Request
|
|
HOGPRH_WRITE_REQ,
|
|
/// Write/Configure peer device attribute Response
|
|
HOGPRH_WRITE_RSP,
|
|
|
|
/// Report value send to APP (after Notification)
|
|
HOGPRH_REPORT_IND,
|
|
};
|
|
|
|
|
|
/// Characteristics
|
|
enum hogprh_chars
|
|
{
|
|
/// Report Map
|
|
HOGPRH_CHAR_REPORT_MAP,
|
|
/// HID Information
|
|
HOGPRH_CHAR_HID_INFO,
|
|
/// HID Control Point
|
|
HOGPRH_CHAR_HID_CTNL_PT,
|
|
/// Protocol Mode
|
|
HOGPRH_CHAR_PROTOCOL_MODE,
|
|
/// Report
|
|
HOGPRH_CHAR_REPORT,
|
|
|
|
HOGPRH_CHAR_MAX = HOGPRH_CHAR_REPORT + HOGPRH_NB_REPORT_INST_MAX,
|
|
};
|
|
|
|
|
|
/// Characteristic descriptors
|
|
enum hogprh_descs
|
|
{
|
|
/// Report Map Char. External Report Reference Descriptor
|
|
HOGPRH_DESC_REPORT_MAP_EXT_REP_REF,
|
|
/// Report Char. Report Reference
|
|
HOGPRH_DESC_REPORT_REF,
|
|
/// Report Client Config
|
|
HOGPRH_DESC_REPORT_CFG = HOGPRH_DESC_REPORT_REF + HOGPRH_NB_REPORT_INST_MAX,
|
|
|
|
HOGPRH_DESC_MAX = HOGPRH_DESC_REPORT_CFG + HOGPRH_NB_REPORT_INST_MAX,
|
|
};
|
|
|
|
/// Peer HID service info that can be read/write
|
|
enum hogprh_info
|
|
{
|
|
/// Protocol Mode
|
|
HOGPRH_PROTO_MODE,
|
|
/// Report Map
|
|
HOGPRH_REPORT_MAP,
|
|
/// Report Map Char. External Report Reference Descriptor
|
|
HOGPRH_REPORT_MAP_EXT_REP_REF,
|
|
|
|
/// HID Information
|
|
HOGPRH_HID_INFO,
|
|
/// HID Control Point
|
|
HOGPRH_HID_CTNL_PT,
|
|
/// Report
|
|
HOGPRH_REPORT,
|
|
/// Report Char. Report Reference
|
|
HOGPRH_REPORT_REF,
|
|
/// Report Notification config
|
|
HOGPRH_REPORT_NTF_CFG,
|
|
|
|
HOGPRH_INFO_MAX,
|
|
};
|
|
|
|
/*
|
|
* APIs Structure
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
///Structure containing the characteristics handles, value handles and descriptors
|
|
struct hogprh_content
|
|
{
|
|
/// Service info
|
|
struct prf_svc svc;
|
|
|
|
/// Included service info
|
|
struct prf_incl_svc incl_svc;
|
|
|
|
/// Characteristic info:
|
|
struct prf_char_inf chars[HOGPRH_CHAR_MAX];
|
|
|
|
/// Descriptor handles:
|
|
struct prf_char_desc_inf descs[HOGPRH_DESC_MAX];
|
|
|
|
/// Number of Report Char. that have been found
|
|
uint8_t report_nb;
|
|
};
|
|
|
|
|
|
/// Parameters of the @ref HOGPRH_ENABLE_REQ message
|
|
struct hogprh_enable_req
|
|
{
|
|
/// Connection type
|
|
uint8_t con_type;
|
|
|
|
/// Number of HIDS instances
|
|
uint8_t hids_nb;
|
|
/// Existing handle values hids
|
|
struct hogprh_content hids[HOGPRH_NB_HIDS_INST_MAX];
|
|
};
|
|
|
|
/// Parameters of the @ref HOGPRH_ENABLE_RSP message
|
|
struct hogprh_enable_rsp
|
|
{
|
|
///status
|
|
uint8_t status;
|
|
|
|
/// Number of HIDS instances
|
|
uint8_t hids_nb;
|
|
/// Existing handle values hids
|
|
struct hogprh_content hids[HOGPRH_NB_HIDS_INST_MAX];
|
|
};
|
|
|
|
|
|
/// HID report info
|
|
struct hogprh_report
|
|
{
|
|
/// Report Length
|
|
uint8_t length;
|
|
/// Report value
|
|
uint8_t value[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// HID report Reference
|
|
struct hogprh_report_ref
|
|
{
|
|
/// Report ID
|
|
uint8_t id;
|
|
/// Report Type
|
|
uint8_t type;
|
|
};
|
|
|
|
/// HID report MAP info
|
|
struct hogprh_report_map
|
|
{
|
|
/// Report MAP Length
|
|
uint16_t length;
|
|
/// Report MAP value
|
|
uint8_t value[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// HID report MAP reference
|
|
struct hogprh_report_map_ref
|
|
{
|
|
/// Reference UUID length
|
|
uint8_t uuid_len;
|
|
/// Reference UUID Value
|
|
uint8_t uuid[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// Information data
|
|
union hogprh_data
|
|
{
|
|
/// Protocol Mode
|
|
/// - info = HOGPRH_PROTO_MODE
|
|
uint8_t proto_mode;
|
|
|
|
/// HID Information value
|
|
/// - info = HOGPRH_HID_INFO
|
|
struct hids_hid_info hid_info;
|
|
|
|
/// HID Control Point value to write
|
|
/// - info = HOGPRH_HID_CTNL_PT
|
|
uint8_t hid_ctnl_pt;
|
|
|
|
/// Report information
|
|
/// - info = HOGPRH_REPORT
|
|
struct hogprh_report report;
|
|
|
|
///Notification Configuration Value
|
|
/// - info = HOGPRH_REPORT_NTF_CFG
|
|
uint16_t report_cfg;
|
|
|
|
/// HID report Reference
|
|
/// - info = HOGPRH_REPORT_REF
|
|
struct hogprh_report_ref report_ref;
|
|
|
|
/// HID report MAP info
|
|
/// - info = HOGPRH_REPORT_MAP
|
|
struct hogprh_report_map report_map;
|
|
|
|
/// HID report MAP reference
|
|
/// - info = HOGPRH_REPORT_MAP_EXT_REP_REF
|
|
struct hogprh_report_map_ref report_map_ref;
|
|
};
|
|
|
|
|
|
|
|
///Parameters of the @ref HOGPRH_READ_INFO_REQ message
|
|
struct hogprh_read_info_req
|
|
{
|
|
///Characteristic info @see enum hogprh_info
|
|
uint8_t info;
|
|
/// HID Service Instance - From 0 to HOGPRH_NB_HIDS_INST_MAX-1
|
|
uint8_t hid_idx;
|
|
/// HID Report Index: only relevant for:
|
|
/// - info = HOGPRH_REPORT
|
|
/// - info = HOGPRH_REPORT_REF
|
|
/// - info = HOGPRH_REPORT_NTF_CFG
|
|
uint8_t report_idx;
|
|
};
|
|
|
|
///Parameters of the @ref HOGPRH_READ_INFO_RSP message
|
|
struct hogprh_read_info_rsp
|
|
{
|
|
/// status of the request
|
|
uint8_t status;
|
|
///Characteristic info @see enum hogprh_info
|
|
uint8_t info;
|
|
/// HID Service Instance - From 0 to HOGPRH_NB_HIDS_INST_MAX-1
|
|
uint8_t hid_idx;
|
|
/// HID Report Index: only relevant for:
|
|
/// - info = HOGPRH_REPORT
|
|
/// - info = HOGPRH_REPORT_REF
|
|
/// - info = HOGPRH_REPORT_NTF_CFG
|
|
uint8_t report_idx;
|
|
/// Information data
|
|
union hogprh_data data;
|
|
};
|
|
|
|
|
|
///Parameters of the @ref HOGPRH_WRITE_REQ message
|
|
struct hogprh_write_req
|
|
{
|
|
///Characteristic info @see enum hogprh_info
|
|
uint8_t info;
|
|
/// HID Service Instance - From 0 to HOGPRH_NB_HIDS_INST_MAX-1
|
|
uint8_t hid_idx;
|
|
/// HID Report Index: only relevant for:
|
|
/// - info = HOGPRH_REPORT
|
|
/// - info = HOGPRH_REPORT_NTF_CFG
|
|
uint8_t report_idx;
|
|
/// Write type ( Write without Response True or Write Request)
|
|
/// - only valid for HOGPRH_REPORT
|
|
bool wr_cmd;
|
|
/// Information data
|
|
union hogprh_data data;
|
|
};
|
|
|
|
|
|
///Parameters of the @ref HOGPRH_WRITE_RSP message
|
|
struct hogprh_write_rsp
|
|
{
|
|
/// status of the request
|
|
uint8_t status;
|
|
///Characteristic info @see enum hogprh_info
|
|
uint8_t info;
|
|
/// HID Service Instance - From 0 to HOGPRH_NB_HIDS_INST_MAX-1
|
|
uint8_t hid_idx;
|
|
/// HID Report Index: only relevant for:
|
|
/// - info = HOGPRH_REPORT
|
|
/// - info = HOGPRH_REPORT_REF
|
|
/// - info = HOGPRH_REPORT_NTF_CFG
|
|
uint8_t report_idx;
|
|
};
|
|
|
|
|
|
///Parameters of the @ref HOGPRH_BOOT_REPORT_IND message
|
|
struct hogprh_report_ind
|
|
{
|
|
/// HIDS Instance
|
|
uint8_t hid_idx;
|
|
/// HID Report Index
|
|
uint8_t report_idx;
|
|
/// Report data
|
|
struct hogprh_report report;
|
|
};
|
|
|
|
/// @} HOGPRHTASK
|
|
|
|
#endif /* _HOGPRH_TASK_H_ */
|