CN105162498B - 蓝牙适配器及其通信方法 - Google Patents
蓝牙适配器及其通信方法 Download PDFInfo
- Publication number
- CN105162498B CN105162498B CN201510628156.9A CN201510628156A CN105162498B CN 105162498 B CN105162498 B CN 105162498B CN 201510628156 A CN201510628156 A CN 201510628156A CN 105162498 B CN105162498 B CN 105162498B
- Authority
- CN
- China
- Prior art keywords
- bluetooth
- card reader
- response
- host computer
- adapter
- 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.)
- Expired - Fee Related
Links
Landscapes
- Mobile Radio Communication Systems (AREA)
Abstract
本发明公开了一种蓝牙适配器及其通信方法,属于蓝牙通信领域。所述方法包括蓝牙适配器初始化,向上位机声明为CCID设备,接收上位机下发的CCID指令,将所述CCID指令转换为蓝牙协议数据后发送给蓝牙读卡器,接收蓝牙读卡器返回的应答,将蓝牙读卡器返回的应答转换为CCID协议数据后返回给上位机;并且在接收到蓝牙读卡器发送的卡插拔消息时向上位机发送提示信息。所述蓝牙适配器包括初始化模块、指令接收模块、指令发送模块、应答接收模块、应答发送模块和事件检查模块。本发明的有益效果在于无需在终端上安装蓝牙驱动,使用方便,而且能够避免蓝牙驱动不稳定带来的问题。
Description
技术领域
本发明涉及蓝牙通信领域,尤其涉及一种蓝牙适配器及其通信方法。
背景技术
蓝牙(Bluetooth)是一种无线技术标准,使用2.4—2.485GHz的ISM波段的UHF无线电波,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换。现有技术中,终端可以通过CCID接口采用CCID协议与读卡器进行通信,但是要实现不具备蓝牙功能的终端与蓝牙读卡器之间的通信,就需要使用蓝牙适配器,而不具备蓝牙功能的终端又不能使用CCID协议与蓝牙适配器直接通信,需要在不具备蓝牙功能的终端上安装蓝牙驱动,对于用户来说,使用起来极为不方便,且蓝牙驱动的稳定性不好,影响用户体验。
发明内容
本发明的目的是克服现有技术的缺陷,提供一种蓝牙适配器及其通信方法。
本发明方法是通过下述技术方案实现的:
一方面本发明提供一种蓝牙适配器的通信方法,所述方法包括:
步骤S1、蓝牙适配器初始化,向上位机声明为CCID设备;
步骤S2、所述蓝牙适配器判断是否接收到上位机下发的CCID指令,是则执行步骤S3,否则重新执行步骤S2;
步骤S3、所述蓝牙适配器将上位机下发的CCID指令转换为蓝牙协议数据,发送所述蓝牙协议数据给蓝牙读卡器;
步骤S4、所述蓝牙适配器等待蓝牙读卡器的应答,若接收到蓝牙读卡器返回的应答则将蓝牙读卡器返回的应答转换为CCID协议数据,向上位机发送所述CCID协议数据,返回步骤S2,若接收超时则向上位机返回错误码,返回步骤S2;
所述方法还包括:当所述蓝牙适配器接收到蓝牙读卡器发送的卡插拔消息时向上位机发送提示信息。
进一步地,所述步骤S3具体包括:
步骤a1、所述蓝牙适配器对上位机下发的CCID指令添加蓝牙协议头得到蓝牙协议数据;
步骤a2、所述蓝牙适配器向蓝牙读卡器发送所述蓝牙协议数据;
更进一步地,所述步骤S3还包括:
步骤a0、所述蓝牙适配器判断上位机下发的CCID指令的长度是否超过最大传输单元,若未超过则执行所述步骤a1,若超过则根据最大传输单元对上位机下发的CCID指令分包,依次对每个指令数据包添加蓝牙协议头得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据。
或者,进一步地,所述步骤S3具体包括:
步骤b1、所述蓝牙适配器计算上位机下发的CCID指令的CRC校验位,对上位机下发的CCID指令添加蓝牙协议头和所述CRC校验位,得到蓝牙协议数据;
步骤b2、所述蓝牙适配器向蓝牙读卡器发送所述蓝牙协议数据;
更进一步地,所述步骤S3还包括:
步骤b0、所述蓝牙适配器判断上位机下发的CCID指令的长度是否超过最大传输单元,若未超过则执行所述步骤b1,若超过则根据最大传输单元对上位机下发的CCID指令分包,分别计算每个指令数据包的CRC校验位,依次对每个指令数据包添加蓝牙协议头和CRC校验位得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据。
进一步地,所述步骤S4具体包括:
步骤c1、所述蓝牙适配器等待接收蓝牙读卡器返回的应答,若接收到则执行步骤c2,若接收超时则向上位机返回错误码,返回步骤S2;
步骤c2、所述蓝牙适配器获取应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答的长度是否合法,若合法则执行步骤c3,若不合法则向上位机返回错误码,返回步骤S2;
步骤c3、所述蓝牙适配器获取应答中的有效数据和CRC校验位,根据CRC校验位对有效数据进行CRC校验,若校验通过则将有效数据返回给上位机,返回步骤S2,若校验未通过则向上位机返回错误码,返回步骤S2。
或者,进一步地,所述步骤S4具体包括:
步骤d1、所述蓝牙适配器等待接收蓝牙读卡器返回的应答,若接收到则执行步骤d2,若接收超时则向上位机返回错误码,返回步骤S2;
步骤d2、所述蓝牙适配器获取应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答的长度是否合法,若合法则执行步骤d3,若不合法则向上位机返回错误码,返回步骤S2;
步骤d3、所述蓝牙适配器获取应答中的有效数据,将有效数据返回给上位机,返回步骤S2。
另一方面,本发明提供一种蓝牙适配器,具体包括:
初始化模块,用于初始化所述蓝牙适配器,向上位机声明所述蓝牙适配器为CCID设备;
指令接收模块,用于接收上位机下发的CCID指令;
指令发送模块,用于当指令接收模块接收到上位机下发的CCID指令时,将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
应答接收模块,用于接收蓝牙读卡器的应答,以及在接收超时时向上位机返回错误码;
应答发送模块,用于当所述应答接收模块接收到蓝牙读卡器的应答时,将蓝牙读卡器的应答转换为CCID协议数据,向上位机返回所述CCID协议数据;
事件检查模块,用于在接收到蓝牙读卡器发送的卡插拔消息时向上位机发送提示信息。
进一步地,所述指令发送模块具体用于:对上位机下发的CCID指令添加蓝牙协议头得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
更进一步地,所述指令发送模块具体用于:判断上位机下发的CCID指令的长度是否超过最大传输单元,若未超过则对上位机下发的CCID指令添加蓝牙协议头得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;若超过则按照最大传输单元对上位机下发的CCID指令分包,依次对每个指令包添加蓝牙协议头,得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据。
或者,进一步地,所述指令发送模块具体用于:计算上位机下发的CCID指令的CRC校验位,对上位机下发的CCID指令添加蓝牙协议头和CRC校验位得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数;
更进一步地,所述指令发送模块具体用于:判断上位机下发的CCID指令的长度是否超过最大传输单元,若未超过则计算上位机下发的CCID指令的CRC校验位,对上位机下发的CCID指令添加蓝牙协议头和CRC校验位得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;若超过则按照最大传输单元对上位机下发的CCID指令分包,计算各指令包的CRC校验位,依次对每个指令包添加蓝牙协议头和CRC校验位,得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据。
进一步地,所述应答发送模块具体用于:当所述应答接收模块接收到蓝牙读卡器的应答时,获取应答接收模块接收到的应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答接收模块接收到的应答的长度是否合法,若不合法则向上位机返回错误码,若合法则获取所述应答中的有效数据和CRC校验位,根据CRC校验位对有效数据进行CRC校验,若校验未通过则向上位机返回错误码,若校验通过则将有效数据作为CCID协议数据返回给上位机。
或者,进一步地,所述应答发送模块具体用于:当所述应答接收模块接收到蓝牙读卡器的应答时,获取应答接收模块接收到的应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答接收模块接收到的应答的长度是否合法,若不合法则向上位机返回错误码,若合法则获取应答中的有效数据,将有效数据作为CCID协议数据返回给上位机。
本发明的有益效果在于:通过本发明提供的蓝牙适配器可以实现不具备蓝牙功能的终端与蓝牙读卡器之间的通信,通信过程中终端可以采用CCID协议与蓝牙适配器进行通信,无需在终端上安装蓝牙驱动,可以提高使用的方便性,避免蓝牙驱动不稳定带来的问题。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1提供的一种蓝牙适配器的通信方法的流程图;
图2为本发明实施例1中提供的蓝牙适配器与蓝牙读卡器建立连接的具体方法流程图;
图3为本发明实施例1中提供的蓝牙适配器与蓝牙读卡器建立连接的另一具体方法流程图;
图4为本发明实施例1中提供的蓝牙适配器搜索蓝牙读卡器的具体流程图;
图5为本发明实施例2提供的一种蓝牙适配器的通信方法的流程图;
图6为本发明实施例3提供的一种蓝牙适配器的通信方法的流程图;
图7为本发明实施例4提供的一种蓝牙适配器的结构方框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本实施例提供一种蓝牙适配器的通信方法,本实施例中的蓝牙适配器用于与上位机和蓝牙读卡器进行通信,本实施例中的蓝牙适配器与上位机采用CCID协议进行通信,与蓝牙读卡器采用蓝牙协议进行通信,如图1所示,所述方法具体包括:
步骤101、蓝牙适配器初始化,向上位机声明为CCID设备,搜索蓝牙读卡器,与蓝牙读卡器建立连接,提示连接结果;
本实施例中,蓝牙适配器搜索蓝牙读卡器之前,还可以包括:蓝牙适配器检查是否有已存储的蓝牙读卡器的设备信息,若有则获取已存储的蓝牙读卡器的设备信息,根据获取到的设备信息与蓝牙读卡器建立连接,提示连接结果;若没有则搜索蓝牙读卡器,与搜索到的蓝牙读卡器建立连接,提示连接结果;相应地,当蓝牙适配器与蓝牙读卡器建立连接以后还包括:蓝牙适配器存储蓝牙读卡器的设备信息。
本实施例中,如图2所示,蓝牙适配器搜索蓝牙读卡器可以具体包括:
步骤1-1、蓝牙适配器发送搜索指令;
步骤1-2、蓝牙适配器等待蓝牙设备应答,若接收到蓝牙设备的应答则执行步骤1-3,若接收超时则执行步骤1-4;
步骤1-3、蓝牙适配器从蓝牙设备的应答中获取蓝牙设备的MAC地址,返回步骤1-2;
例如,本实施例中,蓝牙设备的应答为0x 04 02 0F 01 EB 6A 1A 52 DE 8C 0102 04 04 24 61 6D E5(小端存储方式),其中第5-10个字节为蓝牙设备的MAC地址,蓝牙设备的MAC地址具体为0x8C DE 52 1A 6A EB。
步骤1-4、蓝牙适配器判断是否有获取到的MAC地址,是则执行步骤1-5,否则未搜索到蓝牙读卡器;
步骤1-5、蓝牙适配器向MAC地址对应的蓝牙设备发送获取设备名称请求,接收蓝牙设备的应答,获取蓝牙设备应答中的蓝牙设备的设备名称,将蓝牙设备的设备名称与蓝牙设备的MAC地址对应存储;
例如,MAC地址为0x8C DE 52 1A 6A EB,蓝牙适配器向MAC地址对应的蓝牙设备发送的获取设备名称请求为0x01 19 04 0A EB 6A 1A 52 DE 8C 01 00 D38C;蓝牙设备的应答为0x 04 07 FF 00 EB 6A 1A 52 DE 8C 46 54 5F 5F 38 43 44 45 35 32 31 41 3641 45 42 00 00 00 00...(省略部分为228个字节的0x00),其中第11至第26个字节为蓝牙设备的设备名称,表示蓝牙设备的设备名称为FT_8CDE521A6AEB。
步骤1-6、蓝牙适配器判断获取到的设备名称中是否有满足预设条件的,若有则满足预设条件的设备名称对应的蓝牙设备为蓝牙读卡器,若没有则未搜索到蓝牙读卡器。
本实施例中,预设条件为与预设名称相同或包含预设字段;
例如,本实施例中预设条件为包含预设字段FT,如上所述获取到的设备名称为FT_8CDE521A6AEB,包含预设字段FT,满足预设条件,该设备名称对应的蓝牙设备具体为蓝牙读卡器。
优选地,若有多个设备名称满足预设条件的蓝牙设备,则选择其一进行连接,例如选择最先搜索到的)。
或者,本实施例中,蓝牙适配器搜索蓝牙读卡器具体包括:
步骤1-1'、蓝牙适配器发送搜索指令;
步骤1-2'、蓝牙适配器等待蓝牙设备应答,若接收到蓝牙设备的应答则执行步骤1-3',若接收超时则执行步骤1-4';
步骤1-3'、蓝牙适配器从蓝牙设备的应答中获取蓝牙设备的设备信息,返回步骤1-2';
步骤1-4'、蓝牙适配器判断是否有获取到的设备信息,是则执行步骤1-5',否则未搜索到蓝牙读卡器;
步骤1-5'、蓝牙适配器判断获取到的设备信息中是否有满足预设条件的,若有则满足预设条件的设备信息对应的蓝牙设备为蓝牙读卡器,若没有则未搜索到蓝牙读卡器。
本实施例中,蓝牙适配器从蓝牙设备的应答中获取到的蓝牙设备的设备信息包括蓝牙设备的MAC地址和蓝牙设备的设备名称;具体地,蓝牙适配器读取蓝牙设备的应答的第6至11个字节,得到蓝牙设备的MAC地址,读取蓝牙设备的应答的第13个字节得到蓝牙设备的设备名称的长度,根据设备名称的长度从蓝牙设备的应答的第14个字节开始读取蓝牙设备的设备名称;
例如,蓝牙设备的应答为0x 04 E2 1A 02 00 EB 6A 1A 52 DE 8C 00 10 46 545F 5F 38 43 44 45 35 32 31 41 36 41 45 42(小端存储方式),蓝牙适配器读取蓝牙设备的应答的第6至11个字节,得到蓝牙设备的MAC地址为0x8C DE 52 1A 6A EB,读取蓝牙设备的应答的第13个字节得到蓝牙设备的设备名称的长度为16个字节,从第14个字节开始读取长度为16个字节的数据,得到蓝牙设备的设备名称为0x 42 45 41 36 41 31 32 35 4544 43 38 5F 5F 54 46,表示蓝牙设备的设备名称为FT_8CDE521A6AEB。
本实施例中,如图3所示,蓝牙适配器与蓝牙读卡器建立连接可以具体包括:
步骤2-1、蓝牙适配器向蓝牙读卡器发送建立ACL信道连接请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则执行步骤2-2,若接收超时则连接失败;
步骤2-2、蓝牙适配器根据蓝牙读卡器的应答判断是否成功建立ACL信道连接,是则执行步骤2-3,否则连接失败;
具体地,蓝牙适配器判断蓝牙读卡器的应答中的状态位(第4个字节)是否为0x00,是则ACL信道连接成功,否则ACL信道连接不成功。
步骤2-3、蓝牙适配器从蓝牙读卡器的应答中获取ACL连接句柄,向蓝牙读卡器发送建立CO信道连接请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则执行步骤2-4,若接收超时则连接失败;
具体地,蓝牙适配器读取蓝牙读卡器的应答的第5-6个字节,得到ACL连接句柄;例如,蓝牙读卡器的应答为0x 04 03 0B 00 33 00 5F 21 A3 60 10 00 01 00 (小端存储方式),则蓝牙读卡器ACL连接句柄为0x 00 33。
步骤2-4、蓝牙适配器根据蓝牙读卡器的应答判断是否成功建立CO信道连接,是则执行步骤2-5,否则连接失败;
具体地,蓝牙适配器读取蓝牙读卡器的应答中的结果字段(Result),判断Result是否为第一预设值,是则连接成功,否则连接失败;优选地,第一预设值为0x00。
步骤2-5、蓝牙适配器从蓝牙读卡器的应答中获取信道ID;
具体地,蓝牙读卡器读取蓝牙读卡器的应答中的Source CID得到信道ID。
步骤2-6、蓝牙适配器向蓝牙读卡器发送配置信道参数请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则执行步骤2-7,若接收超时则连接失败;
具体地,配置信道参数请求中包含的需要配置的参数包括:MTU(MaximumTransmission Unit,最大传输单元)、Flush_TimeOut和QoS。
步骤2-7、蓝牙适配器根据蓝牙读卡器的应答判断信道参数是否配置成功,是则执行步骤2-8,否则连接失败;
步骤2-7中蓝牙适配器判断信道参数配置不成功时还可以返回执行步骤2-6;
进一步地,步骤2-7中蓝牙适配器判断信道参数配置不成功返回执行步骤2-6之前还可以包括:判断配置失败次数是否超过预设次数,是则连接失败,否则返回步骤2-6;
具体地,蓝牙适配器根据蓝牙读卡器的应答中的结果字段(Result)判断信道参数是否配置成功,若Result为第二预设值,则信道参数配置成功,若Result不为第二预设值,则信道参数配置失败;优选地,第二预设值为0x00 00。
步骤2-8、蓝牙适配器根据蓝牙读卡器的应答判断是否需要调整信道参数,若需要则根据蓝牙读卡器的应答调整信道参数,连接成功,若不需要则连接成功。
具体地,蓝牙适配器根据蓝牙读卡器的应答中的调整参数字段(Options)判断是否需要调整信道参数,若Options为空则不需要调整信道参数,若Options不为空则需要调整信道参数;
本实施例中,当Options不为空时,Options包含至少一个以下格式的数据:参数标识+参数值长度+参数值,蓝牙适配器根据参数标识判断需要调整的信道参数,将其调整为对应的参数值;例如,参数标识为0x01,表示需要调整的信道参数为MTU。
或者,本实施例中,如图4所示,蓝牙适配器与蓝牙读卡器建立连接具体包括:
步骤3-1、蓝牙适配器向蓝牙读卡器发送连接请求,等待蓝牙读卡器应答,若接收到蓝牙读卡器的应答则执行步骤3-2,若接收超时则连接失败;
步骤3-2、蓝牙适配器根据蓝牙读卡器的应答判断是否连接成功,是则执行步骤3-3,否则连接失败;
具体地,蓝牙适配器读取蓝牙读卡器的应答中的第4个字节得到状态字段,判断状态字段是否为第三预设值,是则连接成功,否则连接失败;优选地,第三预设值为0x00。
步骤3-3、蓝牙适配器从读卡器的应答中获取连接句柄,向蓝牙读卡器发送主服务UUID(Universally Unique Identifier,通用唯一识别码),等待蓝牙读卡器应答,若接收到蓝牙读卡器的应答则执行步骤3-4,若接收超时则连接失败;
具体地,蓝牙适配器读取蓝牙读卡器的应答第5至第6字节得到连接句柄。
步骤3-4、蓝牙适配器根据蓝牙读卡器的应答判断服务是否匹配,是则执行步骤3-5,否则连接失败;
具体地,蓝牙适配器通过检查蓝牙设备的应答中的句柄信息字段(Handle Info)是否为空来判断服务是否匹配,若Handle Info为空则服务不匹配,若Handle Info不为空则服务匹配。
本实施例中,蓝牙读卡器接收到蓝牙适配器发送的主服务UUID后,判断是否与自身的主服务UUID相同,若相同则服务匹配,若不相同则服务不匹配,根据判断结果向蓝牙适配器返回相应应答。
步骤3-5、蓝牙适配器向蓝牙读卡器发送获取特性值句柄请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则获取蓝牙读卡器的应答中的特性值句柄,连接成功,若接收超时则连接失败。
本实施例中,蓝牙适配器向蓝牙读卡器发送的获取特性值句柄请求中包含具有写特性的UUID,蓝牙读卡器接收到获取特性值句柄请求后,获取请求中的具有写特性的UUID,查找该具有写特性的UUID对应的特性值句柄,返回给蓝牙适配器。
本实施例中,提示连接结果可以为向上位机发送连接结果,也可以通过蓝牙适配器上的显示装置或语音播放装置进行提示,例如通过指示灯的不同显示方式(颜色、闪烁次数等)表示连接成功和连接失败。
步骤102、蓝牙适配器判断是否接收到上位机下发的CCID指令,是则执行步骤103,否则重新执行步骤102;
步骤103、蓝牙适配器将上位机下发的CCID指令转换为蓝牙协议数据,发送蓝牙协议数据给蓝牙读卡器;
本实施例中,步骤103可以具体包括:
步骤4-1、蓝牙适配器计算CCID指令的CRC校验位,对上位机下发的CCID指令添加蓝牙协议头和CRC校验位,得到蓝牙协议数据;
步骤4-2、蓝牙适配器向蓝牙读卡器发送蓝牙协议数据;
进一步地,步骤4-1之前还可以包括:
步骤4-0、蓝牙适配器判断上位机下发的CCID指令的长度是否超过MTU,若未超过则执行步骤4-1,若超过则根据MTU对上位机下发的CCID指令分包,分别计算分包得到的每个指令数据包的CRC校验位,依次对每个指令数据包添加蓝牙协议头和CRC校验位,得到蓝牙协议数据,向蓝牙读卡器发送蓝牙协议数据;
具体地,蓝牙协议头长度为13个字节,第1个字节为事件类型标志;第2个字节至第5个字节为HCI(Host Controller Interface,主机控制接口)层蓝牙协议头,其中,第2至第3个字节填充的是第一运算结果,第4个字节和第5个字节为HCI层有效载荷;第6个字节至第9个字节为L2CAP层(逻辑链路与适配协议层)蓝牙协议头,其中,第6个字节和第7个字节为L2CAP层有效载荷,第8个字节和第9个字节为信道ID;第10个字节为第二运算结果;第11个字节为本地特定的UIH(unnumbered information with header)值;第12个和第13个字节为CCID指令数据的长度;
如上所述的事件类型标志具体为0x02;第一运算结果具体为将PB标志(Packet_Boundary Flag)的值左移12位得到的结果、BC标志(Broadcast Flag)的值左移14位的结果和ACL连接句柄三者进行或运算得到的运算结果,其中,PB标志的值具体为0x00 00,BC标志的值具体为0x00 00;HCI层有效载荷具体为HCI层蓝牙协议头之后的数据的长度;L2CAP层有效载荷具体为L2CAP层蓝牙协议头之后的数据的长度;第二运算结果具体为将0x01、outgoing的值左移1位的结果和DLCI(Data Link Connection Identifier,数据链路连接标识)左移2位的结果三者进行或运算得到的结果,即第二运算结果=(0x01<<0)|(outgoing<<1)|(DLCI<<2)其中,DLCI具体为将Server_channel的值左移1位的结果和outgoing的值与0x01进行按位异或运算的结果二者进行或运算得到的运算结果,即DLCI=(server_channel<<1)|(outgoing^1),上述outgoing的值为0x01,Server_channel的值为第四预设值;本地特定的UIH值具体为0xEF;CCID指令数据的长度具体为所述第13个字节之后的数据的长度;
例如,上位机下发的CCID指令为0x 6F 05 00 00 00 00 0A 00 00 00 00 84 0000 08,ACL连接句柄为0x00 33,信道ID为0x00 40,第四预设值为0x06,上位机下发的CCID指令的长度未超过MTU,因此对上位机下发的CCID指令添加蓝牙协议头和CRC校验位得到的蓝牙协议数据为0x 02 33 00 18 00 14 00 40 00 33 EF 1E 00 6F 05 00 00 00 00 0A00 00 00 00 84 00 00 08 4F(小端存储方式);
或者,步骤103具体包括:
步骤5-1、蓝牙适配器对上位机下发的CCID指令添加蓝牙协议头,得到蓝牙协议数据;
步骤5-2、蓝牙适配器向蓝牙读卡器发送蓝牙协议数据;
进一步地,步骤5-1之前还可以包括:
步骤5-0、蓝牙适配器判断上位机下发的CCID指令的长度是否超过MTU,若未超过则执行步骤5-1,若超过则根据MTU对上位机下发的CCID指令分包,依次对每个指令数据包添加蓝牙协议头,得到蓝牙协议数据,向蓝牙读卡器发送蓝牙协议数据;
具体地,蓝牙协议头长度为12个字节,第1个字节为事件类型标志;第2个字节至第5个字节为HCI(Host Controller Interface,主机控制接口)层蓝牙协议头,其中,第2至3个字节填充的是第三运算结果,第4个字节和第5个字节为HCI层有效载荷;第6个字节至第9个字节为L2CAP层(逻辑链路与适配协议层)蓝牙协议头,第6个字节和第7个字节为L2CAP层有效载荷,第8个字节和第9个字节为信道ID;第10个字节为ATT_WRITE_REQUEST;第11个字节和第12个字节填充特性值句柄;
如上所述的事件类型标志具体为0x02;第三运算结果具体为将PB标志(Packet_Boundary Flag)的值左移12位得到的结果、BC标志(Broadcast Flag)的值左移14位的结果和连接句柄三者进行或运算得到的运算结果,其中,PB标志的值具体为0x00 00,BC标志的值具体为0x00 00;HCI层有效载荷具体为第HCI层蓝牙协议头之后的数据的长度;L2CAP层有效载荷具体为L2CAP层蓝牙协议头之后的数据的长度;信道ID为固定值0x00 04,ATT_WRITE_REQUEST为固定值0x12;
例如,上位机下发的CCID指令为0x 6F 05 00 00 00 00 0A 00 00 00 00 84 0000 08,连接句柄为0x00 33,特性值句柄为0x00 25,上位机下发的CCID指令的长度未超过MTU,因此对上位机下发的CCID指令添加蓝牙协议头和CRC校验位得到的蓝牙协议数据为0x02 33 00 16 00 12 00 40 00 12 25 00 6F 05 00 00 00 00 0A 00 00 00 00 84 00 0008(小端存储方式)。
步骤104、蓝牙适配器等待蓝牙读卡器的应答,若接收到蓝牙读卡器返回的应答则执行步骤105,若接收超时则执行步骤106;
步骤105、蓝牙适配器将蓝牙读卡器返回的应答转换为CCID协议数据,向上位机返回CCID协议数据,返回步骤102;
步骤106、蓝牙适配器向上位机返回错误码,返回步骤102。
本实施例中,步骤104至步骤106可以具体包括:
步骤6-1、蓝牙适配器等待接收蓝牙读卡器返回的应答,若接收到则执行步骤6-2,若接收超时则向上位机返回错误码,返回步骤102;
步骤6-2、蓝牙适配器获取应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答的长度是否合法,若合法则执行步骤6-3,若不合法则向上位机返回错误码,返回步骤102;
例如,蓝牙适配器接收到的蓝牙读卡器返回的应答为:0x02 33 20 1D 00 19 0040 00 33 FF 28 00 80 0A 00 00 00 00 0B 00 00 00 8E FB FC E6 8F 01 BD 4C 900089,其中第4至第5个字节表示HCI层有效载荷为29个字节,第6至第7个字节表示L2CAP层有效载荷为25个字节,应答的长度合法。
步骤6-3、蓝牙适配器获取应答中的有效数据和CRC校验位,根据CRC校验位对有效数据进行CRC校验,若校验通过则执行步骤6-4,若校验未通过则向上位机返回错误码,返回步骤102;
如上所述的应答,第14至第33个字节为有效数据,第34个字节为CRC校验位,有效数据具体为0x 80 0A 00 00 00 00 0B 00 00 00 8E FB FC E6 8F 01BD 4C 90 00,校验位为0x89。
步骤6-4、蓝牙适配器将获取到的有效数据作为CCID协议数据返回给上位机,返回步骤102。
进一步地,当蓝牙读卡器返回的应答中包含多个数据包时,蓝牙适配器对每一个数据包均进行步骤6-2和步骤6-3的操作,得到每一个数据包中的有效数据,将全部的有效数据作为CCID协议数据返回给上位机。
或者,步骤104至步骤106具体包括:
步骤7-1、蓝牙适配器等待接收蓝牙读卡器返回的应答,若接收到则执行步骤7-2,若接收超时则向上位机返回错误码,返回步骤102;
步骤7-2、蓝牙适配器获取应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答的长度是否合法,若合法则执行步骤7-3,若不合法则向上位机返回错误码,返回步骤102;
例如,蓝牙适配器接收到的蓝牙读卡器返回的应答为:0x 02 33 20 1B 00 17 0040 00 12 00 25 80 0A 00 00 00 00 0B 00 00 00 8E FB FC E6 8F 01 BD 4C 90 00,其中第4至第5个字节表示HCI层有效载荷为27个字节,第6至第7个字节表示L2CAP层有效载荷为23个字节,应答的长度合法。
步骤7-3、蓝牙适配器获取蓝牙读卡器返回的应答中的有效数据;
步骤7-4、蓝牙适配器将获取到的有效数据作为CCID协议数据返回给上位机,返回步骤102。
如上所述的应答,第13-第32个字节为有效数据,有效数据具体为0x 80 0A 00 0000 00 0B 00 00 00 8E FB FC E6 8F 01 BD 4C 90 00。
进一步地,当蓝牙读卡器返回的应答中包含多个数据包时,蓝牙适配器对每一个数据包均进行步骤7-2和步骤7-3的操作,得到每一个数据包中的有效数据,将全部的有效数据作为CCID协议数据返回给上位机。
本实施例中,步骤102中蓝牙适配器判断接收到上位机下发的CCID指令后还可以包括判断上位机下发的CCID指令的类型,若上位机下发的CCID指令的类型为断开连接指令,则蓝牙适配器向蓝牙读卡器发送断开连接请求,向上位机返回应答,重新执行步骤102,否则执行步骤103;具体地,断开连接指令可通过CCID协议的扩展通道下发。
本实施例中,所述方法还包括:当蓝牙适配器接收到与蓝牙适配器建立连接的蓝牙读卡器发送的插拔卡消息时,向上位机发送提示信息;
具体地,插拔卡消息包括插卡消息和拔卡消息,插卡消息具体为0x50 03,拔卡消息具体为0x50 02;
本实施例中,蓝牙适配器与蓝牙读卡器建立连接之后,当蓝牙读卡器检测到有卡片插入时,发送插卡消息给蓝牙适配器;当蓝牙读卡器检测到卡片拔出时,发送拔卡消息给蓝牙适配器;当蓝牙适配器接收到插卡消息或拔卡消息时产生内部中断,进入内部中断处理流程;
优选地,内部中断处理流程包括:检查当前模式,若当前模式为USB轮询模式则向上位机发送相应提示信息,退出内部中断处理流程;若当前模式为等待蓝牙应答模式则直接退出内部中断处理流程;所述相应提示信息可以为包含插拔卡消息的提示信息等。
相应的,步骤102中蓝牙适配器判断是否接收到上位机下发的CCID指令之前,还包括:蓝牙适配器设置当前模式为USB轮询模式;所述104中蓝牙适配器等待蓝牙读卡器的应答时还包括:蓝牙适配器设置当前模式为等待蓝牙应答模式。
实施例2
本实施例提供一种蓝牙适配器的通信方法,本实施例中的蓝牙适配器用于与上位机和蓝牙读卡器进行通信,本实施例中的蓝牙适配器与上位机采用CCID协议进行通信,与蓝牙读卡器采用蓝牙协议进行通信,如图5所示,所述方法具体包括:
步骤201、蓝牙适配器初始化,向上位机声明为CCID设备;
步骤202、蓝牙适配器判断是否接收到上位机下发的CCID指令,是则执行步骤203,否则重新执行步骤202;
步骤203、蓝牙适配器判断上位机下发的CCID指令的类型,若为连接指令则执行步骤204,否则执行步骤205;
本实施例中,连接指令通过CCID协议的扩展通道下发。
步骤204、蓝牙适配器与蓝牙读卡器建立连接,向上位机返回连接结果,返回步骤202;
本实施例中,步骤204可以具体包括:蓝牙适配器从连接指令中获取蓝牙读卡器的设备信息,与获取到的设备信息对应的蓝牙读卡器建立连接;
进一步地,蓝牙读卡器的设备信息可以包括蓝牙读卡器的MAC地址和/或蓝牙读卡器的设备名称;当蓝牙读卡器的设备信息中包含蓝牙读卡器的MAC地址时,蓝牙适配器根据蓝牙读卡器的设备信息中的MAC地址与蓝牙读卡器进行通讯以建立连接,当蓝牙读卡器的设备信息中不包含蓝牙读卡器的MAC地址时,蓝牙适配器在蓝牙适配器的内部预先存储的信息中查找与蓝牙读卡器的设备信息中的设备名称对应的MAC地址,根据查找到的MAC地址与蓝牙读卡器进行通讯以建立连接;
或者,步骤203包括:蓝牙适配器判断上位机下发的CCID指令的类型,若为搜索连接指令则执行步骤204,否则执行步骤205;
本实施例中,搜索连接指令通过CCID协议的扩展通道下发。
步骤204包括:蓝牙适配器搜索蓝牙读卡器,与搜索到的蓝牙读卡器建立连接;
进一步地,蓝牙适配器搜索蓝牙读卡器之前,还可以包括:蓝牙适配器检查是否有已存储的蓝牙读卡器的设备信息,若有则获取已存储的蓝牙读卡器的设备信息,根据获取到的设备信息与蓝牙读卡器建立连接,向上位机返回连接结果;若没有则搜索蓝牙读卡器,与搜索到的蓝牙读卡器建立连接,向上位机返回连接结果;
本实施例中,蓝牙适配器搜索蓝牙读卡器、与蓝牙读卡器建立连接可采用实施例1中提供的具体方法,实施例1中提供的具体方法在此不再重复描述。
步骤205、蓝牙适配器将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送蓝牙协议数据;
本实施例中,步骤205的具体实现方法可与实施例1中步骤103的具体实现方法相同,在此不再赘述。
步骤206、蓝牙适配器等待蓝牙读卡器的应答,若接收到蓝牙读卡器返回的应答则执行步骤207,若接收超时则执行步骤208;
步骤207、蓝牙适配器将蓝牙读卡器返回的应答转换为CCID协议数据,向上位机返回CCID协议数据,返回步骤202;
步骤208、蓝牙适配器向上位机返回错误码,返回步骤202。
本实施例中,步骤206至208的具体实现方法可与实施例1中步骤104至106的具体实现方法相同,在此不再赘述。
本实施例中,步骤203中还可以包括,若上位机下发的CCID指令的类型为断开连接指令,则蓝牙适配器向蓝牙读卡器发送断开连接请求,向上位机返回应答,重新执行步骤202;具体地,断开连接指令通过CCID协议的扩展通道下发。
本实施例中,所述方法还包括:当蓝牙适配器接收到与蓝牙适配器建立连接的蓝牙读卡器发送的插拔卡消息时,向上位机发送提示信息;
具体地,插拔卡消息包括插卡消息和拔卡消息,插卡消息具体为0x50 03,拔卡消息具体为0x50 02;
本实施例中,蓝牙适配器与蓝牙读卡器建立连接之后,当蓝牙读卡器检测到有卡片插入时,发送插卡消息给蓝牙适配器;当蓝牙读卡器检测到卡片拔出时,发送拔卡消息给蓝牙适配器;当蓝牙适配器接收到插卡消息或拔卡消息时产生内部中断,进入内部中断处理流程;
优选地,内部中断处理流程包括:检查当前模式,若当前模式为USB轮询模式则向上位机发送相应提示信息,退出内部中断处理流程;若当前模式为等待蓝牙应答模式则直接退出内部中断处理流程;所述相应提示信息可以为包含插拔卡消息的提示信息等。
相应的,步骤202中蓝牙适配器判断是否接收到上位机下发的CCID指令之前,还包括:蓝牙适配器设置当前模式为USB轮询模式;所述206中蓝牙适配器等待蓝牙读卡器的应答时还包括:蓝牙适配器设置当前模式为等待蓝牙应答模式。
实施例3
本实施例提供一种蓝牙适配器的通信方法,本实施例中的蓝牙适配器用于与上位机和蓝牙读卡器进行通信,本实施例中的蓝牙适配器与上位机采用CCID协议进行通信,与蓝牙读卡器采用蓝牙协议进行通信,如图6所示,所述方法具体包括:
步骤301、蓝牙适配器初始化,向上位机声明为CCID设备;
步骤302、蓝牙适配器判断是否接收到上位机下发的CCID指令,是则执行步骤303,否则重新执行步骤302;
步骤303、蓝牙适配器判断上位机下发的CCID指令的类型,若为搜索指令则执行步骤304,若为连接指令则执行步骤305,否则执行步骤306;
本实施例中,搜索指令和连接指令通过CCID协议的扩展通道下发。
步骤304、蓝牙适配器搜索蓝牙读卡器,若搜索到则向上位机返回蓝牙读卡器的设备信息,返回步骤302,若未搜索到则向上位机返回错误码,返回步骤302;
本实施例中,蓝牙适配器搜索蓝牙读卡器可采用实施例1中提供的具体方法,实施例1中提供的具体方法在此不再重复描述;
本实施例中,蓝牙适配器向上位机返回的蓝牙读卡器的设备信息为蓝牙读卡器的设备名称,或者为蓝牙读卡器的设备名称和MAC地址;
当蓝牙适配器向上位机返回的蓝牙读卡器的设备信息为蓝牙读卡器的设备名称时,在蓝牙适配器获取到蓝牙读卡器的设备名称后还包括将蓝牙读卡器的设备名称和MAC地址对应存储。
步骤305、蓝牙适配器从连接指令中解析得到蓝牙读卡器的设备信息,根据蓝牙读卡器的设备信息与对应蓝牙读卡器建立连接,向上位机返回连接结果,返回步骤302;
本实施例中,连接指令中包含的蓝牙读卡器的设备信息为蓝牙读卡器的设备名称,或者为蓝牙读卡器的设备名称和MAC地址;
当连接指令中包含的蓝牙读卡器的设备信息为蓝牙读卡器的设备名称和MAC地址时,蓝牙适配器根据蓝牙读卡器的MAC地址与蓝牙读卡器建立连接;
当连接指令中包含的蓝牙读卡器的设备信息为蓝牙读卡器的设备名称时,蓝牙适配器从蓝牙适配器内存储的信息中查找与蓝牙读卡器的设备名称对应的MAC地址,根据查找到的MAC地址与蓝牙读卡器建立连接;
本实施例中,蓝牙适配器与蓝牙读卡器建立连接可采用实施例1中提供的具体方法,实施例1中提供的具体方法在此不再重复描述。
步骤306、蓝牙适配器将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送蓝牙协议数据;
本实施例中,步骤306的具体实现方法可与实施例1中步骤103的具体实现方法相同,在此不再赘述。
步骤307、蓝牙适配器等待蓝牙读卡器的应答,若接收到蓝牙读卡器返回的应答则将蓝牙读卡器返回的应答转换为CCID协议数据,向上位机返回CCID协议数据,返回步骤302,若接收超时则向上位机返回错误码,返回步骤302。
本实施例中,步骤307的具体实现方法可与实施例1中步骤104至106的具体实现方法相同,在此不再赘述。
本实施例中,步骤304中还可以包括,若上位机下发的CCID指令的类型为断开连接指令,则蓝牙适配器向蓝牙读卡器发送断开连接请求,向上位机返回应答,返回步骤302;具体地,断开连接指令通过CCID协议的扩展通道下发。
本实施例中,所述方法还包括:当蓝牙适配器接收到与蓝牙适配器建立连接的蓝牙读卡器发送的插拔卡消息时,向上位机发送提示信息;
具体地,插拔卡消息包括插卡消息和拔卡消息,插卡消息具体为0x50 03,拔卡消息具体为0x50 02;
本实施例中,蓝牙适配器与蓝牙读卡器建立连接之后,当蓝牙读卡器检测到有卡片插入时,发送插卡消息给蓝牙适配器;当蓝牙读卡器检测到卡片拔出时,发送拔卡消息给蓝牙适配器;当蓝牙适配器接收到插卡消息或拔卡消息时产生内部中断,进入内部中断处理流程;
优选地,内部中断处理流程包括:检查当前模式,若当前模式为USB轮询模式则向上位机发送相应提示信息,退出内部中断处理流程;若当前模式为等待蓝牙应答模式则直接退出内部中断处理流程;所述相应提示信息可以为包含插拔卡消息的提示信息等。
相应的,步骤302中蓝牙适配器判断是否接收到上位机下发的CCID指令之前,还包括:蓝牙适配器设置当前模式为USB轮询模式;所述307中蓝牙适配器等待蓝牙读卡器的应答时还包括:蓝牙适配器设置当前模式为等待蓝牙应答模式。
实施例4
本实施例提供一种蓝牙适配器,所述蓝牙适配器用于与上位机和蓝牙读卡器进行通信,具体采用CCID协议与上位机进行通信,采用蓝牙协议与蓝牙读卡器进行通信,如图7所示,所述蓝牙适配器具体包括:
初始化模块401,用于初始化所述蓝牙适配器,向上位机声明所述蓝牙适配器为CCID设备;
指令接收模块402,用于接收上位机下发的CCID指令;
指令发送模块403,用于当指令接收模块402接收到上位机下发的CCID指令时,将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
应答接收模块404,用于接收蓝牙读卡器的应答,以及在接收超时时向上位机返回错误码;
应答返回模块405,用于当所述应答接收模块404接收到蓝牙读卡器的应答时,将蓝牙读卡器的应答转换为CCID协议数据,向上位机返回所述CCID协议数据;
事件检查模块406,用于在接收到蓝牙读卡器发送的卡插拔消息时向上位机发送提示信息。
本实施例中,指令发送模块403可以具体用于:对上位机下发的CCID指令添加蓝牙协议头得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
或者,指令发送模块403具体用于:判断上位机下发的CCID指令的长度是否超过最大传输单元,若未超过则对上位机下发的CCID指令添加蓝牙协议头,得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;若超过则按照最大传输单元对上位机下发的CCID指令分包,依次对每个指令包添加蓝牙协议头,得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
或者,指令发送模块403具体用于:计算上位机下发的CCID指令的CRC校验位,对上位机下发的CCID指令添加蓝牙协议头和CRC校验位得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
或者,指令发送模块403具体用于:判断上位机下发的CCID指令的长度是否超过最大传输单元,若未超过则计算上位机下发的CCID指令的CRC校验位,对上位机下发的CCID指令添加蓝牙协议头和CRC校验位得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;若超过则按照最大传输单元对上位机下发的CCID指令分包,计算各指令包的CRC校验位,依次对每个指令包添加蓝牙协议头和CRC校验位,得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据。
本实施例中,应答返回模块405可以具体用于:当应答接收模块404接收到蓝牙读卡器的应答时,获取应答接收模块404接收到的应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答接收模块404接收到的应答的长度是否合法,若不合法则向上位机返回错误码,若合法则获取应答中的有效数据,将有效数据作为CCID协议数据返回给上位机;
或者,应答返回模块405具体用于:当应答接收模块404接收到蓝牙读卡器的应答时,获取应答接收模块404接收到的应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答接收模块404接收到的应答的长度是否合法,若不合法则向上位机返回错误码,若合法则获取应答中的有效数据和CRC校验位,根据CRC校验位对有效数据进行CRC校验,若校验未通过则向上位机返回错误码,若校验通过则将有效数据作为CCID协议数据返回给上位机。
本实施例中,蓝牙适配器还可以包括:
搜索模块,用于搜索蓝牙读卡器;
连接模块,用于与蓝牙读卡器建立连接;
提示模块,用于提示蓝牙适配器与蓝牙读卡器的连接结果;
进一步地,本实施例中,蓝牙适配器还可以包括检查模块,用于检查是否有已存储的蓝牙读卡器的设备信息,以及在检查到有已存储的蓝牙读卡器的设备信息时获取已存储的蓝牙读卡器的设备信息;
相应地,搜索模块具体用于在检查模块检查到没有已存储的蓝牙读卡器的设备信息时,搜索蓝牙读卡器;连接模块具体用于在检查模块获取到已存储的蓝牙读卡器的设备信息时,与检查模块获取到的设备信息对应的蓝牙读卡器建立连接,以及在搜索模块搜索到蓝牙读卡器时,与搜索模块搜索到的蓝牙读卡器建立连接;
更进一步地,连接模块还用于在蓝牙适配器与蓝牙读卡器建立建立之后存储蓝牙读卡器的设备信息。
或者,蓝牙适配器还包括:
指令类型判断模块,用于当指令接收模块402判断接收到上位机下发的CCID指令时,判断上位机下发的CCID指令的类型;
搜索模块,用于当所述指令类型判断模块判断上位机下发的CCID指令为搜索连接指令时,搜索蓝牙读卡器;
连接模块,用于与搜索模块搜索到的蓝牙读卡器建立连接;
指令发送模块403具体用于:当所述指令类型判断模块判断上位机下发的CCID指令不为搜索连接指令时,将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
应答返回模块405还用于:向上位机返回所述蓝牙适配器与蓝牙读卡器的连接结果;
进一步地,蓝牙适配器还包括检查模块,用于当指令类型判断模块判断上位机下发的CCID指令为搜索连接指令时,检查是否有已存储的蓝牙读卡器的设备信息,以及在检查到有已存储的蓝牙读卡器的设备信息时获取已存储的蓝牙读卡器的设备信息;相应地,搜索模块具体用于:当所述检查模块检查到没有已存储的蓝牙读卡器的设备信息时,搜索蓝牙读卡器;连接模块具体用于:当检查模块获取到已存储的蓝牙读卡器的设备信息时,与检查模块获取到的设备信息对应的蓝牙读卡器建立连接,当搜索模块搜索到蓝牙读卡器时,与搜索模块搜索到的蓝牙读卡器建立连接;
蓝牙适配器还可以包括断开连接模块,用于当指令类型判断模块判断上位机下发的CCID指令为断开连接指令时,向与蓝牙适配器连接的蓝牙读卡器发送断开连接请求,向上位机返回断开连接指令应答;
更进一步地,连接模块还用于在蓝牙适配器与蓝牙读卡器建立建立之后存储蓝牙读卡器的设备信息。
或者,蓝牙适配器还包括:
指令类型判断模块,用于当指令接收模块402判断接收到CCID指令时,判断上位机下发的CCID指令的类型;
搜索模块,用于当指令类型判断模块判断上位机下发的CCID指令为搜索指令时,搜索蓝牙读卡器;
返回模块,用于向上位机返回搜索模块搜索到的蓝牙读卡器的设备信息;
获取模块,用于当指令类型判断模块判断上位机下发的CCID指令为连接指令时,从连接指令中获取蓝牙读卡器的设备信息;
连接模块,用于与获取模块获取到的设备信息对应的蓝牙读卡器建立连接;
进一步地,指令发送模块403具体用于:当指令类型判断模块判断上位机下发的CCID指令不为搜索指令和连接指令时,将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;相应地应答返回模块405还用于:向上位机返回蓝牙适配器与蓝牙读卡器的连接结果;
蓝牙适配器还可以包括断开连接模块,用于当指令类型判断模块判断上位机下发的CCID指令为断开连接指令时,向与蓝牙适配器连接的蓝牙读卡器发送断开连接请求,向上位机返回断开连接指令应答;
更进一步地:
返回模块具体用于向上位机返回搜索模块搜索到的蓝牙读卡器的设备名称和MAC地址;相应地,获取模块具体用于当指令类型判断模块判断上位机下发的CCID指令为连接指令时,从连接指令中获取蓝牙读卡器的MAC地址;连接模块具体用于根据获取模块获取到的蓝牙读卡器的MAC地址与蓝牙读卡器建立连接;
或者,返回模块具体用于将搜索模块搜索到的蓝牙读卡器的设备名称和MAC地址对应存储,向上位机返回搜索模块搜索到的蓝牙读卡器的设备名称;相应地,获取模块具体用于当指令类型判断模块判断接收到的CCID指令为连接指令时,从连接指令中获取蓝牙读卡器的设备名称,根据获取到的设备名称从返回模块中查找蓝牙读卡器的MAC地址;连接模块具体用于根据获取模块查找到的蓝牙读卡器的MAC地址与蓝牙读卡器建立连接。
本实施例中,搜索模块具体用于:发送搜索指令,等待并接收蓝牙设备的应答,根据接收到的蓝牙设备的应答获取蓝牙设备的MAC地址和设备名称,判断获取到的设备名称中是否有满足预设条件的,是则满足预设条件的设备名称对应的蓝牙设备为蓝牙读卡器,否则未搜索到蓝牙读卡器;其中,预设条件具体为与预设名称相同或包含预设字段。
本实施例中,上述连接模块可以具体包括:
建立ACL信道连接单元,用于向蓝牙读卡器发送建立ACL信道连接请求,等待蓝牙读卡器的应答,若接收超时则连接失败;若接收到蓝牙读卡器的应答则根据蓝牙读卡器的应答判断是否成功建立ACL信道连接,若成功则从蓝牙读卡器的应答中获取ACL连接句柄,若失败则连接失败;
请求连接单元,用于向蓝牙读卡器发送建立CO信道连接请求,等待蓝牙读卡器的应答,若接收超时则连接失败;若接收到蓝牙读卡器的应答则根据蓝牙读卡器的应答判断是否成功建立CO信道连接,若成功则从蓝牙读卡器的应答中获取信道ID,若失败则连接失败;
信道参数配置单元,用于向蓝牙读卡器发送配置信道参数请求,等待蓝牙读卡器的应答,若接收超时则连接失败;若接收到蓝牙读卡器的应答则根据蓝牙读卡器的应答判断信道参数是否配置成功,若配置失败则连接失败或重新向蓝牙读卡器发送配置信道参数请求,若配置成功则根据蓝牙读卡器的应答判断是否需要调整信道参数,若需要调整则根据蓝牙读卡器的应答调整信道参数,连接成功,若不需要则连接成功;
或者,连接模块具体包括:
请求连接单元,用于向蓝牙读卡器发送连接请求,等待蓝牙读卡器的应答,若接收超时则连接失败;若接收到蓝牙读卡器的应答则根据蓝牙读卡器的应答判断是否连接成功,是则从蓝牙读卡器的应答中获取连接句柄,否则连接失败;
服务匹配单元,用于向蓝牙读卡器发送主服务通用唯一标识码,等待蓝牙读卡器的应答,若接收超时则连接失败;若接收到蓝牙读卡器的应答则根据蓝牙读卡器的应答判断服务是否匹配,若不匹配则连接失败;
特性值句柄获取单元,用于当所述服务匹配单元判断服务匹配时,向蓝牙读卡器发送获取特性值句柄请求,等待蓝牙读卡器的应答,若接收超时则连接失败,若接收到蓝牙读卡器的应答则从蓝牙读卡器的应答中获取特性值句柄,连接成功。
本实施例中,应答接收模块404还用于在接收蓝牙读卡器的应答之前设置蓝牙适配器的当前模式为等待蓝牙应答模式,以及接收与所述蓝牙适配器建立连接的蓝牙读卡器发送的卡插拔消息;相应地,指令接收模块402还用于在判断是否接收到上位机下发的CCID指令之前设置蓝牙适配器的当前模式为USB轮询模式;蓝牙适配器还包括中断处理模块,用于当应答接收模块404接收到卡插拔消息时产生内部中断,进入内部中断处理流程,检查蓝牙适配器的当前模式,若当前模式为USB轮询模式则向上位机发送相应提示信息,退出内部中断处理流程,若当前模式为等待蓝牙应答模式则直接退出内部中断处理流程。
以上所述的实施例只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
Claims (38)
1.一种蓝牙适配器的通信方法,其特征在于,包括:
步骤S1、蓝牙适配器初始化,向上位机声明为CCID设备;
步骤S2、所述蓝牙适配器判断是否接收到上位机下发的CCID指令,是则执行步骤S3,否则重新执行步骤S2;
步骤S3、所述蓝牙适配器将上位机下发的CCID指令转换为蓝牙协议数据,发送所述蓝牙协议数据给蓝牙读卡器;
步骤S4、所述蓝牙适配器等待蓝牙读卡器的应答,若接收到蓝牙读卡器返回的应答则将蓝牙读卡器返回的应答转换为CCID协议数据,向上位机发送所述CCID协议数据,返回步骤S2,若接收超时则向上位机返回错误码,返回步骤S2;
所述方法还包括:当所述蓝牙适配器接收到蓝牙读卡器发送的卡插拔消息时向上位机发送提示信息;
所述步骤S4具体包括:
步骤d1、所述蓝牙适配器等待接收蓝牙读卡器返回的应答,若接收到则执行步骤d2,若接收超时则向上位机返回错误码,返回步骤S2;
步骤d2、所述蓝牙适配器获取应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答的长度是否合法,若合法则执行步骤d3,若不合法则向上位机返回错误码,返回步骤S2;
步骤d3、所述蓝牙适配器获取应答中的有效数据,将有效数据作为CCID协议数据返回给上位机,返回步骤S2。
2.如权利要求1所述的方法,其特征在于,所述步骤S3具体包括:
步骤a1、所述蓝牙适配器对上位机下发的CCID指令添加蓝牙协议头得到蓝牙协议数据;
步骤a2、所述蓝牙适配器向蓝牙读卡器发送所述蓝牙协议数据。
3.如权利要求2所述的方法,其特征在于,所述步骤S3还包括:
步骤a0、所述蓝牙适配器判断上位机下发的CCID指令的长度是否超过最大传输单元,若未超过则执行所述步骤a1,若超过则根据最大传输单元对上位机下发的CCID指令分包,依次对每个指令数据包添加蓝牙协议头得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据。
4.如权利要求1所述的方法,其特征在于,所述步骤S3具体包括:
步骤b1、所述蓝牙适配器计算上位机下发的CCID指令的CRC校验位,对上位机下发的CCID指令添加蓝牙协议头和所述CRC校验位,得到蓝牙协议数据;
步骤b2、所述蓝牙适配器向蓝牙读卡器发送所述蓝牙协议数据。
5.如权利要求4所述的方法,其特征在于,所述步骤S3还包括:
步骤b0、所述蓝牙适配器判断上位机下发的CCID指令的长度是否超过最大传输单元,若未超过则执行所述步骤b1,若超过则根据最大传输单元对上位机下发的CCID指令分包,分别计算每个指令数据包的CRC校验位,依次对每个指令数据包添加蓝牙协议头和CRC校验位得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据。
6.如权利要求1所述的方法,其特征在于,所述步骤d3具体包括:所述蓝牙适配器获取应答中的有效数据和CRC校验位,根据CRC校验位对有效数据进行CRC校验,若校验通过则将有效数据作为CCID协议数据返回给上位机,返回步骤S2,若校验未通过则向上位机返回错误码,返回步骤S2。
7.如权利要求1所述的方法,其特征在于,所述步骤S1中,所述蓝牙适配器初始化之后,还包括:所述蓝牙适配器搜索蓝牙读卡器,与蓝牙读卡器建立连接,提示连接结果。
8.如权利要求7所述的方法,其特征在于,所述蓝牙适配器搜索蓝牙读卡器之前,还包括:所述蓝牙适配器检查是否有已存储的蓝牙读卡器的设备信息,若有则获取已存储的蓝牙读卡器的设备信息,与蓝牙读卡器建立连接,提示连接结果;若没有则执行所述搜索蓝牙读卡器。
9.如权利要求1所述的方法,其特征在于,所述步骤S2中,当所述蓝牙适配器判断接收到上位机下发的CCID指令时,还包括:所述蓝牙适配器判断上位机下发的CCID指令的类型,若上位机下发的CCID指令为搜索连接指令则搜索蓝牙读卡器,与蓝牙读卡器建立连接,向上位机返回连接结果,返回步骤S2;否则,执行步骤S3。
10.如权利要求9所述的方法,其特征在于,所述蓝牙适配器搜索蓝牙读卡器之前,还包括:所述蓝牙适配器检查是否有已存储的蓝牙读卡器的设备信息,若有则获取已存储的蓝牙读卡器的设备信息,与蓝牙读卡器建立连接,向上位机返回连接结果,返回步骤S2;若没有则执行所述搜索蓝牙读卡器。
11.如权利要求8或10所述的方法,其特征在于,与蓝牙读卡器建立连接之后还包括:所述蓝牙适配器存储蓝牙读卡器的设备信息。
12.如权利要求1所述的方法,其特征在于,所述步骤S2中,当所述蓝牙适配器判断接收到上位机下发的CCID指令时,还包括所述蓝牙适配器判断上位机下发的CCID指令的类型:
若上位机下发的CCID指令为搜索指令则搜索蓝牙读卡器,向上位机返回搜索到的蓝牙读卡器的设备信息,返回步骤S2;
若上位机下发的CCID指令为连接指令则从连接指令中获取蓝牙读卡器的设备信息,与蓝牙读卡器建立连接,向上位机返回连接结果,返回步骤S2;
否则,执行步骤S3。
13.如权利要求12所述的方法,其特征在于,所述蓝牙适配器向上位机返回搜索到的蓝牙读卡器的设备信息,具体包括:所述蓝牙适配器向上位机返回搜索到的蓝牙读卡器的设备名称和MAC地址;
所述蓝牙适配器从连接指令中获取蓝牙读卡器的设备信息,与蓝牙读卡器建立连接,具体包括:所述蓝牙适配器从连接指令中获取蓝牙读卡器的MAC地址,根据获取到的蓝牙读卡器的MAC地址与蓝牙读卡器建立连接。
14.如权利要求12所述的方法,其特征在于,所述蓝牙适配器向上位机返回搜索到的蓝牙读卡器的设备信息,具体包括:所述蓝牙适配器将蓝牙读卡器的设备名称和MAC地址对应存储,向上位机返回搜索到的蓝牙读卡器的设备名称;
所述蓝牙适配器从连接指令中获取蓝牙读卡器的设备信息,与蓝牙读卡器建立连接,具体包括:所述蓝牙适配器从连接指令中获取蓝牙读卡器的设备名称,根据获取到的蓝牙读卡器的设备名称查找蓝牙读卡器的MAC地址,根据查找到的蓝牙读卡器的MAC地址与蓝牙读卡器建立连接。
15.如权利要求7、9或12所述的方法,其特征在于,所述搜索蓝牙读卡器具体包括:
步骤1-1、所述蓝牙适配器发送搜索指令,等待并接收蓝牙设备的应答;
步骤1-2、所述蓝牙适配器根据接收到的蓝牙设备的应答获取蓝牙设备的MAC地址和设备名称;
步骤1-3、所述蓝牙适配器判断获取到的设备名称中是否有满足预设条件的,是则满足预设条件的设备名称对应的蓝牙设备为蓝牙读卡器,否则未搜索到蓝牙读卡器;
所述预设条件具体为与预设名称相同或包含预设字段。
16.如权利要求7、9或12所述的方法,其特征在于,所述与蓝牙读卡器建立连接,具体包括:
步骤2-1、所述蓝牙适配器向蓝牙读卡器发送建立ACL信道连接请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则执行步骤2-2,若接收超时则连接失败;
步骤2-2、所述蓝牙适配器根据蓝牙读卡器的应答判断是否成功建立ACL信道连接,是则从蓝牙读卡器的应答中获取ACL连接句柄,执行步骤2-3,否则连接失败;
步骤2-3、所述蓝牙适配器向蓝牙读卡器发送建立CO信道连接请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则执行步骤2-4,若接收超时则连接失败;
步骤2-4、所述蓝牙适配器根据蓝牙读卡器的应答判断是否成功建立CO信道连接,是则从蓝牙读卡器的应答中获取信道ID,执行步骤2-5,否则连接失败;
步骤2-5、所述蓝牙适配器向蓝牙读卡器发送配置信道参数请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则执行步骤2-6,若接收超时则连接失败;
步骤2-6、所述蓝牙适配器根据蓝牙读卡器的应答判断信道参数是否配置成功,是则执行步骤2-7,否则连接失败或返回步骤2-5;
步骤2-7、所述蓝牙适配器根据蓝牙读卡器的应答判断是否需要调整信道参数,若需要则根据蓝牙读卡器的应答调整信道参数,连接成功,若不需要则连接成功。
17.如权利要求7、9或12所述的方法,其特征在于,所述与蓝牙读卡器建立连接,具体包括:
步骤3-1、所述蓝牙适配器向蓝牙读卡器发送连接请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则执行步骤3-2,若接收超时则连接失败;
步骤3-2、所述蓝牙适配器根据蓝牙读卡器的应答判断是否连接成功,是则从蓝牙读卡器的应答中获取连接句柄,执行步骤3-3,否则连接失败;
步骤3-3、所述蓝牙适配器向蓝牙读卡器发送主服务通用唯一标识码,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则执行步骤3-4,若接收超时则连接失败;
步骤3-4、所述蓝牙适配器根据蓝牙读卡器的应答判断服务是否匹配,是则执行步骤3-5,否则连接失败;
步骤3-5、所述蓝牙适配器向蓝牙读卡器发送获取特性值句柄请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则从蓝牙读卡器的应答中获取特性值句柄,连接成功,若接收超时则连接失败。
18.如权利要求9或12所述的方法,其特征在于,所述蓝牙适配器判断上位机下发的CCID指令的类型时还包括:若所述CCID指令为断开连接指令,则所述蓝牙适配器向与所述蓝牙适配器连接的蓝牙读卡器发送断开连接请求,并向所述上位机返回断开连接指令应答,返回步骤S2。
19.如权利要求1所述的方法,其特征在于,所述步骤S2中所述蓝牙适配器判断是否接收到上位机下发的CCID指令之前,还包括:所述蓝牙适配器设置当前模式为USB轮询模式;所述步骤S4中所述蓝牙适配器等待蓝牙读卡器的应答时还包括:所述蓝牙适配器设置当前模式为等待蓝牙应答模式;
所述方法还包括:所述蓝牙适配器接收到与所述蓝牙适配器建立连接的蓝牙读卡器发送的卡插拔消息时产生内部中断,进入内部中断处理流程,检查所述蓝牙适配器的当前模式,若当前模式为USB轮询模式则向上位机发送相应提示信息,退出内部中断处理流程;若当前模式为等待蓝牙应答模式则直接退出内部中断处理流程。
20.一种蓝牙适配器,其特征在于,包括:
初始化模块,用于初始化所述蓝牙适配器,向上位机声明所述蓝牙适配器为CCID设备;
指令接收模块,用于接收上位机下发的CCID指令;
指令发送模块,用于当指令接收模块接收到上位机下发的CCID指令时,将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
应答接收模块,用于接收蓝牙读卡器的应答,以及在接收超时时向上位机返回错误码;
应答发送模块,用于当所述应答接收模块接收到蓝牙读卡器的应答时,将蓝牙读卡器的应答转换为CCID协议数据,向上位机返回所述CCID协议数据;
事件检查模块,用于在接收到蓝牙读卡器发送的卡插拔消息时向上位机发送提示信息;
所述应答发送模块具体用于:当所述应答接收模块接收到蓝牙读卡器的应答时,获取应答接收模块接收到的应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答接收模块接收到的应答的长度是否合法,若不合法则向上位机返回错误码,若合法则获取应答中的有效数据,将有效数据作为CCID协议数据返回给上位机。
21.如权利要求20所述的蓝牙适配器,其特征在于,所述指令发送模块具体用于:对上位机下发的CCID指令添加蓝牙协议头得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据。
22.如权利要求21所述的蓝牙适配器,其特征在于,所述指令发送模块具体用于:判断上位机下发的CCID指令的长度是否超过最大传输单元,若未超过则对上位机下发的CCID指令添加蓝牙协议头得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;若超过则按照最大传输单元对上位机下发的CCID指令分包,依次对每个指令包添加蓝牙协议头,得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据。
23.如权利要求20所述的蓝牙适配器,其特征在于,所述指令发送模块具体用于:计算上位机下发的CCID指令的CRC校验位,对上位机下发的CCID指令添加蓝牙协议头和CRC校验位得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据。
24.如权利要求23所述的蓝牙适配器,其特征在于,所述指令发送模块具体用于:判断上位机下发的CCID指令的长度是否超过最大传输单元,若未超过则计算上位机下发的CCID指令的CRC校验位,对上位机下发的CCID指令添加蓝牙协议头和CRC校验位得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;若超过则按照最大传输单元对上位机下发的CCID指令分包,计算各指令包的CRC校验位,依次对每个指令包添加蓝牙协议头和CRC校验位,得到蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据。
25.如权利要求20所述的蓝牙适配器,其特征在于,所述应答发送模块具体用于:当所述应答接收模块接收到蓝牙读卡器的应答时,获取应答接收模块接收到的应答中的HCI层有效载荷和L2CAP层有效载荷,根据获取到的HCI层有效载荷和L2CAP层有效载荷判断应答接收模块接收到的应答的长度是否合法,若不合法则向上位机返回错误码,若合法则获取所述应答中的有效数据和CRC校验位,根据CRC校验位对有效数据进行CRC校验,若校验未通过则向上位机返回错误码,若校验通过则将有效数据作为CCID协议数据返回给上位机。
26.如权利要求20所述的蓝牙适配器,其特征在于,还包括:
搜索模块,用于搜索蓝牙读卡器;
连接模块,用于与蓝牙读卡器建立连接;
提示模块,用于提示所述蓝牙适配器与蓝牙读卡器的连接结果。
27.如权利要求26所述的蓝牙适配器,其特征在于,还包括检查模块,用于检查是否有已存储的蓝牙读卡器的设备信息,以及在检查到有已存储的蓝牙读卡器的设备信息时获取已存储的蓝牙读卡器的设备信息;
所述搜索模块具体用于:当所述检查模块检查到没有已存储的蓝牙读卡器的设备信息时,搜索蓝牙读卡器;
所述连接模块具体用于:当所述检查模块获取到已存储的蓝牙读卡器的设备信息时,与所述检查模块获取到的设备信息对应的蓝牙读卡器建立连接,当所述搜索模块搜索到蓝牙读卡器时,与所述搜索模块搜索到的蓝牙读卡器建立连接。
28.如权利要求20所述的蓝牙适配器,其特征在于,还包括:
指令类型判断模块,用于当指令接收模块接收到上位机下发的CCID指令时,判断上位机下发的CCID指令的类型;
搜索模块,用于当所述指令类型判断模块判断上位机下发的CCID指令为搜索连接指令时,搜索蓝牙读卡器;
连接模块,用于与所述搜索模块搜索到的蓝牙读卡器建立连接;
所述指令发送模块具体用于:当所述指令类型判断模块判断上位机下发的CCID指令不为搜索连接指令时,将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
所述应答发送模块还用于:向上位机返回所述蓝牙适配器与蓝牙读卡器的连接结果。
29.如权利要求28所述的蓝牙适配器,其特征在于,还包括检查模块,用于当所述指令类型判断模块判断上位机下发的CCID指令为搜索连接指令时,检查是否有已存储的蓝牙读卡器的设备信息,以及在检查到有已存储的蓝牙读卡器的设备信息时获取已存储的蓝牙读卡器的设备信息;
所述搜索模块具体用于:当所述检查模块检查到没有已存储的蓝牙读卡器的设备信息时,搜索蓝牙读卡器;
所述连接模块具体用于:当所述检查模块获取到已存储的蓝牙读卡器的设备信息时,与所述检查模块获取到的设备信息对应的蓝牙读卡器建立连接,当所述搜索模块搜索到蓝牙读卡器时,与所述搜索模块搜索到的蓝牙读卡器建立连接。
30.如权利要求27或29所述的蓝牙适配器,其特征在于,所述连接模块还用于所述蓝牙适配器与蓝牙读卡器建立连接之后存储蓝牙读卡器的设备信息。
31.如权利要求20所述的蓝牙适配器,其特征在于,还包括:
指令类型判断模块,用于当指令接收模块接收到CCID指令时,判断上位机下发的CCID指令的类型;
搜索模块,用于当所述指令类型判断模块判断上位机下发的CCID指令为搜索指令时,搜索蓝牙读卡器;
返回模块,用于向上位机返回搜索模块搜索到的蓝牙读卡器的设备信息;
获取模块,用于当所述指令类型判断模块判断上位机下发的CCID指令为连接指令时,从连接指令中获取蓝牙读卡器的设备信息;
连接模块,用于与所述获取模块获取到的设备信息对应的蓝牙读卡器建立连接;
所述指令发送模块具体用于:当所述指令类型判断模块判断上位机下发的CCID指令不为搜索指令和连接指令时,将上位机下发的CCID指令转换为蓝牙协议数据,向蓝牙读卡器发送所述蓝牙协议数据;
所述应答发送模块还用于:向上位机返回所述蓝牙适配器与蓝牙读卡器的连接结果。
32.如权利要求31所述的蓝牙适配器,其特征在于,所述返回模块具体用于:向上位机返回搜索模块搜索到的蓝牙读卡器的设备名称和MAC地址;
所述获取模块具体用于:当所述指令类型判断模块判断上位机下发的CCID指令为连接指令时,从连接指令中获取蓝牙读卡器的MAC地址;
所述连接模块具体用于,根据所述获取模块获取到的蓝牙读卡器的MAC地址与蓝牙读卡器建立连接。
33.如权利要求31所述的蓝牙适配器,其特征在于,所述返回模块具体用于:将所述搜索模块搜索到的蓝牙读卡器的蓝牙读卡器的设备名称和MAC地址对应存储,向上位机返回所述搜索模块搜索到的蓝牙读卡器的设备名称;
所述获取模块具体用于:当所述指令类型判断模块判断上位机下发的CCID指令为连接指令时,从连接指令中获取蓝牙读卡器的设备名称,根据获取到的蓝牙读卡器的设备名称从所述返回模块中查找蓝牙读卡器的MAC地址;
所述连接模块具体用于,根据所述获取模块查找到的蓝牙读卡器的MAC地址与蓝牙读卡器建立连接。
34.如权利要求26、28或31所述的蓝牙适配器,其特征在于,所述搜索模块具体用于:发送搜索指令,等待并接收蓝牙设备的应答,根据接收到的蓝牙设备的应答获取蓝牙设备的MAC地址和设备名称,判断获取到的设备名称中是否有满足预设条件的,是则满足预设条件的设备名称对应的蓝牙设备为蓝牙读卡器,否则未搜索到蓝牙读卡器;所述预设条件具体为与预设名称相同或包含预设字段。
35.如权利要求26、28或31所述的蓝牙适配器,其特征在于,所述连接模块具体包括:
建立ACL信道连接单元,用于向蓝牙读卡器发送建立ACL信道连接请求,等待蓝牙读卡器的应答,若接收超时则连接失败;若接收到蓝牙读卡器的应答则根据蓝牙读卡器的应答判断是否成功建立ACL信道连接,若成功则从蓝牙读卡器的应答中获取ACL连接句柄,若失败则连接失败;
请求连接单元,用于向蓝牙读卡器发送建立CO信道连接请求,等待蓝牙读卡器的应答,若接收超时则连接失败;若接收到蓝牙读卡器的应答则根据蓝牙读卡器的应答判断是否成功建立CO信道连接,若成功则从蓝牙读卡器的应答中获取信道ID,若失败则连接失败;
信道参数配置单元,用于向蓝牙读卡器发送配置信道参数请求,等待蓝牙读卡器的应答,若接收超时则连接失败;若接收到蓝牙读卡器的应答则根据蓝牙读卡器的应答判断信道参数是否配置成功,若配置失败则连接失败或重新向蓝牙读卡器发送配置信道参数请求,若配置成功则根据蓝牙读卡器的应答判断是否需要调整信道参数,若需要调整则根据蓝牙读卡器的应答调整信道参数,连接成功,若不需要则连接成功。
36.如权利要求26、28或31所述的蓝牙适配器,其特征在于,所述连接模块具体包括:
请求连接单元,用于向蓝牙读卡器发送连接请求,等待蓝牙读卡器的应答,若接收超时则连接失败;若接收到蓝牙读卡器的应答则根据蓝牙读卡器的应答判断是否连接成功,是则从蓝牙读卡器的应答中获取连接句柄,否则连接失败;
服务匹配单元,用于向蓝牙读卡器发送主服务通用唯一标识码,等待读卡器的应答,若接收超时则连接失败;若接收到蓝牙读卡器的应答则根据蓝牙读卡器的应答判断服务是否匹配,若不匹配则连接失败;
特性值句柄获取单元,用于当所述服务匹配单元判断服务匹配时,向蓝牙读卡器发送获取特性值句柄请求,等待蓝牙读卡器的应答,若接收超时则连接失败,若接收到蓝牙读卡器的应答则从蓝牙读卡器的应答中获取特性值句柄,连接成功。
37.如权利要求28或31所述的蓝牙适配器,其特征在于,还包括断开连接模块,用于当所述指令类型判断模块判断接收到的CCID指令为断开连接指令时,向与所述蓝牙适配器连接的蓝牙读卡器发送断开连接请求,向所述上位机返回断开连接指令应答。
38.如权利要求20所述的蓝牙适配器,其特征在于,所述应答接收模块还用于:在接收蓝牙读卡器的应答之前设置蓝牙适配器的当前模式为等待蓝牙应答模式,以及接收与所述蓝牙适配器建立连接的蓝牙读卡器发送的卡插拔消息;
所述指令接收模块还用于:在接收上位机下发的CCID指令之前设置蓝牙适配器的当前模式为USB轮询模式;
所述蓝牙适配器还包括中断处理模块,用于当所述应答接收模块接收到卡插拔消息时产生内部中断,进入内部中断处理流程,检查所述蓝牙适配器的当前模式,若当前模式为USB轮询模式则向上位机发送相应提示信息,退出内部中断处理流程;若当前模式不为等待蓝牙应答模式则直接退出内部中断处理流程。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201510628156.9A CN105162498B (zh) | 2015-09-28 | 2015-09-28 | 蓝牙适配器及其通信方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201510628156.9A CN105162498B (zh) | 2015-09-28 | 2015-09-28 | 蓝牙适配器及其通信方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN105162498A CN105162498A (zh) | 2015-12-16 |
| CN105162498B true CN105162498B (zh) | 2018-09-25 |
Family
ID=54803275
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201510628156.9A Expired - Fee Related CN105162498B (zh) | 2015-09-28 | 2015-09-28 | 蓝牙适配器及其通信方法 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN105162498B (zh) |
Families Citing this family (9)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN106301488B (zh) * | 2016-09-29 | 2018-11-20 | 飞天诚信科技股份有限公司 | 一种蓝牙适配器及其工作方法 |
| CN107135476B (zh) * | 2017-06-27 | 2018-12-11 | 飞天诚信科技股份有限公司 | 一种蓝牙适配器及其工作方法 |
| CN109419533B (zh) * | 2017-08-28 | 2022-01-28 | 深圳市理邦精密仪器股份有限公司 | 监护仪及其界面切换方法、装置 |
| CN108738000A (zh) * | 2018-03-30 | 2018-11-02 | 晨星半导体股份有限公司 | 基于安卓(Android)系统的蓝牙适配方法及终端设备 |
| CN109246668A (zh) * | 2018-09-07 | 2019-01-18 | 国网江苏省电力有限公司苏州供电分公司 | 一种通信设备和采用其的一种变电站设备检测系统 |
| CN110336592B (zh) | 2019-06-28 | 2021-03-16 | 飞天诚信科技股份有限公司 | 适用蓝牙读卡器的数据传输方法、电子设备及存储介质 |
| CN111988065A (zh) * | 2020-08-25 | 2020-11-24 | 重庆百瑞互联电子技术有限公司 | 一种免驱动usb设备、方法、存储介质及设备 |
| CN113691431A (zh) * | 2021-07-29 | 2021-11-23 | 青岛海信日立空调系统有限公司 | 通讯网络系统 |
| CN118400119A (zh) * | 2024-02-02 | 2024-07-26 | 北京卫达信息技术有限公司 | 一种防御网络攻击的方法、装置及电子设备 |
Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2004010311A2 (en) * | 2002-07-18 | 2004-01-29 | Sun Microsystems, Inc. | Method and apparatus for zero-copy receive buffer management |
| CN1936917A (zh) * | 2006-10-23 | 2007-03-28 | 北京飞天诚信科技有限公司 | 一种主机与智能卡信息交互的方法和装置 |
| CN101634976A (zh) * | 2009-08-27 | 2010-01-27 | 中兴通讯股份有限公司 | 一种为计算机提供蓝牙功能的方法及终端 |
| CN201435745Y (zh) * | 2009-03-30 | 2010-03-31 | 深圳市金积嘉电子工业有限公司 | 多功能蓝牙耳机 |
| CN202870898U (zh) * | 2012-08-15 | 2013-04-10 | 天长市浩云电子科技有限公司 | 一种基于射频的商品信息识别系统 |
-
2015
- 2015-09-28 CN CN201510628156.9A patent/CN105162498B/zh not_active Expired - Fee Related
Patent Citations (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2004010311A2 (en) * | 2002-07-18 | 2004-01-29 | Sun Microsystems, Inc. | Method and apparatus for zero-copy receive buffer management |
| CN1936917A (zh) * | 2006-10-23 | 2007-03-28 | 北京飞天诚信科技有限公司 | 一种主机与智能卡信息交互的方法和装置 |
| CN201435745Y (zh) * | 2009-03-30 | 2010-03-31 | 深圳市金积嘉电子工业有限公司 | 多功能蓝牙耳机 |
| CN101634976A (zh) * | 2009-08-27 | 2010-01-27 | 中兴通讯股份有限公司 | 一种为计算机提供蓝牙功能的方法及终端 |
| CN202870898U (zh) * | 2012-08-15 | 2013-04-10 | 天长市浩云电子科技有限公司 | 一种基于射频的商品信息识别系统 |
Also Published As
| Publication number | Publication date |
|---|---|
| CN105162498A (zh) | 2015-12-16 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN105162498B (zh) | 蓝牙适配器及其通信方法 | |
| US11696207B2 (en) | Data transmission method, electronic device, and computer readable storage medium | |
| CN103327644B (zh) | 一种无线连接的方法及设备 | |
| CN108513283A (zh) | 一种配网方法、设备、终端、介质及计算机设备 | |
| US20140089513A1 (en) | Wireless communication apparatus and method | |
| CN111200811A (zh) | 一种tws耳机及其升级方法、装置及可读存储介质 | |
| US8761049B2 (en) | Communication device and method for controlling communication device | |
| KR20160044565A (ko) | 무선 환경에서의 이중 역할 처리를 위한 방법 및 시스템 | |
| WO2016058166A1 (zh) | 一种触发注册机协议交互的方法、接入点、站点 | |
| CN103442250A (zh) | 电视机调试系统和方法 | |
| CN102710629B (zh) | 网络连接方法和系统 | |
| JPWO2002056548A1 (ja) | データ伝送方法、データ伝送装置、記録媒体及びプログラム | |
| JP3095737B1 (ja) | 端末装置間の通信プロトコル | |
| CN101977244A (zh) | 一种控制方法、装置和系统 | |
| CN105933428A (zh) | 一种与苹果终端进行通讯的方法及设备 | |
| CN106301488B (zh) | 一种蓝牙适配器及其工作方法 | |
| US20090193139A1 (en) | Communication apparatus, communication system, communication method and program | |
| US20240048990A1 (en) | Bluetooth connection method and system, intelligent terminal, and computer storage medium | |
| US9219801B2 (en) | Implementing a protocol adaptation layer over an internet protocol | |
| JP3809437B2 (ja) | 移動通信システムのパラメータ変数交換方法。 | |
| CN107592607A (zh) | 一种蓝牙复合设备及其通信方法 | |
| TWI479932B (zh) | 訊號傳輸方法 | |
| JP2007034386A (ja) | ネットワークストレージアクセス用端末及びそれを用いた遠隔データ蓄積システム | |
| US20100260202A1 (en) | Communication Device, Communication System, Communication Method and Program | |
| CN104378333B (zh) | 调制解调器拨号方法及宽带设备 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| C06 | Publication | ||
| PB01 | Publication | ||
| C10 | Entry into substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant | ||
| CF01 | Termination of patent right due to non-payment of annual fee | ||
| CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180925 |