diff --git a/doo b/doo new file mode 100755 index 00000000..ba3e7682 --- /dev/null +++ b/doo @@ -0,0 +1 @@ +PREFIX=/opt/paparazzi/stm32/bin/arm-none-eabi make diff --git a/examples/lisa-m/usb_hid/usbhid.c b/examples/lisa-m/usb_hid/usbhid.c index 721a1e78..f8981af4 100644 --- a/examples/lisa-m/usb_hid/usbhid.c +++ b/examples/lisa-m/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); diff --git a/examples/stm32-h103/usb_cdcacm/cdcacm.c b/examples/stm32-h103/usb_cdcacm/cdcacm.c index f757f637..6029ece2 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 b7a72ecf..e27dac7e 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);