蓝牙适配器及其通信方法_4

文档序号:8945481阅读:来源:国知局
5]本实施例提供一种蓝牙适配器的通信方法,本实施例中的蓝牙适配器用于与上位机和蓝牙读卡器进行通信,本实施例中的蓝牙适配器与上位机采用CCID协议进行通信,与蓝牙读卡器采用蓝牙协议进行通信,如图6所示,所述方法具体包括:
[0176]步骤301、蓝牙适配器初始化,向上位机声明为CCID设备;
[0177]步骤302、蓝牙适配器判断是否接收到上位机下发的CCID指令,是则执行步骤303,否则重新执行步骤302 ;
[0178]步骤303、蓝牙适配器判断上位机下发的CCID指令的类型,若为搜索指令则执行步骤304,若为连接指令则执行步骤305,否则执行步骤306 ;
[0179]本实施例中,搜索指令和连接指令通过CCID协议的扩展通道下发。
[0180]步骤304、蓝牙适配器搜索蓝牙读卡器,若搜索到则向上位机返回蓝牙读卡器的设备信息,返回步骤302,若未搜索到则向上位机返回错误码,返回步骤302 ;
[0181]本实施例中,蓝牙适配器搜索蓝牙读卡器可采用实施例1中提供的具体方法,实施例I中提供的具体方法在此不再重复描述;
[0182]本实施例中,蓝牙适配器向上位机返回的蓝牙读卡器的设备信息为蓝牙读卡器的设备名称,或者为蓝牙读卡器的设备名称和MAC地址;
[0183]当蓝牙适配器向上位机返回的蓝牙读卡器的设备信息为蓝牙读卡器的设备名称时,在蓝牙适配器获取到蓝牙读卡器的设备名称后还包括将蓝牙读卡器的设备名称和MAC地址对应存储。
[0184]步骤305、蓝牙适配器从连接指令中解析得到蓝牙读卡器的设备信息,根据蓝牙读卡器的设备信息与对应蓝牙读卡器建立连接,向上位机返回连接结果,返回步骤302 ;
[0185]本实施例中,连接指令中包含的蓝牙读卡器的设备信息为蓝牙读卡器的设备名称,或者为蓝牙读卡器的设备名称和MAC地址;
[0186]当连接指令中包含的蓝牙读卡器的设备信息为蓝牙读卡器的设备名称和MAC地址时,蓝牙适配器根据蓝牙读卡器的MAC地址与蓝牙读卡器建立连接;
[0187]当连接指令中包含的蓝牙读卡器的设备信息为蓝牙读卡器的设备名称时,蓝牙适配器从蓝牙适配器内存储的信息中查找与蓝牙读卡器的设备名称对应的MAC地址,根据查找到的MAC地址与蓝牙读卡器建立连接;
[0188]本实施例中,蓝牙适配器与蓝牙读卡器建立连接可采用实施例1中提供的具体方法,实施例1中提供的具体方法在此不再重复描述。
[0189]步骤306、蓝牙适配器将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送蓝牙协议数据;
[0190]本实施例中,步骤306的具体实现方法可与实施例1中步骤103的具体实现方法相同,在此不再赘述。
[0191]步骤307、蓝牙适配器等待蓝牙读卡器的应答,若接收到蓝牙读卡器返回的应答则将蓝牙读卡器返回的应答转换为CCID协议数据,向上位机返回CCID协议数据,返回步骤302,若接收超时则向上位机返回错误码,返回步骤302。
[0192]本实施例中,步骤307的具体实现方法可与实施例1中步骤104至106的具体实现方法相同,在此不再赘述。
[0193]本实施例中,步骤304中还可以包括,若上位机下发的CCID指令的类型为断开连接指令,则蓝牙适配器向蓝牙读卡器发送断开连接请求,向上位机返回应答,返回步骤302 ;具体地,断开连接指令通过CCID协议的扩展通道下发。
[0194]本实施例中,所述方法还包括:当蓝牙适配器接收到与蓝牙适配器建立连接的蓝牙读卡器发送的插拔卡消息时,向上位机发送提示信息;
[0195]具体地,插拔卡消息包括插卡消息和拔卡消息,插卡消息具体为0x50 03,拔卡消息具体为0x50 02 ;
[0196]本实施例中,蓝牙适配器与蓝牙读卡器建立连接之后,当蓝牙读卡器检测到有卡片插入时,发送插卡消息给蓝牙适配器;当蓝牙读卡器检测到卡片拔出时,发送拔卡消息给蓝牙适配器;当蓝牙适配器接收到插卡消息或拔卡消息时产生内部中断,进入内部中断处理流程;
[0197]优选地,内部中断处理流程包括:检查当前模式,若当前模式为USB轮询模式则向上位机发送相应提示信息,退出内部中断处理流程;若当前模式为等待蓝牙应答模式则直接退出内部中断处理流程;所述相应提示信息可以为包含插拔卡消息的提示信息等。
[0198]相应的,步骤302中蓝牙适配器判断是否接收到上位机下发的CCID指令之前,还包括:蓝牙适配器设置当前模式为USB轮询模式;所述307中蓝牙适配器等待蓝牙读卡器的应答时还包括:蓝牙适配器设置当前模式为等待蓝牙应答模式。
[0199]实施例4
[0200]本实施例提供一种蓝牙适配器,所述蓝牙适配器用于与上位机和蓝牙读卡器进行通信,具体采用CCID协议与上位机进行通信,采用蓝牙协议与蓝牙读卡器进行通信,如图7所示,所述蓝牙适配器具体包括:
[0201]初始化模块401,用于初始化所述蓝牙适配器,向上位机声明所述蓝牙适配器为CCID设备;
[0202]指令接收模块402,用于接收上位机下发的CCID指令;
[0203]指令发送模块403,用于当指令接收模块402接收到上位机下发的CCID指令时,将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
[0204]应答接收模块404,用于接收蓝牙读卡器的应答,以及在接收超时时向上位机返回错误码;
[0205]应答返回模块405,用于当所述应答接收模块404接收到蓝牙读卡器的应答时,将蓝牙读卡器的应答转换为CCID协议数据,向上位机返回所述CCID协议数据;
[0206]事件检查模块406,用于在接收到蓝牙读卡器发送的卡插拔消息时向上位机发送提不?目息。
[0207]本实施例中,指令发送模块403可以具体用于:对上位机下发的CCID指令添加蓝牙协议头得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
[0208]或者,指令发送模块403具体用于:判断上位机下发的CCID指令的长度是否超过最大传输单元,若未超过则对上位机下发的CCID指令添加蓝牙协议头,得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;若超过则按照最大传输单元对上位机下发的CCID指令分包,依次对每个指令包添加蓝牙协议头,得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
[0209]或者,指令发送模块403具体用于:计算上位机下发的CCID指令的CRC校验位,对上位机下发的CCID指令添加蓝牙协议头和CRC校验位得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
[0210]或者,指令发送模块403具体用于:判断上位机下发的CCID指令的长度是否超过最大传输单元,若未超过则计算上位机下发的CCID指令的CRC校验位,对上位机下发的CCID指令添加蓝牙协议头和CRC校验位得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;若超过则按照最大传输单元对上位机下发的CCID指令分包,计算各指令包的CRC校验位,依次对每个指令包添加蓝牙协议头和CRC校验位,得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据。
[0211 ] 本实施例中,应答返回模块405可以具体用于:当应答接收模块404接收到蓝牙读卡器的应答时,获取应答接收模块404接收到的应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答接收模块404接收到的应答的长度是否合法,若不合法则向上位机返回错误码,若合法则获取应答中的有效数据,将有效数据作为CCID协议数据返回给上位机;
[0212]或者,应答返回模块405具体用于:当应答接收模块404接收到蓝牙读卡器的应答时,获取应答接收模块404接收到的应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答接收模块404接收到的应答的长度是否合法,若不合法则向上位机返回错误码,若合法则获取应答中的有效数据和CRC校验位,根据CRC校验位对有效数据进行CRC校验,若校验未通过则向上位机返回错误码,若校验通过则将有效数据作为CCID协议数据返回给上位机。
[0213]本实施例中,蓝牙适配器还可以包括:
[0214]搜索模块,用于搜索蓝牙读卡器;
[0215]连接模块,用于与蓝牙读卡器建立连接;
[0216]提示模块,用于提示蓝牙适配器与蓝牙读卡器的连接结果;
[0217]进一步地,本实施例中,蓝牙适配器还可以包括检查模块,用于检查是否有已存储的蓝牙读卡器的设备信息,以及在检查到有已存储的蓝牙读卡器的设备信息时获取已存储的蓝牙读卡器的设备信息;
[0218]相应地,搜索模块具体用于在检查模块检查到没有已存储的蓝牙读卡器的设备信息时,搜索蓝牙读卡器;连接模块具体用于在检查模块获取到已存储的蓝牙读卡器的设备信息时,与检查模块获取到的设备信息对应的蓝牙读卡器建立连接,以及在搜索模块搜索到蓝牙读卡器时,与搜索模块搜索到的蓝牙读卡器建立连接;
[0219]更进一步地,连接模块还用于在蓝牙适配器与蓝牙读卡器建立建立之后存储蓝牙读卡器的设备信息。
[0220]或者,蓝牙适配器还包括:
[0221]指令类型判断模块,用于当指令接收模块402判断接收到上位机下发的CCID指令时,判断上位机下发的CCID指令的类型;
[0222]搜索模块,用于当所述指令类型判断模块判断上位机下发的CCID指令为连接指令时,搜索蓝牙读卡器;
[0223]连接模块,用于与搜索模块搜索到的蓝牙读卡器建立连接;
[0224]指令发送模块403具体用于:当所述指令类型判断模块判断上位机下发的CCID指令不为连接指令时,将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
[0225]应答返回模块405还用于:向上位机返回所述蓝牙适配器与蓝牙读卡器的连接结果;
[0226]进一步地,蓝牙适配器还包括检查模块,用于当指令类型判断模块判断上位机下发的CCID指令为连接指令时,检查是否有已存储的蓝牙读卡器的设备信息,以及在检查到有已存储的蓝牙读卡器的设备信息时获取已存储的蓝牙读卡器的设备信息;相应地,搜索模块具体用于:当所述检查模块检查到没有已存储的蓝牙读卡器的设备信息时,搜索蓝牙读卡器;连接模块具体用于:当检查模块获取到已存储的蓝牙读卡器的设备信息时,与检查模块获取到的设备信息对应的蓝牙读卡器建立连接,当搜索模块搜索到蓝牙读卡器时,与搜索模块搜索到的蓝牙读卡器建立连接;
[0227]蓝牙适配器还可以包括断开连接模块,用于当指令类型判断模块判断上位机下发的CCID指令为断开连接指令时,向与蓝牙适配器连接的蓝牙读卡器发送断开连接请求,向上位机返回断开连接指令应答;
[0228]更进一步地,连接模块还用于在蓝牙适配器与蓝牙读卡器建立建立之后存储蓝牙读卡器的设备信息。
[0229]或者,蓝牙适配器还包括:
[0230]指令类型判断模块,用于当指令接收模块402判断接收到CCID指令时,判断上位机下发的CCID指令的类型;
[0231]搜索模块,用于当指令类型判断模块判断上位机下发的CCID指令为搜索指令时,搜索蓝牙读卡器;
[0232]返回模块,用于向上位机返回搜索模块搜索到的蓝牙读卡器的设备信息;
[0233]获取模块,用于当指令类型判断模块判断上位机下发的CCID指令为连接指令时,从连接指令中获取蓝牙读卡器的设备信息;
[0234]连接模块,用于与获取模块获取到的设备信息对应的蓝牙读卡器建立连接;
[0235]进一步地,指令发送模块403具体用于:当指令类型判断模块判断上位机下发的CCID指令不为搜索指令和连接指令时,将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;相应地应答返回模块405还用于:向上位机返回蓝牙适配器与蓝牙读卡器的连接结果;
[0236]蓝牙适配器还可以包括断开连接模块,用于当指令类型判断模块判断上位机下发的CCID指令为断开连接指令时,向与蓝牙适配器连接的蓝牙读卡器发送断开连接请求,向上位机返回断开连接指令应答;
[0237]更进一步地:
[0238]返回模块具体用于向上位机返回搜索模块搜索到的蓝牙读卡器的设备名称和MAC地址;相应地,获取模块具体用于当指令类型判断模块判断上位机下发的CCID指令为连接指令时,从连接指令中获取蓝牙读卡器的MAC地址;连接模块具体用于根据获取模块获取到的蓝牙读卡器的MAC地址与蓝牙读卡器建立连接;
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1