//主要用于Host枚举的全过程
USBH_StatusTypeDef USBH_Process(USBH_HandleTypeDef *phost)
{
__IO USBH_StatusTypeDef status = USBH_FAIL;
uint8_t idx = 0U;
/* check for Host port events */
if (((USBH_IsPortEnabled(phost) == 0U)) && (phost->gState != HOST_IDLE))
{//如果没设备连接,并且端口没有使能,则更新主机状态
if(phost->gState != HOST_DEV_DISCONNECTED) //如果状态机不是“未连接”
{
phost->gState = HOST_DEV_DISCONNECTED; //则修改为“未连接”
}
}
switch (phost->gState)//状态机函数结构
{
case HOST_IDLE :
if (phost->device.is_connected)//设备是否插入
{
/* Wait for 200 ms after connection */
phost->gState = HOST_DEV_WAIT_FOR_ATTACHMENT;//状态机更新到“等待使能端口连接”
USBH_Delay(200U);//为了稳定设备供电
USBH_LL_ResetPort(phost);//主机复位端口,用于连接;如不需要热插拔,则跳过
}
break;
case HOST_DEV_WAIT_FOR_ATTACHMENT: /* Wait for Port Enabled */
if (phost->device.PortEnabled == 1U)//端口是否使能
{
phost->gState = HOST_DEV_ATTACHED;//状态机更新到“设备连接”
}
break;
case HOST_DEV_ATTACHED :
USBH_UsrLog("USB Device Attached");//调试打印
/* Wait for 100 ms after Reset */
USBH_Delay(100U);//复位后100ms