摘要:
该函数是USB驱动中,监视hub状态改变的线程函数。Root hub的监视线程在OTG_Init函数被调用时创建。External Hub的监视线程在External Hub插入到Root Hub时被创建。在线程刚启动的时候(在线程循环体之外),需要进行一些操作。// before we can process port changes, we need// to power all ports// 函数PowerAllHubPorts在CRootHub类中的实现为空。// 在类CExternalHub中,遍历Hub上的所有Port,// 调用函数SetOrClearFeature设置各个Po 阅读全文
摘要:
USB驱动中,设备相关的类及其继承关系如下: CDevice (ADT) / / CFunction CHub (ADT) / / CRootHub CExternalHub父类CDevice中包含一个虚函数成员EnterOperationalState。各个子类中,根据需要,对该函数有不同的实现。各个子类的EnterOperationalState函数被调用的地方也不相同。其中,CRootHub的该函数,在函数CEhcd::DeviceInitializ... 阅读全文
摘要:
前面有篇文章说到如何获取U盘描述符,最终我们读取描述符的时候是通过以下语句实现的: lpudd[i] = m_ppCDeviceOnPort[i]->m_deviceInfo.Descriptor; 将驱动中保存的Desctiptor信息,赋值到传入的buffer中。因此,引出来一个问题,驱动中保存的Descriptor信息是什么时候产生的?宏观上来讲,应该是USB Device插入的时候,驱动从USB Device读取相关信息,并最终生成Descriptor。但具体是怎么实现的呢?今天就来分析一下这个过程。 首要的工作当然还是顺藤摸瓜,一步步找到入口。一步步跟踪下来,发现最初的启动点上 阅读全文