阅读:2309回复:8
USB口打印机控制(200分恭请高手)
各位兄弟姐妹,偶现有一台USB接口的打印机,驱动程序已有,能正常打印.问题是偶原来的应用程序要控制它输出,已查到其SymbolicName,用CreateFile打开USB端口句柄,如下
if ((hCom = CreateFile(\"\\\\\\\\.\\\\USB#Vid_04b8&Pid_0001#5&f1546e9&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed}\", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL)) == INVALID_HANDLE_VALUE) throw 1; 端口句柄打开成功(如拔掉USB cable 则不成功),说明打开USB端口句柄是没错的,然后我用WriteFile向端口写数据,WriteFile(hCom, Buf, Length, &len, &osWrite);可为什么打印机没反应啊,是不是还要什么指令呢?望各位指点一二,先谢了. [编辑 - 8/21/02 by junming] |
|
|
沙发#
发布于:2002-08-21 18:02
1、WriteFile只是向驱动程序产生IRP_MJ_WRITE的IRP,你怎么知道驱动程序如何处理这个IRP的?
2、就算驱动程序处理了该IRP,发向了设备,你认为设备会打印这些数据?!设备怎么知道打印的格式等等信息?! 我的建议是: 1、看看你的设备的打印接口数据格式。 2、用Bus Hunter查看设备在打印时的数据流,仔细分析。 |
|
|
板凳#
发布于:2002-08-22 09:48
1、WriteFile只是向驱动程序产生IRP_MJ_WRITE的IRP,你怎么知道驱动程序如何处理这个IRP的? 谢谢tigerzd回复,请问 1.怎么看我的设备的打印接口数据格式 2.Bus Hunter为啥东东啊,哪里有啊 菜鸟一个,望不吝指教 |
|
|
地板#
发布于:2002-08-22 09:58
1、做打印机,这个要你自己去看哦,我不懂。
2、bus hunter是一个监控数据流的软件,本站下载区有。 |
|
|
地下室#
发布于:2002-08-22 11:35
tigerzd老兄,偶用Bus Hound 结果如下,给偶分析分析,正常否,WriteFile将东西写到打印机去了吗?多谢了.
USB Printing Support [64KB/Sec] Device Phase Data Info Time Cmd.Phase.Ofs ------ ----- ----------------------------------------------------- ---------------- ----- ------------------ 7.1 DO 1b 40 1b 28 - 47 01 00 01 .@.(G... 0us 1.1.0 7.1 DO 1b 28 56 04 - 00 00 00 00 .(V..... 22sc 2.1.0 7.1 DO 81 00 ea 00 - 1b 28 56 04 .....(V. 2.4sc 3.1.0 7.1 DO 00 03 fc 00 - 0f f0 ff 00 ........ 1.8sc 4.1.0 7.1 DO 28 24 04 00 - 00 00 00 00 ($...... 789ms 5.1.0 7.1 DO fc ff 00 04 - 07 f8 00 07 ........ 579ms 6.1.0 7.1 DO fc fb 00 01 - 01 fe fa 00 ........ 630ms 7.1.0 7.1 DO 2e 01 0a 0a - 01 b2 04 c4 ........ 490ms 8.1.0 7.1 DO 00 ff fe 00 - 01 0f f0 f2 ........ 539ms 9.1.0 7.1 DO 0f 7f c0 00 - 03 fe 00 7f ........ 640ms 10.1.0 7.1 DO 7c 86 f9 05 - f2 1b e4 17 ........ 5.6sc 11.1.0 7.1 DO ba 85 75 02 - ea 15 d4 0b ..u..... 14sc 12.1.0 7.1 DO 24 04 00 00 - 00 00 00 1b $....... 540ms 13.1.0 7.1 DO cf 80 cc 00 - 1b 28 56 04 .....(V. 489ms 14.1.0 7.1 DO f2 0b e6 17 - c8 2f 98 5f ...../._ 630ms 15.1.0 7.1 DO 00 1b 2e 01 - 0a 0a 01 b2 ........ 589ms 16.1.0 7.1 DO 1f 62 2e c6 - 7d 80 cc 00 .b...... 637ms 17.1.0 7.1 DO 45 d8 cb b1 - 17 63 2e c4 E....c.. 524ms 18.1.0 7.1 DO 7c 82 f9 85 - f2 0b e6 17 ........ 590ms 19.1.0 7.1 DO 01 0a 0a 01 - b2 04 cc 00 ........ 591ms 20.1.0 7.1 DO 01 00 00 1b - 28 72 02 00 ....(r.. 489ms 21.1.0 7.1 DO 17 50 ae a0 - 5d 40 ba 81 .P..]@.. 490ms 22.1.0 7.1 DO 8b b1 1f 62 - 2e c4 7d 88 ...b.... 530ms 23.1.0 7.1 DO 2e 01 0a 0a - 01 b2 04 cc ........ 540ms 24.1.0 7.1 DO 3c 02 00 00 - 1b 28 72 02 <....(r. 490ms 25.1.0 7.1 DO 00 1f e0 c8 - 00 1b 28 56 ......(V 490ms 26.1.0 7.1 DO 24 04 00 00 - 00 00 00 1b $....... 490ms 27.1.0 7.1 DO 1b 2e 01 0a - 0a 01 b2 04 ........ 464ms 28.1.0 [编辑 - 8/22/02 by junming] |
|
|
5楼#
发布于:2002-08-22 12:08
下面是正常打印时的Bus Hound 结果:
USB Printing Support [45KB/Sec] Device Phase Data Info Time Cmd.Phase.Ofs ------ ----- ----------------------------------------------------- ---------------- ----- ------------------ 7.0 CTL 80 06 00 01 - 00 00 12 00 GET DESCRIPTR 0us 1.1.0 7.0 DI 12 01 00 01 - 07 01 02 40 .......@ 3.9ms 1.2.0 7.0 CTL 80 06 00 02 - 00 00 09 01 GET DESCRIPTR 81us 2.1.0 7.0 DI 09 02 20 00 - 01 01 00 40 .. ....@ 3.8ms 2.2.0 7.0 CTL 00 09 01 00 - 00 00 00 00 SET CONFIG 20us 3.1.0 7.0 CTL a1 00 00 00 - 00 00 f1 03 CLASS 6.8ms 4.1.0 7.0 DI 00 5a 4d 46 - 47 3a 45 50 .ZMFG:EP 5.1ms 4.2.0 7.1 DO 00 00 00 1b - 01 40 45 4a .....@EJ 26sc 5.1.0 7.1 DO 3f 00 00 0f - c0 f8 00 00 ?....... 11ms 6.1.0 据此我认为是我WriteFile()前没有和打印机握手的缘故,即上面的CTL和DI,大侠们对CTL(USB control packet),DI(Data In)了解吗?请指教,一定给分. |
|
|
6楼#
发布于:2005-07-15 17:29
请教gxjt,我现在也碰到了类似的问题。
我现在使用isp1362驱动hp的打印机,使用pcl语言。正在PC上做试验。我用bushound通过bulkout端点直接向打印机发送pcl数据事,打印机根本没有反应。用bushound抓正常打印的数据时,发现在pcl数据包之间还夹着一些不认识的包。另外我看到你的帖子里的数据是在epson打印机上得到的,我用上述的方法在epson打印机acl c1100上打印出了结果。所以不知是不是hp有特殊的控制方法或指令。随帖附我抓到的数据的文件pcl5e on hp laserjet1160.txt和发送到打印机的数据文件2.prn。 |
|
|
7楼#
发布于:2005-07-15 17:54
楼主驱动过惠普打印机吗?
我打算使用isp1362驱动hp的打印机,使用pcl语言。现正在PC上做试验。我用bushound5.0直接向打印机所在的USB端口的BULK OUT endpoint发送PCL格式的数据,结果发现:当数据包的长度大于4096字节时,该软件就不能发送这些数据;当数据包长度小于4096字节时,数据被发送,但是打印机没有任何反应(BULK OUT 的buffer为4096字节)。同样的办法在epson打印机上可以实现。所以我考虑:向hp打印机输出时,除了输出PCL格式的数据,是否还需要输出其它的数据或命令? 随帖附我抓到的数据的文件pcl5e on hp laserjet1160.txt和发送到打印机的数据文件2.prn。 |
|
|
8楼#
发布于:2005-07-15 19:29
请教,惠普打印机的打印问题
请教,惠普打印机的打印问题 |
|