微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 电源设计 > 基于Android 的POS 机刷卡器阅读芯片驱动研究

基于Android 的POS 机刷卡器阅读芯片驱动研究

时间:10-08 来源:互联网 点击:

ion framework硬件访问服务。刷卡器阅读芯片与开发板的连接框图如图1所示。

3.1 Linux内核刷卡器阅读芯片驱动程序

刷卡器的基本功能就是读取磁卡中的数据进行解码,并将得到的解码数据传递给上层应用程序。An-droid为了保护一些硬件提供商的知识产权提出了HAL层的概念,避开了Linux的GPL束缚,基本的思路是把控制硬件的动作都放在Android HAL层,而Linux driver只是完成一些简单的数据交换。这里的Linux内核刷卡器驱动程序同样也只是一个的字符设备驱动,设备以模块的形式存在Linux内核中,模块的加载和卸载通过stat-ic int_init msr_init(void)和static void_exit msr_exit(void)函数实现,static int_msr_setup_dev(structmsr_Android_dev* dev)函数对设备进行初始化,函数static long msr_ioctl(struct inode *inode,struct file *filp,unsigned int cmd,unsigned long arg)实现驱动程序对刷卡器的I/O控制。设备的打开、关闭及具体的代码实现可以参考《Linux设备驱动程序》。对内核配置编译后就可以在Linux内核中得到设备模块msr.o,在上层中可以通过调用这个模块来实现对刷卡器的控制。

3.2 HAL层访问内核驱动程序

硬件抽象层中访问不同设备内核驱动程序的模块是以*.so文件形式存在的,这样可以有效的保护硬件厂商的知识产权。在runtime(JNI部分),则向HAL取得特定模块的operations,再callback 这些操作函数。在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_de-vice_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函数接口衔接起来。

3.4 在application framework增加硬件访问服务

在Android Framework或应用程序开发中所需要的主要API都是以服务的形式存在的。对应用程序来说,硬件服务是运行在一个独立的进程中的,若要调用这些服务就需要在硬件服务和应用程序之间添加通信接口。应用程序通过Interface IMsrService接口,调用硬件服务提供的Init()等函数。在刷卡器的硬件服务中是将定义的通信接口与JNI提供的接口相关联起来。同时需要将磁卡阅读芯片服务添加到系统服务中Service-Manager.addService(“msr”,new MsrService()),这样应用程序就能通过Java接口调用硬件服务,实现对磁卡阅读芯片的控制。图2以读取芯片数据为例,简单介绍各层之间的调用。

4 结语

随着系统逐渐成熟,应用程序日益丰富,Android系统与POS机的结合将为POS机的发展提供更为广阔的空间。本文在分析了Android架构的基础上,分析刷卡器的工作原理,研究将POS机刷卡器阅读芯片驱动程序添加到Android系统中,为上层应用程序提供接口,实现刷卡器的功能。各层之间的接口调用衔接是整个驱动程序成功运行的基础,在驱动设计中,每编写一层都应进行测试,这样能更好的定位驱动设计中存在的不足。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top