/** ****************************************************************************** * @file usbh_hid.h * @author MCD Application Team * @version V3.2.2 * @date 07-July-2015 * @brief This file contains all the prototypes for the usbh_hid.c ****************************************************************************** * @attention * *

© COPYRIGHT 2015 STMicroelectronics

* * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.st.com/software_license_agreement_liberty_v2 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ****************************************************************************** * * Modifications by Robert Fisk * */ /* Define to prevent recursive ----------------------------------------------*/ #ifndef __USBH_HID_H #define __USBH_HID_H #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ #include "usbh_core.h" #include "downstream_hid.h" /** @addtogroup USBH_LIB * @{ */ /** @addtogroup USBH_CLASS * @{ */ /** @addtogroup USBH_HID_CLASS * @{ */ /** @defgroup USBH_HID_CORE * @brief This file is the Header file for usbh_hid.c * @{ */ /** @defgroup USBH_HID_CORE_Exported_Types * @{ */ #define HID_MIN_POLL 10 #define HID_MAX_REPORT_SIZE 8 #define HID_REPORT_BUFFER_SIZE 64 #define HID_MAX_USAGE 10 #define HID_MAX_NBR_REPORT_FMT 10 //#define HID_QUEUE_SIZE 10 // //#define HID_ITEM_LONG 0xFE // //#define HID_ITEM_TYPE_MAIN 0x00 //#define HID_ITEM_TYPE_GLOBAL 0x01 //#define HID_ITEM_TYPE_LOCAL 0x02 //#define HID_ITEM_TYPE_RESERVED 0x03 // // //#define HID_MAIN_ITEM_TAG_INPUT 0x08 //#define HID_MAIN_ITEM_TAG_OUTPUT 0x09 //#define HID_MAIN_ITEM_TAG_COLLECTION 0x0A //#define HID_MAIN_ITEM_TAG_FEATURE 0x0B //#define HID_MAIN_ITEM_TAG_ENDCOLLECTION 0x0C // // //#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0x00 //#define HID_GLOBAL_ITEM_TAG_LOG_MIN 0x01 //#define HID_GLOBAL_ITEM_TAG_LOG_MAX 0x02 //#define HID_GLOBAL_ITEM_TAG_PHY_MIN 0x03 //#define HID_GLOBAL_ITEM_TAG_PHY_MAX 0x04 //#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 0x05 //#define HID_GLOBAL_ITEM_TAG_UNIT 0x06 //#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 0x07 //#define HID_GLOBAL_ITEM_TAG_REPORT_ID 0x08 //#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 0x09 //#define HID_GLOBAL_ITEM_TAG_PUSH 0x0A //#define HID_GLOBAL_ITEM_TAG_POP 0x0B // // //#define HID_LOCAL_ITEM_TAG_USAGE 0x00 //#define HID_LOCAL_ITEM_TAG_USAGE_MIN 0x01 //#define HID_LOCAL_ITEM_TAG_USAGE_MAX 0x02 //#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 0x03 //#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MIN 0x04 //#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAX 0x05 //#define HID_LOCAL_ITEM_TAG_STRING_INDEX 0x07 //#define HID_LOCAL_ITEM_TAG_STRING_MIN 0x08 //#define HID_LOCAL_ITEM_TAG_STRING_MAX 0x09 //#define HID_LOCAL_ITEM_TAG_DELIMITER 0x0A #define HID_REPORT_DIRECTION_IN 0x01 #define HID_REPORT_DIRECTION_OUT 0x02 /* States for HID State Machine */ typedef enum { HID_INIT= 0, HID_IDLE, HID_GET_DATA, HID_GET_POLL, HID_SET_DATA_POLL, HID_ERROR, } HID_StateTypeDef; typedef enum { HID_REQ_INIT = 0, HID_REQ_IDLE, HID_REQ_GET_REPORT_DESC, HID_REQ_GET_HID_DESC, HID_REQ_SET_IDLE, HID_REQ_SET_PROTOCOL, HID_REQ_SET_REPORT, } HID_CtlStateTypeDef; typedef enum { HID_MOUSE = 0x01, HID_KEYBOARD = 0x02, HID_UNKNOWN = 0xFF, } HID_TypeTypeDef; typedef struct _HID_ReportData { uint8_t ReportID; uint8_t ReportType; uint16_t UsagePage; uint32_t Usage[HID_MAX_USAGE]; uint32_t NbrUsage; uint32_t UsageMin; uint32_t UsageMax; int32_t LogMin; int32_t LogMax; int32_t PhyMin; int32_t PhyMax; int32_t UnitExp; uint32_t Unit; uint32_t ReportSize; uint32_t ReportCnt; uint32_t Flag; uint32_t PhyUsage; uint32_t AppUsage; uint32_t LogUsage; } HID_ReportDataTypeDef; typedef struct _HID_ReportIDTypeDef { uint8_t Size; /* Report size return by the device id */ uint8_t ReportID; /* Report Id */ uint8_t Type; /* Report Type (INPUT/OUTPUT/FEATURE) */ } HID_ReportIDTypeDef; typedef struct _HID_CollectionTypeDef { uint32_t Usage; uint8_t Type; struct _HID_CollectionTypeDef *NextPtr; } HID_CollectionTypeDef; typedef struct _HID_AppCollectionTypeDef { uint32_t Usage; uint8_t Type; uint8_t NbrReportFmt; HID_ReportDataTypeDef ReportData[HID_MAX_NBR_REPORT_FMT]; } HID_AppCollectionTypeDef; typedef struct _HIDDescriptor { uint8_t bLength; uint8_t bDescriptorType; uint16_t bcdHID; /* indicates what endpoint this descriptor is describing */ uint8_t bCountryCode; /* specifies the transfer type. */ uint8_t bNumDescriptors; /* specifies the transfer type. */ uint8_t bReportDescriptorType; /* Maximum Packet Size this endpoint is capable of sending or receiving */ uint16_t wItemLength; /* is used to specify the polling interval of certain transfers. */ } HID_DescTypeDef; typedef struct { uint8_t *buf; uint16_t head; uint16_t tail; uint16_t size; uint8_t lock; } FIFO_TypeDef; /* Structure for HID process */ typedef struct _HID_Process { uint8_t OutPipe; uint8_t InPipe; uint8_t OutEp; uint8_t InEp; HID_StateTypeDef state; HID_CtlStateTypeDef ctl_state; uint16_t length; uint16_t poll; uint32_t timer; uint8_t ep_addr; uint8_t Protocol; HID_DescTypeDef HID_Desc; TransactionCompleteCallbackTypeDef ReportCallback; uint8_t Data[HID_REPORT_BUFFER_SIZE]; } HID_HandleTypeDef; /** * @} */ /** @defgroup USBH_HID_CORE_Exported_Defines * @{ */ #define USB_HID_GET_REPORT 0x01 #define USB_HID_GET_IDLE 0x02 #define USB_HID_GET_PROTOCOL 0x03 #define USB_HID_SET_REPORT 0x09 #define USB_HID_SET_IDLE 0x0A #define USB_HID_SET_PROTOCOL 0x0B /* HID Class Codes */ #define USB_HID_CLASS 0x03 /* Interface Descriptor field values for HID Boot Protocol */ #define HID_BOOT_CODE 0x01 #define HID_KEYBRD_PROTOCOL 0x01 #define HID_MOUSE_PROTOCOL 0x02 /** * @} */ /** @defgroup USBH_HID_CORE_Exported_Macros * @{ */ /** * @} */ /** @defgroup USBH_HID_CORE_Exported_Variables * @{ */ extern USBH_ClassTypeDef HID_Class; #define USBH_HID_CLASS &HID_Class /** * @} */ /** @defgroup USBH_HID_CORE_Exported_FunctionsPrototype * @{ */ USBH_StatusTypeDef USBH_HID_SetReport (USBH_HandleTypeDef *phost, uint8_t reportType, uint8_t reportId, uint8_t* reportBuff, uint8_t reportLen, TransactionCompleteCallbackTypeDef callback); USBH_StatusTypeDef USBH_HID_GetReport (USBH_HandleTypeDef *phost, uint8_t reportType, uint8_t reportId, uint8_t* reportBuff, uint8_t reportLen); USBH_StatusTypeDef USBH_HID_GetHIDReportDescriptor (USBH_HandleTypeDef *phost, uint16_t length); USBH_StatusTypeDef USBH_HID_GetHIDDescriptor (USBH_HandleTypeDef *phost, uint16_t length); USBH_StatusTypeDef USBH_HID_SetIdle (USBH_HandleTypeDef *phost, uint8_t duration, uint8_t reportId); USBH_StatusTypeDef USBH_HID_SetProtocol (USBH_HandleTypeDef *phost, uint8_t protocol); void USBH_HID_EventCallback(USBH_HandleTypeDef *phost); HID_TypeTypeDef USBH_HID_GetDeviceType(USBH_HandleTypeDef *phost); uint8_t USBH_HID_GetPollInterval(USBH_HandleTypeDef *phost); void fifo_init(FIFO_TypeDef * f, uint8_t * buf, uint16_t size); uint16_t fifo_read(FIFO_TypeDef * f, void * buf, uint16_t nbytes); uint16_t fifo_write(FIFO_TypeDef * f, const void * buf, uint16_t nbytes); HAL_StatusTypeDef USBH_HID_GetInterruptReport(USBH_HandleTypeDef *phost, TransactionCompleteCallbackTypeDef callback); /** * @} */ #ifdef __cplusplus } #endif #endif /* __USBH_HID_H */ /** * @} */ /** * @} */ /** * @} */ /** * @} */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/