More update of USB API
This commit is contained in:
10
ChangeLog
10
ChangeLog
@@ -1,3 +1,13 @@
|
||||
2016-06-09 NIIBE Yutaka <gniibe@fsij.org>
|
||||
|
||||
* mcu/usb-stm32f103.c (usb_lld_ctrl_recv): Rename.
|
||||
(usb_lld_ctrl_send): Rename.
|
||||
(usb_lld_ctrl_ack): Rename and let have return value.
|
||||
* mcu/usb-mkl27z.c: Likewise.
|
||||
|
||||
* example-cdc/usb-cdc.c: Follow the change of API.
|
||||
* example-fs-bb48/usb-cdc.c: Likewise.
|
||||
|
||||
2016-06-08 NIIBE Yutaka <gniibe@fsij.org>
|
||||
|
||||
* mcu/usb-stm32f103.c: Rewrite to be event driven API.
|
||||
|
||||
6
NEWS
6
NEWS
@@ -6,8 +6,10 @@ NEWS - Noteworthy changes
|
||||
Released 2016-06-xx
|
||||
|
||||
** New USB API
|
||||
Since USB driver is included, it should be good one. It used to be
|
||||
interrupt based API with callbacks. Now, it's event driven API.
|
||||
Now, USB driver is included in Chopstx. So, it should be good one.
|
||||
It used to be the code which was derived from interrupt driven API
|
||||
with callbacks. It's changed to event driven API, so that a user can
|
||||
do as wish, beyond the restriction of callbacks.
|
||||
|
||||
|
||||
* Major changes in Chopstx 0.12
|
||||
|
||||
@@ -293,7 +293,7 @@ vcom_port_data_setup (struct usb_dev *dev)
|
||||
struct tty *t = tty_get (arg->index, 0);
|
||||
|
||||
if (arg->request == USB_CDC_REQ_GET_LINE_CODING)
|
||||
return usb_lld_reply_request (dev, &t->line_coding,
|
||||
return usb_lld_ctrl_send (dev, &t->line_coding,
|
||||
sizeof (struct line_coding));
|
||||
}
|
||||
else /* USB_SETUP_SET (req) */
|
||||
@@ -303,11 +303,11 @@ vcom_port_data_setup (struct usb_dev *dev)
|
||||
{
|
||||
struct tty *t = tty_get (arg->index, 0);
|
||||
|
||||
return usb_lld_set_data_to_recv (dev, &t->line_coding,
|
||||
return usb_lld_ctrl_recv (dev, &t->line_coding,
|
||||
sizeof (struct line_coding));
|
||||
}
|
||||
else if (arg->request == USB_CDC_REQ_SET_CONTROL_LINE_STATE)
|
||||
return 0;
|
||||
return usb_lld_ctrl_ack (dev);
|
||||
}
|
||||
|
||||
return -1;
|
||||
@@ -337,10 +337,10 @@ usb_get_descriptor (struct usb_dev *dev)
|
||||
return -1;
|
||||
|
||||
if (desc_type == DEVICE_DESCRIPTOR)
|
||||
return usb_lld_reply_request (dev,
|
||||
return usb_lld_ctrl_send (dev,
|
||||
vcom_device_desc, sizeof (vcom_device_desc));
|
||||
else if (desc_type == CONFIG_DESCRIPTOR)
|
||||
return usb_lld_reply_request (dev,
|
||||
return usb_lld_ctrl_send (dev,
|
||||
vcom_config_desc, sizeof (vcom_config_desc));
|
||||
else if (desc_type == STRING_DESCRIPTOR)
|
||||
{
|
||||
@@ -369,7 +369,7 @@ usb_get_descriptor (struct usb_dev *dev)
|
||||
return -1;
|
||||
}
|
||||
|
||||
return usb_lld_reply_request (dev, str, size);
|
||||
return usb_lld_ctrl_send (dev, str, size);
|
||||
}
|
||||
|
||||
return -1;
|
||||
@@ -435,6 +435,7 @@ usb_set_configuration (struct usb_dev *dev)
|
||||
chopstx_mutex_unlock (&tty0.mtx);
|
||||
}
|
||||
|
||||
usb_lld_ctrl_ack (dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -453,6 +454,7 @@ usb_set_interface (struct usb_dev *dev)
|
||||
else
|
||||
{
|
||||
vcom_setup_endpoints_for_interface (interface, 0);
|
||||
usb_lld_ctrl_ack (dev);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -467,7 +469,7 @@ usb_get_interface (struct usb_dev *dev)
|
||||
return -1;
|
||||
|
||||
/* We don't have alternate interface, so, always return 0. */
|
||||
return usb_lld_reply_request (dev, &zero, 1);
|
||||
return usb_lld_ctrl_send (dev, &zero, 1);
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -479,7 +481,7 @@ usb_get_status_interface (struct usb_dev *dev)
|
||||
if (interface >= NUM_INTERFACES)
|
||||
return -1;
|
||||
|
||||
return usb_lld_reply_request (dev, &status_info, 2);
|
||||
return usb_lld_ctrl_send (dev, &status_info, 2);
|
||||
}
|
||||
|
||||
|
||||
@@ -733,49 +735,38 @@ tty_main (void *arg)
|
||||
usb_device_reset (&dev);
|
||||
continue;
|
||||
|
||||
case USB_EVENT_GET_DESCRIPTOR:
|
||||
if (usb_get_descriptor (&dev) < 0)
|
||||
usb_lld_ctrl_error (&dev);
|
||||
continue;
|
||||
|
||||
case USB_EVENT_DEVICE_ADDRESSED:
|
||||
/* The addres is assigned to the device. We don't
|
||||
* need to do anything for this actually, but in this
|
||||
* application, we maintain the USB status of the
|
||||
* device. Usually, just "continue" as EVENT_NONE is
|
||||
* OK.
|
||||
*/
|
||||
case USB_EVENT_DEVICE_ADDRESSED:
|
||||
chopstx_mutex_lock (&tty0.mtx);
|
||||
tty0.device_state = ADDRESSED;
|
||||
chopstx_cond_signal (&tty0.cnd);
|
||||
chopstx_mutex_unlock (&tty0.mtx);
|
||||
continue;
|
||||
|
||||
case USB_EVENT_GET_DESCRIPTOR:
|
||||
if (usb_get_descriptor (&dev) < 0)
|
||||
usb_lld_ctrl_error (&dev);
|
||||
continue;
|
||||
|
||||
case USB_EVENT_SET_CONFIGURATION:
|
||||
if (usb_set_configuration (&dev) < 0)
|
||||
usb_lld_ctrl_error (&dev);
|
||||
else
|
||||
usb_lld_ctrl_good (&dev);
|
||||
continue;
|
||||
|
||||
case USB_EVENT_SET_INTERFACE:
|
||||
if (usb_set_interface (&dev) < 0)
|
||||
usb_lld_ctrl_error (&dev);
|
||||
else
|
||||
usb_lld_ctrl_good (&dev);
|
||||
continue;
|
||||
|
||||
/* Non standard device request. */
|
||||
case USB_EVENT_CTRL_REQUEST:
|
||||
/* Device specific device request. */
|
||||
if (usb_setup (&dev) < 0)
|
||||
usb_lld_ctrl_error (&dev);
|
||||
else
|
||||
usb_lld_ctrl_good (&dev);
|
||||
continue;
|
||||
|
||||
/* Control WRITE transfer finished. */
|
||||
case USB_EVENT_CTRL_WRITE_FINISH:
|
||||
usb_ctrl_write_finish (&dev);
|
||||
continue;
|
||||
|
||||
case USB_EVENT_GET_STATUS_INTERFACE:
|
||||
@@ -788,11 +779,19 @@ tty_main (void *arg)
|
||||
usb_lld_ctrl_error (&dev);
|
||||
continue;
|
||||
|
||||
case USB_EVENT_NONE:
|
||||
case USB_EVENT_SET_FEATURE_DEVICE:
|
||||
case USB_EVENT_SET_FEATURE_ENDPOINT:
|
||||
case USB_EVENT_CLEAR_FEATURE_DEVICE:
|
||||
case USB_EVENT_CLEAR_FEATURE_ENDPOINT:
|
||||
usb_lld_ctrl_ack (&dev);
|
||||
continue;
|
||||
|
||||
case USB_EVENT_CTRL_WRITE_FINISH:
|
||||
/* Control WRITE transfer finished. */
|
||||
usb_ctrl_write_finish (&dev);
|
||||
continue;
|
||||
|
||||
case USB_EVENT_NONE:
|
||||
case USB_EVENT_DEVICE_SUSPEND:
|
||||
default:
|
||||
continue;
|
||||
|
||||
@@ -274,7 +274,6 @@ usb_ctrl_write_finish (struct usb_dev *dev)
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int
|
||||
vcom_port_data_setup (struct usb_dev *dev)
|
||||
{
|
||||
@@ -285,7 +284,7 @@ vcom_port_data_setup (struct usb_dev *dev)
|
||||
struct tty *t = tty_get (arg->index, 0);
|
||||
|
||||
if (arg->request == USB_CDC_REQ_GET_LINE_CODING)
|
||||
return usb_lld_reply_request (dev, &t->line_coding,
|
||||
return usb_lld_ctrl_send (dev, &t->line_coding,
|
||||
sizeof (struct line_coding));
|
||||
}
|
||||
else /* USB_SETUP_SET (req) */
|
||||
@@ -295,11 +294,11 @@ vcom_port_data_setup (struct usb_dev *dev)
|
||||
{
|
||||
struct tty *t = tty_get (arg->index, 0);
|
||||
|
||||
return usb_lld_set_data_to_recv (dev, &t->line_coding,
|
||||
return usb_lld_ctrl_recv (dev, &t->line_coding,
|
||||
sizeof (struct line_coding));
|
||||
}
|
||||
else if (arg->request == USB_CDC_REQ_SET_CONTROL_LINE_STATE)
|
||||
return 0;
|
||||
return usb_lld_ctrl_ack (dev);
|
||||
}
|
||||
|
||||
return -1;
|
||||
@@ -329,10 +328,10 @@ usb_get_descriptor (struct usb_dev *dev)
|
||||
return -1;
|
||||
|
||||
if (desc_type == DEVICE_DESCRIPTOR)
|
||||
return usb_lld_reply_request (dev,
|
||||
return usb_lld_ctrl_send (dev,
|
||||
vcom_device_desc, sizeof (vcom_device_desc));
|
||||
else if (desc_type == CONFIG_DESCRIPTOR)
|
||||
return usb_lld_reply_request (dev,
|
||||
return usb_lld_ctrl_send (dev,
|
||||
vcom_config_desc, sizeof (vcom_config_desc));
|
||||
else if (desc_type == STRING_DESCRIPTOR)
|
||||
{
|
||||
@@ -361,7 +360,7 @@ usb_get_descriptor (struct usb_dev *dev)
|
||||
return -1;
|
||||
}
|
||||
|
||||
return usb_lld_reply_request (dev, str, size);
|
||||
return usb_lld_ctrl_send (dev, str, size);
|
||||
}
|
||||
|
||||
return -1;
|
||||
@@ -428,7 +427,7 @@ usb_set_configuration (struct usb_dev *dev)
|
||||
chopstx_mutex_unlock (&tty0.mtx);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return usb_lld_ctrl_ack (dev);
|
||||
}
|
||||
|
||||
|
||||
@@ -446,7 +445,7 @@ usb_set_interface (struct usb_dev *dev)
|
||||
else
|
||||
{
|
||||
vcom_setup_endpoints_for_interface (dev, interface, 0);
|
||||
return 0;
|
||||
return usb_lld_ctrl_ack (dev);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -460,8 +459,9 @@ usb_get_interface (struct usb_dev *dev)
|
||||
return -1;
|
||||
|
||||
/* We don't have alternate interface, so, always return 0. */
|
||||
return usb_lld_reply_request (dev, &zero, 1);
|
||||
return usb_lld_ctrl_send (dev, &zero, 1);
|
||||
}
|
||||
|
||||
static int
|
||||
usb_get_status_interface (struct usb_dev *dev)
|
||||
{
|
||||
@@ -471,7 +471,7 @@ usb_get_status_interface (struct usb_dev *dev)
|
||||
if (interface >= NUM_INTERFACES)
|
||||
return -1;
|
||||
|
||||
return usb_lld_reply_request (dev, &status_info, 2);
|
||||
return usb_lld_ctrl_send (dev, &status_info, 2);
|
||||
}
|
||||
|
||||
|
||||
@@ -743,23 +743,17 @@ tty_main (void *arg)
|
||||
case USB_EVENT_SET_CONFIGURATION:
|
||||
if (usb_set_configuration (&dev) < 0)
|
||||
usb_lld_ctrl_error (&dev);
|
||||
else
|
||||
usb_lld_ctrl_good (&dev);
|
||||
continue;
|
||||
|
||||
case USB_EVENT_SET_INTERFACE:
|
||||
if (usb_set_interface (&dev) < 0)
|
||||
usb_lld_ctrl_error (&dev);
|
||||
else
|
||||
usb_lld_ctrl_good (&dev);
|
||||
continue;
|
||||
|
||||
/* Non standard device request. */
|
||||
case USB_EVENT_CTRL_REQUEST:
|
||||
if (usb_setup (&dev) < 0)
|
||||
usb_lld_ctrl_error (&dev);
|
||||
else
|
||||
usb_lld_ctrl_good (&dev);
|
||||
continue;
|
||||
|
||||
/* Control WRITE transfer finished. */
|
||||
|
||||
@@ -326,15 +326,13 @@ usb_lld_ctrl_error (struct usb_dev *dev)
|
||||
kl27z_ep_stall (ENDP0);
|
||||
}
|
||||
|
||||
void
|
||||
usb_lld_ctrl_good (struct usb_dev *dev)
|
||||
int
|
||||
usb_lld_ctrl_ack (struct usb_dev *dev)
|
||||
{
|
||||
if (dev->dev_req.len == 0)
|
||||
{
|
||||
/* Zero length packet for ACK. */
|
||||
dev->state = WAIT_STATUS_IN;
|
||||
kl27z_prepare_ep0_in (&dev->dev_req, 0, DATA1);
|
||||
}
|
||||
return USB_EVENT_NONE;
|
||||
}
|
||||
|
||||
|
||||
@@ -394,7 +392,7 @@ usb_lld_event_handler (struct usb_dev *dev)
|
||||
USB_CTRL1->ISTAT = USB_IS_STALL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return USB_EVENT_NONE;
|
||||
}
|
||||
|
||||
|
||||
@@ -502,7 +500,7 @@ std_get_status (struct usb_dev *dev)
|
||||
else /* Self-powered */
|
||||
status_info &= ~1;
|
||||
|
||||
return usb_lld_reply_request (dev, &status_info, 2);
|
||||
return usb_lld_ctrl_send (dev, &status_info, 2);
|
||||
}
|
||||
}
|
||||
else if (rcp == INTERFACE_RECIPIENT)
|
||||
@@ -523,7 +521,7 @@ std_get_status (struct usb_dev *dev)
|
||||
return -1;
|
||||
|
||||
status_info = kl27z_ep_is_stall (n);
|
||||
return usb_lld_reply_request (dev, &status_info, 2);
|
||||
return usb_lld_ctrl_send (dev, &status_info, 2);
|
||||
}
|
||||
|
||||
return -1;
|
||||
@@ -624,7 +622,7 @@ std_set_address (struct usb_dev *dev)
|
||||
|
||||
if (rcp == DEVICE_RECIPIENT && arg->len == 0 && arg->value <= 127
|
||||
&& arg->index == 0 && dev->configuration == 0)
|
||||
return USB_EVENT_NONE;
|
||||
return usb_lld_ctrl_ack (dev);
|
||||
|
||||
return -1;
|
||||
}
|
||||
@@ -652,7 +650,7 @@ std_get_configuration (struct usb_dev *dev)
|
||||
return -1;
|
||||
|
||||
if (rcp == DEVICE_RECIPIENT)
|
||||
return usb_lld_reply_request (dev, &dev->configuration, 1);
|
||||
return usb_lld_ctrl_send (dev, &dev->configuration, 1);
|
||||
|
||||
return -1;
|
||||
}
|
||||
@@ -735,14 +733,10 @@ handle_setup0 (struct usb_dev *dev)
|
||||
default: handler = std_none; break;
|
||||
}
|
||||
|
||||
if ((r = (*handler) (dev)) <= 0)
|
||||
if ((r = (*handler) (dev)) < 0)
|
||||
{
|
||||
/* Handling finished in standard way. */
|
||||
if (r == 0)
|
||||
usb_lld_ctrl_good (dev);
|
||||
else
|
||||
usb_lld_ctrl_error (dev);
|
||||
return 0;
|
||||
return USB_EVENT_NONE;
|
||||
}
|
||||
else
|
||||
return r;
|
||||
@@ -835,7 +829,7 @@ handle_transaction (struct usb_dev *dev, uint8_t stat)
|
||||
{
|
||||
handle_out0 (dev, stat);
|
||||
USB_CTRL1->ISTAT = USB_IS_TOKDNE;
|
||||
return 0;
|
||||
return USB_EVENT_NONE;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -959,7 +953,7 @@ usb_lld_current_configuration (struct usb_dev *dev)
|
||||
}
|
||||
|
||||
int
|
||||
usb_lld_set_data_to_recv (struct usb_dev *dev, void *p, size_t len)
|
||||
usb_lld_ctrl_recv (struct usb_dev *dev, void *p, size_t len)
|
||||
{
|
||||
struct ctrl_data *data_p = &dev->ctrl_data;
|
||||
data_p->addr = (uint8_t *)p;
|
||||
@@ -969,7 +963,7 @@ usb_lld_set_data_to_recv (struct usb_dev *dev, void *p, size_t len)
|
||||
|
||||
kl27z_prepare_ep0_out (p, len, DATA1);
|
||||
dev->state = OUT_DATA;
|
||||
return 0;
|
||||
return USB_EVENT_NONE;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -979,7 +973,7 @@ usb_lld_set_data_to_recv (struct usb_dev *dev, void *p, size_t len)
|
||||
* BUFLEN: size of the data.
|
||||
*/
|
||||
int
|
||||
usb_lld_reply_request (struct usb_dev *dev, const void *buf, size_t buflen)
|
||||
usb_lld_ctrl_send (struct usb_dev *dev, const void *buf, size_t buflen)
|
||||
{
|
||||
struct ctrl_data *data_p = &dev->ctrl_data;
|
||||
uint32_t len_asked = dev->dev_req.len;
|
||||
@@ -1012,7 +1006,7 @@ usb_lld_reply_request (struct usb_dev *dev, const void *buf, size_t buflen)
|
||||
data_p->len -= len;
|
||||
data_p->addr += len;
|
||||
|
||||
return 0;
|
||||
return USB_EVENT_NONE;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -353,15 +353,13 @@ usb_lld_ctrl_error (struct usb_dev *dev)
|
||||
st103_ep_set_rxtx_status (ENDP0, EP_RX_STALL, EP_TX_STALL);
|
||||
}
|
||||
|
||||
void
|
||||
usb_lld_ctrl_good (struct usb_dev *dev)
|
||||
int
|
||||
usb_lld_ctrl_ack (struct usb_dev *dev)
|
||||
{
|
||||
if (dev->dev_req.len == 0)
|
||||
{
|
||||
dev->state = WAIT_STATUS_IN;
|
||||
st103_set_tx_count (ENDP0, 0);
|
||||
st103_ep_set_rxtx_status (ENDP0, EP_RX_NAK, EP_TX_VALID);
|
||||
}
|
||||
return USB_EVENT_NONE;
|
||||
}
|
||||
|
||||
void usb_lld_init (struct usb_dev *dev, uint8_t feature)
|
||||
@@ -418,7 +416,7 @@ usb_lld_event_handler (struct usb_dev *dev)
|
||||
return usb_handle_transfer (dev, istr_value);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return USB_EVENT_NONE;
|
||||
}
|
||||
|
||||
static void handle_datastage_out (struct usb_dev *dev)
|
||||
@@ -522,7 +520,7 @@ static int std_get_status (struct usb_dev *dev)
|
||||
else /* Self-powered */
|
||||
status_info &= ~1;
|
||||
|
||||
return usb_lld_reply_request (dev, &status_info, 2);
|
||||
return usb_lld_ctrl_send (dev, &status_info, 2);
|
||||
}
|
||||
}
|
||||
else if (rcp == INTERFACE_RECIPIENT)
|
||||
@@ -557,7 +555,7 @@ static int std_get_status (struct usb_dev *dev)
|
||||
status_info |= 1; /* OUT Endpoint stalled */
|
||||
}
|
||||
|
||||
return usb_lld_reply_request (dev, &status_info, 2);
|
||||
return usb_lld_ctrl_send (dev, &status_info, 2);
|
||||
}
|
||||
|
||||
return -1;
|
||||
@@ -673,7 +671,7 @@ static int std_set_address (struct usb_dev *dev)
|
||||
|
||||
if (rcp == DEVICE_RECIPIENT && arg->len == 0 && arg->value <= 127
|
||||
&& arg->index == 0 && dev->configuration == 0)
|
||||
return USB_EVENT_NONE;
|
||||
return usb_lld_ctrl_ack (dev);
|
||||
|
||||
return -1;
|
||||
}
|
||||
@@ -699,7 +697,7 @@ static int std_get_configuration (struct usb_dev *dev)
|
||||
return -1;
|
||||
|
||||
if (rcp == DEVICE_RECIPIENT)
|
||||
return usb_lld_reply_request (dev, &dev->configuration, 1);
|
||||
return usb_lld_ctrl_send (dev, &dev->configuration, 1);
|
||||
|
||||
return -1;
|
||||
}
|
||||
@@ -796,14 +794,10 @@ static int handle_setup0 (struct usb_dev *dev)
|
||||
default: handler = std_none; break;
|
||||
}
|
||||
|
||||
if ((r = (*handler) (dev)) <= 0)
|
||||
if ((r = (*handler) (dev)) < 0)
|
||||
{
|
||||
/* Handling finished in standard way. */
|
||||
if (r == 0)
|
||||
usb_lld_ctrl_good (dev);
|
||||
else
|
||||
usb_lld_ctrl_error (dev);
|
||||
return 0;
|
||||
return USB_EVENT_NONE;
|
||||
}
|
||||
else
|
||||
return r;
|
||||
@@ -891,7 +885,7 @@ usb_handle_transfer (struct usb_dev *dev, uint16_t istr_value)
|
||||
else
|
||||
{
|
||||
handle_out0 (dev);
|
||||
return 0;
|
||||
return USB_EVENT_NONE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -914,7 +908,7 @@ usb_handle_transfer (struct usb_dev *dev, uint16_t istr_value)
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return USB_EVENT_NONE;
|
||||
}
|
||||
|
||||
void usb_lld_reset (struct usb_dev *dev, uint8_t feature)
|
||||
@@ -1017,12 +1011,12 @@ uint8_t usb_lld_current_configuration (struct usb_dev *dev)
|
||||
return dev->configuration;
|
||||
}
|
||||
|
||||
int usb_lld_set_data_to_recv (struct usb_dev *dev, void *p, size_t len)
|
||||
int usb_lld_ctrl_recv (struct usb_dev *dev, void *p, size_t len)
|
||||
{
|
||||
struct ctrl_data *data_p = &dev->ctrl_data;
|
||||
data_p->addr = p;
|
||||
data_p->len = len;
|
||||
return 0;
|
||||
return USB_EVENT_NONE;
|
||||
}
|
||||
|
||||
void usb_lld_to_pmabuf (const void *src, uint16_t addr, size_t n)
|
||||
@@ -1106,7 +1100,7 @@ void usb_lld_from_pmabuf (void *dst, uint16_t addr, size_t n)
|
||||
* BUFLEN: size of the data.
|
||||
*/
|
||||
int
|
||||
usb_lld_reply_request (struct usb_dev *dev, const void *buf, size_t buflen)
|
||||
usb_lld_ctrl_send (struct usb_dev *dev, const void *buf, size_t buflen)
|
||||
{
|
||||
struct ctrl_data *data_p = &dev->ctrl_data;
|
||||
uint32_t len_asked = dev->dev_req.len;
|
||||
|
||||
24
usb_lld.h
24
usb_lld.h
@@ -106,11 +106,27 @@ void usb_lld_init (struct usb_dev *dev, uint8_t feature);
|
||||
#define USB_EVENT_ID(e) ((e >> 24))
|
||||
int usb_lld_event_handler (struct usb_dev *dev);
|
||||
|
||||
int usb_lld_reply_request (struct usb_dev *dev,
|
||||
const void *buf, size_t buflen);
|
||||
int usb_lld_set_data_to_recv (struct usb_dev *dev, void *p, size_t len);
|
||||
/*
|
||||
* Control Endpoint ENDP0 does device requests handling.
|
||||
* In response to an event of
|
||||
* USB_EVENT_SET_CONFIGURATION
|
||||
* USB_EVENT_SET_INTERFACE
|
||||
* USB_EVENT_SET_FEATURE_DEVICE
|
||||
* USB_EVENT_SET_FEATURE_ENDPOINT
|
||||
* USB_EVENT_CLEAR_FEATURE_DEVICE
|
||||
* USB_EVENT_CLEAR_FEATURE_ENDPOINT
|
||||
* USB_EVENT_GET_STATUS_INTERFACE
|
||||
* USB_EVENT_GET_DESCRIPTOR
|
||||
* USB_EVENT_GET_INTERFACE
|
||||
* USB_EVENT_CTRL_REQUEST
|
||||
* a single action should be done, which is SEND, RECV, or,
|
||||
* ACKNOWLEDGE (no data to be sent, or to be received).
|
||||
* Otherwise, it's an error.
|
||||
*/
|
||||
int usb_lld_ctrl_send (struct usb_dev *dev, const void *buf, size_t buflen);
|
||||
int usb_lld_ctrl_recv (struct usb_dev *dev, void *p, size_t len);
|
||||
int usb_lld_ctrl_ack (struct usb_dev *dev);
|
||||
void usb_lld_ctrl_error (struct usb_dev *dev);
|
||||
void usb_lld_ctrl_good (struct usb_dev *dev);
|
||||
|
||||
void usb_lld_reset (struct usb_dev *dev, uint8_t feature);
|
||||
void usb_lld_set_configuration (struct usb_dev *dev, uint8_t config);
|
||||
|
||||
Reference in New Issue
Block a user