]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - embedded/libs4c/usb/lpcusb/lpc.c
Embedded code-base updated to actual version from uLan repository.
[lincan.git] / embedded / libs4c / usb / lpcusb / lpc.c
index 7d9f20ca5ab908668081103522bf5b30aeda6b5f..159c899851883ec9c1a94e88c05756de8f14c870 100644 (file)
@@ -8,6 +8,23 @@
 #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));
@@ -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;