Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

usb: Use enumerated return codes and usbd_control_complete_callback type #95

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions examples/stm32/f1/lisa-m-1/usb_cdcacm/cdcacm.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,10 @@ static const char *usb_strings[] = {
/* Buffer to be used for control requests. */
uint8_t usbd_control_buffer[128];

static int cdcacm_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))
static enum usbd_request_return_codes
cdcacm_control_request(usbd_device *usbd_dev,
struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
usbd_control_complete_callback *complete)
{
(void)complete;
(void)buf;
Expand All @@ -192,15 +194,15 @@ static int cdcacm_control_request(usbd_device *usbd_dev, struct usb_setup_data *
local_buf[8] = req->wValue & 3;
local_buf[9] = 0;
// usbd_ep_write_packet(0x83, buf, 10);
return 1;
return USBD_REQ_HANDLED;
}
case USB_CDC_REQ_SET_LINE_CODING:
if (*len < sizeof(struct usb_cdc_line_coding))
return 0;
return USBD_REQ_NOTSUPP;

return 1;
return USBD_REQ_HANDLED;
}
return 0;
return USBD_REQ_NOTSUPP;
}

static void cdcacm_data_rx_cb(usbd_device *usbd_dev, uint8_t ep)
Expand Down
24 changes: 13 additions & 11 deletions examples/stm32/f1/lisa-m-1/usb_dfu/usbdfu.c
Original file line number Diff line number Diff line change
Expand Up @@ -174,39 +174,41 @@ static void usbdfu_getstatus_complete(usbd_device *usbd_dev, struct usb_setup_da
}
}

static int usbdfu_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))
static enum usbd_request_return_codes
usbdfu_control_request(usbd_device *usbd_dev,
struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
usbd_control_complete_callback *complete)
{
(void)usbd_dev;

if ((req->bmRequestType & 0x7F) != 0x21)
return 0; /* Only accept class request. */
return USBD_REQ_NOTSUPP; /* Only accept class request. */

switch (req->bRequest) {
case DFU_DNLOAD:
if ((len == NULL) || (*len == 0)) {
usbdfu_state = STATE_DFU_MANIFEST_SYNC;
return 1;
return USBD_REQ_HANDLED;
} else {
/* Copy download data for use on GET_STATUS. */
prog.blocknum = req->wValue;
prog.len = *len;
memcpy(prog.buf, *buf, *len);
usbdfu_state = STATE_DFU_DNLOAD_SYNC;
return 1;
return USBD_REQ_HANDLED;
}
case DFU_CLRSTATUS:
/* Clear error and return to dfuIDLE. */
if (usbdfu_state == STATE_DFU_ERROR)
usbdfu_state = STATE_DFU_IDLE;
return 1;
return USBD_REQ_HANDLED;
case DFU_ABORT:
/* Abort returns to dfuIDLE state. */
usbdfu_state = STATE_DFU_IDLE;
return 1;
return USBD_REQ_HANDLED;
case DFU_UPLOAD:
/* Upload not supported for now. */
return 0;
return USBD_REQ_NOTSUPP;
case DFU_GETSTATUS: {
uint32_t bwPollTimeout = 0; /* 24-bit integer in DFU class spec */
(*buf)[0] = usbdfu_getstatus(&bwPollTimeout);
Expand All @@ -217,16 +219,16 @@ static int usbdfu_control_request(usbd_device *usbd_dev, struct usb_setup_data *
(*buf)[5] = 0; /* iString not used here */
*len = 6;
*complete = usbdfu_getstatus_complete;
return 1;
return USBD_REQ_HANDLED;
}
case DFU_GETSTATE:
/* Return state with no state transision. */
*buf[0] = usbdfu_state;
*len = 1;
return 1;
return USBD_REQ_HANDLED;
}

return 0;
return USBD_REQ_NOTSUPP;
}

int main(void)
Expand Down
21 changes: 13 additions & 8 deletions examples/stm32/f1/lisa-m-1/usb_hid/usbhid.c
Original file line number Diff line number Diff line change
Expand Up @@ -205,22 +205,24 @@ static const char *usb_strings[] = {
/* Buffer used for control requests. */
uint8_t usbd_control_buffer[128];

static int hid_control_request(usbd_device *dev, struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
void (**complete)(usbd_device *dev, struct usb_setup_data *req))
static enum usbd_request_return_codes
hid_control_request(usbd_device *dev,
struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
usbd_control_complete_callback *complete)
{
(void)complete;
(void)dev;

if((req->bmRequestType != 0x81) ||
(req->bRequest != USB_REQ_GET_DESCRIPTOR) ||
(req->wValue != 0x2200))
return 0;
return USBD_REQ_NOTSUPP;

/* Handle the HID report descriptor. */
*buf = (uint8_t *)hid_report_descriptor;
*len = sizeof(hid_report_descriptor);

return 1;
return USBD_REQ_HANDLED;
}

#ifdef INCLUDE_DFU_INTERFACE
Expand All @@ -236,19 +238,22 @@ static void dfu_detach_complete(usbd_device *dev, struct usb_setup_data *req)
scb_reset_core();
}

static int dfu_control_request(usbd_device *dev, struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
void (**complete)(usbd_device *dev, struct usb_setup_data *req))
static enum usbd_request_return_codes
dfu_control_request(usbd_device *dev,
struct usb_setup_data *req,
uint8_t **buf, uint16_t *len,
usbd_control_complete_callback *complete)
{
(void)buf;
(void)len;
(void)dev;

if ((req->bmRequestType != 0x21) || (req->bRequest != DFU_DETACH))
return 0; /* Only accept class request. */
return USBD_REQ_NOTSUPP; /* Only accept class request. */

*complete = dfu_detach_complete;

return 1;
return USBD_REQ_HANDLED;
}
#endif

Expand Down
16 changes: 9 additions & 7 deletions examples/stm32/f1/other/usb_cdcacm/cdcacm.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,10 @@ static const char *usb_strings[] = {
/* Buffer to be used for control requests. */
uint8_t usbd_control_buffer[128];

static int cdcacm_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))
static enum usbd_request_return_codes
cdcacm_control_request(usbd_device *usbd_dev,
struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
usbd_control_complete_callback *complete)
{
(void)complete;
(void)buf;
Expand All @@ -192,15 +194,15 @@ static int cdcacm_control_request(usbd_device *usbd_dev, struct usb_setup_data *
local_buf[8] = req->wValue & 3;
local_buf[9] = 0;
// usbd_ep_write_packet(0x83, buf, 10);
return 1;
return USBD_REQ_HANDLED;
}
case USB_CDC_REQ_SET_LINE_CODING:
case USB_CDC_REQ_SET_LINE_CODING:
if(*len < sizeof(struct usb_cdc_line_coding))
return 0;
return USBD_REQ_NOTSUPP;

return 1;
return USBD_REQ_HANDLED;
}
return 0;
return USBD_REQ_NOTSUPP;
}

static void cdcacm_data_rx_cb(usbd_device *usbd_dev, uint8_t ep)
Expand Down
24 changes: 13 additions & 11 deletions examples/stm32/f1/other/usb_dfu/usbdfu.c
Original file line number Diff line number Diff line change
Expand Up @@ -174,39 +174,41 @@ static void usbdfu_getstatus_complete(usbd_device *usbd_dev, struct usb_setup_da
}
}

static int usbdfu_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))
static enum usbd_request_return_codes
usbdfu_control_request(usbd_device *usbd_dev,
struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
usbd_control_complete_callback *complete)
{
(void)usbd_dev;

if ((req->bmRequestType & 0x7F) != 0x21)
return 0; /* Only accept class request. */
return USBD_REQ_NOTSUPP; /* Only accept class request. */

switch (req->bRequest) {
case DFU_DNLOAD:
if ((len == NULL) || (*len == 0)) {
usbdfu_state = STATE_DFU_MANIFEST_SYNC;
return 1;
return USBD_REQ_HANDLED;
} else {
/* Copy download data for use on GET_STATUS. */
prog.blocknum = req->wValue;
prog.len = *len;
memcpy(prog.buf, *buf, *len);
usbdfu_state = STATE_DFU_DNLOAD_SYNC;
return 1;
return USBD_REQ_HANDLED;
}
case DFU_CLRSTATUS:
/* Clear error and return to dfuIDLE. */
if (usbdfu_state == STATE_DFU_ERROR)
usbdfu_state = STATE_DFU_IDLE;
return 1;
return USBD_REQ_HANDLED;
case DFU_ABORT:
/* Abort returns to dfuIDLE state. */
usbdfu_state = STATE_DFU_IDLE;
return 1;
return USBD_REQ_HANDLED;
case DFU_UPLOAD:
/* Upload not supported for now. */
return 0;
return USBD_REQ_NOTSUPP;
case DFU_GETSTATUS: {
uint32_t bwPollTimeout = 0; /* 24-bit integer in DFU class spec */
(*buf)[0] = usbdfu_getstatus(&bwPollTimeout);
Expand All @@ -217,16 +219,16 @@ static int usbdfu_control_request(usbd_device *usbd_dev, struct usb_setup_data *
(*buf)[5] = 0; /* iString not used here */
*len = 6;
*complete = usbdfu_getstatus_complete;
return 1;
return USBD_REQ_HANDLED;
}
case DFU_GETSTATE:
/* Return state with no state transision. */
*buf[0] = usbdfu_state;
*len = 1;
return 1;
return USBD_REQ_HANDLED;
}

return 0;
return USBD_REQ_NOTSUPP;
}

int main(void)
Expand Down
20 changes: 12 additions & 8 deletions examples/stm32/f1/other/usb_hid/usbhid.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,22 +201,24 @@ static const char *usb_strings[] = {
/* Buffer to be used for control requests. */
uint8_t usbd_control_buffer[128];

static int hid_control_request(usbd_device *dev, struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
void (**complete)(usbd_device *, struct usb_setup_data *))
static enum usbd_request_return_codes
hid_control_request(usbd_device *dev,
struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
usbd_control_complete_callback *complete)
{
(void)complete;
(void)dev;

if((req->bmRequestType != 0x81) ||
(req->bRequest != USB_REQ_GET_DESCRIPTOR) ||
(req->wValue != 0x2200))
return 0;
return USBD_REQ_NOTSUPP;

/* Handle the HID report descriptor. */
*buf = (uint8_t *)hid_report_descriptor;
*len = sizeof(hid_report_descriptor);

return 1;
return USBD_REQ_HANDLED;
}

#ifdef INCLUDE_DFU_INTERFACE
Expand All @@ -232,19 +234,21 @@ static void dfu_detach_complete(usbd_device *dev, struct usb_setup_data *req)
scb_reset_core();
}

static int dfu_control_request(usbd_device *dev, struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
void (**complete)(usbd_device *, struct usb_setup_data *))
static enum usbd_request_return_codes
dfu_control_request(usbd_device *dev,
struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
usbd_control_complete_callback *complete)
{
(void)buf;
(void)len;
(void)dev;

if ((req->bmRequestType != 0x21) || (req->bRequest != DFU_DETACH))
return 0; /* Only accept class request. */
return USBD_REQ_NOTSUPP; /* Only accept class request. */

*complete = dfu_detach_complete;

return 1;
return USBD_REQ_HANDLED;
}
#endif

Expand Down
14 changes: 8 additions & 6 deletions examples/stm32/f1/stm32-h103/usb_cdcacm/cdcacm.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,10 @@ static const char *usb_strings[] = {
/* Buffer to be used for control requests. */
uint8_t usbd_control_buffer[128];

static int cdcacm_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))
static enum usbd_request_return_codes
cdcacm_control_request(usbd_device *usbd_dev,
struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
usbd_control_complete_callback *complete)
{
(void)complete;
(void)buf;
Expand All @@ -192,14 +194,14 @@ static int cdcacm_control_request(usbd_device *usbd_dev, struct usb_setup_data *
local_buf[8] = req->wValue & 3;
local_buf[9] = 0;
// usbd_ep_write_packet(0x83, buf, 10);
return 1;
return USBD_REQ_HANDLED;
}
case USB_CDC_REQ_SET_LINE_CODING:
if (*len < sizeof(struct usb_cdc_line_coding))
return 0;
return 1;
return USBD_REQ_NOTSUPP;
return USBD_REQ_HANDLED;
}
return 0;
return USBD_REQ_NOTSUPP;
}

static void cdcacm_data_rx_cb(usbd_device *usbd_dev, uint8_t ep)
Expand Down
Loading