X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/f8d7cde0d035f087f39c8076061bd8ef608e14f4..b2be2bbd665328f4ec3dc14d7d84fdbac4c58e11:/embedded/libs4c/usb/pdiusb/pdi.c diff --git a/embedded/libs4c/usb/pdiusb/pdi.c b/embedded/libs4c/usb/pdiusb/pdi.c index 3229d36..1cc4cb2 100644 --- a/embedded/libs4c/usb/pdiusb/pdi.c +++ b/embedded/libs4c/usb/pdiusb/pdi.c @@ -38,6 +38,24 @@ #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) { @@ -157,7 +175,17 @@ if ( LastInt) { 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; + 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->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;