aboutsummaryrefslogtreecommitdiff
path: root/examples/stm32-h103
diff options
context:
space:
mode:
authorMartin Mueller2010-12-06 00:07:14 +0100
committerMartin Mueller2010-12-06 00:07:14 +0100
commit586a4740d57ede9cd6cc4dd8f2d478c1244ee691 (patch)
tree87be828746bfa1b16b2fe6ee3a080389b82c7e08 /examples/stm32-h103
parent963588aba01c327757f73bf702466bb32224cfc6 (diff)
adapt to new usb interface
Diffstat (limited to 'examples/stm32-h103')
-rw-r--r--examples/stm32-h103/usb_cdcacm/cdcacm.c31
-rw-r--r--examples/stm32-h103/usb_hid/usbhid.c17
2 files changed, 25 insertions, 23 deletions
diff --git a/examples/stm32-h103/usb_cdcacm/cdcacm.c b/examples/stm32-h103/usb_cdcacm/cdcacm.c
index f757f63..6029ece 100644
--- a/examples/stm32-h103/usb_cdcacm/cdcacm.c
+++ b/examples/stm32-h103/usb_cdcacm/cdcacm.c
@@ -163,18 +163,19 @@ static const char *usb_strings[] = {
"DEMO"
};
-static int cdcacm_control_command(struct usb_setup_data *req,
- void (**complete)(struct usb_setup_data *req))
+static int cdcacm_control_request(struct usb_setup_data *req, u8 **buf,
+ u16 *len, void (**complete)(struct usb_setup_data *req))
{
(void)complete;
- char buf[10];
- struct usb_cdc_notification *notif = (void*)buf;
+ (void)buf;
switch(req->bRequest) {
- case USB_CDC_REQ_SET_CONTROL_LINE_STATE:
+ case USB_CDC_REQ_SET_CONTROL_LINE_STATE: {
/* This Linux cdc_acm driver requires this to be implemented
* even though it's optional in the CDC spec, and we don't
* advertise it in the ACM functional descriptor. */
+ char buf[10];
+ struct usb_cdc_notification *notif = (void*)buf;
/* We echo signals back to host as notification */
notif->bmRequestType = 0xA1;
@@ -186,19 +187,9 @@ static int cdcacm_control_command(struct usb_setup_data *req,
buf[9] = 0;
//usbd_ep_write_packet(0x83, buf, 10);
return 1;
- }
- return 0;
-}
-
-static int cdcacm_control_write(struct usb_setup_data *req, u8 *buf, u16 len,
- void (**complete)(struct usb_setup_data *req))
-{
- (void)complete;
- (void)buf;
-
- switch(req->bRequest) {
+ }
case USB_CDC_REQ_SET_LINE_CODING:
- if(len < sizeof(struct usb_cdc_line_coding))
+ if(*len < sizeof(struct usb_cdc_line_coding))
return 0;
return 1;
@@ -226,8 +217,10 @@ static void cdcacm_set_config(u16 wValue)
usbd_ep_setup(0x82, USB_ENDPOINT_ATTR_BULK, 64, NULL);
usbd_ep_setup(0x83, USB_ENDPOINT_ATTR_INTERRUPT, 16, NULL);
- usbd_register_control_command_callback(cdcacm_control_command);
- usbd_register_control_write_callback(cdcacm_control_write);
+ usbd_register_control_callback(
+ USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
+ USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT,
+ cdcacm_control_request);
}
int main(void)
diff --git a/examples/stm32-h103/usb_hid/usbhid.c b/examples/stm32-h103/usb_hid/usbhid.c
index b7a72ec..e27dac7 100644
--- a/examples/stm32-h103/usb_hid/usbhid.c
+++ b/examples/stm32-h103/usb_hid/usbhid.c
@@ -171,7 +171,7 @@ static const char *usb_strings[] = {
"DEMO",
};
-static int hid_control_read(struct usb_setup_data *req, u8 **buf, u16 *len,
+static int hid_control_request(struct usb_setup_data *req, u8 **buf, u16 *len,
void (**complete)(struct usb_setup_data *req))
{
(void)complete;
@@ -200,9 +200,12 @@ static void dfu_detach_complete(struct usb_setup_data *req)
scb_reset_core();
}
-static int dfu_control_command(struct usb_setup_data *req,
+static int dfu_control_request(struct usb_setup_data *req, u8 **buf, u16 *len,
void (**complete)(struct usb_setup_data *req))
{
+ (void)buf;
+ (void)len;
+
if((req->bmRequestType != 0x21) || (req->bRequest != DFU_DETACH))
return 0; /* Only accept class request */
@@ -218,9 +221,15 @@ static void hid_set_config(u16 wValue)
usbd_ep_setup(0x81, USB_ENDPOINT_ATTR_INTERRUPT, 4, NULL);
- usbd_register_control_read_callback(hid_control_read);
+ usbd_register_control_callback(
+ USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,
+ USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT,
+ hid_control_request);
#ifdef INCLUDE_DFU_INTERFACE
- usbd_register_control_command_callback(dfu_control_command);
+ usbd_register_control_callback(
+ USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
+ USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT,
+ dfu_control_request);
#endif
systick_set_clocksource(STK_CTRL_CLKSOURCE_AHB_DIV8);