嵌入式系统课程设计移动打印终端.docx

上传人:牧羊曲112 文档编号:5179305 上传时间:2023-06-11 格式:DOCX 页数:32 大小:396.15KB
返回 下载 相关 举报
嵌入式系统课程设计移动打印终端.docx_第1页
第1页 / 共32页
嵌入式系统课程设计移动打印终端.docx_第2页
第2页 / 共32页
嵌入式系统课程设计移动打印终端.docx_第3页
第3页 / 共32页
嵌入式系统课程设计移动打印终端.docx_第4页
第4页 / 共32页
嵌入式系统课程设计移动打印终端.docx_第5页
第5页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《嵌入式系统课程设计移动打印终端.docx》由会员分享,可在线阅读,更多相关《嵌入式系统课程设计移动打印终端.docx(32页珍藏版)》请在三一办公上搜索。

1、山东农业大学信息学院计算机科学与技术专业嵌入式系统课程设计报告设计名称:嵌入式移动打印终端学号 :20071044专业班级:计算机一班学生姓名:万海朝指导教师:柳平增嵌入式移动打印终端开发1项目概述在信息社会中,打印终端应用非常广泛,比如超市的收银系统、图书馆的借书还书系统、移动营业厅 的话费打印系统等场合,我们都可以看到打印终端的身影。传统打印终端通常都是在PC加上一个微型打 印机构成,这种架构的打印终端价格比较昂贵,体积庞大,移动笨拙,使用十分不便。随着嵌入式技术的发展,许多原来基于PC的应用都纷纷转向基于嵌入式技术来实现。基于嵌入式技 术的产品具有非常明显的优势,如价格便宜、功耗低、体积

2、小及移动方便等。具体到打印终端这个产品上 来说,可以从表1看出基于PC的打印终端和基于嵌入式的打印终端在各个方面的差异性。表1 打印终端差异比较基于PC的打印终端基于嵌入式的打印终端价格几千元不等几百元体积很大非常小性能强较强开发方便性易较易移动方便性难易本项目实例中拟开发的嵌入式移动打印终端是解决从数据输入、数据处理和数据输出的一体化系统,它提供下列几个功能: 数据录入功能:支持从扫描仪端录入数据; 通过网络到数据库查询; 数据打印功能。2嵌入式移动打印终端总体架构构建21总体架构嵌入式移动打印终端是一套完整的嵌入式应用系统,包括硬件和软件两个部分。从硬件角度来看,该系统由以下3大部件构成:

3、 数据输入部件(手持扫描仪)-完成数据输入功能; 数据处理部件(嵌入式开发板和远程服务器)-完成数据处理任务;数据输出部件(微型打印机)-完成数据打印功能。各个部件之间的关系如图1所示。远程服务器嵌入式开发板扫描机打印机图1嵌入式移动打印终端架构1)数据输入部件通常一个系统可以有很多种输入数据的途径,常用的输入设备有键盘、鼠标等。在嵌入式移动打印终 端中,只采用了扫描仪来完成数据的输入工作。2)数据处理部件数据处理部件是整个应用系统的核心,它的主要任务使得到扫描仪传来的数据,然后连接远程服务器, 将数据传送到远程服务器端,完成程序任务后,从远程服务器端得到结果,然后将结果送给微型打印机打 印。

4、所以,数据处理部件包括嵌入式开发板和远程服务器两个部分。嵌入式开发板和远程服务器之间通过 网络线相连。3)数据输出部件在超市收银系统中,收银员最后的一个动作总是打印顾客的单据。同样,在嵌入式移动打印终端系统 中,最后一个动作也是将查询到的结果通过一个微型打印机打印出来。2.2软/硬件选型从2.1部分的描述中可以看出,整个系统有四个关键的设备组成:手持式扫描仪、嵌入式开发板、远 程服务器和微型打印机。1)手持式扫描仪该扫描仪主要完成的功能其实是条码扫描的任务。条码扫描仪是用来扫描条形码的设备,利用光学原 理,把条形码的内容解码以后通过数据线或者无线的方式传输到电脑或者别的设备中。目前,条形扫描仪

5、通过有线的方式和电脑连接,主要有PS/2键盘接口、RS-232串口、USB接口 3种 接口;通过无线方式和电脑连接主要有蓝牙和2.4G的方式,一般无线的距离基本都在30-100m之内。条形扫描仪按条码分类繁杂,按照读取设备所采用的读取方式可分为:CCD和激光两种扫描模式;按 接触方式可分为:接触式和红外线射频是;按照每次扫描线数的多少和分方向可分为:单线扫描、多线扫 描、单线/多线可选扫描;按扫描时能在多少角度上读取信息科分为:单行扫描和全方位扫描、单线/多线 平行扫描、快速迷你型全方位扫描。选择一个合适的扫描仪,可以从下面几个指标来把握: 工作距离(景深):景深指扫描时扫描仪和条形码之间的距

6、离,通常情况下,扫描距离可以从零(接 触式)到若干英尺,扫描距离由条码扫描仪决定; 标签尺寸:标签尺寸描述被扫描条码的整个宽度; 条码密度:条码密度指能够满足阅读的最小条和空模块的宽度; 电气特性:电气特性描述扫描仪的工作电压、电流等指标。它是我们选型时要高度关注的一个目 标,选择的标准就是尽量要和整套系统的电气特性比较一致。 接口类型:选择扫描仪时,其接口一定要是嵌入式开发板所支持的类型。上述几个指标因素相互关联,在每一方面,用户都要综合考虑。本系统中,考虑到实际实验运用时对 扫描仪要求不高,因此采用展盟CHAMP SD313条码扫描仪,该扫描仪参数具体如表2所示。表2 CHAMP SD31

7、3条码扫描仪参数.光学系统:2048PixelCCD光学规格.扫描速度:每秒100次.光源:红色可见光LED(660nm).读取条码宽度:可读至90mm.扫描距离:0-20mm接口类型 支持键盘和RS-232C接口 条码 种类:WPC(EAN-13,EAN-8,UPC-A,UPC-E) Code 128 Code 39Coda BAR Code 11,Code39,Code39extened,Interleaved 2of 5,Code 32,EAN-128,ChinIATA,MSI/PLESSY,STD 2 of 5, Martix 2of 5,Italian Pharmacy Code,I

8、ndustrial 2 of 5,BC-412,中国邮政码电气规格 电压:5V DC 10% 操作规格:60-70mA 待机电流:20-30mA其他 操作温度;0oC +40 oC 传输线:1.75m 重量:165g(未含传输线) Chicun:长 166mmX 宽 90mmX 高 32mm2)嵌入式开发板嵌入式开发板是本系统的核心部件,它担负着整个系统中心枢纽的重担,同时,它的选型也直接影响 到上层操作系统和其它部件的选型。所以,在选择这个部件时,要站在整个系统的高度来进行。选择嵌入式开发板要考虑的因素非常多,但必须首先考虑下面几个核心要素: 接口类型:在本系统中,嵌入式开发板连接着扫描仪、

9、远程服务器和微型打印机。所以,开发板 上必须具备和这些部件连接的接口,如和扫描仪连接时需要的RS-232C串口,和远程服务器连接 时的网络接口,和微型打印机连接时的打印接口。 所支持的操作系统:嵌入式开发和单片机开发核心的区别之一就是嵌入式开发往往基于一个操作 系统之上来进行。嵌入式操作系统种类繁多,各具特色,因此,必须要选择一个较通用和易用的 操作系统平台。在本开发实例中,我们选择嵌入式Linux作为后面的平台开发。 性价比:如果作为产品来开发,必须要考虑产品在价格上的竞争要素。嵌入式开发板可以自己设 计,也可以直接购买市场上已有的成熟开发板,当然这种开发板一定是能够满足使用的最小系统, 即

10、裁减掉任何用不到的多余软/硬件。如果选择购买其他公司已有的开发板,首先要看该开发板 是否稳定,其次要看该开发板是否能够提供所需的软件,比如各个部件的驱动;再次要看开发板 的售后支持。在设计嵌入式移动打印终端系统时,根据上面几个要素,我们选取深圳尤龙公司生产的ST2410嵌入 式开发板,该开发板的各个参数如表3所示。表3 ST2410开发板参数硬件参数软件参数 采用三星公司的S3C2410,主频可达203MHZ 64MB的SDRAM,有两片K4S561632组成,工作在32位模式下 64MB Nand Flash,采用 K9F1208,可以兼容 16MB、32MB 或 128MB;2MB的Nor

11、 Flash,采用的是SST39VF1601,工作在16位模式下 10Mbps以太网接口,采用的是CS8900Q3,带传输和链接指示灯 测试源代码,启动引导源代码BIOS和下载烧写工具 sjf2410.exe Linux for 2410的内核源码包,以及内核交叉编译工具、 可运行的根文件系统及根文件系统制作工具mkcramfs qt-embedded-2.3.7 和 qtopia-free-1.7.0 源码,应用 LCD和触摸屏接口 1 个 USB Host,S3C2410 内置的,符合 USB1.1,一个 USB Device, S3C2410内置的,符合USB1.1 支持音频输入和音频输

12、出,音频模块由S3c2410的IIS音频总线 接口和UDA1341音频编码解码器组成,板上集成了一个MIC,用 于音频输入 2路UART串行口,波特率可高达115200bps,并具有RS-232电 平转换电路 SD 卡接口,兼容 SDMemory Card Protocol 1.0 Embedded-ICE(20脚标准JTAG)接口和并口式JTAG接口,支持 ADS、SDT软件的下载和调试,以及Flash的烧写 串行 EEPROM: AT24C02 4KB EEPROM,IIC 接口 蜂鸣器、4个LED灯、4个按键程序jiaocha编译器 WinCE4.2.NET板机支持包BSP for 24

13、10,以及已经编 译好的WINCE镜像文件 ST2410即部分板上扩展芯片的资料 ST2410底板和核心板电路原理图(pdf格式) ST2410开发板使用手册(pdf格式) 实用工具ST2410嵌入式开发板的外观如图2所示复位键导航按键I SB 主口USB 从口 /网口图2 ST2410嵌入式开发板外观3)微型打印机微型打印机采用荣达科技RD-M系列微型打印机,该快采用独特的面板式嵌入结构,便可将整个打印 机固定在仪表面板上,操作简单、方便。该款打印机的性能指标如下: 打印方式:针打,针式撞击点阵打印;热敏,热敏加热点阵打印。 打印速度:针打,1.0行/秒,0.7行/秒,0.4行/秒(5X7点

14、阵字符);热敏,35毫米/秒。 分辨率:针打,8点/毫米,384点/行。 打印宽度:针打,33mm/48mm;热敏,48mm。 字符数/行:针打,16/24/40;热敏,32。 打印字符:全部448个字符集图块,包括96个ASCII字符,352个希腊文、德文、俄文、法文等 字母,日文片假名,部分中文汉字,数字符号,打印字符,块图符;32个用户自定义字符。国际 一二级汉字库中全部汉字和西文字、图符共有817个。 字符大小:西文,5 X7点阵;块图符,6 X 8点阵;用户自定义字符,6 X8点阵; 汉字,24 X24点阵,16 X 16点阵,12 X12点阵。 控制板:采用模块化驱动控制电路,有效

15、保护打印头的绝对安全;专门的复位控制电路、电源检 测电路以及近乎完美的软硬件看门狗控制电路,确保打印机不死机、不乱打。热敏控制电路提供 温度检测、电压检测、过热检测、缺纸检测,有效延长打印头的使用寿命,更能保证打印机在不 同的工作场合打印效果清晰美观、高效流畅、完整、无噪声。 控制命令:通用ESC/P打印命令。支持字符、汉字、图形的正向、反响、左右旋转打印、反白、 上下划线、左右划线打印以及任意变高、变宽、行间距、字间距调整,水平制表、垂直制表,曲 线打印,条形码打印等功能,以及以上功能的混合打印,也可以根据用户需要适当增减相关命令。 打印汉字:V8型、VS型可通过随机软件自由选择打印汉字的数

16、量、汉字的字体、汉字的点阵, 并通过随机电缆下载至打印机。打印汉字只需输入相应汉字代码即可方便快速打印。8+型标配16 X16点阵与12 X12点阵国标一、二级汉字字库。 打印缓存:32KB。4)远程服务器远程服务器用于存放大型数据库,它通过网络接口接受嵌入式开发板发来的数据,然后进行查询、更 新等处理工作,最后把结果再传给嵌入式开发板。所以,远程服务器必须具备较强的数据存储能力和网络 通信能力。在本系统设计中,我们可以用一台普通pc来完成这个功能。5)软件选型嵌入式系统是一个软/硬件相结合的系统,硬件好比人的身体,而运行在其上的软件则好比人的灵魂。 没有软件的驾驭,硬件只是一些废铜烂铁,因此

17、,相比较硬件选型而言,软件的选择也异常重要。在整个 软件选型中,要特别重视两个方面的因素: 运行其上的嵌入式操作系统:嵌入式操作系统是整个软件的核心和基础,它的功能的强大与否直 接影响后面整个系统的设计,因此必须加以重视。目前嵌入式操作系统有几百种之多,它们各具 特色,各有相应的用武之地。通常来说,各个嵌入式开发板提供商,在其嵌入式开发板上会提供 已经移植好的的几个嵌入式操作系统,这些操作系统通常为嵌入式Linux、WinCE、VxWorks和 uCosIIo uCosII是一个非常好的教学操作系统,但由于其功能较少,在商用领域使用比较少。而 VxWorks由于较昂贵的使用费用,在中小型公司中

18、使用也较少。WinCE主要用于PDA等领域,嵌 入式Linux由于其源码开放,共享资源丰富,整个系统功能异常强大,因此在嵌入式领域应用得 也最为广泛。 软件驱动支持:由于不同的嵌入式开发板上提供的接口也各不相同,因此Linux内核源码包不可 能提供所有外设接口的底层驱动。通常情况下,这些底层驱动或者由嵌入式开发板提供商做好后 提供给用户使用,或者由用户自己开发出来。而底层驱动的开发是整个系统设计中比较耗时的工 作,所以用户在选择开发板时,尽量选择已提供自己所需要的底层驱动的开发板,这样可以缩短 项目的开发周期,减少项目投资,提高整个产品的竞争力。3软/硬件设计3.1设计流程嵌入式移动打印终端系

19、统开发可以划分为5个模块: 开发环境的建立 硬件的设计 扫描仪驱动的设计 打印机驱动的设计 服务器数据库的设计及通信模块的开发整个设计思路是:从硬件到软件,从底层到上层的设计方法。总统设计流程图如3所示。图3嵌入式移动打印终端总体设计流程图3.2硬件设计由于本开发系统中的核心部件采用已有的开发板,硬件设计的任务就大为简单,其核心任务就转化为 通过嵌入式开发板将各个部件连接在一起。1)嵌入式开发板和扫描仪的连接从图3可以看出,整个嵌入式开发板提供两个串口,其串口部分的点亮器设计如图4所示。图4中J8为串口 0,使用9根线中的5根;而J7为串口 1,使用9根线中的3根。通常情况下,串 口 0用作整

20、个系统的控制终端,所以串口1来连接扫描仪。下面来比较串口1和扫描仪接口,看看扫描仪 是否可以直接连到开发板的串口 1上(见表4)TxD0TxD1 RxD0 RxD1uRTS01345111012_9C16 0.1吁150 1声IC14I 0.pEC17 0 1申C1+VCCC1-GNDC2+V+C2-V-T1INT1OUTT2INT2OUTR1OUTR1INR2OUTR2INMAX3232C1+VCCC1-GNDC2+V+C2-V-T1INT1OUTT2INT2OUTR1OUTR1INR2OUTR2INMAX3232/NCGND0.1nFdGNDVDD33V图4 ST2410嵌入式开发板串口部

21、分电路设计表4比较串口 1和扫描仪接口嵌入式开发板串口1扫描仪上串口串口头类型公头母头电平类型RS-232电平RS-232电平所用引脚引脚2:用于TXD引脚3:用于RXD引脚5:用于GND引脚2:用于TXD引脚3:用于RXD引脚5:用于GND通过表4中的比较,可以看出扫描仪可以直接接到嵌入式开发板上。2)嵌入式开发板和远程服务器连接嵌入式开发板ST上有一个Mbps以太网接口,其接口部分电路如图5。GND VDD33VR32VD2 LINK lankleD 1 一 VD LANLED -LINK UBR31 1L680R680R图5嵌入式开发板ST2410以太网接口电路图远程服务器同样具有网络接

22、口,可以通过网线直接将这两个设备接入到网络中。3)嵌入式开发板和微型打印机连接此处采用的打印机为北京微达电子有限公司生产的WD-16ANP微型打印机,此打印机是一种面板式超 小型点阵式通用打印机。整体体积小,重量轻,功能完善,操作简单,连接方便。表5列出了此类型打印 机的主要特点。表5 WD-16ANP微型打印机的主要特点打印方法撞击式点阵打印支持打印的字符共448个字符,包括: 全部96个ASCII字符(5X7点阵) 希腊文、德文、俄文、法文等字母 数学符号、打印符号 块图符(6 X8点阵) 32个用户可定义字符(6 X8点阵) 专用汉字库16 X16点阵国标汉字接口 并行接口插座(26线针

23、型扁平电缆插座) 串行接口插座(D型9线孔型插座)打印宽度16字符/行、24字符/行或40字符/行打印速度1.2行/秒,0.7行/秒或0.4行/秒打印纸44.5mm电源直流,电压5V 土 5%,电流 1.5A信号电平TTL电平WD-16ANP微型打印机具有串口和并口两种接口类型,但是由于嵌入式开发板上两个串口都已被使用 掉,所以此处必须使用其并口来和嵌入式开发板连接。从图2中可以看出,嵌入式开发板上没有并口接口, 但是开发板上有一些多余的GPIO 口,恰好可以利用这些GPIO 口来构建一个并口。 WD-16ANP微型打印机的并行接口WD-16ANP微型打印机采用了与CENTRONICS标准兼容

24、的并行接口,接口插座为26线针型扁平电缆插座。 并行接口插座引脚序号如图6所示。图6并行接口插座引脚序号并行接口各引脚信号定义如表6所示。表6并行接口各引脚信号定义引脚号信号方向说明1STB入数据选通脉冲,上升沿时读入数据3DATA1入这些信号分别代表并行数据的第1-8位信息,每个 信号当其逻辑为“1”时为高电平,逻辑为“0”时 为低电平5DATA2入7DATA3入9DATA4入11DATA5入13DATA6入15DATA7入17DATA8入19ACK入回答脉冲,“低”电平表示数据已被修改21BUSY出“高”电平表示打印机正在“忙”,不能接收数据23PE出接地25SEL出经电阻上拉“高”电平,

25、表示打印机在线4ERR出经电阻上拉”低”电平,表示无故障2,6,8,26NC出未接10GND出接地 设计接口板表6显示WD-16ANP微型打印机的并行接口虽然有26个引脚,但真正使用的只有15个,其中有两个 地线。因此如果要在嵌入式开发板上使用GPIO 口构建一个并口,其实只需要13个GPIO线就可以了。通过查看开发板上的电路图,可以找到GPC8-GPC15和GPD0-GPD413个GPIO引脚空闲(它们其实是LCD 的引脚,由于没有使用LCD,故可以他用,如果要使用到LCD,则必须另外找13个空闲引脚出来)。接口板电路连接如图7所示。由于开发板的GPIO 口和打印机不是一一对应的,因此还需要

26、做一块转接板,在转接板上将两边的引 脚按照图8所示对应正确,并焊接好。其中要注意的是,打印机的SELECT和ERROR要经过上拉电阻才能置“高”,因此必须在SELECT和GPD3、ERROR和GPD4之间接一个4.7KQ的上拉电阻,具体接法如图8所示。3VCC5V4.7Q图8引脚SELECT与GPD3之间接上拉电阻同样,ERROR与GPD4接法相同。从图7可以看出,微型打印机和嵌入式开发板的GPIO是直接焊接到一起的,这样做有个非常重要的 原因,GPIO和微型打印机引脚电平相同,都采用TTL电平。3.3打印机驱动的设计前面对嵌入式Linux下的驱动开发已经做了很深入的探讨,微型打印机的驱动仅是

27、一个特例而已。按 照编写嵌入式驱动的方法步骤,打印机驱动的编写可分为下列几个环节。定义主设备号和设备名;实现社保驱动初始化函数和清除函数;设计所要实现的文件操作,定义file_operation结构,实现所需要的底层接口调用函数;将驱动编译到内核或编译成模块,用insmod命令加载;生成设备节点文件。下面就上述几个环节内容分别阐述。1) 定义主设备号和设备名#define DEVICE_NAME weida_printer”#define WEIDA_MAJOR 234/微型打印机的主设备号2) 设备驱动初始化函数和清除函数module_init(weida_printer_init);mod

28、ule_exit(weida_printer_exit);MODULE_LICENSE( GPL” );其中,初始化函数module_init(weida_printer_init)中完成设备注册任务和微型打印机端口初始化任务, 具体代码如下:static int module_init(weida_printer_init)int ret;ret=register_chrlev(WEIDA_MAJOR,DEVICE_NAME,&weida_printer_fops);if(ret0)printf(DEVICE_NAME can t register major numbern” );retu

29、rn ret;weida_printer_io_port_init();weida_init();printf( weida_printer_init!n “);return ret; 注册设备Register_chrdev(WEIDA_MAJOR,DEVICE_NAME,&weida_printer_fops)完成设备注册任务,其中 WEIDA_MAJOR 为主设备号,DEVICE_NAME 为设备名,weida_printer_fops 为 struct file_operations 结构 体变量,其内部每一个成员都是函数指针,指向对应的微型打印机底层接口函数。 初始化GPIO端口gpi

30、o_data_tb = GPIO_C8,GPIO_C9,GPIO_C10,GPIO_C11,GPIO_C12,GPIO_13,GPIO_C14,GPIO_C15;#define DATA_NUM(sizeof gpio_data_tab)/sizeof(gpio_data_tab0)#define WEIDA_DATA_READY GPIO_D0#define WEIDA_ACK GPIO_D1#define WEIDA_BUSY GPIO_D2#define WEIDA_SELECT GPIO_D3#define WEIDA_ERROR GPIO_D4weida_printer_to_ini

31、t()函数将调用一些设置GPIO 口的函数将GPIO初始化:static void weida_printer_to_init(void)int I;unsigned gpio;for(i=0;iDATA_NUM;i+)gpio=gpio_data_tabi;set_gpio_ctrl(gpio|GPIO_PULLUP_DIS|GPIO_MODE_OUT);write_gpio_bit(gpio,0);set_gpio_ctrl(WEIDA_DATA_READY|GPIO_PULLUP_DIS|GPIO_MODE_OUT);set_gpio_ctrl(WEIDA_ACk|GPIO_PULLUP

32、_DIS|GPIO_MODE_IN);set_gpio_ctrl(WEIDA_BUSY|GPIO_PULLUP_DIS|GPIO_MODE_IN);set_gpio_ctrl(WEIDA_SELECT|GPIO_PULLUP_EN|GPIO_MODE_IN);set_gpio_ctrl(WEIDA_ERROR|GPIO_PULLUP_EN|GPIO_MODE_IN);printf( “ init port!n” );Set_gpio_ctrl ()函数用于设置 GPIO 口的相关属性,如,set_gpio_ctrl(WEIDA_DATA_READLY|GPIO_PULLUP_DIS|GPIO_

33、MODE_OUT)设置 GPIOD0 口的一些属性,其中 WEIDA_DATA_READLY 为连接打印机的 ready 口的GPIO_D0 口,GPIO_PULLUP_DIS设置不需要上拉电阻,GPIO_OUT设置GPIO 口为输出口,同样可 以定义其他几个GPIO 口相应属性。 初始化打印机static void weida_init(void)INIT_WEIDA;SET_LANDSCAPE;SET_FONT_SPACE(2);SET_LINE_SPACE(2);DELETE_LINE;上述几个宏用来初始化打印机,它们的宏体中都用到type_data(n)函数,该函数是嵌入式开发板向微

34、型打印机发送ASCII码数据n,其具体实现代码如下:static void type_data(unsigned char data)int data_bit,j;mdelay(150);for(j=0;j8;j+)data_bit=(data&(1j);printf( dn” ,data_bit);write_gpio_bit(gpio_data_tabj,data_bit&0x01);udelay(2);DATA_READY(0);udelay(2);DATA_READY(1);每次发送数据时都要延迟几毫秒,以防向打印机发送过快,打印机来不及处理而产生丢数据现象,所 以要设置延时。INIT

35、_WEIDA 宏作用:向微型打印机发送Esc和字符,用来初始化打印机。定义:#define INIT_WEIDA (type_data(27);type_data(64);)SET_FONT_SPACE(2)宏作用:用于设置打印机字符。定义:#define SET_FONT_SPACE(type_data(27);type_data(32);type_data(n);)SET_LINE_SPACE(2)宏作用:用于设置打印机行列距。定义:#define SET_LINE_SPACE(type_data(27);type_data(49);type_data(n);)SET_LANDSCAPE

36、宏作用:设置landscape打印模式。定义:#define SET_LANDSCAPE(type_data(28);type_data(75) 模块清除函数static void weida_printer_exit(void)Unregister_chrdev(WEIDA_MAJOR,DEVICE-NAME);3) 定义file_operation结构体变量,编写底层接口调用函数static struct file_operation weida_printer_fops= owner THIS_MODULE;ioctl: weida_printer_ioctl, poll: weida_

37、printer_select, write:weida_printer_write, open:weida_printer_open, close:weida_printer_close;从上面变量定义可以看出,定义5个底层接口操作函数,这5个接口函数完成的功能如下:weida_printer_ioctl:设置打印机字体、行距、大小等功能;weida_printer_write:完成打印操作;weida_printer_open/weida_printer_close:打开/关闭打印机;weida_printer_selec t:选中打印机。 weida_printer_write()该函数完

38、成打印操作,在该函数中,首先判断打印机是否在线,是否忙,是否准备好,在打印机准备好的情况下完成数据打印任务。函数的具体实现代码如下:static int weida_printer_write(struct file *file,const char8 buffer,size_t count,loff_t *ppos)unsigned char *kbuf;int ready; /判断打印机是否忙ready=read_gpio_bit(WEIDA_BUSY);if(ready)return - EBUSY;/判断打印机是否在线readyread_gpio_bit(WEIDA_SELECT);i

39、f(!ready)return - EAGAIN;ready=read_gpio-bit(WEIDA_ERROR);if(!ready)return - EINVAL;kbuf=kmalloc(count+1,GFP_KERNEL);memset(kbuf, ” 0” ,count+1);if(copy_from_user(kbuf,buffer,count)printf( “copy form user wrong!” );kfree(kbuf);return - EFAULT;while(*kbuf!= 0” )type_data(*kbuf);while(read_gpio_bit(WE

40、IDA_ACK)printf( c” ,*kbuf);kbuf+;Kfree(kbuf);Return count;打印时用函数copy_from_user(kbuf,buffer,count)将数据从用户态读到核心态。 weida_printer_ioctl通过该函数对打印机的字体、行距等属性进行设置,函数的具体实现代码如下:static int weida_printer_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg)int num;switch(cmd)case WEIDA_I

41、OCSFONTSPACE:copy_form_user(&num,&arg,sizeof num);SET_FONT_SPACE(num);break;case WEIDA_IOCSLINESPACE:copy_form_user(&num,&arg,sizeof num);SET_UNDERLINE(num);break;case WEIDA_IOCSUPLINE:copy_form_user(&num,&arg,sizeof num);SET_UPLINE(num);break;case WEIDA_IOCSCHARACTER1:SELECT_CHARACTER1;break;case W

42、EIDA_IOCSCHARACTER2:SELECT_CHARACTER2;break;case WEIDA_IOCSDOT_MATRIX:copy_form_user(&num,&arg,sizeof num);SELECT_DOT_MATRIX(num);break;case WEIDA_IOCWEIDA:INIT_WEIDA;break;case WEIDA_IOCLAMPLIFY:copy_form_user(&num,&arg,sizeof num);LANDSCAPE_AMPLIFY(num);break;case WEIDA_IOCVAMPLIFY:copy_form_user(

43、&num,&arg,sizeof num);VERTICAL_AMPLIFY(num);break;case WEIDA_IOCSLANDSCAPE:SET_LANDSCAPE;break;case WEIDA_IOCSVERTICAL:SET_VERTICAL;break;case WEIDA_IOCSRIGHTLIMIT:copy_form_user(&num,&arg,sizeof num);SET_RIGHT_LIMIT(num);break;case WEIDA_ IOCSLEFTLIMIT:copy_form_user(&num,&arg,sizeof num);SET_LEFT_

44、LIMIT(num);break;case WEIDA_ IOCSHEX_PRINT:copy_form_user(&num,&arg,sizeof num);HEX_PRINT(num);break;case WEIDA_ IOCS2HANZI:SET_2_HANZI;break;case WEIDA_ IOCC2HANZI:CLEAR_2_HANZI;break;default:return - EINVAL;printf( ioctl!n” );return 0; weida_printer_select该函数用来选择打印机,函数的具体实现代码如下:static unsigned int

45、 weida_printer_select(struct file* file,struct poil_table_struct *wait)int ready;ready=read_gpio_bit(WEIDA_BUSY);if(!ready)return 1;poll_wait(file,&weida_printer_wait,wait);printf( select!n” );return 0;4) 编译扫描仪驱动上述微型打印机驱动代码存放在weida_printer.c和weida_printer.h中,并且放在/weida_printer目录下,在该目录下编写Makefile文件,内容如下:CROSS=arm-linux-

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号