CN107784243A - 一种在安卓***中实现读卡器设备通信的方法及装置 - Google Patents

一种在安卓***中实现读卡器设备通信的方法及装置 Download PDF

Info

Publication number
CN107784243A
CN107784243A CN201710944163.9A CN201710944163A CN107784243A CN 107784243 A CN107784243 A CN 107784243A CN 201710944163 A CN201710944163 A CN 201710944163A CN 107784243 A CN107784243 A CN 107784243A
Authority
CN
China
Prior art keywords
reader device
module
instruction
format transformation
communication module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201710944163.9A
Other languages
English (en)
Other versions
CN107784243B (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Feitian Technologies Co Ltd filed Critical Feitian Technologies Co Ltd
Priority to CN201710944163.9A priority Critical patent/CN107784243B/zh
Publication of CN107784243A publication Critical patent/CN107784243A/zh
Application granted granted Critical
Publication of CN107784243B publication Critical patent/CN107784243B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/0008General problems related to the reading of electronic memory record carriers, independent of its reading method, e.g. power transfer

Landscapes

  • Engineering & Computer Science (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Information Transfer Between Computers (AREA)
  • Telephonic Communication Services (AREA)

Abstract

本发明公开一种在安卓***中实现读卡器设备通信的方法及装置,涉及计算机领域。所述方法包括:当通信模块接收到用户应用发送的查找读卡器设备的指令时,转换查找读卡器设备的指令格式后向读卡器设备管理器发送获取读卡器设备信息的指令;当通信模块接收到给读卡器设备上电的指令时,转换上电指令格式后向读卡器设备管理器发送上电指令,解析读卡器设备返回的响应数据判断卡片类型;当通信模块接收到操作指令时,转换操作指令格式后通信模块对操作指令进行协议封装后发送给读卡器设备管理器;本发明中的技术方案,可以做到在安卓***中实现读卡器设备的通信,缩短开发和维护成本,提高开发效率,方便用户使用,使得用户体验更好。

Description

一种在安卓***中实现读卡器设备通信的方法及装置
技术领域
本发明涉及计算机领域,尤其涉及一种在安卓***中实现读卡器设备通信的方法及装置。
背景技术
安卓***是一个以Linux为基础的半开源操作***,主要用于移动设备。安卓***最大的优势是其显著的开放性和丰富的硬件资源,使其拥有更多的开发者进行研究和使用。CCID(USB Chip/Smart Card Interface Devices-USB,芯片智能卡接口设备)协议提供了一种智能卡读写设备与主机实现相互通讯的可能,它规定了CCID设备是一种芯片/智能卡接口设备,设备通过USB接口与主机连接,进行符合CCID协议的数据通讯,同时设备通过符合7816标准协议的接口与智能卡进行通讯。
在安卓***上操作CCID类型的读卡器设备时没有现成的接口的,只能根据一些特定的读卡器设备和卡片进行协议的封装和通信,并且因为CCID协议比较复杂,兼容所有的读卡器设备和卡片较为困难。
发明内容
本发明的目的是为了解决现有技术中存在的技术问题,提供了一种在安卓***中实现读卡器设备通信的方法及装置。
本发明采用的技术方案是:
一方面,本发明提供一种在安卓***中实现读卡器设备通信的方法,包括:
步骤S1:当通信模块接收到用户应用发送的查找读卡器的指令时,执行步骤S2;当通信模块接收到用户应用发送的给读卡器上电的指令时,转换上电的指令格式后执行步骤S3;当通信模块接收到用户应用发送的操作指令时,转换操作指令格式后执行步骤S4;
步骤S2:通信模块获取设备列表并判断在设备列表中是否可以获取到预设设备标识符,是则向读卡器设备管理器发送获取与预设设备标识符对应的读卡器设备的信息的指令,读卡器设备管理器对获取读卡器设备信息的指令进行格式转换,将转换格式后的指令发给读卡器设备,待读卡器设备管理器接收到读卡器设备返回的读卡器信息后,转换读卡器信息格式发送至通信模块,通信模块解析转换格式后的读卡器信息,将解析结果转换格式后返回至用户应用,否则报错;
步骤S3:通信模块向读卡器设备管理器发送上电指令,读卡器设备管理器将上电指令转换格式后发给读卡器设备,待读卡器设备管理器接收到读卡器设备返回的响应数据后转换格式并将转格式后的响应数据发送至通信模块,通信模块根据响应数据解析卡片类型并将解析卡片类型的结果转换格式,返回至用户应用;
步骤S4:通信模块对操作指令进行协议封装后发送给读卡器设备管理器,读卡器设备管理器对操作指令转换格式后发给读卡器设备,读卡器设备管理器接收到读卡器设备返回的操作响应数据后转换格式并将转格式后的操作响应数据发送至通信模块,通信模块进行协议解包后将解包后的数据转换格式,返回至用户应用。
另一方面,本发明提供一种在安卓***中实现读卡器设备通信的装置,装置包括:通信模块和读卡器设备管理器;
通信模块,具体包括:
第一接收模块,用于接收用户应用发送的指令和读卡器设备管理器返回的数据;
获取模块,用于当第一接收模块接收到用户应用发送的查找读卡器设备的指令时,获取设备列表;
第一判断模块,用于判断是否可以在获取模块获取到的设备列表中获取到预设设备标识符;
第一发送模块,用于当第一判断模块判断在设备列表中可以获取到预设设备标识符时,向读卡器设备管理器发送获取与预设设备标识符对应的读卡器设备的信息的指令;用于将第一转换格式模块转换格式后的解析结果发送至用户应用;用于向读卡器设备管理器发送第一转换格式模块转换格式后的上电指令;用于将第一转换格式模块转换格式后的卡片类型的结果返回至用户应用;用于将封装模块封装好的操作指令发送至读卡器设备管理器;用于将第一转换格式模块转换格式后的解包后的数据返回至用户应用;
第一解析模块,用于当第一接收模块接收到的读卡器设备管理器返回的数据为转换格式后的读卡器信息时,解析转换格式后的读卡器设备信息;
第一转换格式模块,用于将第一解析模块得到的解析结果转换格式;用于当第一接收模块接收到用户应用发送的给读卡器设备上电的指令时,转换上电的指令格式;用于当第一接收模块接收到用户应用发送的操作指令时,转换操作指令格式;用于将第二解析模块解析得到的卡片类型的结果转格式;还用于将解包模块解包后的数据转换格式;
第二解析模块,用于当第一接收模块接收到转换格式后的响应数据时,根据转换格式后的响应数据解析卡片类型得到卡片类型的结果;
封装模块,用于将第一转换格式模块转换格式后的操作指令进行协议封装;
解包模块,用于当第一接收模块接收到转换格式后的操作响应数据时进行协议解包;
读卡器设备管理器,具体包括:
第二接收模块,用于接收通信模块发送的指令和读卡器设备返回的响应;
第二转换格式模块,用于将第一发送模块发送的获取与预设设备标识符对应的读卡器设备的信息的指令进行格式转换;用于转换第二接收模块接收到的读卡器设备返回的读卡器设备信息的格式;用于转换第二接收模块接收到的上电指令的格式;用于转换第二接收模块接收到的读卡器设备返回的响应数据后转换格式;还用于当第二接收模块接收到封装好的操作指令后,转换操作指令的格式;用于当第二接收模块接收到读卡器设备返回的操作响应数据后转换格式;
第二发送模块,用于将第二转换格式模块转换格式后的获取读卡器设备信息的指令发送至读卡器设备;用于将第二转换格式模块转换格式后的读卡器设备信息发送至通信模块;用于将第二转换格式模块转换格式后的上电指令发送至读卡器设备;用于将第二转换格式模块转换格式后的响应数据发送至通信模块;用于将第二转换格式模块转换格式后的操作指令发送至读卡器设备;用于将第二转换格式模块转换格式后的操作响应数据发送至通信模块。
本发明取得的有益效果是:
采用本发明的技术方案,可以做到在安卓***中实现读卡器设备的通信,能够兼容所有CCID类型的读卡器设备的通信,缩短开发和维护成本,提高开发效率,方便用户使用,使得用户体验更好。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例二中提供的一种在安卓***中实现读卡器设备通信通信的方法的流程图;
图2为本发明实施例三中提供的一种在安卓***中实现读卡器设备通信通信的装置的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本实施例提供一种在安卓***中实现读卡器设备通信的方法,该方法包括:
步骤S1:当通信模块接收到用户应用发送的查找读卡器的指令时,执行步骤S2;当通信模块接收到用户应用发送的给读卡器上电的指令时,转换上电的指令格式后执行步骤S3;当通信模块接收到用户应用发送的操作指令时,转换操作指令格式后执行步骤S4;
步骤S2:通信模块获取设备列表并判断在设备列表中是否可以获取到预设设备标识符,是则向读卡器设备管理器发送获取与预设设备标识符对应的读卡器设备的信息的指令,读卡器设备管理器对获取读卡器设备信息的指令进行格式转换,将转换格式后的指令发给读卡器设备,待读卡器设备管理器接收到读卡器设备返回的读卡器信息后,转换读卡器信息格式发送至通信模块,通信模块解析转换格式后的读卡器信息,将解析结果转换格式后返回至用户应用,否则报错;
步骤S3:通信模块向读卡器设备管理器发送上电指令,读卡器设备管理器将上电指令转换格式后发给读卡器设备,待读卡器设备管理器接收到读卡器设备返回的响应数据后转换格式并将转格式后的响应数据发送至通信模块,通信模块根据响应数据解析卡片类型并将解析卡片类型的结果转换格式,返回至用户应用;
步骤S4:通信模块对操作指令进行协议封装后发送给读卡器设备管理器,读卡器设备管理器对操作指令转换格式后发给读卡器设备,读卡器设备管理器接收到读卡器设备返回的操作响应数据后转换格式并将转格式后的操作响应数据发送至通信模块,通信模块进行协议解包后将解包后的数据转换格式,返回至用户应用。
在本实施例中,转换上电的指令格式,具体为:通信模块将上电的指令的格式转换成字符串;
转换操作指令格式,具体为:通信模块将操作指令的格式转换成字符串;
读卡器设备管理器对获取读卡器设备信息的指令进行格式转换,具体为:读卡器设备管理器将获取读卡器设备信息的指令的格式转换为二进制;
转换读卡器信息格式,具体为:读卡器设备管理器将读卡器信息的格式转换为字符串;
将解析结果转换格式,具体为:通信模块将解析结果的格式转换为二进制;
读卡器设备管理器将上电指令转换格式,具体为:读卡器设备管理器将上电指令的格式转换为二进制;
读卡器设备管理器接收到读卡器设备返回的响应数据后转换格式,具体为:读卡器设备管理器接收到读卡器设备返回的响应数据后,将响应数据的格式转换为字符串;
将解析卡片类型的结果转换格式,具体为:通信模块将解析卡片类型的结果的格式转换为二进制;
读卡器设备管理器对操作指令转换格式,具体为:读卡器设备将操作指令的格式转换为二进制;
读卡器设备管理器接收到读卡器设备返回的响应数据后转换格式,具体为:读卡器设备管理器接收到读卡器设备返回的响应数据后,将读卡器设备返回的响应数据的格式转换为字符串;
将解包后的数据转换格式,具体为:通信模块将解包后的数据的格式转换为二进制。
在本实施例中,通信模块获取设备列表,具体为:通信模块向读卡器设备管理器发送获取设备列表的指令,接收读卡器设备管理器返回的设备列表。
还包括:读卡器设备管理器接到获取设备列表的指令后,调用UsbManager.getDeviceList***函数向读卡器发送获取设备列表的指令;
或者,
调用BluetoothAdapter.LeScanCallback***函数向读卡器发送获取设备列表的指令。
具体地,通信模块获取设备列表并判断在设备列表中是否可以获取到预设设备标识符,具体为:
通信模块获取设备列表后对设备列表进行遍历,并判断在设备列表中是否可以获取到预设设备标识符,是则向读卡器设备管理器发送获取与预设设备标识符对应的读卡器设备的信息的指令,否则报错。
在本实施例中,将转换格式后的指令发给读卡器设备,具体为:读卡器设备管理器调用UsbDeviceConnection.controlTransfer***函数向读卡器设备发送将转换格式后的指令;读卡器设备接收到指令后,调用UsbDeviceConnection.controlTransfer***函数向读卡器设备管理器返回读卡器设备信息。
优选地,步骤S3中,读卡器设备管理器将上电指令转换格式后发给读卡器设备,具体为:
读卡器设备管理器调用UsbDeviceConnection.bulkTransfer***函数向读卡器设备发送上电指令;将转格式后的响应数据发送至通信模块,具体为:读卡器设备管理器调用UsbDeviceConnection.bulkTransfer***函数向通信模块发送转格式后的响应数据;
或者,
读卡器设备管理器调用writeCharacteristic***函数向读卡器设备发送上电指令;将转格式后的响应数据发送至通信模块,具体为:读卡器设备管理器调用readCharacteristic***函数向通信模块发送转格式后的响应数据。
优选地,步骤S3中通信模块根据响应数据解析卡片类型之前,还包括:通信模块根据读卡器设备管理器返回的响应数据判断是否有卡片,如果有卡片,则通信模块根据响应数据解析卡片类型,如果没有卡片则报错。
在本实施例中,步骤S3中通信模块根据响应解析卡片类型之前,还包括通信模块判断读卡器是否可以提速,如果可以提速则向读卡器设备管理器发送读卡器提速的指令,如果不可以提速,通信模块直接根据响应解析卡片信息。
其中,向读卡器设备管理器发送读卡器提速的指令,具体为:通信模块调用UsbDeviceConnection.bulkTransfer***函数给读卡器设备发送提速指令。
在本实施例中,通信模块判断读卡器设备是否可以提速,具体包括:通信模块根据读卡器信息中描述符里包含的读卡器设备是否支持提速的信息判断读卡器设备是否可以提速,如果描述符里包含读卡器设备支持提速的信息,则读卡器设备可以提速;如果描述符里包含读卡器设备不支持提速的信息,则读卡器设备不可以提速。
优选地,步骤S3中解析卡片类型,具体为:通信模块根据响应数据中卡片类型的信息解析卡片的类型。
其中,通信模块根据响应数据中卡片类型的信息解析卡片的类型,具体为:通信模块根据响应数据中T0协议特有的状态信息和T1协议特有的状态信息解析卡片的类型。
具体地,步骤S4之前还包括:通信模块根据读卡器信息解析读卡器支持的交换协议类型。
进一步地,步骤S4中通信模块对操作指令进行协议封装,具体为:通信模块根据卡片类型和读卡器支持的交换协议对操作指令进行协议封装。
优选地,步骤S1中还包括:当通信模块接收到用户应用发送的启动读卡器服务的指令时,转换启动读卡器服务的指令格式后执行步骤S0;当通信模块接收到用户应用发送的给读卡器下电的指令时,转换下电指令格式后执行步骤S5;当通信模块接收到用户应用发送的停止读卡器服务的指令时,转换停止读卡器服务的指令格式后执行步骤S6;
步骤S0:通信模块启动读卡器服务,并将相应的状态信息返回至用户应用;
步骤S5:通信模块向读卡器设备管理器发送下电指令,读卡器设备管理器将上电指令转换格式后发给读卡器设备,待读卡器设备管理器接收到读卡器设备返回的响应数据后转换格式并将转格式后的响应数据发送至通信模块,通信模块将转换格式后的响应数据转换格式后返回至用户应用;
步骤S6:通信模块停止读卡器服务,并将相应的状态信息返回至用户应用。
其中,步骤S0中相应的状态信息具体为:读卡器服务打开成功或失败的信息;步骤S6中相应的状态信息具体为:读卡器服务停止成功或失败的信息。
实施例二
在本实施例中,通信模块和读卡器设备管理器两者均为本专利的发明物。本实施例中,读卡器设备可以是USB读卡器设备,也可以是蓝牙读卡器设备;相对应的,读卡器设备管理器可以是USB读卡器设备管理器,也可以是蓝牙读卡器设备管理器。
本实施例提供一种在安卓***中实现读卡器设备通信的方法,如图1所示,包括:
步骤101:通信模块等待接收来自用户应用的指令,当接收到来自用户应用的启动读卡器设备服务的指令时,转换启动读卡器设备服务的指令格式执行步骤102;当接收到来自用户应用的获取设备列表的指令时,转换获取设备列表的指令格式执行步骤103;当接收到来自用户应用的上电的指令时,转换上电指令格式执行步骤106;当接收到来自用户应用的操作指令时,转换操作指令格式执行步骤111;当接收到来自用户应用的下电指令时,转换下电指令格式执行步骤114;当接收到来自用户应用的停止读卡器设备服务的指令时,转换停止读卡器设备服务的指令格式执行步骤116;
在本实施例中,用户应用发送来的指令是二进制格式的,通信模块将接收到的指令转换成字符串的格式。
步骤102:通信模块使用exec启动读卡器设备服务,并将状态信息返回用户应用,返回步骤101;
在本实施例中,当用户应用中的SCardEstablishContext函数被调用时,用户应用给通信模块发送启动指令,通信模块收到启动指令,将相应的状态信息返回至用户应用,用户应用通过调用SCardEstablishContext函数将相应状态信息返回给应用程序,应用程序根据状态信息判断USB读卡器设备是否启动成功,如果启动成功,则返回步骤101,否则返回错误信息。
步骤103:通信模块转换获取设备列表的指令格式后,向读卡器设备管理器发送获取设备列表的指令;
在本实施例中,当用户应用中的SCardListReaders函数被调用时,用户应用给通信模块发送获取设备列表的指令。通信模块接收到获取设备列表的指令后,将获取设备列表的指令格式转换成字符串格式,调用sendUsb函数向读卡器设备管理器发送获取设备列表的指令。
当读卡器设备管理器是USB读卡器设备管理器时,USB读卡器设备管理器接到获取设备列表的指令后,调用Utility.hexStringToBytes函数对通信模块发送来的获取设备列表的指令转换成二进制格式,转换成功后,调用UsbManager.getDeviceList函数向USB读卡器设备发送获取设备列表的指令,待USB读卡器设备返回设备列表后,读卡器设备管理器调用Utility.byte2HexStr函数将USB读卡器设备返回的数据转换成字符串格式后,发给通信模块,通信模块将接收到的设备列表转换成二进制的格式后,调用recvUsb函数将设备列表返回给通信模块。
其中,通sendUsb函数和recvUsb函数均是开发人员自定义的函数。
具体地,设备列表里面包含了大量的信息,包括USB读卡器设备的供应商ID(Vendor ID,简写为VID)、厂家ID(Product ID,简写为PID)以及USB读卡器设备名称等。
当读卡器设备管理器是蓝牙读卡器设备管理器时,蓝牙读卡器设备管理器接到指令后调用BluetoothAdapter.LeScanCallback()搜索周围的蓝牙设备并调用recvUsb函数将设备列表返回给通信模块。
优选地,通信模块支持CCID协议。
步骤104:通信模块接收读卡器设备管理器返回的设备列表后,通信模块获取设备列表并判断在设备列表中是否可以获取到预设设备标识符,是则执行步骤105,否则返回步骤101;
在本实施例中,当读卡器设备是USB读卡器设备时,通信模块接收到USB读卡器设备管理器返回的设备列表时,通信模块对设备列表进行遍历,通过预设的设备标识符筛选出符合条件的USB读卡器设备。
其中,预设的设备标识符包括:供应商ID(Vendor ID,简写为VID)、厂家ID(ProductID,简写为PID)以及USB读卡器设备名称。
例如,通信模块发送“8006000100004000”至读卡器设备管理器用来获取供应商ID、厂家ID信息;通信模块发送“8006XX030904XX00”、“8006XX030904XX00”至读卡器设备管理器用来获取“iManufacturer”和“iProduct”,其中,“iManufacturer”和“iProduct”两个名称连起来为USB读卡器设备名称。
在本实施例中,通信模块如果查找到符合条件的USB读卡器设备,调用mUsbManager.requestPermission函数申请对USB读卡器设备的控制权限。USB读卡器设备收到申请后,应用程序会显示一个对话框,询问是否同意对USB读卡器设备的控制,待用户同意后,通信模块调用mIntf.getEndpoint(i).getAddress函数获取USB读卡器设备通信端点,为之后通信模块和USB读卡器设备之间的通信做准备。接着调用mUsbManger.openDevice(mUsbDevice)函数打开USB读卡器设备,获取此USB读卡器设备的通信句柄,目的是为之后通信模块和USB读卡器设备之间的通信做准备。
在本实施例中,通信模块如果没有查找到符合条件的USB读卡器设备,通信模块会直接向用户应用返回相应的状态信息。当用户应用接收到通信模块发送的状态信息后,调用SCardListReaders函数将状态信息返回给应用程序。
进一步地,当通信模块未查找到符合条件的USB读卡器设备时,此时的状态信息为表示没有符合条件的USB读卡器设备的状态码,应用程序能根据状态码判断没有符合条件的USB读卡器设备的原因,没有符合条件的USB读卡器设备的原因可以包括:USB读卡器设备没有***,USB读卡器设备没有插好,USB读卡器设备自身有问题。用户接收到状态信息后,会根据具体的状态进行一系列的操作。
当读卡器设备是蓝牙读卡器设备时,通信模块接收到蓝牙读卡器设备管理器返回的设备列表时,通信模块对设备列表进行遍历,通过预设的设备标识符筛选出符合条件的蓝牙读卡器设备。
其中,预设的设备标识符包括:蓝牙读卡器设备名称和蓝牙读卡器设备地址。
更具体地,通信模块可以根据实际情况进行筛选符合条件的设备。如果只选择指定名称的蓝牙读卡器设备时,调用函数device.getName;如果只选择指定蓝牙地址的蓝牙读卡器设备时,调用函数device.getAddress;如果既指定名称又指定蓝牙地址,则同时调用函数device.getName和device.getAddress函数进行筛选。
在本实施例中,通信模块如果查找到符合条件的蓝牙读卡器设备,调用mUsbManager.requestPermission函数申请对蓝牙读卡器设备的控制权限。蓝牙读卡器设备收到申请后,应用程序会显示一个对话框,询问是否同意对蓝牙读卡器设备的控制,待应用程序传来同意的指令后,通信模块调用device.connectGatt.connect()函数打开蓝牙读卡器设备。
在本实施例中,通信模块如果没有查找到符合条件的蓝牙读卡器设备,通信模块会直接向用户应用返回相应的状态信息。当用户应用接收到通信模块发送的状态信息后,调用SCardListReaders函数将状态信息返回给应用程序。
进一步地,当通信模块未查找到符合条件的蓝牙读卡器设备时,此时的状态信息为表示没有符合条件的蓝牙读卡器设备的状态码,应用程序能根据状态码判断没有符合条件的蓝牙读卡器设备的原因。例如,没有符合条件的蓝牙读卡器设备的原因可以包括:蓝牙读卡器设备没有***,蓝牙读卡器设备没有插好,蓝牙读卡器设备自身有问题。用户接收到状态信息后,会根据具体的状态进行一系列的操作。
步骤105:通信模块向读卡器设备管理器发送获取读卡器设备描述符信息的指令,读卡器设备管理器对获取读卡器设备信息的指令进行格式转换,将转换格式后的指令发给所述读卡器设备,待读卡器设备管理器接收到读卡器设备返回的描述符信息后转换数据格式发送至通信模块,通信模块获取并解析读卡器设备描述符信息,将解析结果转换格式后返回给用户应用,返回步骤101;
在本实施例中,通信模块调用sendUsb函数向读卡器设备管理器发送获取读卡器设备描述符的指令,读卡器设备管理器接到指令后调用Utility.hexStringToBytes函数对接收到的指令进行格式的转换,将接收到的获取读卡器设备描述符的指令转换成二进制格式后,调用UsbDeviceConnection.controlTransfer函数向读卡器设备发送转换格式后的获取读卡器设备描述符信息的指令,读卡器设备收到指令后,通过UsbDeviceConnection.controlTransfer函数给读卡器设备管理器返回描述符信息,读卡器设备管理器接收到读卡器设备返回的描述符信息后,调用Utility.byte2HexStr函数对读卡器设备返回的描述符信息进行格式转换,将其转换成字符串后,读卡器设备管理器调用recvUsb函数将转换格式后的读卡器设备描述符信息返回给通信模块。
例如,在本实施例中,通信模块调用sendUsb函数发送“usb_ctl:8006000100004000”指令用来获取设备描述符、接口描述符、ccid类描述符,其中,ccid类描述符可以解析出当前读卡器设备支持的ccid协议类型,传输速度、卡槽个数等;调用sendUsb函数发送“usb_ctl:a103000000000004”用来获取数据传输速率。
在本实施例中,当通信模块获取到读卡器设备描述符信息后,将获取到的信息和代表有读卡器设备的状态码返回给用户应用,用户应用调用SCardListReaders函数将状态信息返回给应用程序。
步骤106:通信模块向读卡器设备管理器发送上电指令;
在本实施例中,当SCardConnect函数被用户应用调用时,用户应用给通信模块发送上电指令,当读卡器设备是USB读卡器设备时,通信模块调用sendUsb函数向读卡器设备管理器发送上电指令,读卡器设备管理器接收到上电指令后,调用Utility.hexStringToBytes函数对通信模块发送来的指令转换成二进制格式,转换成功后,调用UsbDeviceConnection.bulkTransfer函数向读卡器设备发送转换格式后的上电指令,如果指令发送成功,读卡器设备管理器向通信模块返回指令发送成功的消息;如果指令发送失败,读卡器设备管理器向通信模块返回指令发送失败的消息。
具体地,当读卡器设备是USB读卡器设备时,USB读卡器设备接到上电指令后会返回一些卡片的信息,USB读卡器设备管理器调用mConnection.bulkTransfer函数接收USB读卡器设备返回的数据,然后调用Utility.byte2HexStr函数将USB读卡器设备返回的数据转换成字符串,转换成功后调用recvUsb函数将转格式后的数据返回给通信模块。
更具体地,卡片的信息指的是有无卡片等相关信息。
例如,在本实施例中,通信模块发送“usb_find:6100000000XX00000000”指令对USB读卡器设备的卡片进行上电,其中XX为卡槽序号。
在本实施例中,当SCardConnect函数被用户应用调用时,用户应用给通信模块发送上电指令,当读卡器设备是蓝牙读卡器设备时,通信模块调用sendUsb函数向蓝牙读卡器设备管理器发送上电指令,蓝牙读卡器设备管理器接收到上电指令后,调用Utility.hexStringToBytes函数对通信模块发送来的指令转换成二进制格式,转换成功后,调用evice.connectGatt.open函数向蓝牙读卡器设备发送转换格式之后的上电指令,如果指令发送成功,蓝牙读卡器设备管理器向通信模块返回指令发送成功的消息;如果指令发送失败,蓝牙读卡器设备管理器向通信模块返回指令发送失败的消息。
具体地,当蓝牙读卡器设备接到上电指令后会返回一些卡片的信息,蓝牙读卡器设备管理器调用mConnection.bulkTransfer函数接收蓝牙读卡器设备返回的数据,然后调用Utility.byte2HexStr函数将蓝牙读卡器设备返回的数据转换成字符串,转换成功后调用recvUsb函数将转换成字符串的数据返回给通信模块。
步骤107:通信模块接收并解析读卡器设备管理器返回的信息,判断是否有卡片***,是则执行步骤108,否则执行步骤101;
在本实施例中,通信模块通过解析读卡器设备返回的卡片信息判断读卡器设备上有无卡片。
例如,如果读卡器设备返回的信息为“80000000000000xxyy00”,则读卡器设备上无卡片,其中XXYY为错误码;如果返回的信息为“80xxxxxxxx0000000000+ATR”,则读卡器设备上有卡片,其中,xxxxxxxx为ATR的数据长度,此时卡片属于激活状态。
例如,当读卡器设备上有卡片时返回的数据为:
“80 09 00 00 00 00 25 00 00 00 3b 91 13 81 31 80 9f 10 0d”
需要说明的是,ATR(Answer-to-Reset的缩写)包括两部分,接口字符和历史字符。在本实施例中,主要涉及到接口字符。接口字符里包括卡片和USB读卡器设备的时钟、波特率、当前卡片所处的模式、T0和T1协议特有的状态符等信息。
还需要说明的是,通信模块根据T0和T1协议特有的状态符,区分卡片的种类。
步骤108:通信模块判断读卡器设备是否可以提速,是则执行步骤109,否则执行步骤110;
具体地,读卡器设备返回的ATR中,里面有对卡片的详细描述,其中包括卡片是否支持加速的相关信息。
需要说明的是,在获取读卡器设备的ccid描述符里包含了读卡器设备是否支持提速以及速率的一个范围值,并且,ATR中包括了是否已经提速、支持速率的建议值等信息。
步骤109:通信模块向读卡器设备管理器发送读卡器设备提速的指令,读卡器设备管理器转换格式后向读卡器设备发送转换格式后的提速指令,待读卡器设备管理器接收到读卡器设备返回的响应数据后,将响应数据转换格式发送至通信模块;
在本实施例中,当读卡器设备是USB读卡器设备时,通信模块调用sendUsb函数向读卡器设备管理器发送USB读卡器设备提速的指令,读卡器设备管理器接到指令后调用Utility.hexStringToBytes函数对通信模块发送来的指令转换成二进制格式,转换成功后,调用UsbDeviceConnection.bulkTransfer函数给USB读卡器设备发送转换格式后的提速指令,USB读卡器设备接到提速指令后需判断自身是否能够加速,如果不可以,向读卡器设备管理器返回错误信息,如果可以则进行加速,同时返回加速成功的响应,读卡器设备管理器收到USB读卡器设备返回的响应后,调用Utility.byte2HexStr函数对USB读卡器设备返回的描述符信息进行格式转换,将其转换成字符串后,调用recvUsb函数返回给通信模块。
在本实施例中,读卡器设备管理器接收到通信模块发送的提速的指令后,对指令格式进行转换。具体地,指令是字符串格式,读卡器设备管理器将指令的格式转换成二进制格式。
在本实施例中,当读卡器设备是蓝牙读卡器设备时,通信模块调用sendUsb函数向蓝牙读卡器设备管理器发送蓝牙读卡器设备提速的指令,蓝牙读卡器设备管理器接到指令后转换指令的格式,调用writeCharacteristic和readCharacteristic函数给蓝牙读卡器设备发送转换格式后的提速指令,蓝牙读卡器设备接到提速指令后需判断自身是否能够加速,如果不可以,向蓝牙读卡器设备管理器返回错误信息,如果可以则进行加速,同时返回加速成功的响应,蓝牙读卡器设备管理器收到蓝牙读卡器设备返回的响应后转换响应格式,并调用recvUsb函数将转换格式后的响应返回给通信模块。
进一步地,通信模块发送数据“6fxxxxxxxx0000000000+pps”进行提速,其中,xx为pps的长度,pps为根据ATR组合的数据。其中,pps(protocol and parameters selection)意思为:协议和参数选择。
更进一步地,如果读卡器设备和卡片均支持提速,则发送读卡器设备提速的相应数据,卡器设备再传递给卡片,经过此过程,读卡器设备和卡片都提升到了相应的速度。
步骤110:通信模块解析卡片类型后,将卡片状态信息转换格式后发送至用户应用;
在本实施例中,通信模块根据ATR中T0和T1协议特有的状态符解析卡片类型是T0卡还是T1卡。
在本步骤中,通信模块将读卡器设备上有卡片的状态信息返回给用户应用。用户应用接收到状态码后,调用SCardConnect函数将状态码发给用户应用,在用户应用接收到通信模块发来的状态信息后,需根据状态信息判断USB读卡器设备上是否有卡片,如果有卡片,返回步骤101,如果无卡片,则会向应用程序报错。
步骤111:通信模块根据读卡器设备描述符信息解析读卡器设备支持的交换协议类型;
在本实施例中,交换协议类型是在读卡器设备描述符信息里面有具体的限定,读卡器设备支持的交换协议类型一般有三种:TPDU、Short APDU和Short and ExtendedAPDU。
步骤112:通信模块根据卡片类型和读卡器设备支持的交换协议对操作指令进行协议封装,并将封装后的操作指令发送给读卡器设备管理器;
在本实施例中,当读卡器设备为USB读卡器设备时,当SCardTransmit函数被应用程序调用时,应用程序给通信模块发送操作指令,通信模块接收到用户应用发来的指令后进行协议封装,然后调用sendUsb函数给读卡器设备管理器发送协议封装的指令,读卡器设备管理器接到封装后的指令后调用UsbDeviceConnection.bulkTransfer函数将指令发送给USB读卡器设备,USB读卡器设备执行完指令后将数据返回至读卡器设备管理器,读卡器设备管理器调用recvUsb函数将USB读卡器设备信息返回给通信模块。
在本实施例中,当读卡器设备为蓝牙读卡器设备时,当SCardTransmit函数被应用程序调用时,应用程序给通信模块发送操作指令,通信模块接收到用户应用发来的指令后进行协议封装,然后调用sendUsb函数给蓝牙读卡器设备管理器发送协议封装的指令,蓝牙读卡器设备管理器接到指令后调用writeCharacteristic和readCharacteristic函数将指封装后的令发送给蓝牙读卡器设备,蓝牙读卡器设备执行完指令后将数据返回至蓝牙读卡器设备管理器,蓝牙读卡器设备管理器转换数据格式后调用recvUsb函数将蓝牙读卡器设备转换数据格式后的信息返回给通信模块。
在本实施例中,应用程序调用API向通信模块发送操作指令。用到的协议是7816协议和CCID协议。
例如,应用程序通过调用接口API向USB读卡器设备发送获取一串随机数的指令:“0084000008”。
针对支持T1协议的智能卡,atr为“80 0a 00 00 00 00 00 00 00 00 3b e1 0000 81 31 fe 45 10 ca”,发送数据为“0084000008”。
如果读卡器设备支持交换协议类型为“Short APDU”,则发送数据为“6f 05 00 0000 00 25 00 00 00 00 84 00 00 08”;
如果读卡器设备支持交换协议类型为“TPDU”,则发送数据为“6f 09 00 00 00 0052 00 00 00 00 00 05 00 84 00 00 08 89”。
步骤113:读卡器设备管理器接收到指令后进行格式转换,将转换格式后的发给读卡器设备,通信模块接收到读卡器设备管理器返回的数据后,对接收到的数据进行协议解包,并将卡片响应数据转换格式后返回至用户应用;
此步骤之后还包括:用户应用调用SCardTransmit函数将卡片响应数据发送至应用程序。如果应用程序继续发送相关操作指令,返回步骤112,否则执行步骤114。
步骤114:通信模块向读卡器设备管理器发送读卡器设备下电的指令;
在本实施例中,当读卡器设备为USB读卡器设备时,当SCardConnect函数被用户应用调用时,用户应用给通信模块发送下电指令,通信模块调用sendUsb函数向读卡器设备管理器发送下电指令,读卡器设备管理器接收到下电指令后,调用Utility.hexStringToBytes函数对通信模块发送来的指令转换成二进制格式,转换成功后,调用UsbDeviceConnection.bulkTransfer函数向USB读卡器设备发送转换格式后的下电指令,如果指令发送成功,读卡器设备管理器向通信模块返回指令发送成功的消息;如果指令发送失败,读卡器设备管理器向通信模块返回指令发送失败的消息。
在本实施例中,当读卡器设备为蓝牙读卡器设备时,用户调用用户应用的SCardDisconnect函数向USB读卡器设备发送对蓝牙读卡器设备下电的请求,通信模块调用sendUsb函数的usb_send指令向读卡器设备管理器发送对蓝牙读卡器设备发送下电请求后,读卡器设备管理器接到指令后调用writeCharacteristic和readCharacteristic函数对蓝牙读卡器设备进行下电操作,并通过recvUsb函数将对蓝牙读卡器设备下电成功与否的消息返回至通信模块。
步骤115:通信模块获取读卡器设备管理器返回的读卡器设备状态信息后进行格式转换,向用户应用返回读卡器设备状态信息;
在本步骤中,此时的读卡器设备状态信息是指下电成功与否的状态。
步骤116:通信模块使用destroy停止读卡器设备服务,并向用户应用返回相应的状态信息。
在本实施例中,用户调用用户应用中的SCardReleaseContext函数给通信模块发送终止指令,通信模块收到用户应用发送的指令后,使用destroy停止读卡器设备服务,并将状态码返回给用户应用。用户应用通过调用SCardEstablishContext函数将相应状态码返回给用户。
实施例三
本实施例提供一种在安卓***中实现读卡器设备通信的装置,其特征在于,装置包括:通信模块和读卡器设备管理器。
通信模块,具体包括:
第一接收模块301,用于接收用户应用发送的指令和读卡器设备管理器返回的数据;
获取模块302,用于当第一接收模块301接收到用户应用发送的查找读卡器设备的指令时,获取设备列表;
第一判断模块303,用于判断是否可以在获取模块302获取到的设备列表中获取到预设设备标识符;
第一发送模块304,用于当第一判断模块303判断在设备列表中可以获取到预设设备标识符时,向读卡器设备管理器发送获取与预设设备标识符对应的读卡器设备的信息的指令;用于将第一转换格式模块306转换格式后的解析结果发送至用户应用;用于向读卡器设备管理器发送第一转换格式模块306转换格式后的上电指令;用于将第一转换格式模块306转换格式后的卡片类型的结果返回至用户应用;用于将封装模块308封装好的操作指令发送至读卡器设备管理器;用于将第一转换格式模块306转换格式后的解包后的数据返回至用户应用;
第一解析模块305,用于当第一接收模块301接收到的读卡器设备管理器返回的数据为转换格式后的读卡器信息时,解析转换格式后的读卡器设备信息;
第一转换格式模块306,用于将第一解析模块305得到的解析结果转换格式;用于当第一接收模块301接收到用户应用发送的给读卡器设备上电的指令时,转换上电的指令格式;用于当第一接收模块301接收到用户应用发送的操作指令时,转换操作指令格式;用于将第二解析模块307解析得到的卡片类型的结果转格式;还用于将解包模块309解包后的数据转换格式;
第二解析模块307,用于当第一接收模块301接收到转换格式后的响应数据时,根据转换格式后的响应数据解析卡片类型得到卡片类型的结果;
封装模块308,用于将第一转换格式模块306转换格式后的操作指令进行协议封装;
解包模块309,用于当第一接收模块301接收到转换格式后的操作响应数据时进行协议解包;
读卡器设备管理器,具体包括:
第二接收模块401,用于接收通信模块发送的指令和读卡器设备返回的响应;
第二转换格式模块402,用于将第一发送模块304发送的获取与预设设备标识符对应的读卡器设备的信息的指令进行格式转换;用于转换第二接收模块401接收到的读卡器设备返回的读卡器设备信息的格式;用于转换第二接收模块401接收到的上电指令的格式;用于转换第二接收模块401接收到的读卡器设备返回的响应数据后转换格式;还用于当第二接收模块401接收到封装好的操作指令后,转换操作指令的格式;用于当第二接收模块401接收到读卡器设备返回的操作响应数据后转换格式;
第二发送模块403,用于将第二转换格式模块402转换格式后的获取读卡器设备信息的指令发送至读卡器设备;用于将第二转换格式模块402转换格式后的读卡器设备信息发送至通信模块;用于将第二转换格式模块402转换格式后的上电指令发送至读卡器设备;用于将第二转换格式模块402转换格式后的响应数据发送至通信模块;用于将第二转换格式模块402转换格式后的操作指令发送至读卡器设备;用于将第二转换格式模块402转换格式后的操作响应数据发送至通信模块。
具体地,第一转换格式模块306包括:第一转换格式单元和第二转换格式单元;
第一转换格式单元,用于将上电的指令的格式转换成字符串;还用于将操作指令的格式转换成字符串;
第二转换格式单元,用于将解析结果的格式转换为二进制;用于将解析卡片类型的结果的格式转换为二进制;还用于将解包后的数据的格式转换为二进制;
第二转换格式模块402包括:第三转换格式单元和第四转换格式单元;
第三转换格式单元,用于将读卡器设备信息的格式转换为字符串;用于将响应数据的格式转换为字符串;还用于将读卡器设备返回的操作响应数据的格式转换为字符串;
第四转换格式单元,用于将获取读卡器设备信息的指令的格式转换为二进制;用于将上电指令的格式转换为二进制;还用于将操作指令的格式转换为二进制。
在本实施例中,获取模块302包括:第一发送单元和第一接收单元;
第一发送单元,用于向读卡器设备管理器发送获取设备列表的指令;
第一接收单元,用于接收读卡器设备管理器返回的设备列表。
优选地,装置还包括调用模块;
调用模块,用于当第二接收模块401接收到获取设备列表的指令后,调用UsbManager.getDeviceList***函数向读卡器设备发送获取设备列表的指令;
或者,
调用BluetoothAdapter.LeScanCallback***函数向读卡器设备发送获取设备列表的指令。
具体地,第一判断模块303还包括:遍历单元;
遍历单元,用于在获取模块302获取设备列表后对设备列表进行遍历。
在本实施例中,第二发送模块403包括第一调用单元;
第一调用单元,用于调用UsbDeviceConnection.controlTransfer***函数向读卡器设备发送将转换格式后的指令。
具体地,第二发送模块403还包括第二调用单元;
第二调用单元,用于调用UsbDeviceConnection.bulkTransfer***函数向读卡器设备发送上电指令;还用于调用UsbDeviceConnection.bulkTransfer***函数向通信模块发送转格式后的响应数据;或者,用于调用writeCharacteristic***函数向读卡器设备发送上电指令;还用于调用readCharacteristic***函数向通信模块发送转格式后的响应数据。
优选地,装置还包括第二判断模块;
第二判断模块,用于根据第一接收模块301读卡器设备管理器返回的响应数据判断是否有卡片;
第二解析模块307,具体用于当第二判断模块判断有卡片时,根据响应数据解析卡片类型。
进一步地,装置还包括第三判断模块;
第三判断模块,用于判断读卡器设备是否可以提速;
第一发送模块304,还用于当第三判断模块判断读卡器设备可以提速时,向读卡器设备管理器发送读卡器设备提速的指令;
第二解析模块307,还用于当第三判断模块判断读卡器设备不可以提速时,直接根据响应解析卡片信息。
具体地,第一发送模块304,还包括第三调用单元;
第三调用单元,用于调用UsbDeviceConnection.bulkTransfer***函数给读卡器设备管理器发送提速指令。
更具体地,第三判断模块,具体用于根据读卡器设备信息中描述符里包含的读卡器设备是否支持提速的信息判断读卡器设备是否可以提速;
第一发送模块304,用于当第三判断模块判断描述符里包含读卡器设备支持提速的信息,则读卡器设备可以提速,则向读卡器设备管理器发送读卡器设备提速的指令。
进一步地,第二解析模块307,具体用于根据响应数据中卡片类型的信息解析卡片的类型。
更进一步地,第二解析模块307,具体用于响应数据中T0协议特有的状态信息和T1协议特有的状态信息解析卡片的类型。
优选地,装置还包括第三解析模块;
第三解析模块,用于根据读卡器设备信息解析读卡器设备支持的交换协议类型。
在本实施例中,封装模块308,具体用于根据卡片类型和读卡器设备支持的交换协议将第一转换格式模块306转换格式后的操作指令进行协议封装。
优选地,还包括:
第一转换格式模块306,还用于当第一接收模块301接收到用户应用发送的启动读卡器设备服务的指令时,转换启动读卡器设备服务的指令格式;还用于当第一接收模块301接收到用户应用发送的给读卡器设备下电的指令时,转换下电指令格式;当第一接收模块301接收到转换格式后的响应数据后,转换转换格式后的响应数据的格式;还用于当第一接收模块301接收到用户应用发送的停止读卡器设备服务的指令时,转换停止读卡器设备服务的指令格式;
启动模块,用于当第一转换格式模块306转换启动读卡器设备服务的指令格式后,启动读卡器设备服务;
第一发送模块304,还用于当启动模块启动读卡器设备服务后,将相应的状态信息返回至用户应用;还用于向读卡器设备管理器发送转换格式后的下电指令;还用于将第一转换格式模块306转换格式后的转换格式后的响应数据返回至用户应用;还用于当停止模块停止读卡器设备服务后,将相应的状态信息返回至用户应用;
第二转换格式模块402,还用于将转换格式后的下电指令转换格式;还用于当第二接收模块401接收到读卡器设备返回的响应数据后转换格式;
第二发送模块403,还用于将第二转换格式模块402转换格式后的转换格式后的下电指令发送给读卡器设备;还用于将第二转换格式模块402转换格式后的响应数据发送至通信模块;
停止模块,用于当第一转换格式模块306转换停止读卡器设备服务的指令格式后,停止读卡器设备服务。
进一步地,第一发送模块304中的相应的状态信息具体为:读卡器设备服务打开成功或失败的信息;读卡器设备服务停止成功或失败的信息。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (34)

1.一种在安卓***中实现读卡器设备通信的方法,其特征在于,包括:
步骤S1:当通信模块接收到用户应用发送的查找读卡器设备的指令时,执行步骤S2;当所述通信模块接收到所述用户应用发送的给所述读卡器设备上电的指令时,转换所述上电的指令格式后执行步骤S3;当所述通信模块接收到所述用户应用发送的操作指令时,转换所述操作指令格式后执行步骤S4;
步骤S2:所述通信模块获取设备列表并判断在所述设备列表中是否可以获取到预设设备标识符,是则向读卡器设备管理器发送获取与所述预设设备标识符对应的读卡器设备的信息的指令,所述读卡器设备管理器对所述获取所述读卡器设备信息的指令进行格式转换,将转换格式后的指令发给所述读卡器设备,待所述读卡器设备管理器接收到所述读卡器设备返回的读卡器设备信息后,转换读卡器设备信息格式并将转换格式后的读卡器信息发送至所述通信模块,所述通信模块解析转换格式后的读卡器设备信息,将解析结果转换格式后返回至所述用户应用,否则报错;
步骤S3:所述通信模块向所述读卡器设备管理器发送转换格式后的所述上电指令,所述读卡器设备管理器将转换格式后的所述上电指令转换格式后发给所述读卡器设备,待所述读卡器设备管理器接收到所述读卡器设备返回的响应数据后转换格式并将转格式后的响应数据发送至所述通信模块,所述通信模块根据转换格式后的所述响应数据解析卡片类型并将解析卡片类型的结果转换格式,将转换格式后的所述解析卡片类型的结果返回至所述用户应用;
步骤S4:所述通信模块对转换格式后的所述操作指令进行协议封装后发送给所述读卡器设备管理器,所述读卡器设备管理器对所述操作指令转换格式并将转换格式后的所述操作指令发给所述读卡器设备,所述读卡器设备管理器接收到所述读卡器设备返回的操作响应数据后转换格式并将转格式后的操作响应数据发送至所述通信模块,所述通信模块进行协议解包后将解包后的数据转换格式,返回至所述用户应用。
2.根据权利要求1所述的方法,其特征在于,所述转换所述上电的指令格式,具体为:所述通信模块将所述上电的指令的格式转换成字符串;
所述转换所述操作指令格式,具体为:所述通信模块将所述操作指令的格式转换成字符串;
所述读卡器设备管理器对所述获取所述读卡器设备信息的指令进行格式转换,具体为:所述读卡器设备管理器将所述获取所述读卡器设备信息的指令的格式转换为二进制;
所述转换读卡器设备信息格式,具体为:所述读卡器设备管理器将所述读卡器设备信息的格式转换为字符串;
所述将解析结果转换格式,具体为:所述通信模块将所述解析结果的格式转换为二进制;
所述读卡器设备管理器将所述上电指令转换格式,具体为:所述读卡器设备管理器将所述上电指令的格式转换为二进制;
所述读卡器设备管理器接收到所述读卡器设备返回的响应数据后转换格式,具体为:所述读卡器设备管理器接收到所述读卡器设备返回的响应数据后,将所述响应数据的格式转换为字符串;
所述将解析卡片类型的结果转换格式,具体为:所述通信模块将所述解析卡片类型的结果的格式转换为二进制;
所述读卡器设备管理器对所述操作指令转换格式,具体为:所述读卡器设备将所述操作指令的格式转换为二进制;
所述读卡器设备管理器接收到所述读卡器设备返回的操作响应数据后转换格式,具体为:所述读卡器设备管理器接收到所述读卡器设备返回的操作响应数据后,将所述读卡器设备返回的操作响应数据的格式转换为字符串;
所述将解包后的数据转换格式,具体为:所述通信模块将所述解包后的数据的格式转换为二进制。
3.根据权利要求1所述的方法,其特征在于,所述通信模块获取设备列表,具体为:所述通信模块向所述读卡器设备管理器发送获取设备列表的指令,接收所述读卡器设备管理器返回的所述设备列表。
4.根据权利要求1所述的方法,其特征在于,还包括:所述读卡器设备管理器接到所述获取设备列表的指令后,调用UsbManager.getDeviceList***函数向读卡器设备发送获取设备列表的指令;
或者,
调用BluetoothAdapter.LeScanCallback***函数向读卡器设备发送获取设备列表的指令。
5.根据权利要求1所述的方法,其特征在于,所述通信模块获取设备列表并判断在所述设备列表中是否可以获取到预设设备标识符,具体为:
所述通信模块获取所述设备列表后对所述设备列表进行遍历,并判断在所述设备列表中是否可以获取到预设设备标识符,是则向读卡器设备管理器发送获取与所述预设设备标识符对应的读卡器设备的信息的指令,否则报错。
6.根据权利要求1所述的方法,其特征在于,所述步骤S2中,所述将转换格式后的指令发给所述读卡器设备,具体为:所述读卡器设备管理器调用UsbDeviceConnection.controlTransfer***函数向读卡器设备发送将转换格式后的指令;所述读卡器设备接收到指令后,调用UsbDeviceConnection.controlTransfer***函数向所述读卡器设备管理器返回读卡器设备信息。
7.根据权利要求1所述的方法,其特征在于,所述步骤S3中,所述读卡器设备管理器将所述上电指令转换格式后发给所述读卡器设备,具体为:
所述读卡器设备管理器调用UsbDeviceConnection.bulkTransfer***函数向读卡器设备发送上电指令;所述将转格式后的响应数据发送至所述通信模块,具体为:所述读卡器设备管理器调用UsbDeviceConnection.bulkTransfer***函数向所述通信模块发送转格式后的响应数据;
或者,
所述读卡器设备管理器调用writeCharacteristic***函数向读卡器设备发送上电指令;所述将转格式后的响应数据发送至所述通信模块,具体为:所述读卡器设备管理器调用readCharacteristic***函数向所述通信模块发送转格式后的响应数据。
8.根据权利要求1所述的方法,其特征在于,所述步骤S3中所述通信模块根据所述响应数据解析卡片类型之前,还包括:所述通信模块根据读卡器设备管理器返回的响应数据判断是否有卡片,如果有卡片,则所述通信模块根据所述响应数据解析卡片类型,如果没有卡片则报错。
9.根据权利要求1所述的方法,其特征在于,所述步骤S3中所述通信模块根据响应解析卡片类型之前,还包括所述通信模块判断所述读卡器设备是否可以提速,如果可以提速则向所述读卡器设备管理器发送读卡器设备提速的指令,如果不可以提速,所述通信模块直接根据响应解析卡片信息。
10.根据权利要求9所述的方法,其特征在于,所述向所述读卡器设备管理器发送读卡器设备提速的指令,具体为:所述通信模块调用UsbDeviceConnection.bulkTransfer***函数给所述读卡器设备管理器发送提速指令。
11.根据权利要求9所述的方法,其特征在于,所述通信模块判断所述读卡器设备是否可以提速,具体包括:所述通信模块根据所述读卡器设备信息中描述符里包含的读卡器设备是否支持提速的信息判断所述读卡器设备是否可以提速,如果描述符里包含读卡器设备支持提速的信息,则所述读卡器设备可以提速;如果描述符里包含读卡器设备不支持提速的信息,则所述读卡器设备不可以提速。
12.根据权利要求1所述的方法,其特征在于,所述步骤S3中所述解析卡片类型,具体为:所述通信模块根据所述响应数据中卡片类型的信息解析卡片的类型。
13.根据权利要求12所述的方法,其特征在于,所述通信模块根据所述响应数据中卡片类型的信息解析卡片的类型,具体为:所述通信模块根据所述响应数据中T0协议特有的状态信息和T1协议特有的状态信息解析卡片的类型。
14.根据权利要求1所述的方法,其特征在于,所述步骤S4之前还包括:所述通信模块根据所述读卡器设备信息解析读卡器设备支持的交换协议类型。
15.根据权利要求14所述的方法,其特征在于,所述步骤S4中所述通信模块对所述操作指令进行协议封装,具体为:所述通信模块根据所述卡片类型和所述读卡器设备支持的交换协议对操作指令进行协议封装。
16.根据权利要求1所述的方法,所述步骤S1中还包括:当所述通信模块接收到所述用户应用发送的启动读卡器设备服务的指令时,转换所述启动读卡器设备服务的指令格式后执行步骤S0;当通信模块接收到所述用户应用发送的给所述读卡器设备下电的指令时,转换所述下电指令格式后执行步骤S5;当所述通信模块接收到所述用户应用发送的停止所述读卡器设备服务的指令时,转换所述停止所述读卡器设备服务的指令格式后执行步骤S6;
步骤S0:所述通信模块启动所述读卡器设备服务,并将相应的状态信息返回至所述用户应用;
步骤S5:所述通信模块向所述读卡器设备管理器发送转换格式后的所述下电指令,所述读卡器设备管理器将转换格式后的所述下电指令转换格式后发给所述读卡器设备,待所述读卡器设备管理器接收到所述读卡器设备返回的响应数据后转换格式并将转格式后的响应数据发送至所述通信模块,所述通信模块将所述转换格式后的响应数据转换格式后返回至所述用户应用;
步骤S6:所述通信模块停止所述读卡器设备服务,并将相应的状态信息返回至所述用户应用。
17.根据权利要求16所述的方法,其特征在于,所述步骤S0中所述相应的状态信息具体为:所述读卡器设备服务打开成功或失败的信息;
所述步骤S6中所述相应的状态信息具体为:所述读卡器设备服务停止成功或失败的信息。
18.一种在安卓***中实现读卡器设备通信的装置,其特征在于,包括:通信模块和读卡器设备管理器;
所述通信模块,具体包括:
第一接收模块,用于接收用户应用发送的指令和读卡器设备管理器返回的数据;
获取模块,用于当所述第一接收模块接收到所述用户应用发送的查找读卡器设备的指令时,获取设备列表;
第一判断模块,用于判断是否可以在所述获取模块获取到的所述设备列表中获取到预设设备标识符;
第一发送模块,用于当所述第一判断模块判断在所述设备列表中可以获取到所述预设设备标识符时,向所述读卡器设备管理器发送获取与所述预设设备标识符对应的读卡器设备的信息的指令;用于将第一转换格式模块转换格式后的解析结果发送至用户应用;用于向所述读卡器设备管理器发送所述第一转换格式模块转换格式后的所述上电指令;用于将第一转换格式模块转换格式后的卡片类型的结果返回至用户应用;用于将封装模块封装好的操作指令发送至所述读卡器设备管理器;用于将第一转换格式模块转换格式后的解包后的数据返回至用户应用;
第一解析模块,用于当所述第一接收模块接收到的读卡器设备管理器返回的数据为转换格式后的读卡器信息时,解析转换格式后的读卡器设备信息;
第一转换格式模块,用于将所述第一解析模块得到的解析结果转换格式;用于当所述第一接收模块接收到所述用户应用发送的给所述读卡器设备上电的指令时,转换所述上电的指令格式;用于当所述第一接收模块接收到所述用户应用发送的操作指令时,转换所述操作指令格式;用于将第二解析模块解析得到的卡片类型的结果转格式;还用于将解包模块解包后的数据转换格式;
第二解析模块,用于当所述第一接收模块接收到转换格式后的响应数据时,根据转换格式后的所述响应数据解析卡片类型得到所述卡片类型的结果;
封装模块,用于将所述第一转换格式模块转换格式后的操作指令进行协议封装;
解包模块,用于当所述第一接收模块接收到转换格式后的操作响应数据时进行协议解包;
所述读卡器设备管理器,具体包括:
第二接收模块,用于接收所述通信模块发送的指令和读卡器设备返回的响应;
第二转换格式模块,用于将所述第一发送模块发送的获取与所述预设设备标识符对应的读卡器设备的信息的指令进行格式转换;用于转换第二接收模块接收到的所述读卡器设备返回的读卡器设备信息的格式;用于转换第二接收模块接收到的所述上电指令的格式;用于转换所述第二接收模块接收到的所述读卡器设备返回的响应数据后转换格式;还用于当所述第二接收模块接收到所述封装好的操作指令后,转换所述操作指令的格式;用于当所述第二接收模块接收到所述读卡器设备返回的操作响应数据后转换格式;
第二发送模块,用于将所述第二转换格式模块转换格式后的获取所述读卡器设备信息的指令发送至读卡器设备;用于将所述第二转换格式模块转换格式后的所述读卡器设备信息发送至所述通信模块;用于将所述第二转换格式模块转换格式后的上电指令发送至读卡器设备;用于将所述第二转换格式模块转换格式后的所述响应数据发送至所述通信模块;用于将所述第二转换格式模块转换格式后的所述操作指令发送至所述读卡器设备;用于将所述第二转换格式模块转换格式后的所述操作响应数据发送至所述通信模块。
19.根据权利要求18所述的装置,其特征在于,所述第一转换格式模块包括:第一转换格式单元和第二转换格式单元;
所述第一转换格式单元,用于将所述上电的指令的格式转换成字符串;还用于将所述操作指令的格式转换成字符串;
所述第二转换格式单元,用于将所述解析结果的格式转换为二进制;用于将所述解析卡片类型的结果的格式转换为二进制;还用于将所述解包后的数据的格式转换为二进制;
所述第二转换格式模块包括:第三转换格式单元和第四转换格式单元;
所述第三转换格式单元,用于将所述读卡器设备信息的格式转换为字符串;用于将所述响应数据的格式转换为字符串;还用于将所述读卡器设备返回的操作响应数据的格式转换为字符串;
所述第四转换格式单元,用于将所述获取所述读卡器设备信息的指令的格式转换为二进制;用于将所述上电指令的格式转换为二进制;还用于将所述操作指令的格式转换为二进制。
20.根据权利要求18所述的装置,其特征在于,所述获取模块包括:第一发送单元和第一接收单元;
所述第一发送单元,用于向所述读卡器设备管理器发送获取设备列表的指令;
所述第一接收单元,用于接收所述读卡器设备管理器返回的所述设备列表。
21.根据权利要求18所述的装置,其特征在于,还包括调用模块;
所述调用模块,用于当所述第二接收模块接收到所述获取设备列表的指令后,调用UsbManager.getDeviceList***函数向读卡器设备发送获取设备列表的指令;
或者,
调用BluetoothAdapter.LeScanCallback***函数向读卡器设备发送获取设备列表的指令。
22.根据权利要求18所述的装置,其特征在于,所述第一判断模块还包括:遍历单元;
所述遍历单元,用于在所述获取模块获取所述设备列表后对所述设备列表进行遍历。
23.根据权利要求18所述的装置,其特征在于,所述第二发送模块包括第一调用单元;
所述第一调用单元,用于调用UsbDeviceConnection.controlTransfer***函数向读卡器设备发送将转换格式后的指令。
24.根据权利要求18所述的装置,其特征在于,所述第二发送模块还包括第二调用单元;
所述第二调用单元,用于调用UsbDeviceConnection.bulkTransfer***函数向读卡器设备发送上电指令;还用于调用UsbDeviceConnection.bulkTransfer***函数向所述通信模块发送转格式后的响应数据;或者,用于调用writeCharacteristic***函数向读卡器设备发送上电指令;还用于调用readCharacteristic***函数向所述通信模块发送转格式后的响应数据。
25.根据权利要求18所述的装置,其特征在于,还包括第二判断模块;
所述第二判断模块,用于根据所述第一接收模块读卡器设备管理器返回的响应数据判断是否有卡片;
所述第二解析模块,具体用于当所述第二判断模块判断有卡片时,根据所述响应数据解析卡片类型。
26.根据权利要求18所述的装置,其特征在于,还包括第三判断模块;
所述第三判断模块,用于判断所述读卡器设备是否可以提速;
所述第一发送模块,还用于当所述第三判断模块判断所述读卡器设备可以提速时,向所述读卡器设备管理器发送读卡器设备提速的指令;
所述第二解析模块,还用于当所述第三判断模块判断所述读卡器设备不可以提速时,直接根据响应解析卡片信息。
27.根据权利要求26所述的装置,其特征在于,所述第一发送模块,还包括第三调用单元;
所述第三调用单元,用于调用UsbDeviceConnection.bulkTransfer***函数给所述读卡器设备管理器发送提速指令。
28.根据权利要求26所述的装置,其特征在于,所述第三判断模块,具体用于根据所述读卡器设备信息中描述符里包含的读卡器设备是否支持提速的信息判断所述读卡器设备是否可以提速;
所述第一发送模块,用于当所述第三判断模块判断描述符里包含读卡器设备支持提速的信息,则所述读卡器设备可以提速,则向所述读卡器设备管理器发送读卡器设备提速的指令。
29.根据权利要求18所述的装置,其特征在于,所述第二解析模块,具体用于根据所述响应数据中卡片类型的信息解析卡片的类型。
30.根据权利要求29所述的装置,其特征在于,所述第二解析模块,具体用于所述响应数据中T0协议特有的状态信息和T1协议特有的状态信息解析卡片的类型。
31.根据权利要求18所述的装置,其特征在于,还包括第三解析模块;
所述第三解析模块,用于根据所述读卡器设备信息解析读卡器设备支持的交换协议类型。
32.根据权利要求31所述的装置,其特征在于,所述封装模块,具体用于根据所述卡片类型和所述读卡器设备支持的交换协议将所述第一转换格式模块转换格式后的操作指令进行协议封装。
33.根据权利要求18所述的装置,其特征在于,还包括:
所述第一转换格式模块,还用于当所述第一接收模块接收到所述用户应用发送的启动读卡器设备服务的指令时,转换所述启动读卡器设备服务的指令格式;还用于当所述第一接收模块接收到所述用户应用发送的给所述读卡器设备下电的指令时,转换所述下电指令格式;当所述第一接收模块接收到所述转换格式后的响应数据后,转换所述转换格式后的响应数据的格式;还用于当所述第一接收模块接收到所述用户应用发送的停止所述读卡器设备服务的指令时,转换所述停止读卡器设备服务的指令格式;
启动模块,用于当所述第一转换格式模块转换所述启动读卡器设备服务的指令格式后,启动所述读卡器设备服务;
所述第一发送模块,还用于当所述启动模块启动所述读卡器设备服务后,将相应的状态信息返回至所述用户应用;还用于向所述读卡器设备管理器发送转换格式后的所述下电指令;还用于将所述第一转换格式模块转换格式后的所述转换格式后的响应数据返回至所述用户应用;还用于当停止模块停止所述读卡器设备服务后,将相应的状态信息返回至所述用户应用;
所述第二转换格式模块,还用于将转换格式后的所述下电指令转换格式;还用于当所述第二接收模块接收到所述读卡器设备返回的响应数据后转换格式;
所述第二发送模块,还用于将所述第二转换格式模块转换格式后的所述转换格式后的所述下电指令发送给所述读卡器设备;还用于将所述第二转换格式模块转换格式后的响应数据发送至所述通信模块;
停止模块,用于当所述第一转换格式模块转换所述停止读卡器设备服务的指令格式后,停止所述读卡器设备服务。
34.根据权利要求33所述的装置,其特征在于,所述第一发送模块中的所述相应的状态信息具体为:所述读卡器设备服务打开成功或失败的信息;所述读卡器设备服务停止成功或失败的信息。
CN201710944163.9A 2017-09-30 2017-09-30 一种在安卓***中实现读卡器设备通信的方法及装置 Active CN107784243B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710944163.9A CN107784243B (zh) 2017-09-30 2017-09-30 一种在安卓***中实现读卡器设备通信的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710944163.9A CN107784243B (zh) 2017-09-30 2017-09-30 一种在安卓***中实现读卡器设备通信的方法及装置

Publications (2)

Publication Number Publication Date
CN107784243A true CN107784243A (zh) 2018-03-09
CN107784243B CN107784243B (zh) 2020-11-03

Family

ID=61433697

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710944163.9A Active CN107784243B (zh) 2017-09-30 2017-09-30 一种在安卓***中实现读卡器设备通信的方法及装置

Country Status (1)

Country Link
CN (1) CN107784243B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110336592A (zh) * 2019-06-28 2019-10-15 飞天诚信科技股份有限公司 适用蓝牙读卡器的数据传输方法及电子设备
CN112835836A (zh) * 2021-01-29 2021-05-25 郑州信大捷安信息技术股份有限公司 一种主机与智能卡信息交互的方法及装置

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59202857A (ja) * 1983-05-02 1984-11-16 Toppan Printing Co Ltd 絵柄面積率デ−タの変換装置
US5581257A (en) * 1991-09-24 1996-12-03 Gordian Holding Corporation Radio frequency automatic identification system
JPH0969143A (ja) * 1995-08-31 1997-03-11 Hochiki Corp カード読取装置及び入出退管理装置
CN1932854A (zh) * 2006-09-30 2007-03-21 北京飞天诚信科技有限公司 能定制标志信息的读卡器
CN101576945A (zh) * 2008-12-31 2009-11-11 北京飞天诚信科技有限公司 多功能读卡器及其实现方法
CN102118709A (zh) * 2011-02-22 2011-07-06 中兴通讯股份有限公司 提高彩信群发业务时格式转换效率的方法及***
CN102123142A (zh) * 2011-01-12 2011-07-13 金锰 一种信息处理方法
CN103955392A (zh) * 2014-05-21 2014-07-30 东信和平科技股份有限公司 智能卡写入文件生成方法及***
CN104426572A (zh) * 2013-09-11 2015-03-18 中兴通讯股份有限公司 复用射频前端的方法及***
CN105225101A (zh) * 2015-09-16 2016-01-06 腾讯科技(深圳)有限公司 圈存方法、装置和***

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59202857A (ja) * 1983-05-02 1984-11-16 Toppan Printing Co Ltd 絵柄面積率デ−タの変換装置
US5581257A (en) * 1991-09-24 1996-12-03 Gordian Holding Corporation Radio frequency automatic identification system
JPH0969143A (ja) * 1995-08-31 1997-03-11 Hochiki Corp カード読取装置及び入出退管理装置
CN1932854A (zh) * 2006-09-30 2007-03-21 北京飞天诚信科技有限公司 能定制标志信息的读卡器
CN101576945A (zh) * 2008-12-31 2009-11-11 北京飞天诚信科技有限公司 多功能读卡器及其实现方法
CN102123142A (zh) * 2011-01-12 2011-07-13 金锰 一种信息处理方法
CN102118709A (zh) * 2011-02-22 2011-07-06 中兴通讯股份有限公司 提高彩信群发业务时格式转换效率的方法及***
CN104426572A (zh) * 2013-09-11 2015-03-18 中兴通讯股份有限公司 复用射频前端的方法及***
CN103955392A (zh) * 2014-05-21 2014-07-30 东信和平科技股份有限公司 智能卡写入文件生成方法及***
CN105225101A (zh) * 2015-09-16 2016-01-06 腾讯科技(深圳)有限公司 圈存方法、装置和***

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
吕中兴 等: "基于单片机的非接触式IC 卡读卡器设计", 《数字技术与应用》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110336592A (zh) * 2019-06-28 2019-10-15 飞天诚信科技股份有限公司 适用蓝牙读卡器的数据传输方法及电子设备
CN110336592B (zh) * 2019-06-28 2021-03-16 飞天诚信科技股份有限公司 适用蓝牙读卡器的数据传输方法、电子设备及存储介质
US11736149B2 (en) 2019-06-28 2023-08-22 Feitian Technologies Co., Ltd. Data transmission method for Bluetooth card reader and electronic device
CN112835836A (zh) * 2021-01-29 2021-05-25 郑州信大捷安信息技术股份有限公司 一种主机与智能卡信息交互的方法及装置
CN112835836B (zh) * 2021-01-29 2022-04-08 郑州信大捷安信息技术股份有限公司 一种主机与智能卡信息交互的方法及装置

Also Published As

Publication number Publication date
CN107784243B (zh) 2020-11-03

Similar Documents

Publication Publication Date Title
US8424770B2 (en) Method and device for customizing a portable electronic entity
WO2010118615A1 (zh) 一种增强型近场通信终端、智能卡及其通信方法
CN107203794B (zh) 一种信息扫描识别***及方法、扫描终端
CN102842154B (zh) 基于rfid的电网设备巡检装置及巡检方法
CN108769109A (zh) 一种物联网异构设备数据的统一处理方法及***
CN111479259B (zh) Sim卡配置分发方法及***
CN109240688A (zh) 界面开发方法、电子装置及可读存储介质
WO2023134153A1 (zh) 联动控制配置方法、联动控制方法及联动控制***
CN104093218A (zh) 利用nfc技术构建的移动物联网络及其信息交换方法
CN107784243A (zh) 一种在安卓***中实现读卡器设备通信的方法及装置
CN102833102B (zh) 机卡分离型网关的用户侧设备***及数据配置管理方法
CN110119282A (zh) 一种基于通用嵌入式计算机的物联网终端及***
CN105335316A (zh) 一种基于云计算的电机装配线串口服务器
CN111399828A (zh) 一种基于模型驱动的逻辑设备建模方法及终端
WO2010118612A1 (zh) 一种安装非接触支付应用的方法、智能卡及移动终端
CN106354445A (zh) 基于虚拟蓝牙设备的打印方法及其***
CN102064856B (zh) 数据传输方法及装置
CN108773205A (zh) 智能打印装置及智能打印控制方法
CN107301067A (zh) 基于iap技术的北斗用户机远程升级***及其升级方法
CN109445384B (zh) 一种多设备控制***
CN110414651A (zh) 调试智能卡的方法及装置
CN207367004U (zh) 一种无人机外挂设备识别处理装置
CN201571108U (zh) 嵌入式移动终端的操作平台
US8844827B2 (en) Chip card, and method for the software-based modification of a chip card
CN108810836A (zh) 一种向用户提供近场通信设备信息的方法及***

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant