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

基于Android的POS機刷卡器閱讀芯片驅動研究

2013-04-12 00:00:00曹凱王旭柱魯繼東
現代電子技術 2013年14期

摘 要: 由于現行的POS機的系統界面簡陋,軟件資源匱乏,不利于POS機的功能擴展。刷卡器閱讀芯片是POS機主要功能的承擔者,對其Android驅動程序的研究,有助于POS機在Android平臺上的發展。MagTek刷卡器閱讀芯片21006450應用廣泛,對于它的研究將有助于刷卡器閱讀芯片驅動程序在實際中的應用。這里所研究的Android系統架構、芯片工作原理及接口調用是刷卡器閱讀芯片驅動程序設計的理論基礎,對驅動程序的實現做指導。

關鍵字: Android; POS機; 刷卡器讀芯片; 驅動程序

中圖分類號: TN929.53?34 文獻標識碼: 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操作系統,它是基于Linux內核的開源手機操作系統。目前,Android應用商店Android market已經擁有超過70萬個應用程序,有超過10萬名軟件開發人員為Android開發應用程序,Android系統已經廣泛運用于便攜式移動設備。

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

刷卡器作為POS機主要功能承擔者,其驅動程序的研究和優化也直接影響到Android系統在POS機領域的發展[1]。

1 Android系統架構

Android是以Linux為內核的開放式的手機操作系統,采用了整合的策略思想,包括底層Linux操作系統、中間層的中間件和上層的Java應用程序。Android系統是由應用程序層、應用程序框架層、系統運行庫層、Linux內核層組成的[2],系統架構如圖1所示。

在應用程序層中包含了Android系統的基礎應用程序,所有的應用程序都是用Java編寫的。

應用框架層是開發人員從事Android應用程序開發的基礎,該層簡化了組件重用,可以直接使用系統提供的組件快速的進行應用程序開發,主要包括Activity Manager,Content Provider,View System等。

在系統運行庫層中包括了兩個部分:程序庫和運行時庫,主要由Dalvik Java虛擬機和基礎的Java類庫組成[3] ,為應用程序提供服務和Java編程語言核心庫。Android的核心系統服務依賴于Linux 2.6內核,如安全性、內存管理、進程管理、網絡協議和驅動模型。Linux內核也同時作為硬件和軟件堆棧之間的硬件抽象層。

2 刷卡器工作原理

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

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

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

在復位時,會清除ASIC上的所有數據,將所有的數據位都置為0(高電平)。

3 驅動設計

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

圖1 連接框圖

3.1 Linux內核刷卡器閱讀芯片驅動程序

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

3.2 HAL層訪問內核驅動程序

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

3.3 編寫JNI方法訪問硬件

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

3.4 在application framework增加硬件訪問服務

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

4 結 語

隨著系統逐漸成熟,應用程序日益豐富,Android系統與POS機的結合將為POS機的發展提供更為廣闊的空間。本文在分析了Android架構的基礎上,分析刷卡器的工作原理,研究將POS機刷卡器閱讀芯片驅動程序添加到Android系統中,為上層應用程序提供接口,實現刷卡器的功能。各層之間的接口調用銜接是整個驅動程序成功運行的基礎,在驅動設計中,每編寫一層都應進行測試,這樣能更好的定位驅動設計中存在的不足。

圖2 應用程序讀取芯片數據

參考文獻

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

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

[3] 馬越.Android的架構與應用[D].北京:中國地質大學,2008.

[4] 王飛.磁卡解碼芯片中基準電路的設計研究[D].西安:西安電子科技大學,2009.

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

[6] [印]溫卡特斯瓦蘭.精通Linux設備驅動程序開發[M].宋寶華,譯.北京:人民郵電出版社,2010.

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

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

[9] 孟小華,黃宗軒.Android系統非標準設備驅動設計[J].微型機與應用,2011(14):7?9.

[10] 韓超,梁泉.Android系統原理及開發要點詳細[M].北京:電子工業出版社,2009.

主站蜘蛛池模板: 欧美色香蕉| 91成人在线免费视频| 国产91在线|中文| 国产69精品久久久久孕妇大杂乱| www.亚洲色图.com| 国产日本欧美在线观看| 国产又黄又硬又粗| 国产女人水多毛片18| 极品国产一区二区三区| 国产伦片中文免费观看| 久草视频一区| 亚洲香蕉久久| 亚洲一区二区视频在线观看| 国产精品手机在线观看你懂的| 亚洲系列无码专区偷窥无码| 亚洲欧洲日产国产无码AV| 国模沟沟一区二区三区| 色综合久久88色综合天天提莫| 久久精品视频亚洲| 欧美国产在线一区| 成人国产免费| 亚洲欧美精品在线| 亚洲男人的天堂久久精品| 99久久99视频| 在线日韩日本国产亚洲| 日本不卡在线播放| 国产人妖视频一区在线观看| 黄色网页在线播放| 亚洲中文字幕无码mv| 精品福利网| 欧美成人手机在线观看网址| 欧美精品1区| 美美女高清毛片视频免费观看| 毛片a级毛片免费观看免下载| 国产网站一区二区三区| 成人久久精品一区二区三区| 国产福利免费观看| 福利一区三区| 欧美福利在线播放| 国产亚洲精品97在线观看| 丰满人妻一区二区三区视频| 91精品国产一区自在线拍| 好紧好深好大乳无码中文字幕| 国产精品久久精品| 久久精品视频亚洲| 色婷婷成人| 粉嫩国产白浆在线观看| 久久黄色一级片| 在线观看热码亚洲av每日更新| 日本一本在线视频| 激情六月丁香婷婷四房播| 好紧太爽了视频免费无码| 欧美97欧美综合色伦图| 免费看一级毛片波多结衣| 欧美国产成人在线| 欧美a级完整在线观看| 亚洲无码高清免费视频亚洲| 青草娱乐极品免费视频| 欧美黄色网站在线看| 亚洲免费毛片| 亚洲视频二| 久久综合色天堂av| 日韩精品毛片| 中文字幕人成乱码熟女免费| 无码精品国产dvd在线观看9久| 亚洲人成网址| 日本成人不卡视频| 伊人久久婷婷五月综合97色| 久久情精品国产品免费| 国产精品19p| 亚洲精选高清无码| 精品一区二区三区水蜜桃| 久久久亚洲色| 亚洲欧美精品日韩欧美| 成人夜夜嗨| 国产白浆在线| 2019年国产精品自拍不卡| 欧美成人精品高清在线下载| 国产精品毛片在线直播完整版| 国产一级毛片在线| 欧美人人干| 久草青青在线视频|