diff --git a/demo/hid_custom_inout_template.c b/demo/hid_custom_inout_template.c index 80c2f137..d5c3b7e0 100644 --- a/demo/hid_custom_inout_template.c +++ b/demo/hid_custom_inout_template.c @@ -1,20 +1,32 @@ +/* + * Copyright (c) 2022 HPMicro + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + #include "usbd_core.h" #include "usbd_hid.h" + /*!< hidraw in endpoint */ #define HIDRAW_IN_EP 0x81 +#ifdef CONFIG_USB_HS +#define HIDRAW_IN_EP_SIZE 1024 +#define HIDRAW_IN_INTERVAL 4 +#else #define HIDRAW_IN_EP_SIZE 64 #define HIDRAW_IN_INTERVAL 10 - +#endif /*!< hidraw out endpoint */ #define HIDRAW_OUT_EP 0x02 +#ifdef CONFIG_USB_HS +#define HIDRAW_OUT_EP_SIZE 1024 +#define HIDRAW_OUT_EP_INTERVAL 4 +#else #define HIDRAW_OUT_EP_SIZE 64 #define HIDRAW_OUT_EP_INTERVAL 10 - -#define USBD_VID 0xffff -#define USBD_PID 0xffff -#define USBD_MAX_POWER 100 -#define USBD_LANGID_STRING 1033 +#endif /*!< config descriptor size */ #define USB_HID_CONFIG_DESC_SIZ (9 + 9 + 9 + 7 + 7) @@ -51,7 +63,7 @@ static const uint8_t hid_descriptor[] = { USB_DESCRIPTOR_TYPE_ENDPOINT, /* bDescriptorType: */ HIDRAW_IN_EP, /* bEndpointAddress: Endpoint Address (IN) */ 0x03, /* bmAttributes: Interrupt endpoint */ - WBVAL(HIDRAW_IN_EP_SIZE), /* wMaxPacketSize: 4 Byte max */ + WBVAL(HIDRAW_IN_EP_SIZE), /* wMaxPacketSize: 4 Byte max */ HIDRAW_IN_INTERVAL, /* bInterval: Polling Interval */ /******************** Descriptor of Custom out endpoint ********************/ 0x07, /* bLength: Endpoint Descriptor size */ @@ -137,6 +149,29 @@ static const uint8_t hid_descriptor[] = { /*!< custom hid report descriptor */ static const uint8_t hid_custom_report_desc[HID_CUSTOM_REPORT_DESC_SIZE] = { +#ifdef CONFIG_USB_HS + /* USER CODE BEGIN 0 */ + 0x06, 0x00, 0xff, /* USAGE_PAGE (Vendor Defined Page 1) */ + 0x09, 0x01, /* USAGE (Vendor Usage 1) */ + 0xa1, 0x01, /* COLLECTION (Application) */ + 0x85, 0x02, /* REPORT ID (0x02) */ + 0x09, 0x02, /* USAGE (Vendor Usage 1) */ + 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ + 0x25, 0xff, /*LOGICAL_MAXIMUM (255) */ + 0x75, 0x08, /* REPORT_SIZE (8) */ + 0x96, 0xff, 0x03, /* REPORT_COUNT (63) */ + 0x81, 0x02, /* INPUT (Data,Var,Abs) */ + /* <___________________________________________________> */ + 0x85, 0x01, /* REPORT ID (0x01) */ + 0x09, 0x03, /* USAGE (Vendor Usage 1) */ + 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ + 0x25, 0xff, /* LOGICAL_MAXIMUM (255) */ + 0x75, 0x08, /* REPORT_SIZE (8) */ + 0x96, 0xff, 0x03, /* REPORT_COUNT (63) */ + 0x91, 0x02, /* OUTPUT (Data,Var,Abs) */ + /* USER CODE END 0 */ + 0xC0 /* END_COLLECTION */ +#else /* USER CODE BEGIN 0 */ 0x06, 0x00, 0xff, /* USAGE_PAGE (Vendor Defined Page 1) */ 0x09, 0x01, /* USAGE (Vendor Usage 1) */ @@ -158,6 +193,7 @@ static const uint8_t hid_custom_report_desc[HID_CUSTOM_REPORT_DESC_SIZE] = { 0x91, 0x02, /* OUTPUT (Data,Var,Abs) */ /* USER CODE END 0 */ 0xC0 /* END_COLLECTION */ +#endif }; USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t read_buffer[HIDRAW_OUT_EP_SIZE]; @@ -167,38 +203,39 @@ USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t send_buffer[HIDRAW_IN_EP_SIZE]; #define HID_STATE_BUSY 1 /*!< hid state ! Data can be sent only when state is idle */ -static volatile uint8_t custom_state = HID_STATE_IDLE; +static volatile uint8_t custom_state; static void usbd_event_handler(uint8_t busid, uint8_t event) { switch (event) { - case USBD_EVENT_RESET: - break; - case USBD_EVENT_CONNECTED: - break; - case USBD_EVENT_DISCONNECTED: - break; - case USBD_EVENT_RESUME: - break; - case USBD_EVENT_SUSPEND: - break; - case USBD_EVENT_CONFIGURED: - custom_state = HID_STATE_IDLE; - /* setup first out ep read transfer */ - usbd_ep_start_read(busid, HIDRAW_OUT_EP, read_buffer, HIDRAW_OUT_EP_SIZE); - break; - case USBD_EVENT_SET_REMOTE_WAKEUP: - break; - case USBD_EVENT_CLR_REMOTE_WAKEUP: - break; + case USBD_EVENT_RESET: + break; + case USBD_EVENT_CONNECTED: + break; + case USBD_EVENT_DISCONNECTED: + break; + case USBD_EVENT_RESUME: + break; + case USBD_EVENT_SUSPEND: + break; + case USBD_EVENT_CONFIGURED: + /* setup first out ep read transfer */ + usbd_ep_start_read(busid, HIDRAW_OUT_EP, read_buffer, HIDRAW_OUT_EP_SIZE); + break; + case USBD_EVENT_SET_REMOTE_WAKEUP: + break; + case USBD_EVENT_CLR_REMOTE_WAKEUP: + break; - default: - break; + default: + break; } } static void usbd_hid_custom_in_callback(uint8_t busid, uint8_t ep, uint32_t nbytes) { + (void)busid; + (void)ep; USB_LOG_RAW("actual in len:%d\r\n", nbytes); custom_state = HID_STATE_IDLE; } @@ -206,7 +243,7 @@ static void usbd_hid_custom_in_callback(uint8_t busid, uint8_t ep, uint32_t nbyt static void usbd_hid_custom_out_callback(uint8_t busid, uint8_t ep, uint32_t nbytes) { USB_LOG_RAW("actual out len:%d\r\n", nbytes); - usbd_ep_start_read(busid, HIDRAW_OUT_EP, read_buffer, 64); + usbd_ep_start_read(busid, ep, read_buffer, HIDRAW_IN_EP_SIZE); read_buffer[0] = 0x02; /* IN: report id */ usbd_ep_start_write(busid, HIDRAW_IN_EP, read_buffer, nbytes); } @@ -237,5 +274,5 @@ void hid_custom_init(uint8_t busid, uint32_t reg_base) usbd_add_endpoint(busid, &custom_in_ep); usbd_add_endpoint(busid, &custom_out_ep); - usbd_initialize(busid, usbd_event_handler); + usbd_initialize(busid, reg_base, usbd_event_handler); }