著录项信息
专利名称 | 主机与多卡座读卡器的通信方法和系统 |
申请号 | CN200910236989.5 | 申请日期 | 2009-10-30 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2010-04-28 | 公开/公告号 | CN101699416A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F13/10 | IPC分类号 | G;0;6;F;1;3;/;1;0;;;G;0;6;F;1;3;/;2;4;;;G;0;6;K;7;/;0;0查看分类表>
|
申请人 | 北京飞天诚信科技有限公司 | 申请人地址 |
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 飞天诚信科技股份有限公司 | 当前权利人 | 飞天诚信科技股份有限公司 |
发明人 | 陆舟;于华章 |
代理机构 | 北京三高永信知识产权代理有限责任公司 | 代理人 | 何文彬 |
摘要
本发明公开了一种主机与多卡座读卡器之间的通信方法,涉及智能卡读卡器领域。所述方法包括:将多卡座读卡器识别为多个智能卡设备,所述智能卡功能驱动根据所述主机发送的智能卡操作请求,生成智能卡操作指令,并通过所述读卡器设备总线驱动将所述智能卡操作指令发送给所述多卡座读卡器;读卡器固件程序判断当前读卡器的硬件资源是否被占用;如果被占用,将所述智能卡操作指令挂起,等待硬件资源被释放;如果未被占用,所述读卡器向相应的卡座下发所述智能卡操作指令;相应的卡座中的智能卡执行接收到的所述智能卡操作指令,并返回指令执行结果;所述读卡器设备总线驱动接收所述执行结果,并将所述执行结果向上层应用报告。
1.一种主机与多卡座读卡器之间的通信方法,其特征在于,所述方法包括:
多卡座读卡器与主机建立连接,所述主机加载读卡器设备总线驱动;
所述读卡器设备总线驱动收到所述主机下发的获取读卡器设备信息的询问请求,根据所述询问请求获取读卡器设备信息,并根据所述设备信息创建物理设备对象;
所述主机为每个所述物理设备对象安装并加载智能卡功能驱动,并为每个智能卡功能驱动注册一个标准的智能卡驱动库;
所述主机中的智能卡服务根据加载的智能卡功能驱动和注册的智能卡驱动库,在所述智能卡服务的资源管理器中创建新的智能卡设备记录,将所述多卡座读卡器识别为多个智能卡设备;
所述读卡器设备总线驱动发送中断请求给所述多卡座读卡器,并接收所述多卡座读卡器返回的中断信号;
所述读卡器设备总线驱动解析所述中断信号,并将解析出的中断类型传递给相应卡座对应的智能卡功能驱动;
所述智能卡功能驱动通过与其对应的智能卡驱动库向智能卡服务报告所述多卡座读卡器中与其相对应的卡座的状态,所述卡座的状态包括无卡、有卡未上电或有卡已上电;
所述智能卡功能驱动根据所述主机发送的智能卡操作请求,生成智能卡操作指令,并通过所述读卡器设备总线驱动将所述智能卡操作指令发送给所述多卡座读卡器;
读卡器固件程序判断当前读卡器的硬件资源是否被占用;
如果被占用,将所述智能卡操作指令挂起,等待硬件资源被释放;
如果未被占用,所述读卡器向相应的卡座下发所述智能卡操作指令;相应的卡座中的智能卡执行接收到的所述智能卡操作指令,并返回指令执行结果;所述读卡器设备总线驱动接收所述执行结果,并将所述执行结果向上层应用报告。
2.如权利要求1所述的方法,其特征在于,所述主机通过即插即用管理器向所述读卡器设备总线驱动下发询问请求。
3.如权利要求1所述的方法,其特征在于,根据所述询问请求,所述读卡器设备总线驱动获取读卡器设备信息,具体包括:
所述读卡器设备总线驱动响应所述询问请求,生成问询指令,并将所述问询指令发送给所述多卡座读卡器;
所述多卡座读卡器获取其设备描述符,并将所述设备描述符返回给所述读卡器设备总线驱动。
4.如权利要求3所述的方法,其特征在于,所述设备描述符中用单个字符表示卡座的类型。
5.如权利要求1所述的方法,其特征在于,所述物理设备对象的个数与所述多卡座读卡器的卡座数目相同。
6.如权利要求1所述的方法,其特征在于,所述读卡器设备总线驱动与所述多卡座读卡器之间可以通过两条通信管道进行通信:批量传输管道和中断传输管道;
相应的,所述中断请求和所述中断信号通过所述中断传输管道进行发送。
7.如权利要求1所述的方法,其特征在于,所述解析所述中断信号,并将解析出的中断类型传递给相应卡座对应的智能卡功能驱动,具体包括:
所述读卡器设备总线驱动对所述中断信号进行解析,得到所述中断信号对应的中断类型、智能卡设备和智能卡功能驱动;
更新所述读卡器设备总线驱动中的子设备状态列表,所述子设备状态列表用于记录所述多卡座读卡器各个卡座状态;
通过所述子设备状态列表将所述多卡座读卡器各个卡座状态映射到所述智能卡功能驱动。
8.如权利要求1所述的方法,其特征在于,所述智能卡功能驱动根据所述主机的智能卡操作请求生成智能卡操作指令,具体包括:
服务管理器根据所述主机的上层应用发送的智能卡请求调用函数DeviceIOContro1,并在所述函数的参数中指示具体的操作;
智能卡驱动库解析所述函数后,向智能卡功能驱动派遣函数传递数据;
所述智能卡功能驱动将接收到的数据封装生成符合CCID协议的智能卡操作指令,所述智能卡操作指令中的第6个字节表示所述智能卡功能驱动所对应的读卡器卡座的编号。
9.如权利要求1所述的方法,其特征在于,所述读卡器卡座中的智能卡执行完毕接收到的操作指令后,通过批量传输管道将指令的执行结果发送给所述读卡器设备总线驱动,并释放所述多卡座读卡器的硬件资源。
10.如权利要求1所述的方法,其特征在于,所述硬件资源被释放的同时,被读卡器固件程序挂起的下一条指令的卡座获得所述硬件资源。
11.一种主机与多卡座读卡器之间的通信系统,其特征在于,所述系统包括:
加载模块,用于所述多卡座读卡器与所述主机建立连接,并加载读卡器设备总线驱动;
获取模块,用于通过所述读卡器设备总线驱动收到所述主机下发的获取读卡器设备信息的询问请求,并根据所述询问请求获取读卡器设备信息;
创建模块,用于通过所述读卡器设备总线驱动根据所述设备信息创建物理设备对象;
安装模块,用于为每个所述物理设备对象安装并加载智能卡功能驱动;
注册模块,用于为每个智能卡功能驱动注册一个标准的智能卡驱动库;
识别模块,用于通过所述主机中的智能卡服务根据加载的智能卡功能驱动和注册的智能卡驱动库,在所述智能卡服务的资源管理器中创建新的智能卡设备记录,将所述多卡座读卡器识别为多个智能卡设备;
发送模块,用于通过读卡器设备总线驱动发送中断请求给所述多卡座读卡器;
接收模块,用于通过所述读卡器设备总线驱动接收所述多卡座读卡器返回的中断信号;
中断解析模块,用于解析所述中断信号,并将解析出的中断类型传递给相应卡座对应的智能卡功能驱动;
中断报告模块,用于由所述智能卡功能驱动通过与其对应的智能卡驱动库向智能卡服务报告所述多卡座读卡器中与其相对应的卡座的状态,所述卡座的状态包括无卡、有卡未上电或有卡已上电;
生成指令模块,用于通过所述智能卡功能驱动根据所述主机发送的智能卡操作请求,生成智能卡操作指令,并由所述发送模块通过所述读卡器设备总线驱动将所述智能卡操作指令发送给所述多卡座读卡器;
判断模块,用于通过所述多卡座读卡器的读卡器固件程序判断当前读卡器的硬件资源是否被占用;
挂起模块,用于当所述判断模块的判断结果为被占用时,将所述智能卡操作指令挂起,等待硬件资源被释放;
收发模块,用于当所述判断模块的判断结果为未被占用时,所述读卡器向相应的卡座下发所述智能卡操作指令;并接收所述卡座返回的执行结果,发送给所述主机。
12.如权利要求11所述的系统,其特征在于,所述读卡器设备总线驱动与所述多卡座读卡器之间可以通过两条通信管道进行通信:批量传输管道和中断传输管道;
相应的,所述中断请求和所述中断信号通过所述中断传输管道进行发送。
13.如权利要求11所述的系统,其特征在于,所述生成指令模块,具体包括:
调用单元,用于通过服务管理器根据所述主机的上层应用发送的智能卡请求调用函数DeviceIOControl,并在所述函数的参数中指示具体的操作;
派遣单元,用于智能卡驱动库解析所述函数后,向所述智能卡功能驱动派遣函数传递数据;
生成单元,用于通过智能卡功能驱动将接收到的数据封装生成符合CCID协议的智能卡操作指令,所述智能卡操作指令中的第6个字节表示所述智能卡功能驱动所对应的读卡器卡座的编号。
14.如权利要求11所述的系统,其特征在于,所述收发模块还用于:通过批量传输管道将指令的执行结果发送给所述读卡器设备总线驱动,并释放所述多卡座读卡器的硬件资源。
主机与多卡座读卡器的通信方法和系统\n技术领域\n[0001] 本发明IC卡读卡器领域,特别涉及一种主机与多卡座读卡器之间的通信方法和系统。\n背景技术\n[0002] IC(Integrated Circuit,集成电路)卡是继磁卡之后出现的又一种新型信息工具。它是将一个微电子芯片嵌入符合ISO 7816标准的卡基中,做成卡片形式。目前,IC卡已经被广泛地应用到金融、交通、社保等很多领域,例如,我们经常使用的公交车卡就是IC卡的一种。\n[0003] IC卡读写器是IC卡与应用系统间的桥梁,在ISO国际标准中称之为IFD(Interface Device,接口设备)。一般常见的IC卡采用射频技术与IFD进行通讯,即IFD内的CPU通过一个接口电路与IC卡相连并进行通信。其中,IC卡接口电路是IC卡读写器中至关重要的部分,根据实际应用系统的不同,可选择并行通信、半双工串行通信和I2C通信等不同的IC卡读写芯片。\n[0004] 在实现本发明的过程中,发明人发现现有技术至少存在以下缺点:\n[0005] 当IC卡读卡器包含多个卡座时,主机无法识别这种IC卡读卡器,从而无法实现与该读卡器的数据交换、指令收发等。\n发明内容\n[0006] 为了使主机能够识别包含多个卡座的智能卡读卡器,本发明实施例提供了一种主机与多卡座读卡器之间的通信方法和系统。所述技术方案如下:\n[0007] 一种主机与多卡座读卡器之间的通信方法,所述方法包括:\n[0008] 多卡座读卡器与主机建立连接,所述主机加载读卡器设备总线驱动;\n[0009] 所述读卡器设备总线驱动收到所述主机下发的获取读卡器设备信息的询问请求,根据所述询问请求获取读卡器设备信息,并根据所述设备信息创建物理设备对象;\n[0010] 所述主机为每个所述物理设备对象安装并加载智能卡功能驱动,并为每个智能卡功能驱动注册一个标准的智能卡驱动库;\n[0011] 所述主机中的智能卡服务根据加载的智能卡功能驱动和注册的智能卡驱动库,在所述智能卡服务的资源管理器中创建新的智能卡设备记录,将所述多卡座读卡器识别为多个智能卡设备;\n[0012] 所述读卡器设备总线驱动发送中断请求给所述多卡座读卡器,并接收所述多卡座读卡器返回的中断信号;\n[0013] 所述读卡器设备总线驱动解析所述中断信号,并将解析出的中断类型传递给相应卡座对应的智能卡功能驱动;\n[0014] 所述智能卡功能驱动通过与其对应的智能卡驱动库向智能卡服务报告所述多卡座读卡器中与其相对应的卡座的状态,所述卡座的状态包括无卡、有卡未上电或有卡已上电;\n[0015] 所述智能卡功能驱动根据所述主机发送的智能卡操作请求,生成智能卡操作指令,并通过所述读卡器设备总线驱动将所述智能卡操作指令发送给所述多卡座读卡器;\n[0016] 读卡器固件程序判断当前读卡器的硬件资源是否被占用;\n[0017] 如果被占用,将所述智能卡操作指令挂起,等待硬件资源被释放;\n[0018] 如果未被占用,所述读卡器向相应的卡座下发所述智能卡操作指令;相应的卡座中的智能卡执行接收到的所述智能卡操作指令,并返回指令执行结果;所述读卡器设备总线驱动接收所述执行结果,并将所述执行结果向上层应用报告。\n[0019] 所述主机通过即插即用管理器向所述读卡器设备总线驱动下发询问请求。\n[0020] 根据所述询问请求,所述读卡器设备总线驱动获取读卡器设备信息,具体包括:\n[0021] 所述读卡器设备总线驱动响应所述询问请求,生成问询指令,并将所述问询指令发送给所述多卡座读卡器;\n[0022] 所述多卡座读卡器获取其设备描述符,并将所述设备描述符返回给所述读卡器设备总线驱动。\n[0023] 所述设备描述符中用单个字符表示卡座的类型。\n[0024] 所述物理设备对象的个数与所述多卡座读卡器的卡座数目相同。\n[0025] 所述读卡器设备总线驱动与所述多卡座读卡器之间可以通过两条通信管道进行通信:批量传输管道和中断传输管道;\n[0026] 相应的,所述中断请求和所述中断信号通过所述中断传输管道进行发送。\n[0027] 所述解析所述中断信号,并将解析出的中断类型传递给相应卡座对应的智能卡功能驱动,具体包括:\n[0028] 所述读卡器设备总线驱动对所述中断信号进行解析,得到所述中断信号对应的中断类型、智能卡设备和智能卡功能驱动;\n[0029] 更新所述读卡器设备总线驱动中的子设备状态列表,所述子设备状态列表用于记录所述多卡座读卡器各个卡座状态;\n[0030] 通过所述子设备状态列表将所述多卡座读卡器各个卡座状态映射到所述智能卡功能驱动。\n[0031] 所述智能卡功能驱动根据所述主机的智能卡操作请求生成智能卡操作指令,具体包括:\n[0032] 服务管理器根据所述主机的上层应用发送的智能卡请求调用函数DeviceIOControl,并在所述函数的参数中指示具体的操作;\n[0033] 智能卡驱动库解析所述函数后,向智能卡功能驱动派遣函数传递数据;\n[0034] 所述智能卡功能驱动将接收到的数据封装生成符合CCID协议的智能卡操作指令,所述智能卡操作指令中的第6个字节表示所述智能卡功能驱动所对应的读卡器卡座的编号。\n[0035] 所述读卡器卡座中的智能卡执行完毕接收到的操作指令后,通过批量传输管道将指令的执行结果发送给所述读卡器设备总线驱动,并释放所述多卡座读卡器的硬件资源。\n[0036] 所述硬件资源被释放的同时,被读卡器固件程序挂起的下一条指令的卡座获得所述硬件资源。\n[0037] 一种主机与多卡座读卡器之间的通信系统,所述系统包括:\n[0038] 加载模块,用于所述多卡座读卡器与所述主机建立连接,并加载读卡器设备总线驱动;\n[0039] 获取模块,用于通过所述读卡器设备总线驱动收到所述主机下发的获取读卡器设备信息的询问请求,并根据所述询问请求获取读卡器设备信息;\n[0040] 创建模块,用于通过所述读卡器设备总线驱动根据所述设备信息创建物理设备对象;\n[0041] 安装模块,用于为每个所述物理设备对象安装并加载智能卡功能驱动;\n[0042] 注册模块,用于为每个智能卡功能驱动注册一个标准的智能卡驱动库;\n[0043] 识别模块,用于通过所述主机中的智能卡服务根据加载的智能卡功能驱动和注册的智能卡驱动库,在所述智能卡服务的资源管理器中创建新的智能卡设备记录,将所述多卡座读卡器识别为多个智能卡设备;\n[0044] 发送模块,用于通过读卡器设备总线驱动发送中断请求给所述多卡座读卡器;\n[0045] 接收模块,用于通过所述读卡器设备总线驱动接收所述多卡座读卡器返回的中断信号;\n[0046] 中断解析模块,用于解析所述中断信号,并将解析出的中断类型传递给相应卡座对应的智能卡功能驱动;\n[0047] 中断报告模块,用于由所述智能卡功能驱动通过与其对应的智能卡驱动库向智能卡服务报告所述多卡座读卡器中与其相对应的卡座的状态,所述卡座的状态包括无卡、有卡未上电或有卡已上电;\n[0048] 生成指令模块,用于通过所述智能卡功能驱动根据所述主机发送的智能卡操作请求,生成智能卡操作指令,并由所述发送模块通过所述读卡器设备总线驱动将所述智能卡操作指令发送给所述多卡座读卡器;\n[0049] 判断模块,用于通过所述多卡座读卡器的读卡器固件程序判断当前读卡器的硬件资源是否被占用;\n[0050] 挂起模块,用于当所述判断模块的判断结果为被占用时,将所述智能卡操作指令挂起,等待硬件资源被释放;\n[0051] 收发模块,用于当所述判断模块的判断结果为未被占用时,所述读卡器向相应的卡座下发所述智能卡操作指令;并接收所述卡座返回的执行结果,发送给所述主机。\n[0052] 所述读卡器设备总线驱动与所述多卡座读卡器之间可以通过两条通信管道进行通信:批量传输管道和中断传输管道;\n[0053] 相应的,所述中断请求和所述中断信号通过所述中断传输管道进行发送。\n[0054] 所述生成指令模块,具体包括:\n[0055] 调用单元,用于通过服务管理器根据所述主机的上层应用发送的智能卡请求调用函数DeviceIOControl,并在所述函数的参数中指示具体的操作;\n[0056] 派遣单元,用于智能卡驱动库解析所述函数后,向所述智能卡功能驱动派遣函数传递数据;\n[0057] 生成单元,用于通过智能卡功能驱动将接收到的数据封装生成符合CCID协议的智能卡操作指令,所述智能卡操作指令中的第6个字节表示所述智能卡功能驱动所对应的读卡器卡座的编号。\n[0058] 所述收发模块还用于:通过批量传输管道将指令的执行结果发送给所述读卡器设备总线驱动,并释放所述多卡座读卡器的硬件资源。\n[0059] 本发明实施例提供的技术方案带来的有益效果是:\n[0060] 通过多卡座读卡器可以被主机识别为多个智能卡设备,并且主机可以监控各个“读卡器”中卡的状态变化,使得多卡座读卡器可以支持一个读卡器中有多个类型不同或相同卡座的情况,并使多卡座读卡器中的多个卡座共享一条通信总线,并且所述多卡座读卡器中的多个卡座能够交替、互斥地利用通信通道与主机之间进行数据交互、收发指令。\n附图说明\n[0061] 图1是本发明实施例1中提供的一种多卡座读卡器的识别方法的流程图;\n[0062] 图2是本发明实施例1中提供的一种主机与多卡座读卡器之间的通信方法流程图;\n[0063] 图3是本发明实施例2中提供的一种通信系统的结构示意图。\n具体实施方式\n[0064] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。\n[0065] 实施例1\n[0066] 本发明实施例1提供了一种多卡座读卡器的识别方法,需要说明的是,本发明实施例1提供的IC卡读卡器包含至少两个卡座。参见图1,该方法包括:\n[0067] 步骤101:读卡器设备通过USB总线连接到主机,主机的操作系统发现新USB设备,操作系统加载读卡器设备总线驱动;\n[0068] 在读 卡器 设备与 主机 建立 连接 后,遵循 CCID(USB Chip/Smart Card InterfaceDevices-USB,芯片智能卡接口设备)协议的规范通过USB总线进行数据的交互、指令的收发。\n[0069] 步骤102:读卡器设备总线驱动接收到主机的操作系统下发的获取读卡器设备信息的请求;\n[0070] 其中,主机的操作系统可以通过即插即用管理器(Plug and Play Manager)向读卡器设备总线驱动下发询问请求,请求获得读卡器设备信息。\n[0071] 步骤103:读卡器设备总线驱动获取读卡器设备信息;\n[0072] 具体的,此步骤可以包括如下步骤:\n[0073] (1)读卡器设备总线驱动响应操作系统的询问请求,生成问询指令,并发送给读卡器,获取设备的设备描述符;\n[0074] (2)读卡器返回的设备描述符中用单个字符表示卡座的类型,即读卡器返回的设备描述符中包含几个字符就代表该读卡器具有几个卡座;\n[0075] 例如,读卡器返回的设备描述符为A,表示该读卡器只有一个卡座,卡座类型为A型;读卡器返回的设备描述符为ABAC,表示该读卡器有四个卡座,1号卡座的类型为A型,2号卡座的类型为B型,3号卡座的类型为A型,4号卡座的类型为C型。在本实施例中,以读卡器返回的设备描述符为CCS为例,即本实施例中的读卡器有三个卡座,1号卡座的类型为C型,2号卡座的类型为C型,3号卡座的类型为S型。\n[0076] 步骤104:读卡器设备总线驱动根据读卡器设备信息创建物理设备对象;\n[0077] 当读卡器设备总线驱动获取到读卡器返回的设备描述符后,根据设备描述符中表示的卡座类型与卡座个数,创建相应的物理设备对象,分别与读卡器的卡座相对应。\n[0078] 以读卡器返回的设备描述符为CCS为例,读卡器设备总线创建3个物理设备对象,与3个卡座分别对应。\n[0079] 步骤105:主机的操作系统为已创建的物理设备对象安装并加载智能卡功能驱动,每个智能卡功能驱动注册一个标准的智能卡驱动库;\n[0080] 其中,操作系统为每个物理设备对象所对应的卡座安装相应类型的智能卡设备的功能驱动(简称智能卡功能驱动),每个智能卡功能驱动注册一个标准的智能卡驱动库。\n[0081] 在本实施例中,主机的操作系统安装并加载了三个智能卡功能驱动与读卡器中的三个卡座相对应,分别是C、C、S类型的智能卡功能驱动。\n[0082] 需要说明的是,智能卡驱动库用于提供一个标准的框架使智能卡功能驱动与智能卡服务的服务控制器进行交互,在本发明实施例当中,三个智能卡功能驱动所对应的智能卡驱动库是相同的。\n[0083] 需要说明的是,智能卡服务可以包括服务控制器、资源管理器和数据库。其中,服务控制器用于管理智能卡服务、接收来自智能卡功能驱动的请求、管理资源管理器等;资源管理器用于在数据库中添加新的智能卡设备记录、或者删除已有的智能卡设备记录等。\n[0084] 步骤106:在主机当中的智能卡服务中添加新的智能卡设备记录;\n[0085] 其中,智能卡服务根据加载的智能卡功能驱动和注册的智能卡驱动库,在智能卡服务的资源管理器中创建新的智能卡设备记录。在本发明实施例中,智能卡服务的资源管理器中创建了三个智能卡设备记录,分别与读卡器中的三个卡座相对应。如此,在主机中就出现了三个智能卡设备,主机可以单独对每个智能卡设备进行操作,通过读卡器设备总线驱动与智能卡设备发送或者接收智能卡操作指令。\n[0086] 截止到步骤106,多卡座读卡器被主机识别为多个读卡器。\n[0087] 下面介绍被识别为多个智能卡设备的多卡座读卡器的各个卡座上卡的状态监控过程:\n[0088] 这里需要说明的是,读卡器中各个卡座的状态包括但不限于:无卡、有卡未上电、已上电。其中,当多卡座读卡器被主机识别为多个读卡器之后,如果读卡器中的卡座没有IC卡片插入,卡座就处于无卡状态;如果IC卡片插入卡座,但主机并未下发上电指令,或主机下发下电指令,则卡座处于有卡未上电状态;如果IC卡卡片插入卡座,主机下发上电指令,且智能卡响应并成功返回ATR(Answer To Reset,复位应答)后,卡座处于已上电状态。\n[0089] 步骤107:读卡器设备总线驱动通过中断传输管道发送中断请求给读卡器;\n[0090] 需要说明的是,读卡器设备总线驱动与读卡器之间可以通过两条通信管道进行通信:批量传输管道和中断传输管道。\n[0091] 其中,批量传输管道,用于进行数据的传输,如上电、下电指令及其它智能卡操作指令,主机与读卡器按照一应一答的方式通过批量传输管道进行数据交互;中断传输管道,用于传输异步事件,如插卡、拔卡及卡短路等,读卡器就会通过中断传输管道向主机发送信号。\n[0092] 其中,在本发明实施例中,如果读卡器卡座中没有卡片的插入或者拔出动作,则该中断请求被挂起。\n[0093] 步骤108:读卡器设备总线驱动接收读卡器设备返回的中断信号;\n[0094] 当读卡器卡座中有卡插入后,会通过中断传输管道向读卡器设备总线驱动发送有卡插入的中断信号,仍然以3个卡座为例,具体的中断信号可以为:\n[0095] 1号卡座插入卡 0x5003\n[0096] 2号卡座插入卡 0x500c\n[0097] 3号卡座插入卡 0x5030\n[0098] 相应的,在读卡器使用过程中,如果读卡器卡座中有卡拔出时,也会通过中断传输管道向读卡器设备总线驱动发送有卡拔出的中断信号,具体的中断信号可以为:\n[0099] 1号卡座插入卡 0x5003\n[0100] 2号卡座插入卡 0x500c\n[0101] 3号卡座插入卡 0x5030\n[0102] 步骤109:读卡器设备总线驱动解析接收到的中断信号并将中断类型传递给相应的智能卡功能驱动;\n[0103] 其中,读卡器设备总线驱动对接收到的中断信号进行解析,得到该信号对应的中断类型及智能卡设备、智能卡功能驱动,更新读卡器设备总线驱动中的子设备状态列表,并通过该子设备状态列表将读卡器中卡座的状态变化情况映射到智能卡功能驱动。\n[0104] 其中,需要说明的是,读卡器设备总线驱动在创建智能卡设备成功后,会建立一个用于记录读卡器中卡座状态的子设备状态列表,包括有卡和无卡两种状态。\n[0105] 例如,如果读卡器设备总线驱动中的子设备状态列表中记录的是1号卡座为无卡状态,读卡器设备总线驱动接收到中断信号0x5003,则读卡器设备总线驱动修改其子设备状态列表中1号卡座对应的项为有卡状态,同时将该状态映射到智能卡功能驱动1上。\n[0106] 步骤110:智能卡功能驱动通过智能卡驱动库向智能卡服务报告卡座的状态变化;\n[0107] 具体的,智能卡功能驱动1通过智能卡驱动库提供的函数\n[0108] (SmartcardExtension- > ReaderFunction[RDF_CARD_TRACKING] =RockeyCardTracking;)修改智能卡驱动库1中智能卡状态跟踪I/O请求包中表示智能卡状态的参数为有卡,并将智能卡卡座状态跟踪I/O请求包发送给智能卡服务的服务控制器,服务控制器向上策应用报告有卡片插入智能卡设备,同时资源管理器将智能卡设备的状态修改有有卡,更新数据库中的记录。\n[0109] 本实施例提供了一种多卡座读卡器的识别方法,通过上述方法,多卡座读卡器可以被主机识别为多个读卡器,并且主机可以监控各个“读卡器”中卡的状态变化,使得多卡座读卡器可以支持一个读卡器中有多个类型不同或相同卡座的情况,并为了多卡座读卡器中的多个卡座共享一条通信总线,所述多卡座读卡器中的多个卡座能够交替、互斥地利用通信通道与主机之间进行数据交互、收发指令打下良好的基础。\n[0110] 本发明实施例还提供了一种基于上述识别方法的主机与多卡座读卡器之间的通信方法。即在读卡器设备总线驱动向上层应用报告读卡器有卡后,上层应用便可以按需要通过读卡器设备总线驱动发送指令给读卡器中指定卡座,对智能卡进行如上电、PPS(Protocol and Pramateter Select,协议与参数选择)、读写数据等操作。\n[0111] 这里需要说明的是,智能卡服务中的服务控制器还用于接收来自上层应用的应用请求,根据接收到的应用请求调用函数DeviceIOControl并在其参数中指示具体的操作。\n[0112] 例如在函数DeviceIOControl中,参数dwIoCotrolCode的值表示操作类型,通过智能卡驱动库解析函数DeviceIOControl所要求的操作,然后智能卡功能驱动根据智能卡驱动库解析出的结果生成符合CCID协议的智能卡操作指令。\n[0113] 其中,DeviceIOControl提供调用的参数除dwIoControlCode外还包括以下几个参数:\n[0114] BOOL DeviceIoControl(\n[0115] HANDLE hDevice, //handle to device\n[0116] DWORD dwIoControlCode, //operation\n[0117] LPVOID lpInBuffer, //input data buffer\n[0118] DWORD nInBufferSize, //size of input data buffer[0119] LPVOID lpOutBuffer, //output data buffer\n[0120] DWORD nOutBufferSize, //size of output data buffer[0121] LPDWORD lpBytesReturned, //byte count\n[0122] LPOVERLAPPED lpOverlapped //overlapped information[0123] );\n[0124] 智能卡驱动库用于提供一个标准的框架使智能卡功能驱动与智能卡服务的服务控制器进行交互;智能卡驱动库解析DeviceIOControl后,向智能卡功能驱动派遣下面的四个函数:\n[0125] SmartcardExtension- > ReaderFunction[RDF_CARD_POWER] =RockeyCardPower;\n[0126] SmartcardExtension->ReaderFunction[RDF_TRANSMIT]=RockeyTransmit;\n[0127] SmartcardExtension- > ReaderFunction[RDF_CARD_TRACKING] =RockeyCardTracking;\n[0128] SmartcardExtension- > ReaderFunction[RDF_SET_PROTOCOL] =RockeySetProtocol;\n[0129] 智能卡功能驱动根据这四个函数生成指令,控制智能卡设备进行上下电、数据传输、跟踪卡状态和设置协议等操作;相应地,智能卡功能驱动也是通过以上四个函数向智能卡驱动库返回信息,然后智能卡驱动库通过DeviceIOControl向智能卡服务及上层应用汇报。\n[0130] 参见图2,该方法包括:\n[0131] 步骤201:智能卡功能驱动根据上层应用的智能卡操作请求生成智能卡操作指令;\n[0132] 其中,上层应用对智能卡的操作具体为向智能卡服务的服务管理器发送操作请求,服务管理器根据上层应用的请求调用函数DeviceIOControl,并在函数参数中指示具体的操作,智能卡驱动库解析函数后,向智能卡功能驱动派遣函数,智能卡功能驱动将接收到的数据封装生成符合CCID协议规范的智能卡操作指令,该智能卡操作指令中的第6个字节表示该智能卡功能驱动所对应的读卡器卡座的编号。\n[0133] 例如,上层应用产生向智能卡设备1取随机数的操作请求,智能卡功能驱动1接收 到通过 函数(SmartcardExtension->ReaderFunction[RDF_TRANSMIT] =RockeyTransmit;)传入的数据0x00 84 00 00 08,智能卡功能驱动1使用CCID标准的指令头0x6f05 00 00 00 00 10 00 00 00对接收到的数据进行封装,得到智能卡操作指令为0x6f 05 00 00 00 00 10 00 00 00 00 84 00 00 08表示的是1号卡座;\n[0134] 再例如,智能卡功能驱动2根据接收到的函数\n[0135] (SmartcardExtension->ReaderFunction[RDF_CARD_POWER] =RockeyCardPower;)中的参数判断对2号卡座进行上电或下电操作,可以使用参数0x00表示上电、0xFF表示下电,或者也可以用参数0xaa表示上电、0x55表示下电;若智能卡功能驱动2判断出要对2号卡座进行上电操作,则智能卡功能驱动2生成符合CCID协议规范的上电指令:0x62 00 00 00 00 01 21 01 0000,表示2号卡座的上电指令,其中第6个字节01表示的是2号卡座。\n[0136] 相应地,智能卡功能驱动利用下面的函数\n[0137] (SmartcardExtension->ReaderFunction[RDF_CARD_TRACKING] =RockeyCardTracking;)通过智能卡驱动库通知智能卡服务发生卡片的插入或拔出;\n[0138] 再者,智能卡功能驱动解析上电后卡片返回的ATR信息,利用下面的函数[0139] (SmartcardExtension->ReaderFunction[RDF_SET_PROTOCOL] =RockeySetProtocol;)通过智能卡驱动库通知智能卡服务当前卡片的通信模式遵循t0或t1协议。\n[0140] 步骤202:智能卡功能驱动通过读卡器设备总线驱动将智能卡操作指令发送给读卡器;\n[0141] 步骤203:读卡器固件程序判断当前读卡器的硬件资源是否被占用;\n[0142] 如果已经被占用,则执行步骤204;\n[0143] 如果没有被占用,则执行步骤205;\n[0144] 其中,需要说明的是,以本实施例读卡器中的芯片分时控制3个卡座为例,在同一时刻只能有一个卡座通过批量传输管道与读卡器设备总线驱动连接,进行数据交互,芯片中的固件程序根据读卡器状态指令得到智能卡操作指令对应的卡座编号,根据智能卡操作指令中的卡座编号字段来切换通道,将智能卡操作指令发送给指定的卡座,并修改标识信息表示当前独占读卡器硬件资源。\n[0145] 其中,标识信息具体指的是:在读卡器的寄存器中使用一个字节存储空间保存表示读卡器硬件资源被占用或空闲的标识信息,如读卡器资源被占用将标识信息修改为\n0x01、空闲时修改0xff,或者用0x55表示读卡器资源被占用、0xaa表示空闲;\n[0146] 也可以在读卡器的寄存器中使用两个字节存储空间保存表示读卡器硬件资源被某一卡座占用或空闲的标识信息,如读卡器资源被2号卡座占用则将标识信息修改为0x01 \n00、空闲时修改为0x00 10,其中标识信息的第一个字节数据表示卡座编号,标识信息的第二个字节用于表示卡座被占用或空闲。\n[0147] 步骤204:读卡器固件程序将该智能卡操作指令挂起,等待硬件资源被释放、标识信息被修改;\n[0148] 例如,当前1号卡座状态为已上电,读卡器设备总线驱动下发了1号卡座的取随机数指令0x6f 05 00 00 00 00 10 00 00 00 00 84 00 00 08;在读卡器设备总线驱动接收到该取随机数指令的执行结果之前,2号卡座插入了一张卡片,则2号卡座状态由无卡变为有卡未上电,读卡器通过中断传输管道向读卡器设备总线驱动发送表示2号卡座有卡插入的信号0x500c;上层应用得知2号智能卡设备有卡插入后发出上电请求,智能卡功能驱动2接收到上电请求后生成符合CCID协议的2号卡座上电指令0x62 00 00 00 00 01 21 \n01 00 00,并通过读卡器设备总线驱动发送给读卡器,由于当前1号卡座的随机数指令还没有执行完毕,读卡器硬件资源被智能卡功能驱动1占用,读卡器固件程序判断标识信息获知硬件资源已经被占用后,则将该操作指令指令挂起,等待1号卡座执行完取随机数指令后,执行步骤205。\n[0149] 步骤205:读卡器向指定的卡座发送智能卡操作指令,并修改标识信息;\n[0150] 其中,读卡器固件程序判断当前读卡器状态标识信息为空闲,读卡器固件程序分析接收到的指令得到指令中的卡座,并将指令发送给指令中的卡座,使该卡座与读卡器设备功能驱动按照一应一答的方式进行数据交互、指令收发,同时修改读卡器状态标识信息为硬件资源已经被占用。\n[0151] 步骤206:读卡器卡座中的智能卡执行接收到的操作指令,并返回指令执行结果;\n[0152] 其中,读卡器卡座中的智能卡执行完毕接收到的操作指令后,通过批量传输管道将指令的执行结果发送给读卡器设备总线驱动,卡座释放读卡器的硬件资源,同时读卡器固件程序修改读卡器状态标识信息为空闲;\n[0153] 读卡器的硬件资源被释放、读卡器状态标识信息修改为空闲后,被读卡器固件程序挂起的下一条指令被下发给相应的卡座并修改标识信息。\n[0154] 步骤207:读卡器设备总线驱动接收执行结果,并将执行结果向上层应用报告。\n[0155] 读卡器设备总线驱动接收到指令执行结果后,将执行结果返回给相应的智能卡功能驱动,由智能卡功能驱动将CCID协议的指令执行结果解包后发送给智能卡服务。\n[0156] 例如,1号卡座的取随机数指令执行结果为:0x80 0a 00 00 00 00 10 \n00 00 002111ca2b2ebb20059000,智能卡功能驱动取第10个字节以后的部分(即\n2111ca2b2ebb20059000)作为获取的随机数传递给智能卡服务;2号卡座执行完上电操作后返回的ATR为0x80 15 00 00 00 01 21 00 00 003bfb1300008131fe4565465307010071c6806117d4,智能卡功能驱动取第10个字节以后的部分(即0x3bfb1300008131fe4565465\n307010071c6806117d4)传递给智能卡服务。\n[0157] 本发明实施例提供了一种主机与多卡座读卡器之间的通信方法,可以支持一个读卡器中有多个类型不同或相同卡座的情况,多卡座读卡器中的多个卡座共享一条通信总线,并且所述多卡座读卡器中的多个卡座能够交替、互斥地利用通信通道进行数据交互、收发指令。\n[0158] 实施例2\n[0159] 参见图3,本发明实施例提供了一种通信系统,该通信系统的通信方法可以参见实施例1中提供的通信方法,在此不做详述。该系统包括:主机301和多卡座读卡器302;\n[0160] 主机301包括:\n[0161] 加载模块,用于当多卡座读卡器302与主机301建立连接时,加载读卡器设备总线驱动;\n[0162] 获取模块,用于通过读卡器设备总线驱动获取多卡座读卡器302的设备信息;\n[0163] 创建模块,用于通过读卡器设备总线驱动根据设备信息创建物理设备对象;\n[0164] 安装模块,用于为每个物理设备对象安装并加载智能卡功能驱动;\n[0165] 注册模块,用于为每个智能卡功能驱动注册一个标准的智能卡驱动库;\n[0166] 识别模块,用于通过主机301中的智能卡服务根据加载的智能卡功能驱动和注册的智能卡驱动库,在智能卡服务的资源管理器中创建新的智能卡设备记录,将多卡座读卡器302识别为多个智能卡设备;\n[0167] 生成指令模块,用于通过智能卡功能驱动根据主机301发送的智能卡操作请求,生成智能卡操作指令;\n[0168] 发送模块,用于将生成指令模块生成的智能卡操作指令发送给多卡座读卡器\n302;\n[0169] 接收模块,用于通过读卡器设备总线驱动接收智能卡操作指令的执行结果,并将执行结果向上层应用报告;\n[0170] 多卡座读卡器302包括:\n[0171] 判断模块,用于通过多卡座读卡器302的读卡器固件程序判断当前读卡器302的硬件资源是否被占用;\n[0172] 挂起模块,用于当判断模块的判断结果为被占用时,将智能卡操作指令挂起,等待硬件资源被释放;\n[0173] 收发模块,用于当判断模块的判断结果为未被占用时,读卡器302向相应的卡座下发智能卡操作指令;\n[0174] 进一步的,主机301的获取模块,具体包括:\n[0175] 接收单元,用于通过读卡器设备总线驱动收主机301下发的获取读卡器302设备信息的询问请求;\n[0176] 获取单元,用于根据询问请求,通过读卡器设备总线驱动获取读卡器302设备信息。\n[0177] 其中,获取单元,具体包括:\n[0178] 发送子单元,用于通过读卡器设备总线驱动响应询问请求,生成问询指令,并将问询指令发送给多卡座读卡器302;\n[0179] 返回子单元,用于通过读卡器设备总线驱动接收多卡座读卡器302的设备描述符,并解析后发送给创建模块。\n[0180] 进一步的主机301的发送模块还用于:通过读卡器设备总线驱动发送中断请求给多卡座读卡器302;主机301的接收模块还用于接收多卡座读卡器302返回的中断信号;\n[0181] 相应的,主机301还包括:\n[0182] 中断解析模块,用于对中断信号进行解析,得到中断信号对应的中断类型、卡座和智能卡功能驱动;\n[0183] 中断报告模块,用于根据中断解析模块得到的中断信号对应的中断类型、卡座和智能卡功能驱动,向智能卡服务报告多卡座读卡器302中对应卡座的状态,卡座的状态包括无卡、有卡未上电或有卡已上电。\n[0184] 读卡器设备总线驱动与多卡座读卡器302之间可以通过两条通信管道进行通信:\n批量传输管道和中断传输管道;\n[0185] 相应的,中断请求和中断信号通过中断传输管道进行发送。\n[0186] 进一步的,主机301的生成指令模块,具体包括:\n[0187] 调用单元,用于通过服务管理器根据主机301的上层应用发送的智能下请求调用函数DeviceIOControl,并在该函数的参数中指示具体的操作;\n[0188] 派遣单元,用于通过智能卡驱动库解析函数后,向智能卡功能驱动派遣函数;\n[0189] 生成单元,用于通过智能卡功能驱动将接收到的数据封装生成符合CCID协议的智能卡操作指令,该智能卡操作指令中的第6个字节表示该智能卡功能驱动所对应的读卡器302卡座的编号。\n[0190] 其中,多卡座读卡器的收发模块还用于通过批量传输管道将指令的执行结果发送给读卡器设备总线驱动,并释放所述多卡座读卡器的硬件资源。\n[0191] 本发明实施例提供了一种通信系统,可以支持一个读卡器中有多个类型不同或相同卡座的情况,多卡座读卡器中的多个卡座共享一条通信总线,并且所述多卡座读卡器中的多个卡座能够交替、互斥地利用通信通道进行数据交互、收发指令。\n[0192] 以上仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
法律信息
- 2011-09-07
专利权人的姓名或者名称、地址的变更
专利权人由北京飞天诚信科技有限公司变更为飞天诚信科技股份有限公司
地址由100191 北京市海淀区学院路40号研7A楼5层变更为100085 北京市海淀区学清路9号汇智大厦B座17层
- 2011-05-18
- 2010-06-23
实质审查的生效
IPC(主分类): G06F 13/10
专利申请号: 200910236989.5
申请日: 2009.10.30
- 2010-04-28
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2007-08-15
|
2007-02-16
| | |
2
| |
2007-08-08
|
2007-02-12
| | |
3
| | 暂无 |
2006-07-27
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |