999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Android的POS機(jī)刷卡器閱讀芯片驅(qū)動(dòng)研究

2013-04-12 00:00:00曹凱王旭柱魯繼東
現(xiàn)代電子技術(shù) 2013年14期

摘 要: 由于現(xiàn)行的POS機(jī)的系統(tǒng)界面簡陋,軟件資源匱乏,不利于POS機(jī)的功能擴(kuò)展。刷卡器閱讀芯片是POS機(jī)主要功能的承擔(dān)者,對其Android驅(qū)動(dòng)程序的研究,有助于POS機(jī)在Android平臺上的發(fā)展。MagTek刷卡器閱讀芯片21006450應(yīng)用廣泛,對于它的研究將有助于刷卡器閱讀芯片驅(qū)動(dòng)程序在實(shí)際中的應(yīng)用。這里所研究的Android系統(tǒng)架構(gòu)、芯片工作原理及接口調(diào)用是刷卡器閱讀芯片驅(qū)動(dòng)程序設(shè)計(jì)的理論基礎(chǔ),對驅(qū)動(dòng)程序的實(shí)現(xiàn)做指導(dǎo)。

關(guān)鍵字: Android; POS機(jī); 刷卡器讀芯片; 驅(qū)動(dòng)程序

中圖分類號: TN929.53?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2013)14?0134?03

Drive of reading chip in Android?based POS system

CAO Kai1, WANG Xu?zhu1, LU Ji?dong2

(1. College of Information Science and Engineering, Ocean University of China, Qingdao 266100, China;2. Qingdao Wintec System Co., Ltd, Qingdao 266111, China)

Abstract: As the interface of available POS is simple and crude, and its software resource is lack, it is infaust to the function expansion of the POS system. The POS reading chip undertake the main function of POS system, so the research of Android driver is very helpful for the development of POS system in Android environment. The reading chip 21006450 for MagTek POS system is widely used, so the research of it is benefit for the practical application of the driver for POS reading chip. The Android system architecture, working principle of the chip and interface calling researched in this paper are the theoretical basis of designing the POS reading chip driver.

Keywords: Android; POS; POS reading chip; drive program

0 引 言

Google公司在2007年11月5日推出了開源的Android操作系統(tǒng),它是基于Linux內(nèi)核的開源手機(jī)操作系統(tǒng)。目前,Android應(yīng)用商店Android market已經(jīng)擁有超過70萬個(gè)應(yīng)用程序,有超過10萬名軟件開發(fā)人員為Android開發(fā)應(yīng)用程序,Android系統(tǒng)已經(jīng)廣泛運(yùn)用于便攜式移動(dòng)設(shè)備。

移動(dòng)POS機(jī)又稱無線POS,是一種RF?SIM卡終端閱讀器,通過CDMA,GPRS,TCP/IP等與數(shù)據(jù)服務(wù)器相連進(jìn)行工作。移動(dòng)POS機(jī)具有移動(dòng)性強(qiáng),平均交易時(shí)間段,易于攜帶等特性在各大行業(yè)都已經(jīng)廣泛使用。將Android系統(tǒng)移植到POS機(jī)上,將為POS機(jī)提供更加豐富的應(yīng)用和功能擴(kuò)展。

刷卡器作為POS機(jī)主要功能承擔(dān)者,其驅(qū)動(dòng)程序的研究和優(yōu)化也直接影響到Android系統(tǒng)在POS機(jī)領(lǐng)域的發(fā)展[1]。

1 Android系統(tǒng)架構(gòu)

Android是以Linux為內(nèi)核的開放式的手機(jī)操作系統(tǒng),采用了整合的策略思想,包括底層Linux操作系統(tǒng)、中間層的中間件和上層的Java應(yīng)用程序。Android系統(tǒng)是由應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層、Linux內(nèi)核層組成的[2],系統(tǒng)架構(gòu)如圖1所示。

在應(yīng)用程序?qū)又邪薃ndroid系統(tǒng)的基礎(chǔ)應(yīng)用程序,所有的應(yīng)用程序都是用Java編寫的。

應(yīng)用框架層是開發(fā)人員從事Android應(yīng)用程序開發(fā)的基礎(chǔ),該層簡化了組件重用,可以直接使用系統(tǒng)提供的組件快速的進(jìn)行應(yīng)用程序開發(fā),主要包括Activity Manager,Content Provider,View System等。

在系統(tǒng)運(yùn)行庫層中包括了兩個(gè)部分:程序庫和運(yùn)行時(shí)庫,主要由Dalvik Java虛擬機(jī)和基礎(chǔ)的Java類庫組成[3] ,為應(yīng)用程序提供服務(wù)和Java編程語言核心庫。Android的核心系統(tǒng)服務(wù)依賴于Linux 2.6內(nèi)核,如安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議和驅(qū)動(dòng)模型。Linux內(nèi)核也同時(shí)作為硬件和軟件堆棧之間的硬件抽象層。

2 刷卡器工作原理

MagTek公司的磁卡閱讀器芯片21006450是一款高性能、低功耗的三軌磁條解碼芯片。在對磁卡閱讀芯片復(fù)位時(shí),如果STRBOE沒有置高,就需要將其置高,并將DATA拉低,然后再將STROBE置低。在復(fù)位之后仍需要將DATA強(qiáng)制置低,在釋放DATA之前需要將STROBE置高,然后再置低。在完成上述過程后,仍需要再完成一次STROBE的置高、置底,這樣才能完成復(fù)位序列。

當(dāng)讀卡器芯片處在準(zhǔn)備讀卡狀態(tài)時(shí),一旦檢測到三個(gè)磁通翻轉(zhuǎn),ASIC就會(huì)通過將DATA拉低來表明此時(shí)處于卡在線狀態(tài)。然后就開始將磁條卡上的數(shù)據(jù)讀取并存儲到緩存中。對應(yīng)于這種卡在線狀態(tài),控制器應(yīng)當(dāng)將STROBE置高。對應(yīng)于STROBE的上升沿,ASIC會(huì)將DATA置高,并清除卡在線信號。控制器會(huì)將STROBE置低,然后等待DATA的下降沿,以此來表明處在緩存器就緒狀態(tài)。從內(nèi)存中讀取或提取數(shù)據(jù),需要用脈沖信號將STROBE輸入置高再置低來驅(qū)使數(shù)據(jù)指針將數(shù)據(jù)指向DATA的管腳。在數(shù)據(jù)讀取期間,當(dāng)STROBE的輸入為低時(shí),DATA上的一個(gè)低電平代表1,而高電平代表0[4]。需要說明的是,DATA進(jìn)入緩存器就緒狀態(tài)后,在復(fù)位之前,ASIC不會(huì)對再一次刷卡做出反應(yīng)。在片上緩存(內(nèi)存)中,為磁條卡的三個(gè)磁道中的每一個(gè)分配了704 b的空間,總共有2 112 b。對每條磁道而言,只有在卡上檢測到1的時(shí)候才開始存儲數(shù)據(jù),在這個(gè)1之前的所有的0都不會(huì)存儲進(jìn)緩存。當(dāng)檢測到第一個(gè)1之后,每個(gè)磁道存儲704 b的數(shù)據(jù),而一旦數(shù)據(jù)超過這個(gè)長度,將會(huì)丟失超出的數(shù)據(jù)。但這并不意味著芯片的存儲空間太小,確切來說,這么大的空間已經(jīng)能夠充分的滿足符號ISO編碼標(biāo)準(zhǔn)的磁條卡的需求[5]。

在提取數(shù)據(jù)時(shí),STROBE是根據(jù)磁道A,磁道B,然后磁道C的順序進(jìn)行接收的。當(dāng)數(shù)據(jù)指針到達(dá)3個(gè)磁道共2112位的最后位置時(shí),它將從反方向再次循環(huán)數(shù)據(jù)。需要說明的是,數(shù)據(jù)的移出的首選順序是磁道A、磁道B然后磁道C。ASIC并不決定刷卡的方向,只是簡單的將接收的數(shù)據(jù)表示出來。然后,反方向刷卡數(shù)據(jù)的移出時(shí)是以磁道C、磁道B、磁道A的順序進(jìn)行的,這就像將一盤磁帶或錄音帶翻帶。

在復(fù)位時(shí),會(huì)清除ASIC上的所有數(shù)據(jù),將所有的數(shù)據(jù)位都置為0(高電平)。

3 驅(qū)動(dòng)設(shè)計(jì)

驅(qū)動(dòng)程序是Linux內(nèi)核與硬件之間的接口,直接對硬件設(shè)備進(jìn)行操作,同時(shí)對上層應(yīng)用程序提供接口。Android的設(shè)備驅(qū)動(dòng)主要完成以下功能:初始化和釋放設(shè)備;讀取硬件設(shè)備數(shù)據(jù);將內(nèi)核數(shù)據(jù)寫入到硬件設(shè)備;讀取應(yīng)用程序數(shù)據(jù)傳送給設(shè)備文件等。在Android系統(tǒng)中刷卡器驅(qū)動(dòng)應(yīng)包括:Linux內(nèi)核驅(qū)動(dòng)程序、HAL(硬件抽象層)模塊、JNI方法、application framework硬件訪問服務(wù)[6]。刷卡器閱讀芯片與開發(fā)板的連接框圖如圖1所示。

圖1 連接框圖

3.1 Linux內(nèi)核刷卡器閱讀芯片驅(qū)動(dòng)程序

刷卡器的基本功能就是讀取磁卡中的數(shù)據(jù)進(jìn)行解碼,并將得到的解碼數(shù)據(jù)傳遞給上層應(yīng)用程序。Android為了保護(hù)一些硬件提供商的知識產(chǎn)權(quán)提出了HAL層的概念,避開了Linux的GPL束縛,基本的思路是把控制硬件的動(dòng)作都放在Android HAL層,而Linux driver只是完成一些簡單的數(shù)據(jù)交換。這里的Linux內(nèi)核刷卡器驅(qū)動(dòng)程序同樣也只是一個(gè)的字符設(shè)備驅(qū)動(dòng),設(shè)備以模塊的形式存在Linux內(nèi)核中,模塊的加載和卸載通過static int_init msr_init(void)和static void_exit msr_exit(void)函數(shù)實(shí)現(xiàn),static int_msr_setup_dev(struct msr_Android_dev* dev)函數(shù)對設(shè)備進(jìn)行初始化,函數(shù)static long msr_ioctl(struct inode *inode,struct file *filp,unsigned int cmd,unsigned long arg)實(shí)現(xiàn)驅(qū)動(dòng)程序?qū)λ⒖ㄆ鞯腎/O控制。設(shè)備的打開、關(guān)閉及具體的代碼實(shí)現(xiàn)可以參考《Linux設(shè)備驅(qū)動(dòng)程序》[7]。對內(nèi)核配置編譯后就可以在Linux內(nèi)核中得到設(shè)備模塊msr.o,在上層中可以通過調(diào)用這個(gè)模塊來實(shí)現(xiàn)對刷卡器的控制。

3.2 HAL層訪問內(nèi)核驅(qū)動(dòng)程序

硬件抽象層中訪問不同設(shè)備內(nèi)核驅(qū)動(dòng)程序的模塊是以*.so文件形式存在的,這樣可以有效的保護(hù)硬件廠商的知識產(chǎn)權(quán)。在runtime(JNI部分),則向HAL取得特定模塊的operations,再callback這些操作函數(shù)[8]。在HAL層包括許多模塊,而runtime只需要說明類型,即module ID,就可以取得相應(yīng)模塊的operations。在HAL層中需要具體實(shí)現(xiàn)刷卡器的讀卡操作。首先需要查找到開始標(biāo)志0x0b,然后將磁道1中的數(shù)據(jù)放到buf1中,用同樣的方法可以將磁道2,3的數(shù)據(jù)存到buf2,buf3中,磁道2最多40個(gè)字符每個(gè)5位4位數(shù)據(jù)1位奇校驗(yàn),而磁道3最多107個(gè)字符每個(gè)5位4位數(shù)據(jù)1位奇校驗(yàn)。然后將buf中的數(shù)據(jù)補(bǔ)齊之后放在主寄存器中。HAL層中還需要使用static int check_msr_io(void)對I/O的狀態(tài)進(jìn)行檢測,并對設(shè)備進(jìn)行初始化static int msr_device_init(void)。具體的實(shí)現(xiàn)由于篇幅限制,不在進(jìn)行詳細(xì)介紹。

3.3 編寫JNI方法訪問硬件

從編程語言看,Android系統(tǒng)是由基于Java語言的Java層與基于C/C++語言的C/C++層組成的,為了使這兩層相互配合、共同完成任務(wù)就必須使用Java本地接口(JNI,Java Native Interface)將這兩層有機(jī)的聯(lián)系起來。JNI提供了一系列接口,允許Java類與使用C/C++編寫的應(yīng)用程序、模塊、庫進(jìn)行交互操作。JNI是通過函數(shù)方法映射表static const JNINativeMethod method_table,將Java本地方法和HAL層提供的C函數(shù)接口銜接起來[9]。

3.4 在application framework增加硬件訪問服務(wù)

在Android Framework或應(yīng)用程序開發(fā)中所需要的主要API都是以服務(wù)的形式存在的。對應(yīng)用程序來說,硬件服務(wù)是運(yùn)行在一個(gè)獨(dú)立的進(jìn)程中的,若要調(diào)用這些服務(wù)就需要在硬件服務(wù)和應(yīng)用程序之間添加通信接口。應(yīng)用程序通過Interface IMsrService接口,調(diào)用硬件服務(wù)提供的Init()等函數(shù)[10]。在刷卡器的硬件服務(wù)中是將定義的通信接口與JNI提供的接口相關(guān)聯(lián)起來。同時(shí)需要將磁卡閱讀芯片服務(wù)添加到系統(tǒng)服務(wù)中ServiceManager.addService(“msr”,new MsrService()),這樣應(yīng)用程序就能通過Java接口調(diào)用硬件服務(wù),實(shí)現(xiàn)對磁卡閱讀芯片的控制。圖2以讀取芯片數(shù)據(jù)為例,簡單介紹各層之間的調(diào)用。

4 結(jié) 語

隨著系統(tǒng)逐漸成熟,應(yīng)用程序日益豐富,Android系統(tǒng)與POS機(jī)的結(jié)合將為POS機(jī)的發(fā)展提供更為廣闊的空間。本文在分析了Android架構(gòu)的基礎(chǔ)上,分析刷卡器的工作原理,研究將POS機(jī)刷卡器閱讀芯片驅(qū)動(dòng)程序添加到Android系統(tǒng)中,為上層應(yīng)用程序提供接口,實(shí)現(xiàn)刷卡器的功能。各層之間的接口調(diào)用銜接是整個(gè)驅(qū)動(dòng)程序成功運(yùn)行的基礎(chǔ),在驅(qū)動(dòng)設(shè)計(jì)中,每編寫一層都應(yīng)進(jìn)行測試,這樣能更好的定位驅(qū)動(dòng)設(shè)計(jì)中存在的不足。

圖2 應(yīng)用程序讀取芯片數(shù)據(jù)

參考文獻(xiàn)

[1] Anon. Android [EB/OL]. [2012?10?13]. http://baike.baidu.com/view/1241829.htm.

[2] [韓]金泰延.Android框架揭秘[M].武傳海,譯.北京:人民郵電出版社,2012.

[3] 馬越.Android的架構(gòu)與應(yīng)用[D].北京:中國地質(zhì)大學(xué),2008.

[4] 王飛.磁卡解碼芯片中基準(zhǔn)電路的設(shè)計(jì)研究[D].西安:西安電子科技大學(xué),2009.

[5] MagTek公司.Triple Track Delta ASIC with shift?out 3 volt數(shù)據(jù)手冊[M].[出版地不詳]:MagTek公司,2007.

[6] [印]溫卡特斯瓦蘭.精通Linux設(shè)備驅(qū)動(dòng)程序開發(fā)[M].宋寶華,譯.北京:人民郵電出版社,2010.

[7] [美]科波特.Linux設(shè)備驅(qū)動(dòng)程序[M].3版.魏永明,耿岳,鐘書毅,譯.北京:中國電力出版社,2005.

[8] 李凱.Android操作系統(tǒng)分析與移植[D].廣州:華南理工大學(xué),2011.

[9] 孟小華,黃宗軒.Android系統(tǒng)非標(biāo)準(zhǔn)設(shè)備驅(qū)動(dòng)設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2011(14):7?9.

[10] 韓超,梁泉.Android系統(tǒng)原理及開發(fā)要點(diǎn)詳細(xì)[M].北京:電子工業(yè)出版社,2009.

主站蜘蛛池模板: 精品一区二区三区中文字幕| 女高中生自慰污污网站| 成年午夜精品久久精品| 伊大人香蕉久久网欧美| 久久久久久尹人网香蕉 | 亚洲人在线| 欲色天天综合网| 好紧好深好大乳无码中文字幕| 日韩福利在线观看| 国产精品99一区不卡| 国产精品白浆无码流出在线看| 欧美综合成人| 亚洲免费人成影院| 日韩黄色大片免费看| 久久国产高潮流白浆免费观看| 久久久精品国产亚洲AV日韩| 成人国产一区二区三区| 99久久99这里只有免费的精品| 无遮挡国产高潮视频免费观看| 午夜老司机永久免费看片| 亚洲欧美日韩天堂| 亚洲91精品视频| 激情乱人伦| 亚洲天堂网2014| 99这里只有精品在线| 亚洲区第一页| 欧美中文字幕在线播放| 欧洲极品无码一区二区三区| 亚洲色图在线观看| 91精品啪在线观看国产91| 日韩成人午夜| 欧美一级黄片一区2区| 亚洲一级毛片在线观| 911亚洲精品| Jizz国产色系免费| 亚洲人成网站色7799在线播放| 91精品久久久无码中文字幕vr| 五月六月伊人狠狠丁香网| 免费观看无遮挡www的小视频| 曰韩人妻一区二区三区| 亚洲欧美日韩高清综合678| 九色综合视频网| 久草国产在线观看| 天天躁夜夜躁狠狠躁躁88| 99re在线观看视频| 国产高清在线观看91精品| 亚洲人网站| 在线欧美国产| 国产a v无码专区亚洲av| 国产精品美乳| 国产v欧美v日韩v综合精品| 日韩欧美一区在线观看| 日韩精品专区免费无码aⅴ| 国产成人综合久久精品下载| 天天摸夜夜操| 国产电话自拍伊人| 制服丝袜一区| 国产成人AV男人的天堂| 久草视频中文| 一级香蕉视频在线观看| 一本大道AV人久久综合| 久久久久九九精品影院| 天堂av高清一区二区三区| 国产不卡在线看| 亚洲国产成人精品无码区性色| 2020国产精品视频| 欧洲欧美人成免费全部视频| 欧美精品综合视频一区二区| 一级片免费网站| 久久99国产综合精品1| 欧美日韩久久综合| 国产精品第5页| 欧美中文字幕一区二区三区| 99热这里都是国产精品| 免费人成视网站在线不卡| www.狠狠| 亚洲精品色AV无码看| 欧美日韩国产综合视频在线观看| 综合色88| 亚洲成人在线免费| 成年av福利永久免费观看| 日韩毛片免费|