<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 測試測量 > 設計應用 > 基于A(yíng)ndroid的POS機刷卡器閱讀芯片驅動(dòng)研究

基于A(yíng)ndroid的POS機刷卡器閱讀芯片驅動(dòng)研究

作者: 時(shí)間:2013-10-23 來(lái)源:網(wǎng)絡(luò ) 收藏

3 驅動(dòng)設計
是Linux內核與硬件之間的接口,直接對硬件設備進(jìn)行操作,同時(shí)對上層應用程序提供接口。的設備驅動(dòng)主要完成以下功能:初始化和釋放設備;讀取硬件設備數據;將內核數據寫(xiě)入到硬件設備;讀取應用程序數據傳送給設備文件等。在系統中刷卡器驅動(dòng)應包括:Linux內核、HAL(硬件抽象層)模塊、JNI方法、application framework硬件訪(fǎng)問(wèn)服務(wù)。刷卡器閱讀芯片與開(kāi)發(fā)板的連接框圖如圖1所示。
3.1 Linux內核刷卡器閱讀芯片
刷卡器的基本功能就是讀取磁卡中的數據進(jìn)行解碼,并將得到的解碼數據傳遞給上層應用程序。為了保護一些硬件提供商的知識產(chǎn)權提出了HAL層的概念,避開(kāi)了Linux的GPL束縛,基本的思路是把控制硬件的動(dòng)作都放在A(yíng)ndroid HAL層,而Linux driver只是完成一些簡(jiǎn)單的數據交換。這里的Linux內核刷卡器驅動(dòng)程序同樣也只是一個(gè)的字符設備驅動(dòng),設備以模塊的形式存在Linux內核中,模塊的加載和卸載通過(guò)static int_init msr_init(void)和static void_exit msr_exit(void)函數實(shí)現,static int_msr_setup_dev(structmsr_Android_ dev*dev)函數對設備進(jìn)行初始化,函數static long msr_ioctI(struct inode*inode,struct file*filp,unsigned int cmd,unsigned long arg)實(shí)現驅動(dòng)程序對刷卡器的I/O控制。設備的打開(kāi)、關(guān)閉及具體的代碼實(shí)現可以參考《Linux設備驅動(dòng)程序》。對內核配置編譯后就可以在Linux內核中得到設備模塊msr.o,在上層中可以通過(guò)調用這個(gè)模塊來(lái)實(shí)現對刷卡器的控制。
3.2 HAL層訪(fǎng)問(wèn)內核驅動(dòng)程序
硬件抽象層中訪(fǎng)問(wèn)不同設備內核驅動(dòng)程序的模塊是以*.so文件形式存在的,這樣可以有效的保護硬件廠(chǎng)商的知識產(chǎn)權。在runtime(JNI部分),則向HAL取得特定模塊的opeIlations,再callback這些操作函數。在HAL層包括許多模塊,而runtime只需要說(shuō)明類(lèi)型,即module ID,就可以取得相應模塊的operations。在HAL層中需要具體實(shí)現刷卡器的讀卡操作。首先需要查找到開(kāi)始標志0x0b,然后將磁道1中的數據放到bufl中,用同樣的方法可以將磁道2,3的數據存到buf2,buf3中,磁道2最多40個(gè)字符每個(gè)5位4位數據1位奇校驗,而磁道3最多107個(gè)字符每個(gè)5位4位數據1位奇校驗。然后將buf中的數據補齊之后放在主寄存器中。HAL層中還需要使用static int check_msr_io(void)對I/O的狀態(tài)進(jìn)行檢測,并對設備進(jìn)行初始化static int msr_device_init(void)。具體的實(shí)現由于篇幅限制,不在進(jìn)行詳細介紹。
3.3 編寫(xiě)JNI方法訪(fǎng)問(wèn)硬件
從編程語(yǔ)言看,Android系統是由基于Java語(yǔ)言的Java層與基于C/C++語(yǔ)言的C/C++層組成的,為了使這兩層相互配合、共同完成任務(wù)就必須使用Java本地接口(JNI,Java Native Interface)將這兩層有機的聯(lián)系起來(lái)。JNI提供了一系列接口,允許Java類(lèi)與使用C/C++編寫(xiě)的應用程序、模塊、庫進(jìn)行交互操作。JNI是通過(guò)函數方法映射表static const JNINativeMethod method_table,將Java本地方法和HAL層提供的C函數接口銜接起來(lái)。
3.4在application framework增加硬件訪(fǎng)問(wèn)服務(wù)
在A(yíng)ndroid Framework或應用程序開(kāi)發(fā)中所需要的主要API都是以服務(wù)的形式存在的。對應用程序來(lái)說(shuō),硬件服務(wù)是運行在一個(gè)獨立的進(jìn)程中的,若要調用這些服務(wù)就需要在硬件服務(wù)和應用程序之間添加通信接口。應用程序通過(guò)Interface IMsrService接口,調用硬件服務(wù)提供的Init()等函數。在刷卡器的硬件服務(wù)中是將定義的通信接口與JNI提供的接口相關(guān)聯(lián)起來(lái)。同時(shí)需要將磁卡閱讀芯片服務(wù)添加到系統服務(wù)中Service Manager.a(chǎn)ddService(“msr”,new MsrService()),這樣應用程序就能通過(guò)Java接口調用硬件服務(wù),實(shí)現對磁卡閱讀芯片的控制。圖2以讀取芯片數據為例,簡(jiǎn)單介紹各層之間的調用。

本文引用地址:http://dyxdggzs.com/article/192744.htm

b.JPG



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

linux相關(guān)文章:linux教程


pos機相關(guān)文章:pos機原理



上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>