|
找了一些资料,大概意思是hp这一系列打印机要先发固件过去,打印机才能进正常工作状态,
也就是打印机开机之后如果从没打印过,第一次发固件过去,估计打印机要消耗一段时间运行固件,
之后才可以正常打印
我修改的代码没等待时间,发固件过去就发打印内容了,可能这个时候打印机不能识别,
而第二次打印,这个时候打印机已经运行过固件了,就可以了,
明天看看怎么修改一下
参考https://www.right.com.cn/forum/thread-5452802-1-1.html以及https://www.right.com.cn/forum/thread-502078-1-4.html
有些广受欢迎的打印机,如我的HP Laserjet 1020,是所谓的GDI打印机,主要用于Windows系统。这种打印机设计时就简化了固件,ROM里根本没有真正干活的程序。打印机开机之后,必须由计算机把固件传过来安装到内存后,才能正常工作。在Windows系统里,打印机驱动程序就会自动做这个事。Windows支持热插拔技术,就算主机先开机工作,打印机后开机,Windows系统也会识别到USB口接入了打印机,进而发送固件给打印机。打印机在接收到固件后进行启动,这时我们会听到明显的自检轰鸣声。
但GDI打印机一般只提供了Windows下的驱动,将他们连接到Linux主机上并正常工作可不容易。有一些开源项目提供了Linux下的打印机驱动,配合CUPS打印服务器,就能让Debian、Radhat正常打印。最有名的开源项目是foo2zjx,里面的/osx-hotplug/osx-hplj-hotplug.m文件定义了九种HP打印机硬件特征码和对应的固件。阅读源代码,其中的0x03f0, 0x2b17, "/usr/share/foo2zjs/firmware/sihp1020.dl",对应的就是HP Laserjet 1020打印机,它的固件文件名为sihp1020.dl。这些固件可以自己编译生成,也能在网上(http://oleg.wl500g.info/hplj/)下载到现成的。
我们通常只是用Openwrt或Padavan做一个小型的打印服务器。客户机的Windows系统本来就有驱动,所以这里只探索如何在GDI打印机热插入时,作为打印服务器的路由器能识别到打印机并发送固件,让打印机能正常工作 谁提到过在路由上热插拔后会找不到打印机,然后他写了个脚本每10秒还是多长时间自动检测并连接打印机
现在这个脚本是利用linux的mdev的热插拔机制写的,只在系统开机时或插上打印机时调用一次。发送固件给打印机后,打印机会启动自检,因此可以用两个步骤来测试:
步骤一:把脚本添加进去后保存重启路由器,如果这时路由器是插了打印机的,启动后能听到打印机的自检声。
步骤二:从路由器上拔掉打印机USB插头,等几秒再插回去,也会再次听到打印机的自检声。 - HOTPLUG HotPlug[] =
- {
- 0x03f0, 0x0517, "/usr/share/foo2zjs/firmware/sihp1000.dl",
- 0x03f0, 0x1317, "/usr/share/foo2zjs/firmware/sihp1005.dl",
- 0x03f0, 0x4117, "/usr/share/foo2zjs/firmware/sihp1018.dl",
- 0x03f0, 0x2b17, "/usr/share/foo2zjs/firmware/sihp1020.dl",
- 0x03f0, 0x3d17, "/usr/share/foo2xqx/firmware/sihpP1005.dl",
- 0x03f0, 0x3e17, "/usr/share/foo2xqx/firmware/sihpP1006.dl",
- 0x03f0, 0x4817, "/usr/share/foo2xqx/firmware/sihpP1005.dl",
- 0x03f0, 0x4917, "/usr/share/foo2xqx/firmware/sihpP1006.dl",
- 0x03f0, 0x3f17, "/usr/share/foo2xqx/firmware/sihpP1505.dl",
- 0, 0, NULL, // Must be last
- };
复制代码 其实 P1007和P1005用的是同一个固件,P1008和P1006用的也是同一个固件。开源项目foo2zjx里面的/osx-hotplug/osx-hplj-hotplug.m文件定义了硬件特征码和对应的固件。上面是代码
|
|