void usb_bulk_clear_halt(mass_dev* dev, int direction) { int ret; usb_callback_data cb_data; iop_sema_t s; int endpoint; s.initial = 0; s.max = 1; s.option = 0; s.attr = 0; cb_data.semh = CreateSema(&s); if (direction == 0) { endpoint = dev->bulkEpIAddr; //endpoint = dev->bulkEpI; } else { endpoint = dev->bulkEpOAddr; } ret = UsbClearEndpointFeature( dev->controlEp, //Config pipe 0, //HALT feature endpoint, usb_callback, (void*)&cb_data ); if (ret != USB_RC_OK) { printf("USBHDFSD: Error - sending clear halt %d\n", ret); } else { WaitSema(cb_data.semh); } DeleteSema(cb_data.semh); }
static int usb_bulk_clear_halt(mass_dev* dev, int endpoint) { int ret; usb_callback_data cb_data; cb_data.semh = dev->ioSema; ret = UsbClearEndpointFeature( dev->controlEp, //Config pipe 0, //HALT feature (endpoint==USB_BLK_EP_IN) ? dev->bulkEpI : dev->bulkEpO, usb_callback, (void*)&cb_data ); if (ret == USB_RC_OK) { WaitSema(cb_data.semh); ret = cb_data.returnCode; } if (ret != USB_RC_OK) { XPRINTF("USBHDFSD: Error - sending clear halt %d\n", ret); } return ret; }