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 传输的针式打印机驱动程序开发的更多相关文章

  1. 嵌入式系统USB CDROM虚拟光驱驱动程序开发

    带U盘功能的的USB接口设备已经越来越常见了.如果能够把产品说明书或者产品设备驱动程序做成一个USB CDROM,那该多方便.假设:你已经有了USB mass storage驱动.你的任务是在此基础上 ...

  2. USB系列之九:基于ASPI的U盘驱动程序

    USB系列之七和之八介绍了ASPI,并通过一些实例说明了基于ASPI的编程方法,本文使用前两篇文章介绍的知识以及以前介绍的有关DOS驱动程序下驱动程序的内容实际完成一个简单的基于ASPI的U盘驱动程序 ...

  3. WCF分布式开发步步为赢(4):WCF服务可靠性传输配置与编程开发

    今天继续WCF分布式开发步步为赢系列的第4节:WCF服务可靠性传输配置与编程开发.这个章节,我们要介绍什么是WCF服务的可靠性传输,随便介绍网络协议的概念,Web Service为什么不支持可靠性传出 ...

  4. 基于全志H3芯片的ARM开发环境搭建

    基于全志H3芯片的ARM开发环境搭建 最近买了个友善之臂的NanoPi M1板子,又在网上申请了个NanoPi NEO板子,这两个都是基于全志H3芯片的Crotex-A7四核ARM开发板,两个板子可以 ...

  5. 基于华为物联网IOT的应用开发 --- 基于.net 的SDK封装

    最近,物联网的概念比较热门,一大批厂商抢着占领物联网的高低,包括有华为物联网.阿里云物联网.腾讯物联网.AWS物联网等等,无法一一列举,一般物联网包含设备侧开发.平台侧开发.应用侧开发,三个部分构成了 ...

  6. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  7. 基于C#和Asp.NET MVC开发GPS部标监控平台

    基于交通部796标准开发部标监控平台,选择开发语言和技术也是团队要思考的因素,其实这由团队自己擅长的技术来决定,如果擅长C#和Asp.NET, 当然开发效率就高很多.当然了技术选型一定要选用当前主流的 ...

  8. cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(二)

    cWeb是基于微软的.Net Framework 4框架,数据库是sql server 2008 r2. cWeb开发框架下载,点击这里去下载. cWeb开发框架借鉴三层架构理论分为三层,分别是:cD ...

  9. cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(一)

    cWeb开发框架是基于asp.net的B/S应用开发平台,采用三层架构理论,应用简单.代码简洁.运行快速. cWeb是bubufx提供,是分享资源,无任何版权限制,bubufx继续传承互联网精神,可随 ...

随机推荐

  1. H5页开发规范/通用规范

    兼容目标 主流移动设备:iPhone 4+ .三星.魅族.华为.红米.小米1S 以上及主流 Android 千元机型:请特别关注iPhone4/4s.魅族MX4.华为P6等机型 操作系统:iOS 7. ...

  2. Kernel 4.9的BBR拥塞控制算法。

    重要的事情说三遍! BBR并不能突破带宽限制!!! BBR并不能突破带宽限制!!! BBR并不能突破带宽限制!!! 它的功能如下: 1.在高丢包率与低速率的网络中提升传输效果,充分利用带宽. 2.降低 ...

  3. Android开源项目分类汇总[转]

    Android开源项目分类汇总 如果你也对开源实现库的实现原理感兴趣,欢迎 Star 和 Fork Android优秀开源项目实现原理解析欢迎加入 QQ 交流群:383537512(入群理由需要填写群 ...

  4. poj 2749 Building roads (二分+拆点+2-sat)

    Building roads Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6229   Accepted: 2093 De ...

  5. Windows API一日一练(55)FlushFileBuffers和SetFilePointer函数

    在PC硬件体系结构里,速度最快的存储器是CPU里面的寄存器,接着到二级缓存,再到系统RAM内存,最后才到硬盘.因为这种体系结构,就决定了操作系统对文件的操作方式,或者说是最优化的算法.比方操作系统接收 ...

  6. 命名空间引用问题 包括找不到ConfigurationManager 这个类

        因为SqlConnection类是属于 System.Data.SqlClient命名空间下的,     所以命名空间引用的时候需要加上 System.Data.SqlClient,代码如下: ...

  7. 第二章:开始开发mod前你需要知道的一些事情

    <基于1.8 Forge的Minecraft mod制作经验分享> 是的童鞋,别着急.不管我写的再认真也不可能面面俱到,那么如果遇到了什么问题怎么办呢?所以咱必须先掌握一些基础的东西,这样 ...

  8. ServletContextListener 解析用法

    ServletContext 被 Servlet 程序用来与 Web 容器通信.例如写日志,转发请求.每一个 Web 应用程序含有一个Context,被Web应用内的各个程序共享.因为Context可 ...

  9. noip 2005 等价表达式

    /* 开始想的是 维护a的每个指数的系数 然而不好办 然而还有^10^10^10这种数据 特殊值带入吧 多搞几个素数 接下来就是玄学的事了 给a赋值之后 就是简单地表达式求值 虽然思路简单 但是字符串 ...

  10. apache的500错误是写到哪个文件里面

    apache的500错误是写到哪个文件里面