#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) {
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);
}
}
#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;