00001
00038 #ifndef USB_DEV_MUX_H_INCLUDED
00039 #define USB_DEV_MUX_H_INCLUDED
00040
00041 #include <buffer.h>
00042 #include <usb/usb_protocol.h>
00043
00044 struct usb_request;
00045 struct udc;
00046
00060 struct udm_interface {
00087 status_t (*enable)(struct udc *udc, struct udm_interface *iface,
00088 uint16_t setting);
00103 void (*disable)(struct udc *udc, struct udm_interface *iface);
00119 status_t (*setup)(struct udc *udc, struct udm_interface *iface,
00120 struct usb_setup_req *req);
00144 status_t (*get_iface_descriptor)(struct udm_interface *iface,
00145 struct usb_request *req,
00146 enum usb_device_speed speed,
00147 uint16_t len);
00166 void (*free_descriptor)(struct udm_interface *iface,
00167 struct usb_request *req);
00168
00170 uint8_t iface_number;
00172 uint8_t cur_setting;
00173 };
00174
00181 struct udm_config {
00183 struct usb_configuration_descriptor desc;
00188 struct udm_interface *interface[];
00189 };
00190
00191 extern struct udm_config *udm_create_config(uint8_t value,
00192 uint8_t nr_interfaces);
00193 extern void udm_config_add_interface(struct udm_config *config,
00194 struct udm_interface *iface);
00195 extern void udm_config_set_max_power(struct udm_config *config,
00196 unsigned int milliamps);
00197 extern void udm_config_set_self_powered(struct udm_config *config);
00198 extern void udm_config_set_bus_powered(struct udm_config *config);
00199
00200 extern int udm_submit_ascii_string_desc(struct udc *udc,
00201 struct usb_request *req, const char *str,
00202 uint16_t max_len);
00203 extern int udm_submit_utf8_string_desc(struct udc *udc,
00204 struct usb_request *req, const char *str,
00205 uint16_t max_len);
00206 extern int udm_submit_utf16le_string_desc(struct udc *udc,
00207 struct usb_request *req, const le16_t *str,
00208 uint16_t max_len);
00209
00211
00212 #endif