Starting up a usb device, Name, Synopsis – Comtrol eCos User Manual
Page 689: Description, Starting

Starting up a USB Device
Name
usbs_start
— Starting up a USB Device
Synopsis
#include
<
cyg/io/usb/usbs.h
>
void usbs_start(usbs_control_endpoint* ep0);
Description
Initializing a USB device requires some support from higher-level code, typically the application, in the form of
enumeration data. Hence it is not possible for the low-level USB driver to activate a USB device itself. Instead the
higher-level code has to take care of this by invoking
usbs_start
. This function takes a pointer to a USB control
endpoint data structure. USB device drivers should provide exactly one such data structure for every USB device,
so the pointer uniquely identifies the device.
const usbs_enumeration_data usb_enum_data = {
...
};
int
main(int argc, char** argv)
{
usbs_sa11x0_ep0.enumeration_data = &usb_enum_data;
...
usbs_start(&usbs_sa11x0_ep0);
...
}
The exact behaviour of
usbs_start
depends on the USB hardware and the device driver. A typical implementation
would change the USB data pins from tristated to active. If the peripheral is already plugged into a host then the
latter should detect this change and start interacting with the peripheral, including requesting the enumeration data.
Some of this may happen before
usbs_start
returns, but given that multiple interactions between USB host and
peripheral are required it is likely that the function will return before the peripheral is fully configured. Control
endpoints provide a
for informing higher-level code of USB state changes.
usbs_start
will return
even if the peripheral is not currently connected to a host: it will not block until the connection is established.
usbs_start
should only be called once for a given USB device. There are no defined error conditions. Note that
the function affects the entire USB device and not just the control endpoint: there is no need to start any data
endpoints as well.
585