summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2024-03-29 15:30:48 +0800
committersakumisu <[email protected]>2024-03-29 15:31:29 +0800
commit7b5d8f29d4f9ad48f2da1e948f8017bcdd2609f7 (patch)
tree60fae261a106d21344b5904ab7c8783d6c6c237f
parente7616399b72f63226e657a815176d29b10a29d34 (diff)
update hid inout for hs
-rw-r--r--demo/hid_custom_inout_template.c99
1 files changed, 68 insertions, 31 deletions
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);
}