X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/f8d7cde0d035f087f39c8076061bd8ef608e14f4..b2be2bbd665328f4ec3dc14d7d84fdbac4c58e11:/embedded/libs4c/usb/lpcusb/lpc.c diff --git a/embedded/libs4c/usb/lpcusb/lpc.c b/embedded/libs4c/usb/lpcusb/lpc.c index 7d9f20c..159c899 100644 --- a/embedded/libs4c/usb/lpcusb/lpc.c +++ b/embedded/libs4c/usb/lpcusb/lpc.c @@ -8,6 +8,23 @@ #include #include +/* 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)); @@ -27,12 +44,16 @@ void usb_lpc_ack_setup( usb_device_t *udev) { /* 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); } /** @@ -147,10 +168,13 @@ int usb_lpc_write_endpoint( usb_ep_t *ep, const void *ptr, int size) 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;