一种适用于串口设备的驱动程序及其工作方法

文档序号:6640592阅读:519来源:国知局
一种适用于串口设备的驱动程序及其工作方法
【专利摘要】本发明公开了一种适用于串口设备的驱动程序及其工作方法,通过在主机上使用基于UMDF的驱动程序,将串口设备与系统的PC/SC接口挂接,使得主机中的应用程序能够方便地通过PC/SC接口使用串口设备,不需要对应用程序做任何改动,提高了应用程序的重用性。
【专利说明】一种适用于串口设备的驱动程序及其工作方法

【技术领域】
[0001]本发明涉及通信【技术领域】,特别涉及一种适用于串口设备的驱动程序及其工作方法。

【背景技术】
[0002]串口设备是指能够与主机进行串行通信的外部设备,串行通信可使用一条数据线,将数据按位依次传输,每一位数据占据一个固定的时间长度,适用于主机与外部设备之间的远距离通信。常用的串口设备有外置调制解调器、绘图仪、串行打印机和蓝牙适配器等。
[0003]现有技术中,为使用与主机连接的串口设备,通常需要对主机中的应用程序进行重写,导致应用程序的重用性较差,无法在应用层方便地使用串口设备。


【发明内容】

[0004]本发明提供了一种适用于串口设备的驱动程序及其工作方法,以解决无法在应用层方便地使用串口设备的缺陷。
[0005]本发明提供了一种适用于串口设备的驱动程序的工作方法,应用于包括主机和串口设备的系统中,所述主机与所述串口设备连接,所述主机中安装有系统、应用程序和驱动程序,当所述应用程序调用所述系统的个人计算机/智能卡PC/SC接口后,所述驱动程序中的预设函数被所述系统调用,所述方法包括以下步骤:
[0006]S1、所述驱动程序等待被调用;
[0007]S2、当所述驱动程序中的预设函数被系统调用时,所述驱动程序通过组件对象模型COM接口获取来自系统的控制码,对所述控制码进行判断,如果所述控制码为预设控制码,则执行步骤S3 ;如果所述控制码不是预设控制码,根据所述控制码执行相应的操作,并返回步骤SI ;
[0008]S3、所述驱动程序根据所述预设控制码,组织对应的第一串口数据,通过串口将所述第一串口数据发送给串口设备;
[0009]S4、所述驱动程序监听到已读事件后,从处理缓冲区中读取第二应用数据,将所述第二应用数据发送给系统,并返回步骤SI ;
[0010]所述步骤S4之前,还包括:
[0011]Al、所述驱动程序监听串口事件,在监听到数据事件后,接收来自所述串口设备的第二串口数据;
[0012]A2、所述驱动程序将所述第二串口数据存储到接收缓冲区,对所述第二串口数据进行处理,将处理得到的所述第二应用数据写入到所述处理缓冲区中,并设置所述已读事件。
[0013]本发明还提供了一种适用于串口设备的驱动程序,应用于包括主机和串口设备的系统中,所述主机与所述串口设备连接,所述主机中安装有系统、应用程序和驱动程序,当所述应用程序调用所述系统的个人计算机/智能卡PC/SC接口后,所述驱动程序中的预设函数被所述系统调用,所述驱动程序包括:
[0014]第一获取模块,用于在所述驱动程序中的预设函数被系统调用时,通过组件对象模型COM接口获取来自系统的控制码;
[0015]第一判断模块,用于对所述第一获取模块获取到的所述控制码进行判断;
[0016]第一处理模块,用于在所述第一判断模块判断出所述控制码为预设控制码时,根据所述预设控制码,组织对应的第一串口数据,通过串口将所述第一串口数据发送给串口设备;
[0017]第一监听模块,用于监听已读事件;
[0018]第二处理模块,用于在所述第一监听模块监听到已读事件后,从处理缓冲区中读取第二应用数据,将所述第二应用数据发送给系统;
[0019]第二监听模块,用于监听串口事件;
[0020]第一接收模块,用在所述第二监听模块监听到数据事件后,接收来自所述串口设备的第二串口数据;
[0021]第三处理模块,用于将所述第一接收模块接收到的所述第二串口数据存储到接收缓冲区,对所述第二串口数据进行处理,将处理得到的所述第二应用数据写入到所述处理缓冲区中,并设置所述已读事件。
[0022]本发明达到的有益效果:通过在主机上使用基于UMDF(User_Mode DriverFramework,用户模式驱动框架)的驱动程序,将串口设备与系统的PC/SC接口挂接,使得主机中的应用程序能够方便地通过PC/SC接口使用串口设备,不需要对应用程序做任何改动,提高了应用程序的重用性。

【专利附图】

【附图说明】
[0023]图1为本发明实施例中的一种适用于串口设备的驱动程序所在的系统架构示意图;
[0024]图2和图3为本发明实施例中的一种适用于串口设备的驱动程序的工作方法流程图;
[0025]图4为本发明实施例中的一种适用于串口设备的驱动程序的串口监听线程的工作流程图;
[0026]图5为本发明实施例中的一种适用于串口设备的驱动程序的结构示意图。

【具体实施方式】
[0027]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0028]本发明实施例提供了一种适用于串口设备的驱动程序的工作方法,应用于包括串口设备和主机的系统中,串口设备与主机连接,如图1所示,主机中包含应用程序、系统和驱动程序,该驱动程序为基于UMDF的驱动程序。串口设备打开后,主机中的系统加载驱动程序,打开串口 ;驱动程序被系统加载后,向系统申请创建1队列,该1队列由系统维护。驱动程序通过对输入缓冲区进行读操作,获取来自系统的数据;通过对输出缓冲区进行写操作,向系统返回数据。
[0029]主机中的应用程序调用系统的PC/SC(Personal Computer/Smart Card,个人计算机/智能卡)接口后,系统将1消息传递给1队列;当1消息到达1队列后,系统调用驱动程序中的预设函数,处理该1消息。上述驱动程序的工作方法,如图2和图3所示,包括以下步骤:
[0030]步骤101,驱动程序等待被调用。
[0031]步骤102,当驱动程序中的预设函数被系统调用时,驱动程序获取来自系统的控制码和1请求。
[0032]具体地,当驱动程序中的预设函数被系统调用时,驱动程序通过COM (ComponentObject Model,组件对象模型)接口获取内核驱动转发的控制码和10请求。其中,预设函数为Process1Control函数,内核驱动为WDF (Windows Driver Foundat1n,视窗驱动基础构架)。
[0033]步骤103,驱动程序对获取到的控制码进行判断,如果是属性获取请求,则执行步骤104 ;如果是属性设置请求,则执行步骤113 ;如果是状态获取请求,则执行步骤117 ;如果是卡片上电请求,则执行步骤118 ;如果是插卡判断请求,则执行步骤122 ;如果是拔卡判断请求,则执行步骤126 ;如果是指令发送请求,则执行步骤130。
[0034]步骤104,驱动程序对获取到的10请求进行转换,得到请求码。
[0035]步骤105,驱动程序对请求码进行判断,如果是厂商名获取请求,则执行步骤106 ;如果是IFD(Interface Device,接口设备)类型获取请求,则执行步骤107 ;如果是设备单元获取请求,则执行步骤108 ;如果是特征描述获取请求,则执行步骤109 ;如果是协议类型获取请求,则执行步骤110 ;如果是ATR(Answer To Reset,复位应答)字符串获取请求,则执行步骤111 ;如果是其他,则执行步骤112。
[0036]步骤106,驱动程序将自身保存的厂商名写入到输出缓冲区,并返回步骤101。
[0037]例如,驱动程序将自身保存的厂商名“Feitian”写入到输出缓冲区。
[0038]步骤107,驱动程序将自身保存的IFD类型信息写入到输出缓冲区,并返回步骤101。
[0039]例如,驱动程序将自身保存的IFD类型信息“bR301Smartcard reader”写入到输出缓冲区。
[0040]步骤108,驱动程序将自身保存的设备单元写入到输出缓冲区,并返回步骤101。
[0041]例如,驱动程序将自身保存的设备单元“O”写入到输出缓冲区。
[0042]步骤109,驱动程序将自身保存的特征描述信息写入到输出缓冲区,并返回步骤101。
[0043]例如,驱动程序将自身保存的特征描述信息“ O ”写入到输出缓冲区。
[0044]步骤110,驱动程序将自身保存的当前协议类型信息写入到输出缓冲区,并返回步骤 101。
[0045]其中,当前协议类型信息是由驱动程序对来自串口设备的ATR字符串进行解析得到的。
[0046]例如,驱动程序将自身保存的当前协议类型信息“SCARD_PROTOCOL_TO”写入到输出缓冲区。
[0047]步骤111,驱动程序将自身保存的ATR字符串写入到输出缓冲区,并返回步骤101。
[0048]例如,驱动程序将自身保存的ATR字符串“3F FA A6 00 00 81 31 FE 45 4A 434F50 34 31 56 32 32 31 23”写入到输出缓冲区。
[0049]步骤112,驱动程序将错误码写入到输出缓冲区,并返回步骤101。
[0050]例如,驱动程序将错误码“ERROR_NOT_SUPPORTED”写入到输出缓冲区。
[0051]步骤113,驱动程序从输入缓冲区中读取属性信息,对属性信息进行组织,得到第一串口数据,通过串口将第一串口数据发送给串口设备,将串口状态置为初始状态,将已接收数据长度置为零,在监听到已读事件后,从处理缓冲区中读取第二应用数据作为串口设备返回的设置响应。
[0052]具体地,驱动程序对第一包头和属性信息进行组合,得到第一串口数据。其中,属性信息包括一组或多组属性列表,每组属性列表包括属性ID和属性值。
[0053]步骤114,驱动程序根据设置响应判断是否设置成功,如果是,则执行步骤115 ;否贝IJ,执行步骤116。
[0054]步骤115,驱动程序将设置响应写入到输出缓冲区,根据属性信息更新自身保存的属性数据,并返回步骤101。
[0055]其中,属性数据包括厂商名、IFD类型信息、设备单元、特征描述信息和当前协议类型信息中一项或多项。
[0056]步骤116,驱动程序将设置响应写入到输出缓冲区,并返回步骤101。
[0057]例如,驱动程序将设置响应“ERROR_NOT_SUPPORTED”写入到输出缓冲区。
[0058]步骤117,驱动程序读取卡片状态信息,将卡片状态信息写入到输出缓冲区,并返回步骤101。
[0059]例如,驱动程序读取卡片状态信息“ SCARD_ABSENT ”,将卡片状态信息“ SCARD_ABSENT”写入到输出缓冲区。
[0060]步骤118,驱动程序组织上电指令,通过串口将上电指令发送给串口设备,将串口状态置为初始状态,将已接收数据长度置为零,在监听到已读事件后,读取处理缓冲区中的第二应用数据,将第二应用数据作为串口设备返回的ATR字符串进行保存。
[0061]例如,驱动程序向串口设备发送上电指令“0x62 00 00 00 00 00”,接收串口设备返回的 ATR 字符串 “3F FA A6 00 00 81 31 FE 45 4A 43 4F 50 34 31 56 32 323123”。
[0062]步骤119,驱动程序根据ATR字符串判断是否上电成功,如果是,则执行步骤120 ;否则,执行步骤121。
[0063]步骤120,驱动程序将ATR字符串写入到输出缓冲区,并返回步骤101。
[0064]例如,驱动程序将ATR 字符串 “3F FA A6 00 00 81 31 FE 454A 43 4F 50 343156 32 32 31 23”写入到输出缓冲区。
[0065]步骤121,驱动程序将上电失败信息写入到输出缓冲区,并返回步骤101。
[0066]例如,驱动程序将上电失败信息“SCARD_ABSENT”写入到输出缓冲区。
[0067]步骤122,驱动程序读取卡片状态信息。
[0068]例如,驱动程序读取卡片状态信息“SCARD_PRESENT”。
[0069]步骤123,驱动程序根据卡片状态信息,判断串口设备中是否有卡,如果是,则执行步骤124 ;否则,执行步骤125。
[0070]具体地,当卡片状态信息为“SCARD_PRESENT”时,驱动程序确定串口设备中有卡;当卡片状态信息为“SCARD_ABSENT”时,驱动程序确定串口设备中无卡。
[0071]步骤124,驱动程序将插卡信息写入到输出缓冲区,并返回步骤101。
[0072]例如,驱动程序将插卡信息“STATUS_SUCCESS”写入到输出缓冲区。
[0073]步骤125,驱动程序取消操作,并返回步骤101。
[0074]步骤126,驱动程序读取卡片状态信息。
[0075]例如,驱动程序读取卡片状态信息“SCARD_PRESENT”。
[0076]步骤127,驱动程序根据卡片状态信息,判断串口设备中是否有卡,如果是,则执行步骤128 ;否则,执行步骤129。
[0077]具体地,当卡片状态信息为“SCARD_PRESENT”时,驱动程序确定串口设备中有卡;当卡片状态信息为“SCARD_ABSENT”时,驱动程序确定串口设备中无卡。
[0078]步骤128,驱动程序取消操作,并返回步骤101。
[0079]步骤129,驱动程序将拔卡信息写入到输出缓冲区,并返回步骤101。
[0080]例如,驱动程序将拔卡信息“STATUS_SUCCESS”写入到输出缓冲区。
[0081]步骤130,驱动程序从输入缓冲区中读取第一应用数据,对第一应用数据进行组织,得到第一串口数据。
[0082]具体地,驱动程序从输入缓冲区中读取第一应用数据后,对第一包头和第一应用数据进行组合,得到第一串口数据。其中,第一包头的长度为10个字节。
[0083]例如,驱动程序从输入缓冲区中读取到的第一应用数据为“00 BO 00 00 R)”,第一包头为“6f 05 00 00 00 00 00 00 00 00”,组织得到的第一串口数据为“6f 0500 0000 00 00 00 00 00 00 BO 00 00 F0,,。
[0084]步骤131,驱动程序通过串口将第一串口数据发送给串口设备,将串口状态置为初始状态,将已接收数据长度置为零。
[0085]例如,驱动程序通过串口将串口数据“6f 05 00 00 00 00 00 00 00 00 00 BO0000F0 ”发送给串口设备。
[0086]步骤132,驱动程序监听到已读事件后,从处理缓冲区中读取第二应用数据,将第二应用数据写入到输出缓冲区,并返回步骤101。
[0087]例如,驱动程序从处理缓冲区中读取并写入到输出缓冲区中的第二应用数据为:
[0088]“00 01 02 03 04 05 06 07 08 09 OA OB OC OD OE OF 10 11 12 13 14 15 161718 19 IA IB IC ID IE IF 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 303132 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A4B4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 646566 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E7F80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98999A 9B 9C 9D 9E 9F AO Al A2 A3 A4 A5 A6 A7 A8 A9 M AB AC AD AE AF BOBl B2 B3B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF CO Cl C2 C3 C4 C5 C6 C7C8 C9 CA CB CC CD CECF DO Dl D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF EO El E2 E3 E4 E5 E6 E7 E8E9 EA EB EC ED EE EF”。
[0089]需要说明的是,以上为驱动程序的主线程的工作流程。驱动程序还通过串口监听线程接收并处理第二串口数据,如图4所示,包括以下步骤:
[0090]步骤201,驱动程序监听串口事件。
[0091]步骤202,当监听到数据事件后,驱动程序接收第二串口数据。
[0092]步骤203,驱动程序对串口状态进行判断,如果是初始状态,则执行步骤204 ;如果是激活状态,则执行步骤212 ;如果是未激活状态,则执行步骤218。
[0093]步骤204,驱动程序对接收缓冲区进行初始化,将接收到的第二串口数据存储到接收缓冲区。
[0094]例如,驱动程序接收并存储到接收缓冲区中的第二串口数据为:“80 f0 0000 0000 00 00 00 00 00 01 02 03 04 05 06 07 08 09 OA OB OC OD OE OF 10 11 12 131415 16 17 18 19 IA IB IC ID IE IF 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D2E2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 474849 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 616263 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B7C7D 7E 7F 80 81 82 83 84”。
[0095]步骤205,驱动程序从第二串口数据中获取有效数据长度,对有效数据长度进行保存。
[0096]本实施例中,驱动程序将第二串口数据中第二字节、第三字节、第四字节和第五字节的数据作为有效数据长度。
[0097]例如,第二串口数据为“80f0 00 00 00 00 00 00 00 00 00 01 02 03 04 0506 0708090A OB OC OD OE OF 10 11 12 13 14 15 16 1718 19 IA IB IC ID IE IF 202122 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A3B3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 545556 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E6F70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84”,驱动程序将第二字节、第三字节、第四字节和第五字节的数据“f0 00 00 00”作为有效数据长度。
[0098]步骤206,驱动程序判断第二串口数据中是否包含卡片插拔信息,如果是,则执行步骤207 ;否则,执行步骤208。
[0099]具体地,驱动程序判断第二串口数据的最后两个字节的数据是否为卡片插拔信息,如果是,则确定第二串口数据中包含卡片插拔信息;否则,确定第二串口数据中不包含卡片插拔信息。其中,卡片插拔信息可以是插卡信息,也可以是拔卡信息。
[0100]例如,插卡信息为“50 03”,拔卡信息为“50 02”,第二串口数据为:“80 fOOO 0000 00 00 00 00 00 00 01 02 03 04 05 06 07 08 09 OA OB OC OD OE OF 10 11 121314 15 16 17 18 19 IA IB IC ID IE IF 20 21 22 23 24 25 26 27 28 29 2A 2B 2C2D2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 464748 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 606162 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A7B7C 7D 7E 7F 80 81 82 83 84”,则驱动程序可确定第二串口数据中不包含卡片插拔信息。
[0101]步骤207,驱动程序根据卡片插拔信息更新卡片状态信息,并执行步骤208。
[0102]具体地,如果卡片插拔信息为插卡信息,驱动程序将卡片状态信息更新为有卡状态;如果卡片插拔信息为拔卡信息,驱动程序将卡片状态信息更新为无卡状态。
[0103]步骤208,驱动程序对第二串口数据进行处理,将处理得到的第二应用数据写入到处理缓冲区中,根据第二应用数据的长度更新已接收数据长度。
[0104]具体地,如果第二串口数据中包含卡片插拔信息,驱动程序将第二串口数据中除卡片插拔信息和第二包头之外的数据作为第二应用数据写入到处理缓冲区中,将已接收数据长度加上第二应用数据的长度,作为更新后的已接收数据长度;如果第二串口数据中不包含卡片插拔信息,驱动程序将第二串口数据中除第二包头之外的数据作为第二应用数据写入到处理缓冲区中,将已接收数据长度加上第二应用数据的长度,作为更新后的已接收数据长度。
[0105]本实施例中,第二包头为第二串口数据中的前十个字节的数据。
[0106]例如,第二串口数据为“80f0 00 00 00 00 00 00 00 00 00 01 02 03 04 0506 0708 09 OA OB OC OD OE OF 10 11 12 13 14 15 16 17 18 19 IA IB IC ID IE IF20 2122 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 393A 3B3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 5354 5556 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D6E 6F70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84” 时,第二串口数据中不包含卡片插拔信息,驱动程序将上述第二串口数据中去除“80 f0 00 00 000000 00 00 00”后的数据作为第二应用数据写入到处理缓冲区中。
[0107]步骤209,驱动程序判断已接收数据长度是否小于有效数据长度,如果是,则执行步骤210 ;否则,执行步骤211。
[0108]步骤210,驱动程序将串口状态置为激活状态,重置串口事件,并返回步骤201。
[0109]步骤211,驱动程序将串口状态置为未激活状态,设置已读事件,重置串口事件,并返回步骤201。
[0110]步骤212,驱动程序判断第二串口数据中是否包含卡片插拔信息,如果是,则执行步骤213 ;否则,执行步骤214。
[0111]其中,卡片插拔信息可以是插卡信息,也可以是拔卡信息。
[0112]例如,插卡信息为“50 03”,拔卡信息为“50 02”,第二串口数据为:“85 8687 8889 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F AOAl A2A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF BO BI B2 B3 B4 B5 B6 B7B8 B9 BA BB BC BDBE BF CO Cl C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CECF DO Dl D2 D3 D4 D5 D6 D7 D8D9 DA DB DC DD DE DF EO El E2 E3 E4 E5E6 E7 E8 E9 EA EB EC ED EE EF 50 02”,则驱动程序可确定第二串口数据中包含卡片插拔信息。
[0113]步骤213,驱动程序根据卡片插拔信息更新卡片状态信息,将第二串口数据中除卡片插拔信息之外的数据作为第二应用数据写入到处理缓冲区中,根据第二应用数据的长度更新已接收数据长度,并执行步骤215。
[0114]例如,第二串口数据为“8586 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 949596 97 98 99 9A 9B 9C 9D 9E 9F AO Al A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC ADAE AFBO BI B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF CO Cl C2 C3 C4C5 C6 C7 C8 C9CA CB CC CD CE CF DO Dl D2 D3 D4 D5 D6 D7 D8 D9 DA DBDC DD DE DF EO El E2 E3 E4E5 E6 E7 E8 E9 EA EB EC ED EE EF 50 02”时,驱动程序将上述第二串口数据中去除“5002 ”后的数据作为第二应用数据写入到处理缓冲区中。
[0115]步骤214,驱动程序将第二串口数据作为第二应用数据写入到处理缓冲区中,根据第二串口数据的长度更新已接收数据长度,并执行步骤215。
[0116]具体地,驱动程序将已接收数据长度加上第二串口数据的长度,作为更新后的已接收数据长度。
[0117]步骤215,驱动程序判断已接收数据长度是否小于有效数据长度,如果是,则执行步骤216 ;否则,执行步骤217。
[0118]步骤216,驱动程序重置串口事件,并返回步骤201。
[0119]步骤217,驱动程序将串口状态置为未激活状态,设置已读事件,重置串口事件,并返回步骤201。
[0120]步骤218,驱动程序判断第二串口数据中是否包含卡片插拔信息,如果是,则执行步骤219 ;否则,执行步骤220。
[0121]步骤219,驱动程序从第二串口数据中获取卡片插拔信息,根据卡片插拔信息更新卡片状态信息,并执行步骤220。
[0122]步骤220,驱动程序重置串口事件,并返回步骤201。
[0123]本发明实施例通过在主机上使用基于UMDF的驱动程序,将串口设备与系统的PC/SC接口挂接,使得主机中的应用程序能够方便地通过PC/SC接口调用串口设备,不需要对应用程序做任何改动,提高了应用程序的重用性。
[0124]基于上述适用于串口设备的驱动程序的工作方法,本发明实施例还提供了一种适用于串口设备的驱动程序,应用于包括主机和串口设备的系统中,主机与串口设备连接,主机中安装有系统、应用程序和驱动程序,当应用程序调用系统的PC/SC接口后,驱动程序中的预设函数被系统调用。上述驱动程序,如图5所示,包括:
[0125]第一获取模块510,用于在驱动程序中的预设函数被系统调用时,通过组件对象模型COM接口获取来自系统的控制码;
[0126]具体地,上述第一获取模块510,具体用于在驱动程序中的预设函数被系统调用时,通过COM接口获取内核驱动转发的控制码。
[0127]其中,内核驱动为WDF。
[0128]第一判断模块520,用于对第一获取模块510获取到的控制码进行判断;
[0129]第一处理模块530,用于在第一判断模块520判断出控制码为预设控制码时,根据预设控制码,组织对应的第一串口数据,通过串口将第一串口数据发送给串口设备;
[0130]其中,上述预设控制码可以为卡片上电请求,第二应用数据为ATR字符串;
[0131]相应地,上述第一处理模块530,具体用于在第一判断模块520判断出控制码为卡片上电请求时,组织上电指令,通过串口将上电指令发送给串口设备。
[0132]上述预设控制码还可以为指令发送请求;
[0133]相应地,上述第一处理模块530,包括:
[0134]第一组织子模块,用于在第一判断模块520判断出控制码为指令发送请求时,对来自系统的第一应用数据进行组织,得到第一串口数据;
[0135]第一发送子模块,用于通过串口将第一组织子模块组织得到的第一串口数据发送给串口设备。
[0136]第一监听模块540,用于监听已读事件;
[0137]第二处理模块550,用于在第一监听模块540监听到已读事件后,从处理缓冲区中读取第二应用数据,将第二应用数据发送给系统;
[0138]具体地,上述第二处理模块550,具体用于在第一监听模块540监听到已读事件后,从处理缓冲区中读取第二应用数据,通过向输出缓冲区写入第二应用数据,将第二应用数据发送给系统。
[0139]其中,上述预设控制码可以为属性设置请求,第二应用数据为设置响应;
[0140]相应地,上述第一处理模块530,包括:
[0141]第二组织子模块,用于在第一判断模块520判断出控制码为属性设置请求时,对来自系统的属性信息进行组织,得到第一串口数据;
[0142]第二发送子模块,用于通过串口将第二组织子模块组织得到的第一串口数据发送给串口设备;
[0143]上述第二处理模块550,具体用于在第一监听模块540监听到已读事件后,从处理缓冲区中读取设置响应,根据设置响应判断是否设置成功,如果是,则将设置响应发送给系统,根据属性信息更新自身保存的属性数据;否则,将设置响应发送给系统。
[0144]第二监听模块560,用于监听串口事件;
[0145]第一接收模块570,用在第二监听模块560监听到数据事件后,接收来自串口设备的第二串口数据;
[0146]第三处理模块580,用于将第一接收模块570接收到的第二串口数据存储到接收缓冲区,对第二串口数据进行处理,将处理得到的第二应用数据写入到处理缓冲区中,并设置已读事件。
[0147]具体地,上述第三处理模块580,具体用于将第一接收模块570接收到的第二串口数据存储到接收缓冲区,当第二串口数据中包含卡片插拔信息时,根据卡片插拔信息更新卡片状态信息,将第二串口数据中除卡片插拔信息和第二包头之外的数据作为第二应用数据写入到处理缓冲区中;当第二串口数据中不包含卡片插拔信息时,将第二串口数据中除第二包头之外的数据作为第二应用数据写入到处理缓冲区中。
[0148]进一步地,上述驱动程序,还包括:
[0149]第二获取模块,用于通过读取输入缓冲区,获取来自系统的第一应用数据。
[0150]相应地,上述第一组织子模块,具体用于在第一判断模块520判断出控制码为指令发送请求时,对第一包头和第一应用数据进行组合,得到第一串口数据。
[0151]进一步地,上述驱动程序,还包括:
[0152]第三获取模块,用于通过读取输入缓冲区,获取来自系统的属性信息。
[0153]相应地,上述第二组织子模块,具体用于对第一包头和属性信息进行组合,得到第一串口数据。
[0154]进一步地,上述驱动程序,还包括:
[0155]第一设置模块,用于在第一处理模块530通过串口将第一串口数据发送给串口设备之后,将串口状态置为初始状态;
[0156]相应地,上述第三处理模块580,包括:
[0157]第一判断子模块,用于对串口状态进行判断;
[0158]第一处理子模块,用于在第一判断子模块判断出串口状态为初始状态时,对接收缓冲区进行初始化,将第二串口数据存储到接收缓冲区;
[0159]第二处理子模块,用于对第二串口数据进行处理,将处理得到的第二应用数据写入到处理缓冲区中,触发第二判断子模块;
[0160]第二判断子模块,用于判断数据是否接收完毕;
[0161]第一设置子模块,用于在第二判断子模块判断出数据未接收完毕后,将串口状态置为激活状态,重置串口事件;在第二判断子模块判断出数据接收完毕后,将串口状态置为非激活状态,重置串口事件,并设置已读事件;
[0162]第二处理子模块,用于在第一判断子模块判断出串口状态为激活状态时,将第二串口数据存储到接收缓冲区,将第二串口数据中的第二应用数据写入到处理缓冲区中,判断数据是否接收完毕;
[0163]第二设置子模块,用于在第二处理子模块判断出数据未接收完毕后,重置串口事件;在第二处理子模块判断出数据接收完毕后,将串口状态置为未激活状态,重置串口事件;在第一判断子模块判断出串口状态为激活状态时,重置串口事件。
[0164]进一步地,上述驱动程序,还包括:
[0165]第二设置模块,用于在第一处理模块530通过串口将第一串口数据发送给串口设备之后,将已接收数据长度置为零;
[0166]相应地,上述第一处理子模块,还用于从第二串口数据中获取有效数据长度,对有效数据长度进行保存;
[0167]上述第三处理模块580,还包括:
[0168]更新子模块,用于根据第二处理子模块处理得到的第二应用数据的长度更新已接收数据长度;
[0169]上述第二判断子模块,具体用于判断已接收数据长度是否小于有效数据长度,如果是,则确定数据未接收完毕;否则,确定数据接收完毕。
[0170]进一步地,上述第三处理模块580,还包括:
[0171]第三处理子模块,用于判断第二串口数据中是否包含卡片插拔信息,如果是,则根据卡片插拔信息更新卡片状态信息;
[0172]相应地,上述第二处理子模块,具体用于将第二串口数据存储到接收缓冲区,判断第二串口数据中是否包含卡片插拔信息;如果包含卡片插拔信息,根据卡片插拔信息更新卡片状态信息,将第二串口数据中除卡片插拔信息之外的数据作为第二应用数据写入到处理缓冲区中,判断数据是否接收完毕;如果不包含卡片插拔信息,将第二串口数据作为第二应用数据写入到处理缓冲区中,判断数据是否接收完毕。
[0173]进一步地,上述驱动程序,还包括:
[0174]第四处理模块,用于在第一判断模块520判断控制码为状态获取请求时,读取卡片状态信息,将卡片状态信息发送给系统。
[0175]进一步地,上述驱动程序,还包括:
[0176]第五处理模块,用于在第一判断模块520判断控制码为插卡判断请求时,读取卡片状态信息,根据卡片状态信息,判断串口设备中是否有卡,如果是,将插卡信息发送给系统;否则,取消操作。
[0177]进一步地,上述驱动程序,还包括:
[0178]第六处理模块,用于在第一判断模块520判断控制码为拔卡判断请求时,读取卡片状态信息,根据卡片状态信息,判断串口设备中是否有卡,如果是,则取消操作;否则,将拔卡信息发送给系统。
[0179]进一步地,上述驱动程序,还包括:
[0180]第七处理模块,用于在第一判断模块520判断控制码为属性获取请求时,对获取到的来自系统的1请求进行转换,得到请求码,对请求码进行判断;如果请求码是厂商名获取请求,则将自身保存的厂商名发送给系统;如果请求码是接口设备IFD类型获取请求,则将自身保存的IFD类型信息发送给系统;如果请求码是设备单元获取请求,则将自身保存的设备单元发送给系统;如果请求码是特征描述获取请求,则将自身保存的特征描述信息发送给系统;如果请求码是协议类型获取请求,则将自身保存的当前协议类型信息发送给系统;如果请求码是ATR字符串获取请求,则将自身保存的ATR字符串发送给系统。
[0181]本发明实施例通过在主机上使用基于UMDF的驱动程序,将串口设备与系统的PC/SC接口挂接,使得主机中的应用程序能够方便地通过PC/SC接口调用串口设备,不需要对应用程序做任何改动,提高了应用程序的重用性。
[0182]结合本文中所公开的实施例描述的方法中的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或【技术领域】内所公知的任意其它形式的存储介质中。
[0183]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
【权利要求】
1.一种适用于串口设备的驱动程序的工作方法,其特征在于,应用于包括主机和串口设备的系统中,所述主机与所述串口设备连接,所述主机中安装有系统、应用程序和驱动程序,当所述应用程序调用所述系统的个人计算机/智能卡PC/SC接口后,所述驱动程序中的预设函数被所述系统调用,所述方法包括以下步骤: 51、所述驱动程序等待被调用; 52、当所述驱动程序中的预设函数被所述系统调用时,所述驱动程序通过组件对象模型COM接口获取来自所述系统的控制码,对所述控制码进行判断,如果所述控制码为预设控制码,则执行步骤S3 ;如果所述控制码不是预设控制码,根据所述控制码执行相应的操作,并返回步骤S1 ; 53、所述驱动程序根据所述预设控制码,组织对应的第一串口数据,通过串口将所述第一串口数据发送给所述串口设备; 54、所述驱动程序监听到已读事件后,从处理缓冲区中读取第二应用数据,将所述第二应用数据发送给所述系统,并返回步骤S1 ; 所述步骤S4之前,还包括: A1、所述驱动程序监听串口事件,在监听到数据事件后,接收来自所述串口设备的第二串口数据; A2、所述驱动程序将所述第二串口数据存储到接收缓冲区,对所述第二串口数据进行处理,将处理得到的所述第二应用数据写入到所述处理缓冲区中,并设置所述已读事件。
2.如权利要求1所述的方法,其特征在于,所述驱动程序将所述第二应用数据发送给所述系统,具体为: 所述驱动程序通过向输出缓冲区写入所述第二应用数据,将所述第二应用数据发送给所述系统。
3.如权利要求1所述的方法,其特征在于,所述驱动程序对所述第二串口数据进行处理,将处理得到的所述第二应用数据写入到所述处理缓冲区中,具体为: 如果所述第二串口数据中包含卡片插拔信息,所述驱动程序根据所述卡片插拔信息更新卡片状态信息,将所述第二串口数据中除所述卡片插拔信息和第二包头之外的数据作为所述第二应用数据写入到所述处理缓冲区中; 如果所述第二串口数据中不包含卡片插拔信息,所述驱动程序将所述第二串口数据中除第二包头之外的数据作为所述第二应用数据写入到所述处理缓冲区中。
4.如权利要求1所述的方法,其特征在于,所述预设控制码为卡片上电请求,所述第二应用数据为复位应答ATR字符串; 所述步骤S3,具体为: 所述驱动程序组织上电指令,通过串口将所述上电指令发送给所述串口设备。
5.如权利要求1所述的方法,其特征在于,所述预设控制码为指令发送请求; 所述步骤S3,具体为: 所述驱动程序对来自所述系统的第一应用数据进行组织,得到所述第一串口数据,通过串口将所述第一串口数据发送给所述串口设备。
6.如权利要求5所述的方法,其特征在于,所述步骤S3之前,还包括: 所述驱动程序通过读取输入缓冲区,获取来自所述系统的第一应用数据。
7.如权利要求5所述的方法,其特征在于,所述驱动程序对所述第一应用数据进行组织,具体为: 所述驱动程序对第一包头和所述第一应用数据进行组合,得到所述第一串口数据。
8.如权利要求1所述的方法,其特征在于,所述预设控制码为属性设置请求,所述第二应用数据为设置响应; 所述步骤S3,具体为: 所述驱动程序对来自所述系统的属性信息进行组织,得到所述第一串口数据,通过串口将所述第一串口数据发送给所述串口设备; 所述步骤S4,具体为: 所述驱动程序监听到已读事件后,从所述处理缓冲区中读取所述设置响应,根据所述设置响应判断是否设置成功,如果是,则将所述设置响应发送给系统,根据所述属性信息更新自身保存的属性数据;否则,将所述设置响应发送给所述系统。
9.如权利要求8所述的方法,其特征在于,所述步骤S3之前,还包括: 所述驱动程序通过读取输入缓冲区,获取来自所述系统的属性信息。
10.如权利要求8所述的方法,其特征在于,所述驱动程序对所述属性信息进行组织,具体为: 所述驱动程序对第一包头和所述属性信息进行组合,得到所述第一串口数据。
11.如权利要求1所述的方法,其特征在于,所述驱动程序通过COM接口获取来自所述系统的控制码,具体为: 所述驱动程序通过COM接口获取内核驱动转发的控制码。
12.如权利要求11所述的方法,其特征在于,所述内核驱动为视窗驱动基础构架WDF。
13.如权利要求1所述的方法,其特征在于,所述驱动程序通过串口将所述第一串口数据发送给所述串口设备之后,还包括: 所述驱动程序将串口状态置为初始状态; 所述步骤A2,具体包括: B1、所述驱动程序对所述串口状态进行判断,如果是初始状态,则执行步骤B2 ;如果是激活状态,则执行步骤B6 ;如果是未激活状态,则执行步骤B9 ; B2、所述驱动程序对所述接收缓冲区进行初始化,将所述第二串口数据存储到所述接收缓冲区; B3、所述驱动程序对所述第二串口数据进行处理,将处理得到的所述第二应用数据写入到所述处理缓冲区中,判断数据是否接收完毕,如果是,则执行步骤B5 ;否则,执行步骤B4 ; B4、所述驱动程序将串口状态置为激活状态,重置串口事件; B5、所述驱动程序将串口状态置为非激活状态,重置串口事件,并设置所述已读事件; B6、所述驱动程序将所述第二串口数据存储到所述接收缓冲区,将所述第二串口数据中的第二应用数据写入到所述处理缓冲区中,判断数据是否接收完毕,如果是,则执行步骤B8 ;否则,执行步骤B7 ; B7、所述驱动程序重置串口事件; B8、所述驱动程序将所述串口状态置为未激活状态,重置串口事件; B9、所述驱动程序重置串口事件。
14.如权利要求13所述的方法,其特征在于,所述驱动程序通过串口将所述第一串口数据发送给所述串口设备之后,还包括: 所述驱动程序将已接收数据长度置为零; 所述步骤B2,还包括: 所述驱动程序从所述第二串口数据中获取有效数据长度,对所述有效数据长度进行保存; 所述驱动程序对所述第二串口数据进行处理,得到所述第二应用数据之后,还包括: 所述驱动程序根据所述第二应用数据的长度更新所述已接收数据长度; 所述驱动程序判断数据是否接收完毕之前,还包括: 所述驱动程序根据所述第二应用数据的长度更新所述已接收数据长度; 所述驱动程序判断数据是否接收完毕,具体为: 所述驱动程序判断所述已接收数据长度是否小于有效数据长度,如果是,则确定数据未接收完毕;否则,确定数据接收完毕。
15.如权利要求13所述的方法,其特征在于,所述步骤B2之后,还包括: 所述驱动程序判断所述第二串口数据中是否包含卡片插拔信息,如果是,则根据所述卡片插拔信息更新卡片状态信息,并执行步骤B3 ;否则,执行步骤B3 ; 所述步骤B6,具体包括: 所述驱动程序将所述第二串口数据存储到所述接收缓冲区,判断所述第二串口数据中是否包含卡片插拔信息; 如果包含卡片插拔信息,所述驱动程序根据所述卡片插拔信息更新卡片状态信息,将所述第二串口数据中除所述卡片插拔信息之外的数据作为所述第二应用数据写入到所述处理缓冲区中,判断数据是否接收完毕,如果是,则执行步骤B8 ;否则,执行步骤B7 ; 如果不包含卡片插拔信息,所述驱动程序将所述第二串口数据作为所述第二应用数据写入到所述处理缓冲区中,判断数据是否接收完毕,如果是,则执行步骤B8 ;否则,执行步骤B7 ; 所述步骤B9之前,还包括: 所述驱动程序判断所述第二串口数据中是否包含卡片插拔信息,如果是,则从所述第二串口数据中获取所述卡片插拔信息,根据所述卡片插拔信息更新卡片状态信息,并执行步骤B9 ;否则,执行步骤B9。
16.如权利要求1所述的方法,其特征在于, 所述驱动程序对所述控制码进行判断之后,还包括: 如果所述控制码是状态获取请求,所述驱动程序读取卡片状态信息,将所述卡片状态信息发送给所述系统,并返回步骤S1。
17.如权利要求1所述的方法,其特征在于,所述驱动程序对所述控制码进行判断之后,还包括: 如果所述控制码是插卡判断请求,所述驱动程序读取卡片状态信息,根据所述卡片状态信息,判断所述串口设备中是否有卡,如果是,所述驱动程序将插卡信息发送给所述系统,并返回步骤S1 ;否则,所述驱动程序取消操作,并返回步骤S1。
18.如权利要求1所述的方法,其特征在于,所述驱动程序对所述控制码进行判断之后,还包括: 如果所述控制码是拔卡判断请求,所述驱动程序读取卡片状态信息,根据所述卡片状态信息,判断所述串口设备中是否有卡,如果是,则取消操作,并返回步骤S1 ;否则,将拔卡信息发送给所述系统,并返回步骤S1。
19.如权利要求1所述的方法,其特征在于,所述驱动程序对所述控制码进行判断之后,还包括: 如果所述控制码是属性获取请求,所述驱动程序对获取到的来自所述系统的10请求进行转换,得到请求码,对所述请求码进行判断; 如果所述请求码是厂商名获取请求,所述驱动程序将自身保存的厂商名发送给所述系统,并返回步骤S1 ; 如果所述请求码是接口设备IFD类型获取请求,所述驱动程序将自身保存的IFD类型信息发送给所述系统,并返回步骤S1 ; 如果所述请求码是设备单元获取请求,所述驱动程序将自身保存的设备单元发送给所述系统,并返回步骤S1 ; 如果所述请求码是特征描述获取请求,所述驱动程序将自身保存的特征描述信息发送给所述系统,并返回步骤S1 ; 如果所述请求码是协议类型获取请求,所述驱动程序将自身保存的当前协议类型信息发送给所述系统,并返回步骤S1 ; 如果所述请求码是ATR字符串获取请求,所述驱动程序将自身保存的ATR字符串发送给所述系统,并返回步骤S1。
20.一种适用于串口设备的驱动程序,其特征在于,应用于包括主机和串口设备的系统中,所述主机与所述串口设备连接,所述主机中安装有系统、应用程序和驱动程序,当所述应用程序调用所述系统的个人计算机/智能卡PC/SC接口后,所述驱动程序中的预设函数被所述系统调用,所述驱动程序包括: 第一获取模块,用于在所述驱动程序中的预设函数被系统调用时,通过组件对象模型COM接口获取来自所述系统的控制码; 第一判断模块,用于对所述第一获取模块获取到的所述控制码进行判断; 第一处理模块,用于在所述第一判断模块判断出所述控制码为预设控制码时,根据所述预设控制码,组织对应的第一串口数据,通过串口将所述第一串口数据发送给所述串口设备; 第一监听模块,用于监听已读事件; 第二处理模块,用于在所述第一监听模块监听到已读事件后,从处理缓冲区中读取第二应用数据,将所述第二应用数据发送给所述系统; 第二监听模块,用于监听串口事件; 第一接收模块,用在所述第二监听模块监听到数据事件后,接收来自所述串口设备的第二串口数据; 第三处理模块,用于将所述第一接收模块接收到的所述第二串口数据存储到接收缓冲区,对所述第二串口数据进行处理,将处理得到的所述第二应用数据写入到所述处理缓冲区中,并设置所述已读事件。
21.如权利要求20所述的驱动程序,其特征在于,所述第二处理模块,具体用于在所述第一监听模块监听到已读事件后,从所述处理缓冲区中读取所述第二应用数据,通过向输出缓冲区写入所述第二应用数据,将所述第二应用数据发送给所述系统。
22.如权利要求20所述的驱动程序,其特征在于, 所述第三处理模块,具体用于将所述第一接收模块接收到的所述第二串口数据存储到接收缓冲区,当所述第二串口数据中包含卡片插拔信息时,根据所述卡片插拔信息更新卡片状态信息,将所述第二串口数据中除所述卡片插拔信息和第二包头之外的数据作为所述第二应用数据写入到所述处理缓冲区中;当所述第二串口数据中不包含卡片插拔信息时,将所述第二串口数据中除第二包头之外的数据作为所述第二应用数据写入到所述处理缓冲区中。
23.如权利要求20所述的驱动程序,其特征在于,所述预设控制码为卡片上电请求,所述第二应用数据为复位应答ATR字符串; 所述第一处理模块,具体用于在所述第一判断模块判断出所述控制码为卡片上电请求时,组织上电指令,通过串口将所述上电指令发送给所述串口设备。
24.如权利要求20所述的驱动程序,其特征在于,所述预设控制码为指令发送请求; 所述第一处理模块,包括: 第一组织子模块,用于在所述第一判断模块判断出所述控制码为指令发送请求时,对来自所述系统的第一应用数据进行组织,得到所述第一串口数据; 第一发送子模块,用于通过串口将所述第一组织子模块组织得到的所述第一串口数据发送给所述串口设备。
25.如权利要求24所述的驱动程序,其特征在于,还包括: 第二获取模块,用于通过读取输入缓冲区,获取来自所述系统的第一应用数据。
26.如权利要求24所述的驱动程序,其特征在于,所述第一组织子模块,具体用于在所述第一判断模块判断出所述控制码为指令发送请求时,对第一包头和所述第一应用数据进行组合,得到所述第一串口数据。
27.如权利要求20所述的驱动程序,其特征在于,所述预设控制码为属性设置请求,所述第二应用数据为设置响应; 所述第一处理模块,包括: 第二组织子模块,用于在所述第一判断模块判断出所述控制码为属性设置请求时,对来自所述系统的属性信息进行组织,得到所述第一串口数据; 第二发送子模块,用于通过串口将所述第二组织子模块组织得到的所述第一串口数据发送给所述串口设备; 所述第二处理模块,具体用于在所述第一监听模块监听到已读事件后,从所述处理缓冲区中读取所述设置响应,根据所述设置响应判断是否设置成功,如果是,则将所述设置响应发送给系统,根据所述属性信息更新自身保存的属性数据;否则,将所述设置响应发送给所述系统。
28.如权利要求27所述的驱动程序,其特征在于,还包括: 第三获取模块,用于通过读取输入缓冲区,获取来自所述系统的属性信息。
29.如权利要求27所述的驱动程序,其特征在于,所述第二组织子模块,具体用于对第一包头和所述属性信息进行组合,得到所述第一串口数据。
30.如权利要求20所述的驱动程序,其特征在于,所述第一获取模块,具体用于在所述驱动程序中的预设函数被所述系统调用时,通过COM接口获取内核驱动转发的控制码。
31.如权利要求30所述的驱动程序,其特征在于,所述内核驱动为视窗驱动基础构架WDF。
32.如权利要求20所述的驱动程序,其特征在于,还包括: 第一设置模块,用于在所述第一处理模块通过串口将所述第一串口数据发送给所述串口设备之后,将串口状态置为初始状态; 所述第三处理模块,包括: 第一判断子模块,用于对所述串口状态进行判断; 第一处理子模块,用于在所述第一判断子模块判断出所述串口状态为初始状态时,对所述接收缓冲区进行初始化,将所述第二串口数据存储到所述接收缓冲区; 第二处理子模块,用于对所述第二串口数据进行处理,将处理得到的所述第二应用数据写入到所述处理缓冲区中,触发第二判断子模块; 所述第二判断子模块,用于判断数据是否接收完毕; 第一设置子模块,用于在所述第二判断子模块判断出数据未接收完毕后,将串口状态置为激活状态,重置串口事件;在所述第二判断子模块判断出数据接收完毕后,将串口状态置为非激活状态,重置串口事件,并设置所述已读事件; 第二处理子模块,用于在所述第一判断子模块判断出所述串口状态为激活状态时,将所述第二串口数据存储到所述接收缓冲区,将所述第二串口数据中的第二应用数据写入到所述处理缓冲区中,判断数据是否接收完毕; 第二设置子模块,用于在所述第二处理子模块判断出数据未接收完毕后,重置串口事件;在所述第二处理子模块判断出数据接收完毕后,将串口状态置为未激活状态,重置串口事件;在所述第一判断子模块判断出所述串口状态为激活状态时,重置串口事件。
33.如权利要求32所述的驱动程序,其特征在于,还包括: 第二设置模块,用于在所述第一处理模块通过串口将所述第一串口数据发送给所述串口设备之后,将已接收数据长度置为零; 所述第一处理子模块,还用于从所述第二串口数据中获取有效数据长度,对所述有效数据长度进行保存; 所述第三处理模块,还包括: 更新子模块,用于根据所述第二处理子模块处理得到的所述第二应用数据的长度更新所述已接收数据长度; 所述第二判断子模块,具体用于判断所述已接收数据长度是否小于有效数据长度,如果是,则确定数据未接收完毕;否则,确定数据接收完毕。
34.如权利要求32所述的驱动程序,其特征在于,所述第三处理模块,还包括: 第三处理子模块,用于判断所述第二串口数据中是否包含卡片插拔信息,如果是,则根据所述卡片插拔信息更新卡片状态信息; 所述第二处理子模块,具体用于将所述第二串口数据存储到所述接收缓冲区,判断所述第二串口数据中是否包含卡片插拔信息;如果包含卡片插拔信息,根据所述卡片插拔信息更新卡片状态信息,将所述第二串口数据中除所述卡片插拔信息之外的数据作为所述第二应用数据写入到所述处理缓冲区中,判断数据是否接收完毕;如果不包含卡片插拔信息,将所述第二串口数据作为第二应用数据写入到所述处理缓冲区中,判断数据是否接收完毕。
35.如权利要求20所述的驱动程序,其特征在于,还包括: 第四处理模块,用于在所述第一判断模块判断所述控制码为状态获取请求时,读取卡片状态信息,将所述卡片状态信息发送给所述系统。
36.如权利要求20所述的驱动程序,其特征在于,还包括: 第五处理模块,用于在所述第一判断模块判断所述控制码为插卡判断请求时,读取卡片状态信息,根据所述卡片状态信息,判断所述串口设备中是否有卡,如果是,将插卡信息发送给所述系统;否则,取消操作。
37.如权利要求20所述的驱动程序,其特征在于,还包括: 第六处理模块,用于在所述第一判断模块判断所述控制码为拔卡判断请求时,读取卡片状态信息,根据所述卡片状态信息,判断所述串口设备中是否有卡,如果是,则取消操作;否则,将拔卡信息发送给所述系统。
38.如权利要求20所述的驱动程序,其特征在于,还包括: 第七处理模块,用于在所述第一判断模块判断所述控制码为属性获取请求时,对获取到的来自所述系统的10请求进行转换,得到请求码,对所述请求码进行判断;如果所述请求码是厂商名获取请求,则将自身保存的厂商名发送给所述系统;如果所述请求码是接口设备IFD类型获取请求,则将自身保存的IFD类型信息发送给所述系统;如果所述请求码是设备单元获取请求,则将自身保存的设备单元发送给所述系统;如果所述请求码是特征描述获取请求,则将自身保存的特征描述信息发送给所述系统;如果所述请求码是协议类型获取请求,则将自身保存的当前协议类型信息发送给所述系统;如果所述请求码是ATR字符串获取请求,则将自身保存的ATR字符串发送给所述系统。
【文档编号】G06F13/10GK104484292SQ201410840549
【公开日】2015年4月1日 申请日期:2014年12月30日 优先权日:2014年12月30日
【发明者】陆舟, 于华章 申请人:飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1