dazzy
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-08-12
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望10点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:2626回复:4

关于并口的操作

楼主#
更多 发布于:2002-07-25 14:58
很多人都在此询问并口如何操作,我将我所做过的告诉大家(对win 2k而言,忘掉win 9x吧):
对并口操作,借助于ms的并口驱动会使我们的工作很轻松,简单步骤如下:
1.取得ms并口deviceobject;调用IoGetDeviceObjectPointer(),传入的ObjectName的bufer为“L\\\\Device\\\\ParallelPort0(LPT1)“,当然也可以是\\\\Device\\\\ParallelPort1(LPT2).

2.取得并口地址:大部分人操作并口时,会直接给初并口地址(0x378,0x278 and so on),这种hard code的方法是不可取的;要得到并口地址,对下层驱动发送IOCTL_INTERNAL_GET_PARALLEL_PORT_INFO,PARALLEL_PORT_INFORMATION的OriginalController得Lowpart为0x378(LPT1),或0x278(LPT2)这样,你就去得了并口地址(我强烈反对直接给初并口地址)。

3.得到ECP模式操作的地址,有两种方法:1)在取得的并口地址上加上一个0x400;2)给下层驱动发送IOCTL_INTERNAL_GET_PARALLEL_PNP_INFO,取得的OriginalEcpController位ecp操作地址。
4)申请占用端口。可以想下层驱动发送IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE;你也可以调用PARALLEL_PORT_INFORMATION的PPARALLEL_TRY_ALLOCATE_ROUTINE例程来占用并口,你申请了此并口后,别人就申请(用IOCTL_INTERNAL_PARALLEL_PORT_ALLOCATE或PARALLEL_PORT_INFORMATION的PPARALLEL_TRY_ALLOCATE_ROUTINE)不了,此并口为你独享了。
5)模式处理:要得到并口模式, 你可以调用IOCTL_INTERNAL_GET_PARALLEL_PNP_INFO,取得的CurrentMode为并口操作模式,要设置模式,当然你可以调用IOCTL_INTERNAL_PARALLEL_SET_CHIP_MODE,
也可以调用IOCTL_INTERNAL_GET_PARALLEL_PNP_INFO得PPARALLEL_SET_CHIP_MODE例程来设置并口的工作模式。
6)中断处理:不需你去调用IoConnectInterrupt(),你只需发送IOCTL_INTERNAL_PARALLEL_CONNECT_INTERRUPT来挂接你的中断里成即可。

具体起来内容不少,如果时间充裕的话,我会写一篇文章来专门讲述它的。
当然,如果你的驱动水平高的话,看了上面的几点你心里已经有谱了。

祝好运!

最新喜欢:

wm_createwm_cre...
gxjt
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2006-06-07
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-25 15:27
你好行噢,可我这菜鸟还是一头雾水
[color=red] “阿弥陀佛,无上医王,舍此不求,是谓痴狂。” “一句弥陀,阿伽陀药,舍此不服,是谓大错。” 南无阿弥陀佛......[/color]
fly_fly
驱动牛犊
驱动牛犊
  • 注册日期2002-01-12
  • 最后登录2004-06-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-25 15:41
虽然我是刚学,但看了还是找到了一点感觉,谢谢了!
更热切地等你的文章出来。
jjwly
驱动牛犊
驱动牛犊
  • 注册日期2002-02-26
  • 最后登录2011-11-05
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望4点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-30 16:41
我找遍论坛中关于并口的帖子,就是你这种用法最先进,可有几个问题:
1、内部IOCTL所用的数据结构是什么地方定义的?
2、GET MODE ,SET MODE中设置数据的位定义情况是怎样的?
不知你的文章有没有写?
jjwly
驱动牛犊
驱动牛犊
  • 注册日期2002-02-26
  • 最后登录2011-11-05
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望4点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-11-30 16:48
找到数据定义了
附件名称/大小 下载次数 最后更新
2003-11-30_parallel.h (27KB)  12
游客

返回顶部