Wince 5.0 USB 驱动中address管理的实现
2011-04-06 16:54
253 查看
USB驱动中,共包含128个address。其中,给设备用的有127(0 - 127)个。第0个address是保留给root hub用的。
这128个address是通过一个包含四个成员的DWORD数组来实现管理的。
DWORD m_dwFreeAddressArray[4];
一个DWORD包含32个bit,4个DWORD刚好128个bit,每个bit代表一个address。通过判断相应bit的0/1,就可以知道该address是否已经被使用。
每个设备的address必须是唯一的。所以,在为一个设备分配address时,就需要寻找未被使用的address。当一个设备拔出以后,也需要释放相应的address。如何根据address找到对应的bit?
每个DWORD包含32个bit,用5个bit可以实现0-31的计数。128 / 32 = 4。两个bit可以实现0-3的计数。所以,用低位的5个bit表示0-31,也就是一个DWORD中的第几个bit。接下来的两个字节来表示是第几个DWORD,这样就实现了address到bit的定位。
也即xxyyyyyb,其中xxb表示是第几个DWORD,yyyyyb表示是相应DWORD中的第几个bit。
比如address 68,其二进制表示为1000100b,10b表示所在的DWORD为m_dwFreeAddressArray[2]。00100b表示是该DWORD中的第4个bit。
驱动中,寻找未被使用的address时的代码如下:
const UCHAR index = (address >> 5); // 5 == log base 2 of 32
const UCHAR bit = address & (32 - 1); // 32 == # of bits in DWORD
if ( (m_dwFreeAddressArray[ index ] & (1 << bit)) == 0 ) {
这128个address是通过一个包含四个成员的DWORD数组来实现管理的。
DWORD m_dwFreeAddressArray[4];
一个DWORD包含32个bit,4个DWORD刚好128个bit,每个bit代表一个address。通过判断相应bit的0/1,就可以知道该address是否已经被使用。
每个设备的address必须是唯一的。所以,在为一个设备分配address时,就需要寻找未被使用的address。当一个设备拔出以后,也需要释放相应的address。如何根据address找到对应的bit?
每个DWORD包含32个bit,用5个bit可以实现0-31的计数。128 / 32 = 4。两个bit可以实现0-3的计数。所以,用低位的5个bit表示0-31,也就是一个DWORD中的第几个bit。接下来的两个字节来表示是第几个DWORD,这样就实现了address到bit的定位。
也即xxyyyyyb,其中xxb表示是第几个DWORD,yyyyyb表示是相应DWORD中的第几个bit。
比如address 68,其二进制表示为1000100b,10b表示所在的DWORD为m_dwFreeAddressArray[2]。00100b表示是该DWORD中的第4个bit。
驱动中,寻找未被使用的address时的代码如下:
const UCHAR index = (address >> 5); // 5 == log base 2 of 32
const UCHAR bit = address & (32 - 1); // 32 == # of bits in DWORD
if ( (m_dwFreeAddressArray[ index ] & (1 << bit)) == 0 ) {
相关文章推荐
- Wince 5.0 USB 驱动中address管理的实现
- PXA270处理器PCMCIA/CF接口设计及WinCE 5.0驱动实现 ----eetchina.com
- wince6.0手机USB设备流接口驱动的实现
- Wince 流驱动的实现原理及过程
- WINCE5.0上USB设备的自动检测
- wince下usb驱动攻坚战
- WINCE下实现USB转RS232
- 【转帖】USB过滤驱动,实现U盘只读控制
- 如何在 Windows Mobile (WinCE 5.0) 中用Vc++编程查找并连接周围的蓝牙(Bluetooth)设备并实现数据通信
- wince 5.0 Hive Register 基于IDE设备的实现
- wince -- 用SYSGEN_CAPTURE实现WINCE PUBLIC文件夹中新增驱动DM9000的本地化(BSP化)
- WinCE的电池驱动实现
- WinCE 5.0下鼠标键盘驱动分析
- WinCE 5.0下鼠标键盘驱动分析
- USB学习总结3—USB gadget设备驱动实现(usb串口功能)
- MULTI BIN的wince 5.0,smdk2440下的实现
- 在WinCE 6.0系统下实现USB功能定制
- WINCE下实现基于USB的camera
- wince下USB 驱动
- wince驱动入门必看-WinCE流设备驱动简介及GPIO驱动的实现