基于OHCI的USB主机 —— UFI命令监视代码
2010-05-20 11:38
399 查看
在调用完上面的UFI命令后,ufiCmdRunning.state就被设置为UFI_STATE_BEGIN态,在主循环中调用本函数,用来判断UFI命令是否执行完毕,以及是否执行成功。
[align=left]/**[/align] [align=left] * UFI命令监视函数,判断命令是否执行完毕,底层有错误则进行容错处理[/align] [align=left] */[/align] [align=left]short funUfiRunning(void)[/align] [align=left]{[/align] [align=left] switch(ufiCmdRunning.state)[/align] [align=left] {[/align] [align=left] //开始运行命令[/align] [align=left] case UFI_STATE_BEGIN:[/align] [align=left] usbTimer = 0;[/align] [align=left] ufiCmdRunning.count = 0;[/align] [align=left] ufiCmdRunning.state = UFI_STATE_RUNNING;[/align] [align=left] break;[/align] [align=left] [/align] [align=left] //命令运行中[/align] [align=left] case UFI_STATE_RUNNING:[/align] [align=left] //检查命令是否执行完毕[/align] [align=left] if(usbIsCmdOver() == USB_CMD_OVER)[/align] [align=left] {[/align] [align=left] //USB协议层命令执行失败[/align] [align=left] if (usbGetCmdResult() != 0)[/align] [align=left] {[/align] [align=left] //底层命令执行失败后,对端口复位后重新执行,重新执行超过150次则认为失败[/align] [align=left] ufiCmdRunning.count++;[/align] [align=left] [/align] [align=left] if (ufiCmdRunning.count > 150)[/align] [align=left] {[/align] ufiCmdRunning.error = UFI_ERR_MUCH_ERR; ufiCmdRunning.state = UFI_STATE_OVER; [align=left] }[/align] [align=left] else[/align] [align=left] {[/align] [align=left] //复位BulkOut端口[/align] [align=left] usbClearBulkOut();[/align] ufiCmdRunning.state = UFI_STATE_RESET_OUT; [align=left] }[/align] [align=left] break;[/align] [align=left] }[/align] [align=left] [/align] [align=left] //UFI命令执行成功[/align] if ((ufiCmdRunning.csw.bCSW_Status) == 0x00 && (ufiCmdRunning.csw.dCSW_Signature == 0x53425355)) [align=left] {[/align] [align=left] ufiCmdRunning.error = 0;[/align] [align=left] }[/align] [align=left] //UFI命令执行失败[/align] [align=left] else[/align] [align=left] {[/align] [align=left] ufiCmdRunning.error = UFI_ERR_CSW;[/align] [align=left] }[/align] ufiCmdRunning.state = UFI_STATE_OVER; [align=left] }[/align] [align=left] //底层命令超时,返回失败[/align] [align=left] else if (usbTimer >= 200)[/align] [align=left] {[/align] ufiCmdRunning.error = UFI_ERR_TIMEOUT; ufiCmdRunning.state = UFI_STATE_OVER; [align=left] }[/align] [align=left] break;[/align] [align=left] [/align] [align=left] //BulkOut端口复位结束[/align] [align=left] case UFI_STATE_RESET_OUT:[/align] [align=left] if(usbIsCmdOver() == USB_CMD_OVER)[/align] [align=left] {[/align] [align=left] //复位BulkIn端口[/align] [align=left] usbClearBulkIn();[/align] ufiCmdRunning.state = UFI_STATE_RESET_IN; [align=left] }[/align] [align=left] break;[/align] [align=left] [/align] [align=left] //BulkIn端口复位结束[/align] [align=left] case UFI_STATE_RESET_IN:[/align] [align=left] if(usbIsCmdOver() == USB_CMD_OVER)[/align] [align=left] {[/align] [align=left] //读取端口错误原因[/align] [align=left] ufiRequestSense(bulkDataBuf);[/align] ufiCmdRunning.state = UFI_STATE_REQUEST_SENSE; [align=left] }[/align] [align=left] break;[/align] [align=left] [/align] [align=left] //端口错误原因读取完毕[/align] [align=left] case UFI_STATE_REQUEST_SENSE:[/align] [align=left] if(usbIsCmdOver() == USB_CMD_OVER)[/align] [align=left] {[/align] [align=left] //重新执行底层Bulk命令[/align] ufiCmdRunning.funUfiCmd((unsigned char *)&ufiCmdRunning.cbw, ufiCmdRunning.pBuf, (unsigned char *)&ufiCmdRunning.csw); [align=left] [/align] [align=left] usbTimer = 0;[/align] ufiCmdRunning.state = UFI_STATE_RUNNING; [align=left] }[/align] [align=left] break;[/align] [align=left] }[/align] [align=left] return ufiCmdRunning.state;[/align] [align=left]}[/align] |
相关文章推荐
- 基于OHCI的USB主机 —— UFI读状态代码
- 基于OHCI的USB主机 —— UFI写扇区代码 推荐
- 基于OHCI的USB主机 —— UFI命令概述
- 基于OHCI的USB主机 —— UFI读容量代码
- 基于OHCI的USB主机 —— UFI命令 USB Mass Storage Class Bulk-Only Transport协议介绍
- 基于OHCI的USB主机 —— UFI查询代码
- 基于OHCI的USB主机 —— UFI读扇区代码
- 基于OHCI的USB主机 —— UFI数据结构3
- 基于OHCI的USB主机 —— USB设备命令介绍
- 基于OHCI的USB主机 —— UFI数据结构1 推荐
- 基于OHCI的USB主机 —— 批量端口复位代码
- 4.2 基于OHCI的USB主机 —— USB设备命令介绍
- 基于OHCI的USB主机 —— UFI数据结构2
- 基于OHCI的USB主机 —— 寄存器(其它)
- 基于OHCI的USB主机 —— OHCI(HCCA)
- 基于OHCI的USB主机——UFI读容量命令(ReadCapacity)
- 1.1基于OHCI的USB主机 —— 前言
- 2.5 基于OHCI的USB主机 —— 寄存器(设备连接)
- 3.6 基于OHCI的USB主机 —— OHCI(ED结构说明)
- 基于OHCI的USB主机 —— 寄存器层(说明)