历史上的今天
返回首页

历史上的今天

今天是:2025年02月05日(星期三)

正在发生

2018年02月05日 | 一种新型的基于Android平台的无线打印模块设计

2018-02-05 来源:eefocus

    在ARM芯片AT91RM9200上构建了无线打印模块的硬件平台,在Android操作系统上完成了软件平台的搭建,通过调用Linux内核的CUPS,实现移动终端在Android系统上直接打印文件的功能。

    Android作为基于Linux开放性内核的开源智能手机操作系统,为智能手机、平板等移动、嵌入式设备应用提供了便捷的系统级支持,但Android系统目前并不支持常用的USB打印功能,打印机厂家暂时也没有专门为Android设备提供打印机驱动程序。本文设计了一种新型的基于Android平台的无线打印模块,采用移植Linux下相关开源驱动的方式,通过调用Linux内核的CUPS(Common UNIX Printing System),实现And roid系统上的USB打印功能,为Android系统打开了一条实现USB打印驱动从上层应用到内核配置的通路。

1 系统总体设计方案
    本系统设计的嵌入式打印模块是通过WiFi无线网络接收客户机发送来的文件,在液晶屏上显示打印队列和打印文件信息,再通过USB接口把需要打印的文件发送到USB打印机上实现打印。总体设计框图如图1所示,文件打印数据流程图如图2所示。

a1.jpg?imageView2/2/w/550

a.JPG

    

2 系统硬件设计
    嵌入式打印模块的硬件主要包括:核心处理器、WiFi无线模块、USB打印功能模块、液晶显示模块等。核心处理器采用的是Atmel公司的AT91RM9200处理器。
    为了实现打印模块与USB打印机的通信,选用Philips公司的ISP1161A1芯片作为USB主机控制器。ISP1161A1的主机控制器部分符合USB1.1规范,支持全速(12Mbi/s)和低速(1.5 Mbi/s)的数据传输。ISP1161A1提供两个下行端口,可与USB打印机进行连接。WiFi无线模块采用的是G—SKY无线发射模块,其发射芯片是ReaLTEk公司的RTL8187芯片。液晶采用320×240的LFUBK909XA彩色(256色)点阵图形液晶模块,液晶控制器芯片为S1D13503。该液晶屏上带有触摸屏,采用触摸屏控制器FM7843进行A/D转换,转换结果输出到AT91RM9200处理器。系统总体硬件框图如图3所示。

b1.jpg?imageView2/2/w/550

    
    存储器系统提供2 MB的NOR FLASH和16 MB的NAND FLASH来存放BootLoader启动程序和应用程序。WiFi无线模块接收无线网络传输的文件,再送到USB芯片的下行口连接的USB打印机实现打印。

3 软件平台设计
    软件基于Android平台,经过精简移植与交叉编译完成软件平台的搭建,平台架构如图4所示。

b.JPG

    
    软件平台基于Android实现,人机操作界面采用Java语言编写,Java语言通过JNI访问打印框架链接库,再由打印链接库完成与后台打印服务程序的通信。整体实现遵循Linux系统下的CUPS标准,针对不同型号的打印机提供相应的CUPS打印驱动程序即可完成文件的打印。

4 CUPS打印机驱动程序设计
    CUPS作为通用打印系统,默认已支持多种类型的文档的打印,Linux下的打印流程如图5所示。

c1.jpg?imageView2/2/w/550


     本打印模块针对Android平台提供打印机驱动程序,既支持PS(PostScript)语言的打印机,也可以通过Imageto Raster和RastertotHP(或RastertoEpson)过滤器将需要打印的内容转换为HP公司的PCL(Print Control Language)、Epson公司的ESC/P等。Backend过滤器选用USB,以配合所选打印机的接口。打印实现流程图如图6所示。


c.JPG

    
    Backend过滤器USB打印接口是通过AT91RM9200,按照USB主机规范控制其自带的主机接口实现的,主要包括I/O缓存的初始化、USB主机芯片的初始化以及USB打印机的设备枚举及初始化等。USB打印机设备的驱动程序结构框图如图7所示,流程图如图8所示。

d1.jpg?imageView2/2/w/550

d.JPG

    
    首先对I/O缓存以及AT91RM9200的USB主机部分进行初始化。其中,关于USB主机部分的初始化包括了对外设时钟的设置,初始化host stack,将所有的TD、ED和HCCA全部归零,USB主机软复位,设置AIC中断等。
    然后通过对早先定义的全局变量HOST_Rhsclntr的监控,判断是否有中断发生,从而来判断是否有USB接口打印机的接入,以决定是否进行下一步的枚举操作。一旦检测到,主机则要等待400ms,使插入操作完成并使设备电源稳定工作。然后进行对USB打印机的枚举过程。
    再通过对函数USBHostPrinterGetStatus()的调用,查询当前的USB打印机的工作状态——是否离线,是否缺纸,是否发生错误。并根据得到Print_Status中的8位数值来判断打印机的工作状态,如果处于正常的等待打印的状态,则进入到正常打印状态。由于采用的HP公司支持USB口和PCL5打印命令的打印机,通过对相关PCL打印命令的调用,完成对打印机的复位、设置纸张大小、页面格式和字体大小等操作。紧接着则可以通过端点的调用进行数据的传输,进行打印工作。最后通过调用函数USBHostPrinterReset()再次对打印机进行软复位,等待下一次的打印请求。

5 实验结果
    实验采用HTC智能手机发送文本文件到打印模块,打印模块通过USB接口与HP激光打印机连接,打印模块将文件传输到打印机,最后由打印机打印输出。图9为打印模块打印设置界面,图10为打印操作页面。

e1.jpg?imageView2/2/w/550

e.JPG

    

    结语
    本文采用高性能ARM处理器AT91RM9200以及Android操作系统,采用移植Linux下相关开源驱动的方式,通过调用Linux内核的CUPS,实现Android系统上的USB打印功能,解决了智能移动终端没备(如智能手机或平板电脑等)不支持直接打印功能的问题,给移动用户带来了文件打印的便利。


推荐阅读

史海拾趣

Eris Technology Corp公司的发展小趣事

在汽车电子市场取得成功后,Eris Tech开始将目光投向工业控制领域。通过深入了解工业控制市场的需求和技术特点,公司成功开发出多款适用于工业控制领域的半导体产品。这些产品不仅具有高性能、高可靠性等特点,还能满足工业控制领域对实时性、安全性等方面的要求。随着工业控制领域的不断拓展,Eris Tech在该领域的市场份额也逐渐增加。

博众电气(BZCN)公司的发展小趣事

博众电气自创立之初,就明确了技术立企的战略方向。公司投入大量资源进行技术研发,不断推出具有竞争力的电子产品。其中,一项关键技术的突破为博众电气的发展奠定了坚实基础。这项技术使得公司产品在性能上大幅超越同类产品,赢得了市场的广泛认可。凭借这一技术突破,博众电气逐渐在电子行业中崭露头角。

BUSSMANN公司的发展小趣事

随着全球经济的不断融合和发展,Bussmann公司也开始了其全球化战略。公司在全球范围内设立生产基地和研发中心,吸引和培养了大量的优秀人才。同时,公司也加大了对新技术和新产品的研发投入,不断推出具有竞争力的新产品。在全球市场上,Cooper Bussmann的电路保护方案广泛应用于各行各业,并获得了UL、CE、CSA等认证机构的认可。

这些故事展示了BUSSMANN公司在电子行业中的发展历程和取得的成就。从创业初期的艰辛与坚持,到汽车熔断器的崛起,再到库柏工业的收购与融合,以及芯片保险丝的创新突破和全球化战略的实施,BUSSMANN公司始终秉持着创新、质量和服务的理念,不断推动电子行业的发展和进步。

请注意,以上故事是基于BUSSMANN公司的历史和发展情况创作的,具体细节可能并不完全准确。如需了解更多关于BUSSMANN公司的信息,建议查阅相关的历史资料或访问其官方网站。

Connect-Tech Products Corp公司的发展小趣事

Connect-Tech Products Corp公司深知人才是企业发展的核心力量。因此,公司注重人才培养和团队建设,通过定期举办培训、组织技术交流活动等方式,提升员工的专业技能和综合素质。同时,公司还建立了完善的激励机制,鼓励员工创新创造,为公司的发展贡献智慧和力量。这些举措不仅增强了公司的凝聚力和向心力,也为企业的发展提供了有力的人才保障。

AMD(超微)公司的发展小趣事

随着国内市场的不断饱和,Connect-Tech Products Corp公司开始寻求海外市场的发展机会。公司通过参加国际电子展、建立海外销售网络等方式,积极开拓国际市场。同时,公司还与国际知名企业展开合作,共同研发新产品,进一步提升了公司的技术水平和市场影响力。这些举措不仅为公司带来了更广阔的市场空间,也为其未来的发展奠定了坚实基础。

FWBELL公司的发展小趣事
用于实时检测电池温度,如热敏电阻、IC温度传感器等。

问答坊 | AI 解惑

分享: C语言书写的规范的好文

分享: C语言书写的规范的好文…

查看全部问答>

PWM问题

要通过单片机输出PWM,根据占空比不同来控制电机转动快慢,请问怎么具体怎么做呢?频率怎么定,占空比在程序中又怎样实现?谢谢…

查看全部问答>

DS1302时钟芯片在LCD上显示问号的问题。

我的DS1302在LCD上不能正常显示,很多地方出现问号。 温度值正常显示,但是年月日,时间都显示问号。 5,6,7引脚都加了10K的上拉电阻还是不能解决。程序用ISIS仿真没有问题。 换过一块1302还是这样,不知道是芯片问题?还是晶振没有起振? 另 ...…

查看全部问答>

怎样实现sd卡热插拔

fat16文件系统怎样实现SD卡热插拔。…

查看全部问答>

求SectorEditor源代码或者原理

求SectorEditor源代码或者原理      各位大虾,本人已经忙活了一周.至今没有找到在VISTA下写扇区的方法.     偶然发现SectorEditor可以做到,谁有代码的给我来一份 !     邮箱:   [email=liu ...…

查看全部问答>

关于PC与8255通信的问题

做了一个8255扩展的非标准的键盘 与PC通信 现在不明白的是8255怎么与PC通信 PC 上那么多端口怎么具体分配到8255上呢 谢谢了…

查看全部问答>

需要高手指点

                                 当然可以自己定义汉字的值,但程序的可读性差。 …

查看全部问答>

我是Aman我自豪,又玩了次ST7的汇编。

有史以来最花时间的芯片:ST7芯片ICP编程支持固件开发完成上个星期有ST代理商提出需要手持机支持ST7一款FLASH芯片。粗看资料后,时序并不难对付,即应允开发。感谢该代理商很快的寄来了样片。本以为2天即可搞定,不料竟花了4天时间,总计达30 ...…

查看全部问答>

写数据到RAM中遇到的疑惑

我今天在做一个RAM块的读写时遇到一个很奇怪的问题,我用的芯片是xilinx的spartan-3E   对RAM写操作的代码 always@(posedge write_clk or negedge rst_n) if(!rst_n) write_addr <= 0;   else if(write_allow) write ...…

查看全部问答>

吉时利今日发布高电压数字源表®2657A

美国俄亥俄州克里夫兰,2012年3月19日讯–先进电气测试仪器与系统的世界级领导者吉时利仪器公司今日发布2657A高功率数字源表。2657A为吉时利2600A系列高速、精密源测量单元数字源表系列产品增加了高电压功能。此系列仪器能帮助吉时利客户分析范围 ...…

查看全部问答>