Пример #1
0
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;
	}
}
Пример #2
0
/**
 * \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);
}
Пример #3
0
/* 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));
}