if (HCD_IsDeviceConnected(pdev))判断设备有没有连接
phost->gState = HOST_DEV_DISCONNECTED;如果设备没有连接,端口没有使能,则修改主机状态
USB_OTG_BSP_mDelay(100);延时一段时间,使设备电源稳定
HCD_ResetPort(pdev);发送USB端口复位指令
phost->usr_cb->ResetDevice();打印设备复位
phost->usr_cb->DeviceAttached();打印设备已经连接
phost->Control.hc_num_out = USBH_Alloc_Channel(pdev, 0x00);给USB设备分配输出通道
phost->Control.hc_num_in = USBH_Alloc_Channel(pdev, 0x80);给USB设备分配输入通道
if ( HCD_ResetPort(pdev) == 0)判断USB设备复位是否成功
phost->usr_cb->ResetDevice();成功复位打印设备复位
phost->device_prop.speed = HCD_GetCurrentSpeed(pdev);检测设备的速度
phost->usr_cb->ResetDevice();打印设备的速度
USBH_Open_Channel打开输入控制通道,打开输出控制通道
if ( USBH_HandleEnum(pdev , phost) == USBH_OK)执行枚举函数并判断枚举是否成功,如果枚举完成,则函数返回USBH_OK
phost->usr_cb->EnumerationDone();打印设备枚举完成
HOST_USR_INPUT: //用户输入确认,这个函数返回用户的确认的确认信息
status = phost->class_cb->Requests(pdev, phost);获取设备的类,调用函数Request(),确定函数的类
status = phost->class_cb->Machine(pdev, phost);
USBH_ErrorHandle(phost, status);开始类的状态机,在这个函数里面调用用户自定义的应用函数
USBH_DeInit(pdev, phost);//重初始化 phost->usr_cb->DeInit();//执行用户回调:重初始化
phost->usr_cb->DeviceDisconnected();//用户回调:在显示器上显示->设备未连接
USBH_DeInit(pdev, phost);//主机重新初始化,进入新的枚举过程
phost->usr_cb->DeInit();//执行用户回调:重初始化
phost->class_cb->DeInit(pdev, &phost->device_prop); USBH_DeAllocate_AllChannel(pdev);//收回通道
phost->gState = HOST_IDLE;//主机回到初始状态 -> HOST_IDLE(空闲)