#include <usb/usb.h>
#include <usb/lpcusb.h>
+/* set device address */
+int usb_lpc_set_addr( usb_device_t *udev, unsigned char addr) {
+ lpc_usb_set_addr(addr);
+ return 0;
+}
+
+int usb_lpc_set_configuration( usb_device_t *udev, unsigned char iCfg) {
+ lpc_usb_config_device(iCfg);
+ if ( iCfg) {
+ int i;
+ for(i = 0; i < udev->cntep; i++) {
+ lpc_usb_configEP(udev->ep[i].epnum, udev->ep[i].max_packet_size);
+ }
+ }
+ return 0;
+}
+
/* connect usb */
int usb_lpc_connect( usb_device_t *udev) {
lpc_write_cmd_data(USB_CMD_SET_DEV_STAT,USB_DAT_WR_BYTE(USBC_DEV_CON));
/* stall endpoint X */
void usb_lpc_stall( usb_ep_t *ep) {
- if ( ep->epnum) {
- lpc_write_cmd_data(USB_CMD_SEL_EP_CLRI(lpc_ep2addr(ep->epnum)),USB_DAT_WR_BYTE(USBC_EP_STAT_ST));
- } else { // endpoint0
- lpc_write_cmd_data(USB_CMD_SEL_EP_CLRI(lpc_ep2addr(0x80|ep->epnum)),USB_DAT_WR_BYTE(USBC_EP_STAT_ST));
- lpc_write_cmd_data(USB_CMD_SEL_EP_CLRI(lpc_ep2addr(ep->epnum)),USB_DAT_WR_BYTE(USBC_EP_STAT_ST));
- }
+ if (!ep->epnum)
+ lpc_usb_setstallEP(0x80|ep->epnum);
+ lpc_usb_setstallEP(ep->epnum);
+}
+
+/* unstall endpoint X */
+void usb_lpc_unstall( usb_ep_t *ep) {
+ if (!ep->epnum)
+ lpc_usb_clrstallEP(0x80|ep->epnum);
+ lpc_usb_clrstallEP(ep->epnum);
}
/**
int usb_lpc_init( usb_device_t *udev) {
udev->connect = usb_lpc_connect;
+ udev->set_addr = usb_lpc_set_addr;
+ udev->set_configuration = usb_lpc_set_configuration;
udev->disconnect = usb_lpc_disconnect;
udev->ack_setup = usb_lpc_ack_setup;
udev->ack_control_setup = NULL;
udev->stall = usb_lpc_stall;
+ udev->unstall = usb_lpc_unstall;
udev->check_events = usb_lpc_check_events;
udev->read_endpoint = usb_lpc_read_endpoint;
udev->write_endpoint = usb_lpc_write_endpoint;