基于 USB 传输的针式打印机驱动程序开发
1
.引
言
针式打印机曾经在相当长的一段时间占据打印机市场的主导地位,但是近年来由于喷墨、激光等非击打式打印机的冲击,针式打印机的市场份额逐年下降。即便如此,由于针式打印机在票据打印领域的不可取代性,同时鉴于当前国内打印机市场一直被国外品牌充斥的现状,我们设计并开发了这款基于
USB
传输的针式打印机。一个完整的
USB
针式打印机系统包括打印机软件和打印机硬件两部分,其中打印机软件负责打印任务的创建,而打印机硬件负责打印任务的执行。如果仔细划分,打印机软件又分为运行于主机系统的应用程序、打印机驱动程序和端口驱动程序,以及运行于打印机的打印机固件程序、打印机命令解析程序和打印机控制程序,打印机命令解析程序和打印机控制程序接受打印机主控程序的调度。打印机硬件也可分为电路组成和执行机构两部分。
2
.
针式
打印机
系统
设计
一个打印任务的完成必须要经过任务创建和任务执行两个步骤。在
Windows
操作系统下,打印任务起始于应用程序,如图
1
。当用户使用应用程序的打印功能后,应用程序将用户的打印任务提交给打印机驱动程序,打印机驱动程序将该任务解析为一些字符数据,包括打印机控制命令数据和打印图形数据。这些数据通过端口驱动程序发送到打印机。当打印机接收到打印数据后,首先解析这些数据为打印机的实际执行指令,然后由控制程序操作执行机构将位图信息打印到媒介上。整个打印数据的传输都建立在主机与打印机正常通信的基础上,这项工作由打印机固件程序完成。
了解了打印机系统的工作流程和系统内各个组件的作用,我们来对系统各个组件进行设计。
(1) Windows
打印机驱动程序设计
开发打印机驱动程序通常有两种途径:一是开发一个完整的驱动程序,二是利用微软提供的通用打印机驱动程序
( Unidrv )
开发小型驱动程序
( Minidriver )
。开发一个完整的驱动程序工作量大且过程复杂,因此我们采用通用打印机驱动程序
+
小型驱动程序来开发打印机驱动程序。
(2)
打印机固件程序设计
在
USB
协议中,不同的设备类具有着不同描述符和设备请求,
USB
打印机作为一种特殊的
USB
设备也有其特殊性,必须严格按照协议规定进行设计。在本文中,我们使用集成
USB
通信口的
At91sam7s32
芯片完成打印机固件程序开发。
(3)
打印机主控程序设计
打印机主控程序由打印机解析程序模块和打印机控制程序模块组成。解析模块通常使用顺序解析法解析数据,但是这种方法结构死板,解析效率低,为此本文提出了一种基于表格的解析法;对打印机执行机构进行控制是整个打印机系统的核心。一般采用的方法是使用单片机作为系统控制器,但是控制打印机需要同时控制两个步进电机和
24
个打印针头,对单片机处理速度要求较高,同时还要使用大量的单片机接口资源,
一般单片机都无法满足要求,为此我们提出了一种单片机
+CPLD
的打印机控制方法,有效的解决了这个问题。单片机使用上面提到的
At91sam7s32
,
CPLD
使用
Altera
生产的
EPM1270
芯片,该芯片具有
1270
个逻辑单元和
212
个用户引脚,满足打印机控制的速度要求和接口数量要求。
Windows
打印体系结构由打印假脱机系统(
SPOOL
)和一系列的打印机驱动程序(
DRIVER
)组成。
SPOOL
是
Windows
打印系统的核心,它有一个关键的作用就是对打印任务进行路由,将打印任务传递到正确的打印机驱动程序进行处理。打印驱动程序由打印图形动态链接库和打印接口动态链接库组成,打印图形动态链接库负责将打印任务解析为打印
3.1
小型驱动程序的开发
小型驱动程序是建立在通用驱动程序
( Unidrv )
基础之上的。通用驱动程序由打印图形动态链接库
UNIDRV.DLL
、打印接口动态链接库
UNIDRVUI.DLL
以及一些文本文件和二进制结构文件组成,这些文本文件和二进制文件文件构成了我们的小驱动程序。小型驱动程序的文本文件称为
GPD
(
General Printer Description)
文件,一个小型驱动程序可以由一个或多个
GPD
文件构成。小型驱动程序的二进制文件包括
GTT(Glyph Translation Table)
文件和
UFM
(
Unidrv Font Metric
)文件,
GTT
文件用来描述打印机所能支持的字体,
UFM
文件用来描述字体的尺寸大小。由于
GTT
文件和
UFM
文件不是小型驱动程序所必须的文件,所以这里只介绍
GPD
文件的设计方法。
基于 USB 传输的针式打印机驱动程序开发的更多相关文章
- 嵌入式系统USB CDROM虚拟光驱驱动程序开发
带U盘功能的的USB接口设备已经越来越常见了.如果能够把产品说明书或者产品设备驱动程序做成一个USB CDROM,那该多方便.假设:你已经有了USB mass storage驱动.你的任务是在此基础上 ...
- USB系列之九:基于ASPI的U盘驱动程序
USB系列之七和之八介绍了ASPI,并通过一些实例说明了基于ASPI的编程方法,本文使用前两篇文章介绍的知识以及以前介绍的有关DOS驱动程序下驱动程序的内容实际完成一个简单的基于ASPI的U盘驱动程序 ...
- WCF分布式开发步步为赢(4):WCF服务可靠性传输配置与编程开发
今天继续WCF分布式开发步步为赢系列的第4节:WCF服务可靠性传输配置与编程开发.这个章节,我们要介绍什么是WCF服务的可靠性传输,随便介绍网络协议的概念,Web Service为什么不支持可靠性传出 ...
- 基于全志H3芯片的ARM开发环境搭建
基于全志H3芯片的ARM开发环境搭建 最近买了个友善之臂的NanoPi M1板子,又在网上申请了个NanoPi NEO板子,这两个都是基于全志H3芯片的Crotex-A7四核ARM开发板,两个板子可以 ...
- 基于华为物联网IOT的应用开发 --- 基于.net 的SDK封装
最近,物联网的概念比较热门,一大批厂商抢着占领物联网的高低,包括有华为物联网.阿里云物联网.腾讯物联网.AWS物联网等等,无法一一列举,一般物联网包含设备侧开发.平台侧开发.应用侧开发,三个部分构成了 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于C#和Asp.NET MVC开发GPS部标监控平台
基于交通部796标准开发部标监控平台,选择开发语言和技术也是团队要思考的因素,其实这由团队自己擅长的技术来决定,如果擅长C#和Asp.NET, 当然开发效率就高很多.当然了技术选型一定要选用当前主流的 ...
- cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(二)
cWeb是基于微软的.Net Framework 4框架,数据库是sql server 2008 r2. cWeb开发框架下载,点击这里去下载. cWeb开发框架借鉴三层架构理论分为三层,分别是:cD ...
- cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(一)
cWeb开发框架是基于asp.net的B/S应用开发平台,采用三层架构理论,应用简单.代码简洁.运行快速. cWeb是bubufx提供,是分享资源,无任何版权限制,bubufx继续传承互联网精神,可随 ...
随机推荐
- 数据库安全之TDE列加密
透明数据加密(Transparent Data Encryption) TDE - 基于列的加密 由于有了Oracle的TDE-基于列的加密,你所要做的只是定义需要加密的列,Oracle将为包含加密列 ...
- 用UBOOT自带loadb命令加载应用程序到SDRAM中运行的方法
S3C44B0开发板中,用UBOOT自带loadb命令加载应用程序到SDRAM中运行的方法 1.开发板说明: 开发板上已有移植好的UBOOT运行. 2.交叉编译工具链为arm-linu-g ...
- nexus私服安装
一.搭建nexus私服.当前服务器版本是jdk1.8 . nexus安装包下载:http://www.sonatype.org/nexus/archived 先是下载目前最新的版本 Nexus ...
- 静态变量符 static
1.private是访问权限限定,static表示不要实例化就可以使用. (1)被static修饰的变量,叫静态变量或类变量,没有被static修饰的变量,叫实例变量. 对于静态变量在内存中只有一个拷 ...
- 高级进阶DB2(第2版)——内部结构、高级管理与问题诊断
<高级进阶DB2(第2版)——内部结构.高级管理与问题诊断> 基本信息 作者: 牛新庄 出版社:清华大学出版社 ISBN:9787302323839 上架时间:2013-7-3 出版 ...
- db2 存储过程迁移方法
大家在迁移数据库时,存储过程一般也要迁移过去,但一般有两个问题: 1. 非常多存储过程有先后关系(存储过程调用存储过程),假设存储过程数量少,还能手动操作.假设量大,那真是要疯了. 2. 存储过程过大 ...
- Mysql事务及行级锁的理解
在最近的开发中,碰到一个需求签到,每个用户每天只能签到一次,那么怎么去判断某个用户当天是否签到呢?因为当属表设计的时候,每个用户签到一次,即向表中插入一条记录,根据记录的数量和时间来判断用户当天是否签 ...
- Cocos2d-x 3.x 头像选择,本地相册图片+图片编辑(Android、IOS双平台)
大连游戏产业不是很发达,最后,选择一个应用程序外包公司.积累的工作和学习过程中的一点业余生活微信体验,我想分享的游戏小朋友的爱. 在应用开发过程中会经常实用户上传头像的功能,在网上找了N多资料发现没有 ...
- easyui 分页实现
1.用datagrid 做分页显示, 依据API样例,最终解决.废话不说,datagrid分页 有一个附加的分页控件 通过在datagrid中设置pagination:true 就会显示分页 当请求是 ...
- 双向链表JAVA代码
//双向链表类 publicclassDoubleLinkList{ //结点类 publicclassNode{ publicObject data; ...