Files
base/middleware/usb/uC-USBD/Class/HID/usbd_hid.h
2025-11-07 09:57:14 +08:00

266 lines
12 KiB
C

/*
*********************************************************************************************************
* uC/USB-Device
* The Embedded USB Device Stack
*
* Copyright 2004-2021 Silicon Laboratories Inc. www.silabs.com
*
* SPDX-License-Identifier: APACHE-2.0
*
* This software is subject to an open source license and is distributed by
* Silicon Laboratories Inc. pursuant to the terms of the Apache License,
* Version 2.0 available at www.apache.org/licenses/LICENSE-2.0.
*
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* USB DEVICE HID CLASS
*
* Filename : usbd_hid.h
* Version : V4.06.01
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* MODULE
*********************************************************************************************************
*/
#ifndef USBD_HID_MODULE_PRESENT
#define USBD_HID_MODULE_PRESENT
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#include "../../Source/usbd_core.h"
#include "usbd_hid_report.h"
/*
*********************************************************************************************************
* EXTERNS
*********************************************************************************************************
*/
#ifdef USBD_HID_MODULE
#define USBD_HID_EXT
#else
#define USBD_HID_EXT extern
#endif
/*
*********************************************************************************************************
* DEFINES
*
* Note(s) : (1) See 'Device Class Definition for Human Interface Devices (HID), 6/27/01, Version 1.11',
* section 6.2.1 for more details about HID descriptor country code.
*
* (a) The country code identifies which country the hardware is localized for. Most
* hardware is not localized and thus this value would be zero (0). However, keyboards
* may use the field to indicate the language of the key caps.
*********************************************************************************************************
*/
/* ------------ COUNTRY CODES (see Note #1) ----------- */
typedef enum usbd_hid_country_code {
USBD_HID_COUNTRY_CODE_NOT_SUPPORTED = 0u, /* See Note #1a. */
USBD_HID_COUNTRY_CODE_ARABIC = 1u,
USBD_HID_COUNTRY_CODE_BELGIAN = 2u,
USBD_HID_COUNTRY_CODE_CANADIAN_BILINGUAL = 3u,
USBD_HID_COUNTRY_CODE_CANADIAN_FRENCH = 4u,
USBD_HID_COUNTRY_CODE_CZECH_REPUBLIC = 5u,
USBD_HID_COUNTRY_CODE_DANISH = 6u,
USBD_HID_COUNTRY_CODE_FINNISH = 7u,
USBD_HID_COUNTRY_CODE_FRENCH = 8u,
USBD_HID_COUNTRY_CODE_GERMAN = 9u,
USBD_HID_COUNTRY_CODE_GREEK = 10u,
USBD_HID_COUNTRY_CODE_HEBREW = 11u,
USBD_HID_COUNTRY_CODE_HUNGARY = 12u,
USBD_HID_COUNTRY_CODE_INTERNATIONAL = 13u,
USBD_HID_COUNTRY_CODE_ITALIAN = 14u,
USBD_HID_COUNTRY_CODE_JAPAN_KATAKANA = 15u,
USBD_HID_COUNTRY_CODE_KOREAN = 16u,
USBD_HID_COUNTRY_CODE_LATIN_AMERICAN = 17u,
USBD_HID_COUNTRY_CODE_NETHERLANDS_DUTCH = 18u,
USBD_HID_COUNTRY_CODE_NORWEGIAN = 19u,
USBD_HID_COUNTRY_CODE_PERSIAN_FARSI = 20u,
USBD_HID_COUNTRY_CODE_POLAND = 21u,
USBD_HID_COUNTRY_CODE_PORTUGUESE = 22u,
USBD_HID_COUNTRY_CODE_RUSSIA = 23u,
USBD_HID_COUNTRY_CODE_SLOVAKIA = 24u,
USBD_HID_COUNTRY_CODE_SPANISH = 25u,
USBD_HID_COUNTRY_CODE_SWEDISH = 26u,
USBD_HID_COUNTRY_CODE_SWISS_FRENCH = 27u,
USBD_HID_COUNTRY_CODE_SWISS_GERMAN = 28u,
USBD_HID_COUNTRY_CODE_SWITZERLAND = 29u,
USBD_HID_COUNTRY_CODE_TAIWAN = 30u,
USBD_HID_COUNTRY_CODE_TURKISH_Q = 31u,
USBD_HID_COUNTRY_CODE_UK = 32u,
USBD_HID_COUNTRY_CODE_US = 33u,
USBD_HID_COUNTRY_CODE_YUGOSLAVIA = 34u,
USBD_HID_COUNTRY_CODE_TURKISH_F = 35u
} USBD_HID_COUNTRY_CODE;
/*
*********************************************************************************************************
* HUMAN INTERFACE DEVICE CLASS SUBCLASS CODES DEFINES
*
* Note(s) : (1) Human interface device class subclass codes are defined in section 4.2 of HID
* specification revision 1.11.
*********************************************************************************************************
*/
#define USBD_HID_SUBCLASS_NONE 0x00u /* No subclass. */
#define USBD_HID_SUBCLASS_BOOT 0x01u /* Boot interface. */
/*
*********************************************************************************************************
* HUMAN INTERFACE DEVICE CLASS PROTOCOL CODES DEFINES
*
* Note(s) : (1) Human interface device class protocol codes are defined in section 4.3 of HID
* specification revision 1.11.
*********************************************************************************************************
*/
#define USBD_HID_PROTOCOL_NONE 0x00u /* No class specific protocol. */
#define USBD_HID_PROTOCOL_KBD 0x01u /* Keyboard protocol. */
#define USBD_HID_PROTOCOL_MOUSE 0x02u /* Mouse protocol. */
/*
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*/
/* Async comm callback. */
typedef void (*USBD_HID_ASYNC_FNCT)(CPU_INT08U class_nbr,
void *p_buf,
CPU_INT32U buf_len,
CPU_INT32U xfer_len,
void *p_callback_arg,
USBD_ERR err);
/* HID desc and req callbacks. */
typedef const struct usbd_hid_callback {
CPU_BOOLEAN (*FeatureReportGet)(CPU_INT08U class_nbr,
CPU_INT08U report_id,
CPU_INT08U *p_report_buf,
CPU_INT16U report_len);
CPU_BOOLEAN (*FeatureReportSet)(CPU_INT08U class_nbr,
CPU_INT08U report_id,
CPU_INT08U *p_report_buf,
CPU_INT16U report_len);
CPU_INT08U (*ProtocolGet) (CPU_INT08U class_nbr,
USBD_ERR *p_err);
void (*ProtocolSet) (CPU_INT08U class_nbr,
CPU_INT08U protocol,
USBD_ERR *p_err);
void (*ReportSet) (CPU_INT08U class_nbr,
CPU_INT08U report_id,
CPU_INT08U *p_report_buf,
CPU_INT16U report_len);
} USBD_HID_CALLBACK;
/*
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* MACRO'S
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
/* HID class initialization. */
void USBD_HID_Init (USBD_ERR *p_err);
/* Add new instance of the HID class. */
CPU_INT08U USBD_HID_Add (CPU_INT08U subclass,
CPU_INT08U protocol,
USBD_HID_COUNTRY_CODE country_code,
CPU_INT08U *p_report_desc,
CPU_INT16U report_desc_len,
CPU_INT08U *p_phy_desc,
CPU_INT16U phy_desc_len,
CPU_INT16U interval_in,
CPU_INT16U interval_out,
CPU_BOOLEAN ctrl_rd_en,
USBD_HID_CALLBACK *p_hid_callback,
USBD_ERR *p_err);
CPU_BOOLEAN USBD_HID_CfgAdd (CPU_INT08U class_nbr,
CPU_INT08U dev_nbr,
CPU_INT08U cfg_nbr,
USBD_ERR *p_err);
CPU_BOOLEAN USBD_HID_IsConn (CPU_INT08U class_nbr);
CPU_INT32U USBD_HID_Wr (CPU_INT08U class_nbr,
void *p_buf,
CPU_INT32U buf_len,
CPU_INT16U timeout,
USBD_ERR *p_err);
void USBD_HID_WrAsync(CPU_INT08U class_nbr,
void *p_buf,
CPU_INT32U buf_len,
USBD_HID_ASYNC_FNCT async_fnct,
void *p_async_arg,
USBD_ERR *p_err);
CPU_INT32U USBD_HID_Rd (CPU_INT08U class_nbr,
void *p_buf,
CPU_INT32U buf_len,
CPU_INT16U timeout,
USBD_ERR *p_err);
void USBD_HID_RdAsync(CPU_INT08U class_nbr,
void *p_buf,
CPU_INT32U buf_len,
USBD_HID_ASYNC_FNCT async_fnct,
void *p_async_arg,
USBD_ERR *p_err);
/*
*********************************************************************************************************
* CONFIGURATION ERRORS
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* MODULE END
*********************************************************************************************************
*/
#endif