static void usb_hid_event_cb(UsbCtrlRequest *ctrl) { uint16_t value = usb_le16_to_cpu(ctrl->wValue); uint16_t index = usb_le16_to_cpu(ctrl->wIndex); uint16_t length = usb_le16_to_cpu(ctrl->wLength); uint8_t type = ctrl->mRequestType; uint8_t request = ctrl->bRequest; LOG_INFO("%s: s 0x%02x 0x%02x 0x%04x 0x%04x 0x%04x\n", __func__, type, request, value, index, length); switch (ctrl->bRequest) { case USB_REQ_GET_DESCRIPTOR: switch (value >> 8) { case HID_DT_HID: LOG_INFO("%s: HID_DT_HID\n", __func__); usb_endpointWrite(USB_DIR_IN | 0, &usb_hid_descriptor, sizeof(usb_hid_descriptor)); break; case HID_DT_REPORT: LOG_INFO("%s: HID_DT_REPORT\n", __func__); usb_endpointWrite(USB_DIR_IN | 0, &hid_report_descriptor, sizeof(hid_report_descriptor)); hid_keyboard_configured = true; break; default: LOG_INFO("%s: unknown HID request\n", __func__); break; } break; case HID_REQ_GET_REPORT: LOG_INFO("%s: HID_REQ_GET_REPORT\n", __func__); break; case HID_REQ_SET_REPORT: LOG_INFO("%s: HID_REQ_SET_REPORT\n", __func__); usb_endpointWrite(USB_DIR_IN | 0, NULL, 0); break; case HID_REQ_GET_IDLE: LOG_INFO("%s: HID_REQ_GET_IDLE\n", __func__); break; case HID_REQ_SET_IDLE: LOG_INFO("%s: HID_REQ_SET_IDLE\n", __func__); usb_endpointWrite(USB_DIR_IN | 0, NULL, 0); break; case HID_REQ_GET_PROTOCOL: LOG_INFO("%s: HID_REQ_GET_PROTOCOL\n", __func__); break; case HID_REQ_SET_PROTOCOL: LOG_INFO("%s: HID_REQ_SET_PROTOCOL\n", __func__); break; default: LOG_ERR("%s: unknown request: 0x%02x\n", __func__, ctrl->bRequest); break; } }
/** * \brief Write a buffer to a usb-serial port. * * \return number of bytes actually written. */ static size_t usb_serial_write(struct KFile *fd, const void *buf, size_t size) { DB(USBSerial *fds = USB_SERIAL_CAST(fd)); /* Silent compiler warnings if _DEBUG is not enabled */ (void)fd; ASSERT(fds->is_open); return usb_endpointWrite(usb_serial_ep_in_descriptor.bEndpointAddress, buf, size); }
/* Send a keyboard event */ void usbkbd_sendEvent(uint8_t mod, uint8_t code) { report[0] = mod; report[2] = code; usb_endpointWrite(USB_HID_REPORT_EP, &report, sizeof(report)); }