/** USB host mode management task. This function manages the RNDIS Host class driver and uIP stack when the device is * initialized in USB host mode. */ void USBHostMode_USBTask(void) { if (USB_CurrentMode != USB_MODE_Host) return; uIPManagement_ManageNetwork(); RNDIS_Host_USBTask(&Ethernet_RNDIS_Interface_Host); }
/** USB device mode management task. This function manages the Mass Storage Device class driver when the device is * initialized in USB device mode. */ void USBDeviceMode_USBTask(void) { if (USB_CurrentMode != USB_MODE_Device) return; uIPManagement_ManageNetwork(); RNDIS_Device_USBTask(&Ethernet_RNDIS_Interface_Device); MS_Device_USBTask(&Disk_MS_Interface); }
/** USB host mode management task. This function manages the RNDIS Host class driver and uIP stack when the device is * initialized in USB host mode. */ void USBHostMode_USBTask(void) { if (USB_CurrentMode != USB_MODE_Host) return; switch (USB_HostState) { case 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; break; } if (RNDIS_Host_ConfigurePipes(&Ethernet_RNDIS_Interface, ConfigDescriptorSize, ConfigDescriptorData) != RNDIS_ENUMERROR_NoError) { LEDs_SetAllLEDs(LEDMASK_USB_ERROR); USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful) { LEDs_SetAllLEDs(LEDMASK_USB_ERROR); USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } if (RNDIS_Host_InitializeDevice(&Ethernet_RNDIS_Interface) != HOST_SENDCONTROL_Successful) { LEDs_SetAllLEDs(LEDMASK_USB_ERROR); USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } uint32_t PacketFilter = (REMOTE_NDIS_PACKET_DIRECTED | REMOTE_NDIS_PACKET_BROADCAST); if (RNDIS_Host_SetRNDISProperty(&Ethernet_RNDIS_Interface, OID_GEN_CURRENT_PACKET_FILTER, &PacketFilter, sizeof(PacketFilter)) != HOST_SENDCONTROL_Successful) { LEDs_SetAllLEDs(LEDMASK_USB_ERROR); USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } if (RNDIS_Host_QueryRNDISProperty(&Ethernet_RNDIS_Interface, OID_802_3_CURRENT_ADDRESS, &MACAddress, sizeof(MACAddress)) != HOST_SENDCONTROL_Successful) { LEDs_SetAllLEDs(LEDMASK_USB_ERROR); USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } /* Initialize uIP stack */ uIPManagement_Init(); LEDs_SetAllLEDs(LEDMASK_USB_READY); USB_HostState = HOST_STATE_Configured; break; case HOST_STATE_Configured: uIPManagement_ManageNetwork(); break; } RNDIS_Host_USBTask(&Ethernet_RNDIS_Interface); }