USB打印机驱动调试总结

主流的操作系统里面都会支持usb打印机驱动,比如linux,windows,vxworks等,但是这里指的驱动是指的打印机最底层的驱动,而不是指特定打印机的 驱动。打印机驱动相对于其它驱动而言,比如说键盘,鼠标等的驱动有很大区别,键盘鼠标驱动的类型比较统一,但打印机不一样,各个厂家打印机使用的驱动不一样,甚至同一个厂家,不同型号的打印机驱动都不一样。操作系统支持的打印机驱动是在这样一个层面,它给你搭建一个usb传输数据的通道,只要你系统上的usb口能够正常的传输数据到打印机,那么这层的程序功能也就完了。

至于你要传输什么字节流给打印机,打印机是否识别这种字节流,这就和打印机有关了,不同打印机在这方面是不一样的。就像你windows下买了一个打印机,插到windows下,你会发现操作系统识别了打印机,但任然需要安装它打印机驱动是一个道理。那如何验证某个操作系统下的usb打印机端口是没问题的呢?有一个办法,就是用一个usb抓包工具,在windows下抓取usb端口发往打印机的数据流,把这个数据流原封不动的在我的系统下发往打印机,如果打印机打印东西了,那说明我操作系统的打印机驱动是没问题的,这个工具在windows下可以用USBTrace,它是一个很强大的usb抓包工具。

操作系统自带usb打印机驱动没问题后,插上打印机后会在显示终端上有反应。Vxworks和linux下会在相应的设备节点上生成相应的设备节点,如果我要往打印机发东西,只需要用write函数往该节点发东西就行了。那打印机厂家有没有开源他们打印机驱动的代码呢?答案是有的,打印机厂家在linux中开放了一些打印机的源代码,这个集成包叫做FOO2ZJS,里面包含了一些类型的打印机驱动。如果打印机厂家没有给你提供这个打印机的源码,你个人是不可能写出他打印机的驱动的。因为你可以查看发往打印机的字节流,这种字节流不是以你要打印对象的方式(比如ASCII码“abc”或者汉字流)发往打印机的,它是一种图像流,如果是激光打印机,他的编码还跟激光工作的方式有关,如果你不是这个打印机的生产厂家,你没法做到。Foo2zjs集成包包含了三星的,以惠普的打印机居多,可以把它的源码下载下来,在linux上安装。安装后会在linux上生成很多打印命令,我用的打印机HP1020是在foo2zjs.c文件中你其实可以把这文件单独拿出来编译,它文件中的main函数就是foo2zjs命令的入口。你可以把它移植到任何操作系统下,这个文件的功能是什么呢?它的功能是把一个pbm的文件转化为打印机(这种打印机是它代码里面支持的)能够打印的格式。

在linux下一般的方式是把一个你需要打印的文件转化为pdf文件(这种工具在window下很多),再把pdf文件用linux下的ghostscript工具转化为pbm文件,再将这种文件交给foo2zjs。一开始我想不通它怎么会这么麻烦?这种方式且不说我在linux程序里面不能打印我想打印的字符串,就是我用这种方式转化了以后打印,我在windows下转化为pdf,那我直接在windous下打印不就得了么,何必我要绕这么一个弯来打印呢?

之前忽略了一点,就是这种pbm文件,这种pbm文件到底是种什么文件,用二进制工具打开它,会发现其实它是一种最原始简单的位图文件。

这种文件以P4.#开头,后面是一堆没用的注释以十六进制数0A结束,其中的826和1169很关键,这个代表了这个位图的宽和高,也就是这张图宽有826个点,高有1169个点,这其实就是图片的像素。在pbm这种图片中是以0和1来表示颜色,0表示白,1表示黑。可以用高级的图片查看器打开它,比如说ACDSee软件。这样一看就明白了当时的程序员为什么要这么设计了,因为打印机要支持汉字,又要支持图片,甚至其它国家的语言。最简单的方式是不管你是什么,只要给它转化为图片格式就行,你这图像是什么样,我就给你打印成什么样。

也就是说如果我要打印一个东西,只要我能把它转化为pbm格式(应该还有其它图片格式,比如说彩色图片,我的打印机是黑白的)。然后调用这个foo2zjs就可以把它打印出来,如何把字体从程序中打印出来?思路是有的,看懂pbm的格式后,我们可以把字体点阵的形式写在pbm中,因为任何字体,都是以点阵的形式保存的。把字体转化为图形这不是难事。

usb打印机驱动调试记录相关推荐

  1. android 蓝牙 驱动,转个蓝牙修改帖--Android BCM4330 蓝牙BT驱动调试记录

    本帖最后由 旋律2014 于 2014-3-27 09:15 编辑 一.关于BT driver的移植: 1. Enablebluetootch in BoadConfig.mk BOARD_HAVE_ ...

  2. Nvidia Xavier Nx平台GMSL接口imx390相机驱动调试记录

    1.前言 使用GMSL的串行器和解串器9295 9296 两路imx390相机 有两种采集方式, 一种是在前端拼接好作为一路采集: 另一种是独立采集,使用MIPI的虚拟通道. 下面为调试记录 2. 搭 ...

  3. Android USB Camera(1) : 调试记录

    1. 前言 前段时间调试了一个uvc摄像头,这里做下记录.硬件平台为mt6735,软件平台为android 5.0 2. 底层配置 UVC全称是usb video class,一种usb视频规范.所有 ...

  4. 沁恒CH583 USB 自定义HID调试记录

    使用USB HID主要是为了免驱,通过自定义USB HID可以利用USB口来做很多事,比如串口打印,串口升级都可以通过usb口来实现,这样可以省去一个USB转串口器件同时也不用装驱动,如下实现可以通过 ...

  5. IMX6 wm8960 驱动调试记录

    最近在调试wm8960, 在此记录一下. ALSA 架构下,imx6平台的wm8960驱动支持两种模式. codec-master 在codec-master模式下,由芯片旁的晶振提供mclk时钟(我 ...

  6. Android BCM4330 蓝牙BT驱动调试记录

    网上关于BT的驱动很少,所以我在开发过程中把其中的步骤记录下来.供大家相互学习讨论. 一.关于BT driver的移植: 1. Enablebluetootch in BoadConfig.mk BO ...

  7. mtk平台androidl usb uvc camera 调试记录

    USB video class(又称为USB video device class or UVC)就是USB device class视频产品在不需要安装任何的驱动程序下即插即用,包括摄像头.数字摄影 ...

  8. USB设备驱动学习记录

    0:EHCI主控架构 1.关于设备地址SET_ADDRESS设置的逻辑: 可以看到set_address命令最终通过USB_DRV_WriteReg8(&musb->faddr, g_u ...

  9. bcm4360 蓝牙 linux,Android BCM4330 蓝牙BT驱动调试记录

    网上关于BT的驱动很少,所以我在开发过程中把其中的步骤记录下来.供大家相互学习讨论. 一.关于BT driver的移植: 1. Enablebluetootch in BoadConfig.mk BO ...

最新文章

  1. 顶级程序员的心得 Coders at Work (IV)
  2. STM32学了很久,我还是不会做项目。
  3. P6365 众数出现的次数(水)
  4. centos 7.1 apache 源码编译安装
  5. 什么是 gRPC ?
  6. 国内三巨头为什么那么成功
  7. batocera游戏整合包_安装游戏时电脑报错?提示XXX文件缺失?一个软件完美解决...
  8. FFmpeg总结(七)AV系列结构体之AVIOContext
  9. 期末考试_细胞自动机
  10. 大一python选择题题库及答案_大学计算机python选择填空题库及答案
  11. AD7705模数芯片原理详解
  12. HTTP无状态协议到底指的什么?
  13. CSS小游戏2048—简单小游戏编程有手就行~会玩?你会写吗?
  14. word中如何制作三线表
  15. spreadsheet php,PhpSpreadsheet的简单使用
  16. 设计模式中的行为类模式
  17. java的reveserOder_reverse是什么意思_reverse的用法
  18. 4 种经典方法IB 数学证明题分享给大家
  19. 浅析能源物联网技术在校园能耗监测系统中的应用与研究
  20. Linux系统中的ddns:dhcp+dns=ddns (花生壳)

热门文章

  1. 数字性格分析测试软件,性格测试:从你喜欢的数字看个性
  2. 盘点最新无人机超远高清视频图传网络解决方案
  3. Pycharm下载更换主题
  4. 校企合作全力推动“稳就业”
  5. 裸聊网站108亿条数据泄露,中国53万老哥有点慌
  6. 软考A计划-电子商务设计师-电子商务系统的测试
  7. 这些个辞职申请,在下确实佩服
  8. The label does not denote a loop in forEach
  9. 苹果电脑数据丢失怎么恢复?
  10. 基于STM32F407四旋翼无人机 --- 姿态解算讲解(四元数)(叉积法融合陀螺仪数据和加速度数据)(五)