2025-11-25 10:21:47 +08:00

253 lines
8.4 KiB
C

/**
*****************************************************************************************
* Copyright(c) 2015, Realtek Semiconductor Corporation. All rights reserved.
*****************************************************************************************
* @file hids_rmc.h
* @brief Head file for using Human Interface Device Service Remote Controller.
* @details HIDS RMC data structs and external functions declaration.
* @author Chenjie Jin
* @date 2018-5-7
* @version v1.1
* *************************************************************************************
*/
/* Define to prevent recursive inclusion */
#ifndef _HIDS_RMC_H
#define _HIDS_RMC_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Add Includes here */
#include "profile_server.h"
#include "board.h"
/** @defgroup HIDS_RmC HIDS Human Interface Device Service of Remote Controller
* @brief Human Interface Device Service Remote Controller
* @{
*/
/** @defgroup HIDS_RmC_Exported_Constants HIDS RmC Exported Constants
* @brief macros that other .c files may use all defined here
* @{
*/
/** @brief HIDS Report Id Definition. */
#define HIDS_KB_REPORT_ID 1
#if FEATURE_SUPPORT_MULTIMEDIA_KEYBOARD
#define HIDS_MM_KB_REPORT_ID 2
#endif
#if (VOICE_ENC_TYPE == SW_MSBC_ENC)
#define HIDS_VOICE_REPORT_ID 0x5A // input and output
#elif (VOICE_ENC_TYPE == SW_SBC_ENC)
#define HIDS_VOICE_REPORT_ID 0x5B // input and output
#else
#define HIDS_VOICE_REPORT_ID 0x5A // input and output
#endif
/** @defgroup HIDS_RmC_Application_Parameters HIDS RmC Application Parameters
* @brief Type of parameters set/got from application.
* @{
*/
#define HIDS_PARAM_PROTOCOL_MODE 1
#define HIDS_PARAM_SUSPEND_MODE 2
#define HIDS_PARAM_HID_INFO 3
#define HIDS_PARAM_REPORT 4
/** @} */
///@cond
/** @brief HIDS_RmC related UUIDs. */
#define GATT_UUID_HID 0x1812
#define GATT_UUID_CHAR_HID_CONTROL_POINT 0x2A4C
#define GATT_UUID_CHAR_HID_INFO 0x2A4A
#define GATT_UUID_CHAR_REPORT 0x2A4D
#define GATT_UUID_CHAR_REPORT_MAP 0x2A4B
#define GATT_UUID_CHAR_RECORD_ACCESS_POINT 0x2A52
#define GATT_UUID_CHAR_PROTOCOL_MODE 0x2A4E
#define GATT_UUID_CHAR_BOOT_KB_IN_REPORT 0x2A22
#define GATT_UUID_CHAR_BOOT_KB_OUT_REPORT 0x2A32
#define GATT_UUID_CHAR_BOOT_MOUSE_IN_REPORT 0x2A33
#define GATT_UUID_CHAR_REPORT_REFERENCE 0x2908
#define GATT_UUID_CHAR_EXTERNAL_REPORT_REFERENCE 0x2907
///@endcond
/** @defgroup HIDS_RmC_Attribute_Index HIDS RmC Attribute Index
* @brief Index defines for Characteristic's value in HID Device
* @{
*/
#define GATT_SRV_HID_INDEX_MAX 23
#define GATT_SVC_HID_INFO_INDEX (2) /**< @brief Index for HID Information chars's value */
#define GATT_SVC_HID_CONTROL_POINT_INDEX (4) /**< @brief Index for HID Control Point chars's value */
#define GATT_SVC_HID_PROTOCOL_MODE_INDEX (6) /**< @brief Index for HID Protocol Mode chars's value */
#define GATT_SVC_HID_REPORT_MAP_INDEX (8) /**< @brief Index for HID Report Map chars's value */
#define GATT_SRV_HID_KB_INPUT_INDEX (10)
#define GATT_SRV_HID_KB_CCCD_INDEX (GATT_SRV_HID_KB_INPUT_INDEX + 1)
#if SUPPORT_VOICE_FEATURE
#define GATT_SRV_HID_VOICE_INPUT_INDEX (14)
#define GATT_SRV_HID_VOICE_INPUT_CCCD_INDEX (GATT_SRV_HID_VOICE_INPUT_INDEX + 1)
#define GATT_SRV_HID_VOICE_OUTPUT_INDEX (18)
#endif
#if FEATURE_SUPPORT_MULTIMEDIA_KEYBOARD
#if SUPPORT_VOICE_FEATURE
#define GATT_SRV_HID_MM_KB_INPUT_INDEX (21)
#define GATT_SRV_HID_MM_KB_INPUT_CCCD_INDEX (GATT_SRV_HID_MM_KB_INPUT_INDEX + 1)
#else
#define GATT_SRV_HID_MM_KB_INPUT_INDEX (14)
#define GATT_SRV_HID_MM_KB_INPUT_CCCD_INDEX (GATT_SRV_HID_MM_KB_INPUT_INDEX + 1)
#endif
#endif
/** @} */
/** @defgroup HIDS_RmC_Upstream_Message HIDS RmC Upstream Message
* @brief Upstream message used to inform application.
* @{
*/
/** @defgroup HIDS_RmC_Read_Info HIDS RmC Read Info
* @brief Parameter for read characteristic value.
* @{
*/
#define HIDS_READ_PARAM_PROTOCOL_MODE 1
#define HIDS_READ_PARAM_SUSPEND_MODE 2
#define HIDS_READ_PARAM_HID_INFO 3
#define HIDS_READ_PARAM_REPORT 4
/** @} */
/** @defgroup HIDS_RmC_Write_Info HIDS RmC Write Info
* @brief Parameter for write characteristic value.
* @{
*/
#define HID_WRITE_VIOCE_CMD 1
#define HID_WRITE_PROTOCOL_MODE 2
#define HID_WRITE_SUSPEND_MODE 3
#define HID_WRITE_OUTPUT 4
#define HID_WRITE_INPUT_REPORT 5
/** @} */
/** @defgroup HIDS_RmC_Notify_Indicate_Info HIDS RmC Notify Indicate Info
* @brief Parameter for enable or disable notification or indication.
* @{
*/
#define HID_NOTIFY_INDICATE_KB_ENABLE 1
#define HID_NOTIFY_INDICATE_KB_DISABLE 2
#define HID_NOTIFY_INDICATE_VOICE_ENABLE 3
#define HID_NOTIFY_INDICATE_VOICE_DISABLE 4
#define HID_NOTIFY_INDICATE_MM_KB_ENABLE 5
#define HID_NOTIFY_INDICATE_MM_KB_DISABLE 6
/** @} */
/** @} End of HIDS_RmC_Upstream_Message */
/** @} End of HIDS_RmC_Exported_Constants */
/** @defgroup HIDS_RmC_Exported_Types HIDS RmC Exported Types
* @brief types that other.c files may use all defined here
* @{
*/
/* Add all public types here */
/** @struct _HID_INFO_ATTRB hids_rmc.h "hids_rmc.h"
* @brief type define for value of HID information
*/
typedef struct _HID_INFO_ATTRB
{
uint8_t CountryCode;
uint8_t bFlags;
uint16_t BcdHID;
} HID_INFO_ATTRB;
/** @brief enum for TProfile_HIDReportType*/
typedef enum
{
HID_INPUT_TYPE = 1, /**< @enum Input report */
HID_OUTPUT_TYPE = 2, /**< @enum Output report */
HID_FEATURE_TYPE = 3 /**< @enum Feature report */
} TProfile_HIDReportType;
/** @struct _TProfile_REPORT_REFE_TABLE hids_rmc.h "hids_rmc.h"
* @brief type define for info reference to report data
*/
typedef struct _TProfile_REPORT_REFE_TABLE
{
uint8_t report_size; /**< @brief report size according to value of Report Map value, byte */
uint8_t report_id; /**< @brief report ID defined in value of Report Map Char, byte */
uint8_t report_type; /**< @brief report Type(Input,Output,Feature), ref: @ref TProfile_HIDReportType */
} TProfile_REPORT_REFE_TABLE;
/** @defgroup HIDS_RmC_Callback_Data HIDS RmC Callback Data
* @brief HIDS RmC data struct for notification data to application.
* @{
*/
/** @brief value for HID protocol mode characteristic */
enum TProfile_HID_PROTOCOL_MODE
{
BOOT_PROTOCOL_MODE = 0, /**< @enum boot protocol mode */
REPORT_PROCOCOL_MODE = 1 /**< @enum report protocol mode */
};
typedef union _THID_WRITE_PARAMETER
{
uint8_t voice_enable;
uint8_t protocol_mode; /**< ref: @ref TProfile_HID_PROTOCOL_MODE */
uint8_t suspend_mode;
struct
{
uint8_t reportLen;
uint8_t *report;
} report_data;
} THID_WRITE_PARAMETER;
/** @struct _THID_WRITE_MSG hids_rmc.h "hids_rmc.h"
* @brief write message
*/
typedef struct _THID_WRITE_MSG
{
uint8_t write_type; /**< ref: @ref HIDS_RmC_Write_Info */
THID_WRITE_PARAMETER write_parameter;
} THID_WRITE_MSG;
typedef union _THID_UPSTREAM_MSG_DATA
{
uint8_t notification_indification_index; /**< ref: @ref HIDS_RmC_Notify_Indicate_Info */
uint8_t read_value_index; /**< ref: @ref HIDS_RmC_Read_Info */
THID_WRITE_MSG write;
} THID_UPSTREAM_MSG_DATA;
/** @struct _T_HID_CALLBACK_DATA hids_rmc.h "hids_rmc.h"
* @brief callback data
*/
typedef struct _T_HID_CALLBACK_DATA
{
T_SERVICE_CALLBACK_TYPE msg_type;
THID_UPSTREAM_MSG_DATA msg_data;
} T_HID_CALLBACK_DATA;
/** @} End of HIDS_RmC_Callback_Data */
/** @} End of HIDS_RmC_Exported_Types */
/** @defgroup HIDS_RmC_Exported_Functions HIDS RmC Exported Functions
* @brief functions that other .c files may use all defined here
* @{
*/
bool hids_set_parameter(uint8_t param_type, uint8_t length, void *value_ptr);
uint8_t hids_add_service(void *p_func);
/** @} End of HIDS_RmC_Exported_Functions */
/** @} End of HIDS_RmC */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _HIDS_RMC_H */