summaryrefslogtreecommitdiffstats
path: root/app/usb.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/usb.c')
-rw-r--r--app/usb.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/app/usb.c b/app/usb.c
index 659a491..8dd38c6 100644
--- a/app/usb.c
+++ b/app/usb.c
@@ -61,19 +61,26 @@ usbd_device *usbd_dev;
static int
-usb_control_request (usbd_device * usbd_dev, struct usb_setup_data *req,
+usb_control_class_request (usbd_device * usbd_dev, struct usb_setup_data *req,
uint8_t ** buf, uint16_t * len,
void (**complete) (usbd_device * usbd_dev,
struct usb_setup_data * req))
{
+ if (keyboard_control_request(usbd_dev,req,buf,len,complete)) return 1;
+ if (dfu_control_request(usbd_dev,req,buf,len,complete)) return 1;
+
+return 0;
+}
+static int
+usb_control_request (usbd_device * usbd_dev, struct usb_setup_data *req,
+ uint8_t ** buf, uint16_t * len,
+ void (**complete) (usbd_device * usbd_dev,
+ struct usb_setup_data * req))
+{
(void) complete;
(void) usbd_dev;
- if ((req->bmRequestType != 0x81) ||
- (req->bRequest != USB_REQ_GET_DESCRIPTOR) || (req->wValue != 0x2200))
- return 0;
-
switch (req->wIndex)
{
case 0:
@@ -83,6 +90,10 @@ usb_control_request (usbd_device * usbd_dev, struct usb_setup_data *req,
consumer_get_descriptor (buf, len);
return 1;
}
+
+ *len = 0;
+ return 0;
+
*len = 0;
return 0;
@@ -95,19 +106,19 @@ usb_set_config (usbd_device * usbd_dev, uint16_t wValue)
(void) wValue;
(void) usbd_dev;
- usbd_ep_setup (usbd_dev, 0x81, USB_ENDPOINT_ATTR_INTERRUPT, 4, NULL);
- usbd_ep_setup (usbd_dev, 0x82, USB_ENDPOINT_ATTR_INTERRUPT, 4, NULL);
+ usbd_ep_setup (usbd_dev, KEYBOARD_EP, USB_ENDPOINT_ATTR_INTERRUPT, KEYBOARD_EP_TXN_SIZE, NULL);
+ usbd_ep_setup (usbd_dev, CONSUMER_EP, USB_ENDPOINT_ATTR_INTERRUPT, CONSUMER_EP_TXN_SIZE, NULL);
usbd_register_control_callback (usbd_dev,
- USB_REQ_TYPE_STANDARD |
- USB_REQ_TYPE_INTERFACE,
+ USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,
USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT,
usb_control_request);
usbd_register_control_callback (usbd_dev,
USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT,
- dfu_control_request);
+ usb_control_class_request);
+
}
/* Buffer to be used for control requests. */