示例#1
0
s32 USBStorageOGC_Close(usbstorage_handle *dev)
{
	if(dev != NULL)
	{
		important_storage_data *d = (important_storage_data*)0x932C1000;
		d->sector_size = __sector_size;
		d->sector_count = __sector_count;
		d->lun = __lun;
		d->vid = __vid;
		d->pid = __pid;
		d->tag = dev->tag;
		d->interface = dev->interface;
		d->usb_fd = dev->usb_fd;
		d->ep_in = dev->ep_in;
		d->ep_out = dev->ep_out;
		DCFlushRange((void*)0x932C1000, sizeof(important_storage_data));
	}
	__mounted = false;
	__lun = 0;
	__vid = 0;
	__pid = 0;

	if (dev->usb_fd != -1)
		USB_OGC_CloseDevice(&dev->usb_fd);

	LWP_MutexDestroy(dev->lock);
	SYS_RemoveAlarm(dev->alarm);

	if(dev->sector_size)
		free(dev->sector_size);

	if (dev->buffer)
		__lwp_heap_free(&__heap, dev->buffer);

	memset(dev, 0, sizeof(*dev));
	dev->usb_fd = -1;
	return 0;
}
示例#2
0
s32 USBStorage_Close(usbstorage_handle *dev)
{
	__mounted = false;
	__lun = 0;
	__vid = 0;
	__pid = 0;

	if (dev->usb_fd != -1)
		USB_CloseDevice(&dev->usb_fd);

	LWP_MutexDestroy(dev->lock);
	SYS_RemoveAlarm(dev->alarm);

	if(dev->sector_size)
		free(dev->sector_size);

	if (dev->buffer)
		__lwp_heap_free(&__heap, dev->buffer);

	memset(dev, 0, sizeof(*dev));
	dev->usb_fd = -1;
	return 0;
}