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)9int usb_hc_init(struct usbh_bus *bus) 10 { 11 return 0; 12 } 13 usb_hc_deinit(struct usbh_bus * bus)14int usb_hc_deinit(struct usbh_bus *bus) 15 { 16 return 0; 17 } 18 usbh_get_frame_number(struct usbh_bus * bus)19uint16_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)24int 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)121int usbh_submit_urb(struct usbh_urb *urb) 122 { 123 return -USB_ERR_NOTSUPP; 124 } 125 usbh_kill_urb(struct usbh_urb * urb)126int usbh_kill_urb(struct usbh_urb *urb) 127 { 128 return -USB_ERR_NOTSUPP; 129 } 130 USBH_IRQHandler(uint8_t busid)131void USBH_IRQHandler(uint8_t busid) 132 { 133 }