266 lines
12 KiB
C
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
|