Пример #1
0
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);
}
Пример #2
0
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;
}