zzz1995
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2004-11-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1742回复:9

请做过D12上位机程序的朋友帮忙看看(问题很具体)

楼主#
更多 发布于:2003-10-05 08:39
我使用VC++编写上位机程序控制Philips公司的PDIUSBD12芯片,在写到对D12端口读写的函数DeviceIoControl时,遇到了问题,看别人的程序,是这么使用的:

bResult = DeviceIoControl(hDevice,
                          IOCTL_WRITE_REGISTERS,
                          (PVOID)&ioBlock,
                          sizeof(IO_BLOCK),
                          NULL,
                          0,
                          &nBytes,
                          NULL);

其中,IOCTL_WRITE_REGISTERS在一个头文件中有定义,定义如下:

#define FILE_DEVICE_USB_SCAN              0x8000
#define IOCTL_INDEX                       0x0800

#define IOCTL_GET_VERSION               CTL_CODE(FILE_DEVICE_USB_SCAN,
                                                 IOCTL_INDEX,
                                                 METHOD_BUFFERED,
                                                 FILE_ANY_ACCESS)

#define IOCTL_CANCEL_IO                 CTL_CODE(FILE_DEVICE_USB_SCAN,
                                                 IOCTL_INDEX+1,
                                                 METHOD_BUFFERED,
                                                 FILE_ANY_ACCESS)

#define IOCTL_WAIT_ON_DEVICE_EVENT      CTL_CODE(FILE_DEVICE_USB_SCAN,
                                                 IOCTL_INDEX+2,
                                                 METHOD_BUFFERED,
                                                 FILE_ANY_ACCESS)

#define IOCTL_READ_REGISTERS            CTL_CODE(FILE_DEVICE_USB_SCAN,
                                                 IOCTL_INDEX+3,
                                                 METHOD_BUFFERED,
                                                 FILE_ANY_ACCESS)

#define IOCTL_WRITE_REGISTERS           CTL_CODE(FILE_DEVICE_USB_SCAN,
                                                 IOCTL_INDEX+4,
                                                 METHOD_BUFFERED,
                                                 FILE_ANY_ACCESS)

#define IOCTL_GET_CHANNEL_ALIGN_RQST    CTL_CODE(FILE_DEVICE_USB_SCAN,
                                                 IOCTL_INDEX+5,
                                                 METHOD_BUFFERED,
                                                 FILE_ANY_ACCESS)

#define IOCTL_GET_DEVICE_DESCRIPTOR     CTL_CODE(FILE_DEVICE_USB_SCAN,
                                                 IOCTL_INDEX+6,
                                                 METHOD_BUFFERED,
                                                 FILE_ANY_ACCESS)

#define IOCTL_RESET_PIPE                CTL_CODE(FILE_DEVICE_USB_SCAN,
                                                 IOCTL_INDEX+7,
                                                 METHOD_BUFFERED,
                                                 FILE_ANY_ACCESS)

#define IOCTL_GET_USB_DESCRIPTOR        CTL_CODE(FILE_DEVICE_USB_SCAN,
                                                 IOCTL_INDEX+8,
                                                 METHOD_BUFFERED,
                                                 FILE_ANY_ACCESS)

程序中只用到IOCTL_READ_REGISTERS和IOCTL_WRITE_REGISTERS,我不清楚
#define FILE_DEVICE_USB_SCAN    0x8000
#define IOCTL_INDEX             0x0800
根据什么定义的,在D12的产品手册中哪里能够找到相关信息?

最新喜欢:

pandengzhepanden...
mcu520
驱动牛犊
驱动牛犊
  • 注册日期2003-03-04
  • 最后登录2004-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-06 10:49
请问:
     你USB设备上位机驱动,有没有做!
也就是说,当插入USB,主机能否认识!
   如果驱动没有问题,才能考虑应用的问题。
我做过,与此相关的工作,我愿帮忙,但要把问题讲清楚。

                            王涛 于南京
zzz1995
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2004-11-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-06 11:59
驱动是好使的,也就是说,上位机能够与USB外设正常通讯,应用程序也是好用的。
我就是不知道这些代码是根据什么写出来的?
pandengzhe
驱动中牛
驱动中牛
  • 注册日期2003-01-17
  • 最后登录2005-04-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-08 09:07
请问:d12驱动在win2000下也能用吗?
大风卷兮,林木为摧,意苦若死,招憩不来。 百岁如流,富贵冷灰,大道日往,苦为雄才。 壮士拂剑,浩然弥哀,萧萧落叶,漏雨苍苔。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-08 10:46
这个ctl code d12的手册中是没有的,具体定义如下:


定义I/O控制代码
DeviceIoControl的Code参数是一个32位数值常量,图9-9显示了操作系统分割这个32位代码的一种方式。



图9-9. I/O控制代码中的域

这些域的解释如下:

Device type(16位,CTL_CODE宏的第一个参数) 指出能实现这个控制操作的设备类型。我并不知晓Windows 98或Windows 2000中的任何“IOCTL police”,但是我认为该域的内容实际上是任意的。习惯上我们使用与驱动程序中调用IoCreateDevice时使用的同一个值(例如,FILE_DEVICE_UNKNOWN)。
访问代码(“A”占2位,CTL_CODE的第四个参数) 指出使用设备句柄发出这个控制操作时,应用程序必须具有的访问权限。
Function code(12位,CTL_CODE的第二个参数) 指出该代码描述的是哪一个控制操作。Microsoft保留了该域的前半部分,从0到2047的值。因此我们只能使用从2048到4095之间的值。
缓冲方式(“M”占两位,CTL_CODE的第三个参数) 指出I/O管理器如何处理应用程序提供的输入输出缓冲区。在后面段中当讲述如何实现IRP_MJ_DEVICE_CONTROL时,我会更详细地讲述这个域。
需要阐明一点,编写驱动程序时,你可以自由地设计一系列IOCTL操作,应用程序也可以使用这些IOCTL操作与你的驱动程序对话。虽然有时你定义的IOCTL操作在数值上与其它人定义的完全相同,但系统不会被这种重叠所迷惑,因为你定义的IOCTL代码仅被你的驱动程序解释。

zzz1995
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2004-11-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-10-09 21:26
回pandengzhe,驱动在2000下可以用,但在XP下不能用。
zzz1995
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2004-11-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-10-09 21:32
jinghuiren,感谢你的回答,但是我看不到图9-9啊,能就这个问题详细解释一下吗,或者将相关的资料给我发个邮件好吗?谢谢!
pandengzhe
驱动中牛
驱动中牛
  • 注册日期2003-01-17
  • 最后登录2005-04-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-10-10 08:24
zzz1995:

帮我看看好吗?

http://www.driverdevelop.com/forum/html_52363.html?1065745157
大风卷兮,林木为摧,意苦若死,招憩不来。 百岁如流,富贵冷灰,大道日往,苦为雄才。 壮士拂剑,浩然弥哀,萧萧落叶,漏雨苍苔。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-10-10 11:06
ft!你还非要看见那个图呀!格式如下:
31                16 15 14 13                   2 1 0
---Device type------  A  ------ Function code----- M -

ok,满意了吧。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-10-10 11:30
看看walter oney的programming the microsoft windows driver model这本书吧,以上内容就是这本书中的,本站有电子书下载,你会有收获的。
游客

返回顶部