]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - embedded/libs4c/usb/pdiusb/pdi.c
Embedded code-base updated to actual version from uLan repository.
[lincan.git] / embedded / libs4c / usb / pdiusb / pdi.c
index 3229d360b54476fc699f9d0d6f0ea4d528b1cf4b..1cc4cb2e85c6a664b462190818c0f39945cafaa8 100644 (file)
 
 #endif /*PDIUSBD11*/
 
 
 #endif /*PDIUSBD11*/
 
+  int usb_pdi_set_addr( usb_device_t *udev, unsigned char addr) {
+   #if !defined(PDIUSBH11A_MULTIPLE) // D11,D12,H11,H11A_S(emb.fnc)
+    pdiSetAddressEnable(addr | PDI_ENAD_ENABLE);
+   #else
+    /*void pdiSetEmbFncAddressEnable( unsigned char byFnc, unsigned char byAddress, unsigned char byEnable);*/
+    #error usb_pdi_set_addr not implemented for PDIUSBH11A_MULTIPLE
+   #endif
+    return 0;
+  }
+
+  int usb_pdi_set_configuration( usb_device_t *udev, unsigned char iCfg) USB_UDEV_REENTRANT_SIGN
+  {
+    pdiSetEndpointEnable( 0); // USBInitUnconfig();
+    if ( iCfg) {
+      pdiSetEndpointEnable( PDI_EPEN_ENABLE); //USBInitConfig();
+    }
+    return 0;
+  }
 
 /* connect usb */
   int usb_pdi_connect( usb_device_t *udev) {
 
 /* connect usb */
   int usb_pdi_connect( usb_device_t *udev) {
@@ -157,7 +175,17 @@ if ( LastInt) {
       pdiSetEpStatus( ep->epnum, PDI_SET_EP_STALLED);
     } else { // endpoint0
       pdiSetEpStatus( PDI_EP0_TX, PDI_SET_EP_STALLED);
       pdiSetEpStatus( ep->epnum, PDI_SET_EP_STALLED);
     } else { // endpoint0
       pdiSetEpStatus( PDI_EP0_TX, PDI_SET_EP_STALLED);
-      pdiSetEpStatus( PDI_EP0_RX, PDI_SET_EP_STALLED);    
+      pdiSetEpStatus( PDI_EP0_RX, PDI_SET_EP_STALLED);
+    }
+  }
+
+/* stall endpoint X */
+  void usb_pdi_unstall( usb_ep_t *ep) {
+    if ( ep->epnum) {
+      pdiSetEpStatus( ep->epnum, 0);
+    } else { // endpoint0
+      pdiSetEpStatus( PDI_EP0_TX, 0);
+      pdiSetEpStatus( PDI_EP0_RX, 0); 
     }
   }
 
     }
   }
 
@@ -184,10 +212,13 @@ if ( LastInt) {
 
    #ifndef USB_PDI_DIRECT_FNC
     udev->connect = usb_pdi_connect;
 
    #ifndef USB_PDI_DIRECT_FNC
     udev->connect = usb_pdi_connect;
+    udev->set_addr = usb_pdi_set_addr;
+    udev->set_configuration = usb_pdi_set_configuration;
     udev->disconnect = usb_pdi_disconnect;
     udev->ack_setup = usb_pdi_ack_setup;
     udev->ack_control_setup = usb_pdi_ack_control_setup;
     udev->stall = usb_pdi_stall;
     udev->disconnect = usb_pdi_disconnect;
     udev->ack_setup = usb_pdi_ack_setup;
     udev->ack_control_setup = usb_pdi_ack_control_setup;
     udev->stall = usb_pdi_stall;
+    udev->unstall = usb_pdi_unstall;
     udev->check_events = usb_pdi_check_events;
     udev->read_endpoint = usb_pdi_read_endpoint;
     udev->write_endpoint = usb_pdi_write_endpoint;
     udev->check_events = usb_pdi_check_events;
     udev->read_endpoint = usb_pdi_read_endpoint;
     udev->write_endpoint = usb_pdi_write_endpoint;