1 /*
2  * Copyright (c) 2025, sakumisu
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #include "usbh_core.h"
7 #include "usbh_hub.h"
8 
usb_hc_init(struct usbh_bus * bus)9 int usb_hc_init(struct usbh_bus *bus)
10 {
11     return 0;
12 }
13 
usb_hc_deinit(struct usbh_bus * bus)14 int usb_hc_deinit(struct usbh_bus *bus)
15 {
16     return 0;
17 }
18 
usbh_get_frame_number(struct usbh_bus * bus)19 uint16_t usbh_get_frame_number(struct usbh_bus *bus)
20 {
21     return 0;
22 }
23 
usbh_roothub_control(struct usbh_bus * bus,struct usb_setup_packet * setup,uint8_t * buf)24 int usbh_roothub_control(struct usbh_bus *bus, struct usb_setup_packet *setup, uint8_t *buf)
25 {
26     uint8_t nports;
27     uint8_t port;
28     uint32_t status;
29 
30     nports = CONFIG_USBHOST_MAX_RHPORTS;
31     port = setup->wIndex;
32     if (setup->bmRequestType & USB_REQUEST_RECIPIENT_DEVICE) {
33         switch (setup->bRequest) {
34             case HUB_REQUEST_CLEAR_FEATURE:
35                 switch (setup->wValue) {
36                     case HUB_FEATURE_HUB_C_LOCALPOWER:
37                         break;
38                     case HUB_FEATURE_HUB_C_OVERCURRENT:
39                         break;
40                     default:
41                         return -USB_ERR_NOTSUPP;
42                 }
43                 break;
44             case HUB_REQUEST_SET_FEATURE:
45                 switch (setup->wValue) {
46                     case HUB_FEATURE_HUB_C_LOCALPOWER:
47                         break;
48                     case HUB_FEATURE_HUB_C_OVERCURRENT:
49                         break;
50                     default:
51                         return -USB_ERR_NOTSUPP;
52                 }
53                 break;
54             case HUB_REQUEST_GET_DESCRIPTOR:
55                 break;
56             case HUB_REQUEST_GET_STATUS:
57                 memset(buf, 0, 4);
58                 break;
59             default:
60                 break;
61         }
62     } else if (setup->bmRequestType & USB_REQUEST_RECIPIENT_OTHER) {
63         switch (setup->bRequest) {
64             case HUB_REQUEST_CLEAR_FEATURE:
65                 if (!port || port > nports) {
66                     return -USB_ERR_INVAL;
67                 }
68 
69                 switch (setup->wValue) {
70                     case HUB_PORT_FEATURE_ENABLE:
71                         break;
72                     case HUB_PORT_FEATURE_SUSPEND:
73                         break;
74                     case HUB_PORT_FEATURE_C_SUSPEND:
75                         break;
76                     case HUB_PORT_FEATURE_POWER:
77                         break;
78                     case HUB_PORT_FEATURE_C_CONNECTION:
79                         break;
80                     case HUB_PORT_FEATURE_C_ENABLE:
81                         break;
82                     case HUB_PORT_FEATURE_C_OVER_CURREN:
83                         break;
84                     case HUB_PORT_FEATURE_C_RESET:
85                         break;
86                     default:
87                         return -USB_ERR_NOTSUPP;
88                 }
89                 break;
90             case HUB_REQUEST_SET_FEATURE:
91                 if (!port || port > nports) {
92                     return -USB_ERR_INVAL;
93                 }
94 
95                 switch (setup->wValue) {
96                     case HUB_PORT_FEATURE_SUSPEND:
97                         break;
98                     case HUB_PORT_FEATURE_POWER:
99                         break;
100                     case HUB_PORT_FEATURE_RESET:
101                         break;
102 
103                     default:
104                         return -USB_ERR_NOTSUPP;
105                 }
106                 break;
107             case HUB_REQUEST_GET_STATUS:
108                 if (!port || port > nports) {
109                     return -USB_ERR_INVAL;
110                 }
111 
112                 memcpy(buf, &status, 4);
113                 break;
114             default:
115                 break;
116         }
117     }
118     return 0;
119 }
120 
usbh_submit_urb(struct usbh_urb * urb)121 int usbh_submit_urb(struct usbh_urb *urb)
122 {
123     return -USB_ERR_NOTSUPP;
124 }
125 
usbh_kill_urb(struct usbh_urb * urb)126 int usbh_kill_urb(struct usbh_urb *urb)
127 {
128     return -USB_ERR_NOTSUPP;
129 }
130 
USBH_IRQHandler(uint8_t busid)131 void USBH_IRQHandler(uint8_t busid)
132 {
133 }