Exemple #1
0
/* Wait for disk to be inserted */
int FSUSB_DiskInsertWait(DISK_HANDLE_T *hDisk)
{
	while (USB_HostState[hDisk->Config.PortNumber] != HOST_STATE_Configured) {
		MS_Host_USBTask(hDisk);
		USB_USBTask(hDisk->Config.PortNumber, USB_MODE_Host);
	}
	return 1;
}
Exemple #2
0
void DiskHost_USBTask(void)
{
    MS_Host_USBTask(&DiskHost_MS_Interface);
}
void DiskHost_USBTask(void)
{
	if (USB_HostState == HOST_STATE_Addressed)
	{
		LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);

		uint16_t ConfigDescriptorSize;
		uint8_t  ConfigDescriptorData[512];

		if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData,
											   sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful)
		{
			LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
			USB_HostState = HOST_STATE_WaitForDeviceRemoval;
			return;
		}

		if (MS_Host_ConfigurePipes(&DiskHost_MS_Interface,
		                           ConfigDescriptorSize, ConfigDescriptorData) != MS_ENUMERROR_NoError)
		{
			LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
			USB_HostState = HOST_STATE_WaitForDeviceRemoval;
			return;
		}

		if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful)
		{
			LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
			USB_HostState = HOST_STATE_WaitForDeviceRemoval;
			return;
		}

		uint8_t MaxLUNIndex;
		if (MS_Host_GetMaxLUN(&DiskHost_MS_Interface, &MaxLUNIndex))
		{
			LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
			USB_HostState = HOST_STATE_WaitForDeviceRemoval;
			return;
		}

		if (MS_Host_ResetMSInterface(&DiskHost_MS_Interface))
		{
			LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
			USB_HostState = HOST_STATE_WaitForDeviceRemoval;
			return;
		}

		USB_HostState = HOST_STATE_Configured;

		/* Note: For the RequestSense call to work, the host state machine must be in the
		 *       Configured state, or the call will be aborted */
		SCSI_Request_Sense_Response_t SenseData;
		if (MS_Host_RequestSense(&DiskHost_MS_Interface, 0, &SenseData) != 0)
		{
			LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
			USB_HostState = HOST_STATE_WaitForDeviceRemoval;
			return;
		}

		pf_mount(&DiskFATState);

		LEDs_SetAllLEDs(LEDMASK_USB_READY);
	}

	MS_Host_USBTask(&DiskHost_MS_Interface);
}