pinebuds/services/ble_profiles/hogp/hogpbh/api/hogpbh_task.h
2022-08-15 17:20:27 +08:00

252 lines
6.2 KiB
C

#ifndef _HOGPBH_TASK_H_
#define _HOGPBH_TASK_H_
/**
****************************************************************************************
* @addtogroup HOGPBHTASK HID Over GATT Profile Boot Host Task
* @ingroup HOGPBH
* @brief HID Over GATT Profile Boot Host Task
*
* The HOGPBHTASK is responsible for handling the messages coming in and out of the
* @ref HOGPBH 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 HOGPBH_NB_HIDS_INST_MAX (2)
/// Maximal Length of Boot Report Char. Value
#define HOGPBH_BOOT_REPORT_MAX_LEN (8)
/*
* ENUMERATIONS
****************************************************************************************
*/
enum hogpbh_msg_id
{
/// Start the HID Over GATT profile - at connection
HOGPBH_ENABLE_REQ = TASK_FIRST_MSG(TASK_ID_HOGPBH),
///Confirm that cfg connection has finished with discovery results, or that normal cnx started
HOGPBH_ENABLE_RSP,
/// Read Characteristic Value Request
HOGPBH_READ_INFO_REQ,
/// Read Characteristic Value Request
HOGPBH_READ_INFO_RSP,
/// Write/Configure peer device attribute Request
HOGPBH_WRITE_REQ,
/// Write/Configure peer device attribute Response
HOGPBH_WRITE_RSP,
/// Boot Report value send to APP (after Read Request or Notification)
HOGPBH_BOOT_REPORT_IND,
};
/// Characteristics
enum hogpbh_chars
{
/// Protocol Mode
HOGPBH_CHAR_PROTO_MODE,
/// Boot Keyboard Input Report
HOGPBH_CHAR_BOOT_KB_IN_REPORT,
/// Boot Keyboard Output Report
HOGPBH_CHAR_BOOT_KB_OUT_REPORT,
/// Boot Mouse Input Report
HOGPBH_CHAR_BOOT_MOUSE_IN_REPORT,
HOGPBH_CHAR_MAX,
};
/// Characteristic descriptors
enum hogpbh_descs
{
/// Boot Keyboard Input Report Client Config
HOGPBH_DESC_BOOT_KB_IN_REPORT_CFG,
/// Boot Mouse Input Report Client Config
HOGPBH_DESC_BOOT_MOUSE_IN_REPORT_CFG,
HOGPBH_DESC_MAX,
};
/// Peer HID service info that can be read/write
enum hogpbh_info
{
/// Protocol Mode
HOGPBH_PROTO_MODE,
/// Boot Keyboard Input Report
HOGPBH_BOOT_KB_IN_REPORT,
/// Boot Keyboard Output Report
HOGPBH_BOOT_KB_OUT_REPORT,
/// Boot Mouse Input Report
HOGPBH_BOOT_MOUSE_IN_REPORT,
/// Boot Keyboard Input Report Client Config
HOGPBH_BOOT_KB_IN_NTF_CFG,
/// Boot Mouse Input Report Client Config
HOGPBH_BOOT_MOUSE_IN_NTF_CFG,
HOGPBH_INFO_MAX,
};
/*
* APIs Structure
****************************************************************************************
*/
///Structure containing the characteristics handles, value handles and descriptors
struct hogpbh_content
{
/// service info
struct prf_svc svc;
/// characteristic info:
/// - Protocol Mode
/// - Boot Keyboard Input Report
/// - Boot Keyboard Output Report
/// - Boot Mouse Input Report
struct prf_char_inf chars[HOGPBH_CHAR_MAX];
/// Descriptor handles:
/// - Boot Keyboard Input Client Cfg
/// - Boot Mouse Input Client Cfg
struct prf_char_desc_inf descs[HOGPBH_DESC_MAX];
};
/// Parameters of the @ref HOGPBH_ENABLE_REQ message
struct hogpbh_enable_req
{
/// Connection type
uint8_t con_type;
/// Number of HIDS instances
uint8_t hids_nb;
/// Existing handle values hids
struct hogpbh_content hids[HOGPBH_NB_HIDS_INST_MAX];
};
/// Parameters of the @ref HOGPBH_ENABLE_RSP message
struct hogpbh_enable_rsp
{
///status
uint8_t status;
/// Number of HIDS instances
uint8_t hids_nb;
/// Existing handle values hids
struct hogpbh_content hids[HOGPBH_NB_HIDS_INST_MAX];
};
/// HID boot report info
struct hogpbh_boot_report
{
/// Report Length
uint8_t length;
/// Boot Report value
uint8_t value[__ARRAY_EMPTY];
};
/// Information data
union hogpbh_data
{
/// Protocol Mode
/// - info = HOGPBH_PROTO_MODE
uint8_t proto_mode;
///Notification Configuration Value
/// - info = HOGPBH_BOOT_KB_IN_NTF_CFG
/// - info = HOGPBH_BOOT_MOUSE_IN_NTF_CFG
uint16_t ntf_cfg;
/// Boot report information
/// - info = HOGPBH_BOOT_KB_IN_REPORT
/// - info = HOGPBH_BOOT_KB_OUT_REPORT
/// - info = HOGPBH_BOOT_MOUSE_IN_REPORT
struct hogpbh_boot_report report;
};
///Parameters of the @ref HOGPBH_READ_INFO_REQ message
struct hogpbh_read_info_req
{
///Characteristic info @see enum hogpbh_info
uint8_t info;
/// HID Service Instance - From 0 to HOGPBH_NB_HIDS_INST_MAX-1
uint8_t hid_idx;
};
///Parameters of the @ref HOGPBH_READ_INFO_RSP message
struct hogpbh_read_info_rsp
{
/// status of the request
uint8_t status;
///Characteristic info @see enum hogpbh_info
uint8_t info;
/// HID Service Instance - From 0 to HOGPBH_NB_HIDS_INST_MAX-1
uint8_t hid_idx;
/// Information data
union hogpbh_data data;
};
///Parameters of the @ref HOGPBH_WRITE_REQ message
struct hogpbh_write_req
{
///Characteristic info @see enum hogpbh_info
uint8_t info;
/// HID Service Instance - From 0 to HOGPBH_NB_HIDS_INST_MAX-1
uint8_t hid_idx;
/// Write type ( Write without Response True or Write Request)
/// - only valid for HOGPBH_BOOT_KB_OUT_REPORT
bool wr_cmd;
/// Information data
union hogpbh_data data;
};
///Parameters of the @ref HOGPBH_WRITE_RSP message
struct hogpbh_write_rsp
{
/// status of the request
uint8_t status;
///Characteristic info @see enum hogpbh_info
uint8_t info;
/// HID Service Instance - From 0 to HOGPBH_NB_HIDS_INST_MAX-1
uint8_t hid_idx;
};
///Parameters of the @ref HOGPBH_BOOT_REPORT_IND message
struct hogpbh_boot_report_ind
{
///Characteristic info @see enum hogpbh_info
uint8_t info;
/// HIDS Instance
uint8_t hid_idx;
/// Report data
struct hogpbh_boot_report report;
};
/// @} HOGPBHTASK
#endif /* _HOGPBH_TASK_H_ */