diff options
Diffstat (limited to 'inc/bluetooth/profile/server/hids_mulkb.h')
-rw-r--r-- | inc/bluetooth/profile/server/hids_mulkb.h | 284 |
1 files changed, 284 insertions, 0 deletions
diff --git a/inc/bluetooth/profile/server/hids_mulkb.h b/inc/bluetooth/profile/server/hids_mulkb.h new file mode 100644 index 0000000..6cab7b6 --- /dev/null +++ b/inc/bluetooth/profile/server/hids_mulkb.h @@ -0,0 +1,284 @@ +/** +***************************************************************************************** +* Copyright(c) 2017, Realtek Semiconductor Corporation. All rights reserved. +***************************************************************************************** + * @file hids_kb.h + * @brief Head file for using Human Interface Device Service. + * @details HIDS data structs and external functions declaration. + * @author Jeff_Zheng + * @date 2017-12-01 + * @version v1.0 + * ************************************************************************************* + */ + +#ifndef _HIDS_KB_H_ +#define _HIDS_KB_H_ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include "profile_server.h" + +/** @defgroup HIDS_KB Human Interface Device Service of Keyboard + * @brief Human Interface Device Service + * @details + + The HID Service exposes data and associated formatting for HID Devices and HID Hosts. + + Application shall register HID service when initialization through @ref hids_add_service function. + + Application can set the HID service through @ref hids_set_parameter function. + + Application can send report data of HID service to the client with a notification through @ref hids_send_report function. + + * @{ + */ + + +/*============================================================================* + * Macros + *============================================================================*/ +/** @defgroup HIDS_KB_Exported_Macros HIDS Keyboard Exported Macros + * @brief + * @{ + */ + +/** @defgroup HIDS_KB_Index HIDS Keyboard Attribute Index + * @brief Index defines for Characteristic's value in HID Device + * @{ + */ +#define GATT_SVC_HID_PROTOCOL_MODE_INDEX (2) +#define GATT_SVC_HID_REPORTID1_INPUT_INDEX (4) +#define GATT_SVC_HID_REPORTID1_INPUT_CCCD_INDEX (GATT_SVC_HID_REPORTID1_INPUT_INDEX+1) +#define GATT_SVC_HID_REPORT_OUTPUT_INDEX (8) +#define GATT_SVC_HID_REPORTID3_INPUT_INDEX (11) +#define GATT_SVC_HID_REPORTID3_INPUT_CCCD_INDEX (GATT_SVC_HID_REPORTID3_INPUT_INDEX+1) +#define GATT_SVC_HID_REPORT_VENDOR_INPUT_INDEX (15) +#define GATT_SVC_HID_REPORT_VNEDOR_INPUT_CCCD_INDEX (GATT_SVC_HID_REPORT_VENDOR_INPUT_INDEX+1) +#define GATT_SVC_HID_REPORT_MAP_INDEX (19) +#define GATT_SVC_HID_EXTERNAL_REPORT_REFER_INDEX (GATT_SVC_HID_REPORT_MAP_INDEX+1) +//#define GATT_SVC_HID_BOOT_KB_IN_REPORT_INDEX (17) +//#define GATT_SVC_HID_BOOT_KB_IN_REPORT_CCCD_INDEX (GATT_SVC_HID_BOOT_KB_IN_REPORT_INDEX+1) +//#define GATT_SVC_HID_BOOT_KB_OUT_REPORT_INDEX (20) +#define GATT_SVC_HID_INFO_INDEX (21) +#define GATT_SVC_HID_CONTROL_POINT_INDEX (23) +/** @} */ + +/** End of HIDS_KB_Exported_Macros +* @} +*/ + + +/*============================================================================* + * Types + *============================================================================*/ +/** @defgroup HIDS_KB_Exported_Types HIDS Keyboard Exported Types + * @brief + * @{ + */ + +/** +* @brief Human Interface Device Service parameter type +*/ +typedef enum +{ + HID_PROTOCOL_MODE = 0x01, + HID_REPORT_INPUT, + HID_REPORT_OUTPUT, + HID_REPORT_FEATURE, + HID_REPORT_MAP, + HID_EXTERNAL_REPORT_REFER, + HID_BOOT_KB_IN_REPORT, + HID_BOOT_KB_OUT_REPORT, + HID_INFO, + HID_CONTROL_POINT, +} T_HIDS_PARAM_TYPE; + +/** +* @brief Human Interface Device Service information +*/ +typedef struct +{ + uint8_t b_country_code; + uint8_t flags; + uint16_t bcd_hid; +} T_HID_INFO; + +/** +* @brief Human Interface Device Service report type +*/ +typedef enum +{ + HID_INPUT_TYPE = 1, + HID_OUTPUT_TYPE = 2, + HID_FEATURE_TYPE = 3 +} T_PROFILE_HID_REPORT_TYPE; + +/** +* @brief Human Interface Device Service control point +*/ +typedef enum +{ + HID_SUSPEND = 0, + HID_EXIT_SUSPEND = 1, +} T_HID_CTL_POINT; + +/** +* @brief Human Interface Device Service protocol mode +*/ +typedef enum +{ + BOOT_PROTOCOL_MODE = 0, + REPORT_PROCOCOL_MODE = 1 +} T_HID_PROTOCOL_MODE; + +/** @defgroup HIDS_KB_Upstream_Message HIDS Keyboard Upstream Message + * @brief Upstream message used to inform application. + * @{ + */ +typedef enum +{ + NOTIFY_ENABLE, + NOTIFY_DISABLE +} T_HID_NOTIFY; + +typedef union +{ + uint8_t voice_enable; + uint8_t protocol_mode; + uint8_t suspend_mode; + uint8_t output; + struct + { + uint8_t reportLen; + uint8_t *report; + } report_data; +} T_HID_WRITE_PARAMETER; + +typedef struct +{ + uint8_t write_type; + T_HID_WRITE_PARAMETER write_parameter; +} T_HID_WRITE_MSG; + +typedef struct +{ + uint8_t index; + T_HID_NOTIFY value; +} T_HID_NOT_IND_DATA; + +typedef struct +{ + uint8_t read_value_index; + T_HID_WRITE_MSG write_msg; + T_HID_NOT_IND_DATA not_ind_data; +} T_HID_UPSTREAM_MSG_DATA; + +typedef struct +{ + uint8_t conn_id; + T_SERVICE_CALLBACK_TYPE msg_type; + T_HID_UPSTREAM_MSG_DATA msg_data; +} T_HID_CALLBACK_DATA; + +/** @} End of HIDS_KB_Upstream_Message */ + + +/** End of HIDS_KB_Exported_Types +* @} +*/ + + +/*============================================================================* + * Functions + *============================================================================*/ +/** @defgroup HIDS_KB_Exported_Functions HIDS Keyboard Exported Functions + * @brief + * @{ + */ + +/** + * @brief Add HID service to the BLE stack database. + * + * + * @param[in] p_func Callback when service attribute was read, write or cccd update. + * @return Service id generated by the BLE stack: @ref T_SERVER_ID. + * @retval 0xFF Operation failure. + * @retval Others Service id assigned by stack. + * + * <b>Example usage</b> + * \code{.c} + void profile_init() + { + server_init(1); + hids_id = hids_add_service(app_handle_profile_message); + } + * \endcode + */ +T_SERVER_ID hids_add_service(void *p_func); + +/** + * @brief Set a HID service parameter. + * + * NOTE: You can call this function with a HID service parameter type and it will set the + * HID service parameter. HID service parameters are defined in @ref T_HIDS_PARAM_TYPE. + * + * @param[in] param_type HID service parameter type: @ref T_HIDS_PARAM_TYPE + * @param[in] len Length of data to write + * @param[in] p_value Pointer to data to write. This is dependent on + * the parameter type and WILL be cast to the appropriate + * data type + * + * @return Operation result. + * @retval true Operation success. + * @retval false Operation failure. + * + * <b>Example usage</b> + * \code{.c} + void test(void) + { + uint8_t mode = 1; + hids_set_parameter(HID_PROTOCOL_MODE, 1, &mode); + } + * \endcode + */ +bool hids_set_parameter(T_HIDS_PARAM_TYPE param_type, uint8_t len, void *p_value); + +/** + * @brief Send HIDS notification data . + * + * + * @param[in] conn_id Connection id. + * @param[in] service_id Service id. + * @param[in] index hids characteristic index. + * @param[in] p_data report value pointer. + * @param[in] data_len length of report data. + * @return Operation result. + * @retval true Operation success. + * @retval false Operation failure. + * + * <b>Example usage</b> + * \code{.c} + void test(void) + { + uint8_t conn_id = 0; + T_SERVER_ID service_id = hids_id; + uint8_t hid_report_input[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09}; + hids_send_report(conn_id, service_id, GATT_SVC_HID_REPORT_INPUT_INDEX, hid_report_input, sizeof(hid_report_input)); + } + * \endcode + */ +bool hids_send_report(uint8_t conn_id, T_SERVER_ID service_id, uint16_t index, uint8_t *p_data, + uint16_t data_len); + + +/** @} End of HIDS_KB_Exported_Functions */ + +/** @} End of HIDS_KB */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif |