STM32之USB host庫:USBH_Process學習理解
void USBH_Process(USB_OTG_CORE_HANDLE *pdev , USBH_HOST *phost)
{
volatile USBH_Status status = USBH_FAIL;
if ((HCD_IsDeviceConnected(pdev) == 0)&& (phost->gState != HOST_IDLE)) // 若是 未連線&&不空閒狀態下
{
if(phost->gState != HOST_DEV_DISCONNECTED)
{
phost->gState = HOST_DEV_DISCONNECTED;
}
}
switch (phost->gState)
{
case HOST_IDLE : //空閒狀態
if (HCD_IsDeviceConnected(pdev)) //如果 裝置連線上了
{
phost->gState = HOST_DEV_ATTACHED; //就把狀態轉入 -> HOST_DEV_ATTACHED
USB_OTG_BSP_mDelay(100); //延時
}
break;
case HOST_DEV_ATTACHED : //接觸狀態(但是沒有連線上)
phost->usr_cb->DeviceAttached(); //呼叫usbh_usr.c中的使用者回撥函式 ->USBH_USR_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) //如果 檢測到 復位命令
{
phost->usr_cb->ResetDevice(); //那麼執行 USB復位,不是主機復位!
phost->device_prop.speed = HCD_GetCurrentSpeed(pdev); //獲得當前裝置的速度
phost->gState = HOST_ENUMERATION; //然後 狀態轉入 -> HOST_ENUMERATION
phost->usr_cb->DeviceSpeedDetected(phost->device_prop.speed); //呼叫使用者回撥函式,在LCD上顯示裝置速度資訊
USBH_Open_Channel (pdev, //開啟入口通道
phost->Control.hc_num_in,
phost->device_prop.address,
phost->device_prop.speed,