王靈芝,蘭善燦
(閩南師范大學(xué)物理與信息工程學(xué)院,福建漳州 363000)
?
基于Android的無(wú)線打印系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
王靈芝,蘭善燦
(閩南師范大學(xué)物理與信息工程學(xué)院,福建漳州 363000)
本文以Android為平臺(tái)構(gòu)建無(wú)線智能打印系統(tǒng),系統(tǒng)設(shè)計(jì)包含基于Cortex-A9為控制核心的服務(wù)器和APP兩部分。移動(dòng)終端通過(guò)WiFi將需要打印的文檔發(fā)送至服務(wù)器端,該服務(wù)器通過(guò)USB與打印機(jī)連接,從而實(shí)現(xiàn)無(wú)線智能打印。通過(guò)移植Ghostscript及Hpijs工具實(shí)現(xiàn)了對(duì)惠普Deskjet1050打印機(jī)的驅(qū)動(dòng)。
Android;Cortex-A9;WiFi;USB;打印機(jī)
傳統(tǒng)的打印機(jī)需借助PC機(jī)及相應(yīng)軟件進(jìn)行驅(qū)動(dòng)打印。隨著Android系統(tǒng)及WiFi熱點(diǎn)的普及,借助移動(dòng)終端通過(guò)無(wú)線局域網(wǎng)的方式,擺脫傳統(tǒng)PC直接打印成為新的行業(yè)需求[1]。
本文設(shè)計(jì)了基于嵌入式技術(shù)的無(wú)線打印終端系統(tǒng),包含基于Cortex-A9為核心的服務(wù)器和APP兩部分。打印機(jī)通過(guò)USB與服務(wù)器相連,實(shí)現(xiàn)對(duì)打印機(jī)的控制及數(shù)據(jù)傳送;手機(jī)、平板等基于Andorid系統(tǒng)的智能移動(dòng)終端通過(guò)WiFi接入局域網(wǎng),將需要打印的文檔發(fā)送至服務(wù)器。系統(tǒng)終端通過(guò)文本格式轉(zhuǎn)換工具將接收到的文件轉(zhuǎn)換成打印機(jī)識(shí)別的語(yǔ)言發(fā)送給打印機(jī)。該設(shè)計(jì)的實(shí)現(xiàn)為局域網(wǎng)上的所有用戶提供了方便快捷的共享打印方式,有效地提高了打印效率。
打印機(jī)系統(tǒng)終端的設(shè)計(jì)以三星Exyson4412為核心控制平臺(tái)。該處理器為基于Cortex-A9的四核處理器,主頻可達(dá)1.4GHz。系統(tǒng)配備1GB雙通道DDR3,4GB固態(tài)硬盤EMMC存儲(chǔ)空間,可支持Linux 3.5或Android4.2的內(nèi)核版本。采用S5M8767電源管理芯片為系統(tǒng)提供多種工作電壓。采用DM9621以太網(wǎng)控制芯片連接無(wú)線路由器接入局域網(wǎng);使用芯片GM8285C實(shí)現(xiàn)RGB信號(hào)到LVDS信號(hào)的轉(zhuǎn)換;采用USB3503控制芯片與USB打印機(jī)相連;打印系統(tǒng)終端將接收的文件經(jīng)上層應(yīng)用執(zhí)行格式轉(zhuǎn)換后發(fā)送打印命令至USB打印機(jī)執(zhí)行打印。打印系統(tǒng)終端設(shè)計(jì)整體框圖如圖1所示。
Android嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境的搭建與標(biāo)準(zhǔn)的Linux開(kāi)發(fā)環(huán)境相類似[2],包括交叉編譯環(huán)境、Linux 3.0.15內(nèi)核的配置移植、Android 4.0.3系統(tǒng)的編譯移植以及Android文件系統(tǒng)的移植[3]。步驟如下:第一,使用交叉編譯工具鏈arm-linux-4.4.1作為交叉編譯工具;第二,對(duì)u-boot-2010.03版本的源碼進(jìn)行編譯移植;第三,配置Linux 3.0.15內(nèi)核,添加對(duì)USB打印機(jī)的支持;第四,對(duì)Android 4.0.3系統(tǒng)進(jìn)行編譯移植生成system.img、ramdisk.img、userdata.img的鏡像文件;第五,對(duì)上述四個(gè)步驟編譯生成的uboot、Linux內(nèi)核鏡像zImage及Android 4.0.3的鏡像文件ramdisk、system文件,完成系統(tǒng)開(kāi)發(fā)環(huán)境搭建[4];第六,Android系統(tǒng)中使用的是自帶的精簡(jiǎn)Toolbox工具,功能比較簡(jiǎn)單,在Android底層開(kāi)發(fā)的時(shí)候非常不便,需在Android下添加BusyBox對(duì)工具命令的支持。采用在Toolbox的基礎(chǔ)上新增BusyBox腳本內(nèi)容的解決方案,可通過(guò)安裝BusyBox Pro工具箱自動(dòng)完成腳本的添加[5]。
圖1 打印機(jī)系統(tǒng)終端設(shè)計(jì)框圖
目前,業(yè)界標(biāo)準(zhǔn)的兩種打印機(jī)語(yǔ)言分別是Adobe公司的PostScript(PS)語(yǔ)言和惠普公司的PCL語(yǔ)言。在Linux中,PS語(yǔ)言主要用于打印的接口,打印文件時(shí),應(yīng)用程序會(huì)把相應(yīng)的文件轉(zhuǎn)化成PS格式文件。系統(tǒng)終端打印機(jī)設(shè)備選型為惠普Deskjet1050噴墨打印機(jī),該款打印機(jī)支持惠普打印機(jī)標(biāo)準(zhǔn)頁(yè)面描述語(yǔ)言PCL3。但是惠普打印機(jī)并不能夠直接識(shí)別PS文件,因此需使用文件過(guò)濾器進(jìn)行轉(zhuǎn)換[6]。
Ghostscript是一套建基于Adobe、PostScript及可移植文檔格式(PDF)的頁(yè)面描述語(yǔ)言等編譯成的免費(fèi)軟件,可用于文件格式轉(zhuǎn)換器,將打印系統(tǒng)終端需要打印的PDF及PS格式的文件轉(zhuǎn)換成打印機(jī)能夠支持的位圖文件。
惠普噴墨打印機(jī)驅(qū)動(dòng)程序項(xiàng)目(Hpijs)是基于GNU自由軟件開(kāi)發(fā)的打印機(jī)驅(qū)動(dòng)程序,可以將RGB等位圖格式的文件內(nèi)容轉(zhuǎn)換成惠普打印機(jī)識(shí)別的PCL語(yǔ)言。在本設(shè)計(jì)中采用Ghostscript+Hpijs方案最終實(shí)現(xiàn)對(duì)打印機(jī)語(yǔ)言的轉(zhuǎn)換,打印機(jī)驅(qū)動(dòng)層次架構(gòu)如圖2所示。
圖2 基于ARM的打印機(jī)驅(qū)動(dòng)層次架構(gòu)圖
3.1 Ghostscript 9.04的編譯移植
設(shè)計(jì)方案中采用的是Ghostscript 9.04版本的編譯腳本,該版本對(duì)文件的處理功能完善,編譯出的腳本內(nèi)存相對(duì)于高版本要小,其腳本編譯后自帶字庫(kù),為腳本工具的移植節(jié)省了內(nèi)存空間。由于Android的文件系統(tǒng)沒(méi)有相應(yīng)的層次結(jié)構(gòu)標(biāo)準(zhǔn),因此在移植的過(guò)程中需創(chuàng)建/tmp及/usr目錄,以下是gs腳本交叉編譯過(guò)程:
(1)下載Ghostscript 9.04源碼,并解壓:
#wget http://iweb.dl.sourceforge.net/project/ghostscript
/GPL%20Ghostscript/9.04/ghostscript-9.04.tar.gz
(2)分別復(fù)制更名保存為PC版本和ARM版本:
#cp ghostscript-9.04 ghostscript-9.04-arm -r && mv ghostscript-9.04 ghostscript-9.04-pc
(3)編譯PC版本:
#cd ghostscript-9.04-pc &&./configure && make XCFLAGS=-DHAVE_SYS_TIME_H=1
修改Makefile.in文件中代碼將STDLIBS=@PTHREAD_LIBS@ -lm
修改為STDLIBS=@PTHREAD_LIBS@ -static -lm,
#cd ../ ghostscript-9.04-arm && sed -i’387s/STDLIBS=@PTHREAD_LIBS@ -lm/STDLIBS=@PTHREAD_LIBS@ -static -lm/’ ./Makefile.in
(4)編譯Android版本:
手動(dòng)建立tmp目錄:選用/data/misc/printer/tmp/目錄作為/tmp目錄,更改ghostscript-9.04-arm版本下/base/gp_unifs.c中的tmp/目錄。
調(diào)整/usr文件夾:在配置ghostscript時(shí)添加:--prefix=/system/,命令如下:
#./configure--host=arm-linux--prefix=/system/usr/--disable-fontconfig--disable-gtk--disable-cups
(5)復(fù)制PC版本工具:
復(fù)制/obj/aux/文件夾中g(shù)enarch、genconf、echogs、mkromfs工具到ARM版本的/obj/aux/文件夾下。
#mkdir -p obj/aux/
#cp ../ghostscript-9.04-pc/obj/aux/genarch ../ghostscript-9.04-pc/obj/aux/genconf ../ghostscript-9.04-pc/obj/aux/echogs ../ghostscript-9.04-pc/obj/aux/mkromfs ./obj/aux/
(6)交叉編譯基于ARM的gs腳本:
#make XCFLAGS=-DHAVE_SYS_TIME_H=1
#DESTDIR=${PWD}/_install
#make install DESTDIR=${DESTDIR}
#rm -rf ${DESTDIR}/system/usr/share/ghostscript/9.04/doc
#rm -rf ${DESTDIR}/system/usr/share/ghostscript/9.04/examples
#cd ${DESTDIR}/system/usr/bin && rm -f !(gs) && cd-
#cd ${DESTDIR}/ && tar cvzf gs904.tar.gz system/
(7)將壓縮生成的gs904.tar.gz文件Push到Android系統(tǒng)根目錄下解壓,自動(dòng)安裝完成gs腳本文件的移植。
3.2 Hpijs的編譯移植
移植方案采用Hpijs-2.1.4的源碼編譯。以下是Hpijs交叉編譯過(guò)程。
(1)下載Hpijs-2.1.4源碼并解壓;
(2)配置Hpijs,配置命令如下:
#./configure--host=arm-linux--target=arm-linux--build=i686-linux CC=arm-linux-gcc CXX=arm-linux-g++LD=arm-linux-ld RANLIB=arm-linux-ranlib AR=arm-linux-ar CXXFLAGS="-static-g-O2"--prefix=/system/LDFLAGS=-L../jpeg-8b/.libs
(3)編譯并安裝:
#DESTDIR=${PWD}/_install
#make && make install DESTDIR=$DESTDIR
#tar cvzf hpijs.tar.gz system/
(4)編譯并安裝:
將生成的hpijs.tar.gz壓縮文件Push到Android系統(tǒng)根目錄下,解壓自動(dòng)安裝到目標(biāo)板上,完成hpijs的編譯移植。
3.3 測(cè)試打印功能
(1)Android中創(chuàng)建設(shè)備節(jié)點(diǎn):
在系統(tǒng)插入打印機(jī)后會(huì)在ueventd中自動(dòng)創(chuàng)建設(shè)備節(jié)點(diǎn)/dev/usb/usb1-3.3(usb1-3.3設(shè)備名由device path指定)。為了獲取訪問(wèn)該設(shè)備的權(quán)限,需修改/system/core/rootdir下的ueventd.rc文件指定權(quán)限,添加:/dev/usb/usb1-3.3 0666 system system.
使用gs腳本工具和hpijs軟件將/data目錄下的test.pdf文件轉(zhuǎn)換生成test.PCL3GUI格式的打印語(yǔ)言。
(2)將pdf格式文件通push到目標(biāo)板的/data目錄下,進(jìn)入/data目錄,在當(dāng)前目錄下執(zhí)行文件格式轉(zhuǎn)換命令:
#gs-sDEVICE=ijs-sIjsServer=hpijs-dIjsUseOutputFD-sDeviceManufacturer="HEWLETT-PACKARD"-sDeviceModel="deskjet 5550"-r300x300-dNOPAUSE-dSAFER-sstdout=%stderr-sOutputFile=%stdout/data/test.pdf-c quit>/data/test.PCL3GUI
(3)將上述轉(zhuǎn)換的test.PCL3GUI格式的文件通過(guò)命令:
#cat/data/test.PCL3GUI>/dev/usb/usb1-3.3將打印文件發(fā)送至設(shè)備節(jié)點(diǎn),打印機(jī)設(shè)備接收到命令執(zhí)行打印。
test.pdf
tiger.ps
tombstones
user
wifi
/data/test.pdf-c quit > /data/test.PCL3GUI
GPL Ghostscript 9.04 (2011-08-05)
Copyright (c) 2011 Artifex Software,Inc.All rights reserved.
This software comes with NO WARRANTY:see the file PUBLIC for detail.
Processing pages 1 through 1.
Page 1
Substituting font Times-Roman for TimesNewRomanPSMT.
Loading NimbusRomNo9L-Regu font from rom Resource/Font/nimbusRomNo9L-Regu... 2739620 1435700 185
8156 557464 3 done.
resource-cache
system
test.PCL3GUI
test.pdf
tiger.ps
tombstones
圖3 文件格式轉(zhuǎn)換過(guò)程
應(yīng)用程序是基于Android開(kāi)發(fā)的,包括服務(wù)器端及客戶端程序。主要實(shí)現(xiàn)客戶端到服務(wù)器端的文件傳輸,其次服務(wù)器端將接收到的文件進(jìn)行文件格式轉(zhuǎn)換后再將文件發(fā)送給打印機(jī)打印。客戶端與服務(wù)器端基于TCP協(xié)議通過(guò)Socket通信[7-9]。
客戶端APP自動(dòng)搜索路徑“/storage/emulated/0/”下包含的打印文件,輸入服務(wù)器端IP后就可傳輸文件。服務(wù)器端APP主要實(shí)現(xiàn)接入網(wǎng)絡(luò)、轉(zhuǎn)換文件格式及執(zhí)行打印。系統(tǒng)可支持的文件類型有.pdf、.txt、.xls、.doc、.ppt等。UI界面如圖4和圖5所示。
在Android應(yīng)用層通過(guò)調(diào)用ProcessBuilder函數(shù)執(zhí)行腳本命令,實(shí)現(xiàn)打印操作。具體實(shí)現(xiàn)核心代碼如下:
private final String shell11 = "gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HP"-sDeviceModel="deskjet 5550" -r300x300 -dNOPAUSE -dSAFER -sstdout=%stderr -sOutputFile=- - < "; //執(zhí)行文件轉(zhuǎn)換的命令
private final String shell12 = "/test.ps > /dev/usb/usb1-3.3";//發(fā)送執(zhí)行打印的命令
private final String shell13 = "/test.pdf > /dev/usb/usb1-3.3"
......
public void startInternet(){
ProcessBuilder pb = new ProcessBuilder("/system/bin/sh");
out.println(netShell1);//執(zhí)行操作命令
out.println(netShell2);
out.println(netShell3);
out.println("exit");
......
}
圖4 客戶端界面設(shè)計(jì)
圖5 服務(wù)器端界面設(shè)計(jì)
本文詳細(xì)介紹了以Android為平臺(tái)構(gòu)建的無(wú)線智能打印系統(tǒng),對(duì)Cortex-A9為控制核心的服務(wù)器的硬件組成與軟件設(shè)計(jì)進(jìn)行闡述。對(duì)惠普Deskjet1050打印機(jī)驅(qū)動(dòng)的移植做了詳細(xì)的說(shuō)明。最終實(shí)現(xiàn)了手機(jī)、平板等Android智能設(shè)備終端通過(guò)WiFi進(jìn)行無(wú)線智能打印的功能。
[1]陳劍,陳華政.基于Android平臺(tái)的無(wú)線打印模塊設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2013(8):67-69.
[2]韋東山.嵌入式Linux應(yīng)用開(kāi)發(fā)完全手冊(cè)[M].北京:人民郵電出版社,2008:29-30.
[3]王超.基于Cortex_A8的Android系統(tǒng)分析與移植[D].太原:太原理工大學(xué),2014.
[4]趙峙岳.基于WiFi無(wú)線網(wǎng)絡(luò)的嵌入式打印終端的設(shè)計(jì)[D].廣州:華南理工大學(xué),2011.
[5]王衛(wèi)華.為機(jī)器人配把瑞士軍刀 解說(shuō)安卓4.0安裝BusyBox[J].電腦迷,2012(13):54.
[6]李軍.基于ARM的嵌入式網(wǎng)絡(luò)打印適配器的研制[D].上海:上海交通大學(xué),2007.
[7]陳文,郭一正.深入理解Android網(wǎng)絡(luò)編程[M].北京:機(jī)械工業(yè)出版社,2013:39-45.
[8]苗振興,馬幼鳴,周鳴爭(zhēng).基于Android平臺(tái)的WiFi文件傳輸系統(tǒng)的設(shè)計(jì)[J].長(zhǎng)江大學(xué)學(xué)報(bào):自然科學(xué)版,2013(7):17-20.
[9]蔣敏,單家芳,孔軍.基于Socket的多平臺(tái)通信研究[J].計(jì)算機(jī)工程與應(yīng)用,2005(36):135-141.
USB Printer System Terminal Design Based on Android
WANG Ling-zhi,LAN Shan-can
(Department of Physics and Electronic Information Engineering, Minnan Normal University, Zhangzhou Fujian 363000,China)
Based on Android platform, a wireless smart printing system is developed. The system consists of a Cortex-A9-based on server and an application software (APP). Through WiFi, the mobile terminal sends the documents to the server, which connects with a printer via a USB interface. Then the wireless smart print is realized. By transplanting the Ghostscript and Hpijs tools,HP Deskjet 1050 printer can be drived successfully.
Android; Cortex-A9; WiFi; USB; printer
2016-05-06
福建省中青年教師教育科研項(xiàng)目“基于對(duì)數(shù)微分法的多電容同步測(cè)量系統(tǒng)研究”(JA15319);閩南師范大學(xué)教改項(xiàng)目“基于物聯(lián)網(wǎng)的嵌入式系統(tǒng)課程群建設(shè)”(JG2015)。
王靈芝(1981- ),女,講師,碩士,從事物聯(lián)網(wǎng)、嵌入式系統(tǒng)研究。
TP334
A
2095-7602(2016)12-0039-05