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

文档序号:8945481阅读:来源:国知局
条件的,若有则满足预设条件的设备名称对应的蓝牙设备为蓝牙读卡器,若没有则未搜索到蓝牙读卡器。
[0065]本实施例中,预设条件为与预设名称相同或包含预设字段;
[0066]例如,本实施例中预设条件为包含预设字段FT,如上所述获取到的设备名称为FT—8CDE521A6AEB,包含预设字段FT,满足预设条件,该设备名称对应的蓝牙设备具体为蓝牙读卡器。
[0067]优选地,若有多个设备名称满足预设条件的蓝牙设备,则选择其一进行连接,例如选择最先搜索到的)。
[0068]或者,本实施例中,蓝牙适配器搜索蓝牙读卡器具体包括:
[0069]步骤1-1’、蓝牙适配器发送搜索指令;
[0070]步骤1-2’、蓝牙适配器等待蓝牙设备应答,若接收到蓝牙设备的应答则执行步骤
1-3’,若接收超时则执行步骤1-4’ ;
[0071]步骤1-3’、蓝牙适配器从蓝牙设备的应答中获取蓝牙设备的设备信息,返回步骤1_2,;
[0072]步骤1-4’、蓝牙适配器判断是否有获取到的设备信息,是则执行步骤1-5’,否则未搜索到蓝牙读卡器;
[0073]步骤1-5’、蓝牙适配器判断获取到的设备信息中是否有满足预设条件的,若有则满足预设条件的设备信息对应的蓝牙设备为蓝牙读卡器,若没有则未搜索到蓝牙读卡器。
[0074]本实施例中,蓝牙适配器从蓝牙设备的应答中获取到的蓝牙设备的设备信息包括蓝牙设备的MAC地址和蓝牙设备的设备名称;具体地,蓝牙适配器读取蓝牙设备的应答的第6至11个字节,得到蓝牙设备的MAC地址,读取蓝牙设备的应答的第13个字节得到蓝牙设备的设备名称的长度,根据设备名称的长度从蓝牙设备的应答的第14个字节开始读取蓝牙设备的设备名称;
[0075]例如,蓝牙设备的应答为Ox 04 E2 IA 02 00 EB 6A IA 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 IA 6A EB,读取蓝牙设备的应答的第13个字节得到蓝牙设备的设备名称的长度为16个字节,从第14个字节开始读取长度为16个字节的数据,得到蓝牙设备的设备名称为Ox 42 45 41 36 41 31 3235 45 44 43 38 5F 5F 54 46,表示蓝牙设备的设备名称为FT—8CDE521A6AEB。
[0076]本实施例中,如图3所示,蓝牙适配器与蓝牙读卡器建立连接可以具体包括:
[0077]步骤2-1、蓝牙适配器向蓝牙读卡器发送建立ACL信道连接请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则执行步骤2-2,若接收超时则连接失败;
[0078]步骤2-2、蓝牙适配器根据蓝牙读卡器的应答判断是否成功建立ACL信道连接,是则执行步骤2-3,否则连接失败;
[0079]具体地,蓝牙适配器判断蓝牙读卡器的应答中的状态位(第4个字节)是否为0x00,是则ACL信道连接成功,否则ACL信道连接不成功。
[0080]步骤2-3、蓝牙适配器从蓝牙读卡器的应答中获取ACL连接句柄,向蓝牙读卡器发送建立CO信道连接请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则执行步骤2-4,若接收超时则连接失败;
[0081]具体地,蓝牙适配器读取蓝牙读卡器的应答的第5-6个字节,得到ACL连接句柄;例如,蓝牙读卡器的应答为Ox 04 03 OB 00 33 00 5F 21 A3 60 10 00 01 00 (小端存储方式),则蓝牙读卡器ACL连接句柄为Ox 00 33。
[0082]步骤2-4、蓝牙适配器根据蓝牙读卡器的应答判断是否成功建立CO信道连接,是则执行步骤2-5,否则连接失败;
[0083]具体地,蓝牙适配器读取蓝牙读卡器的应答中的结果字段(Result),判断Result是否为第一预设值,是则连接成功,否则连接失败;优选地,第一预设值为0x00。
[0084]步骤2-5、蓝牙适配器从蓝牙读卡器的应答中获取信道ID ;
[0085]具体地,蓝牙读卡器读取蓝牙读卡器的应答中的Source CID得到信道ID。
[0086]步骤2-6、蓝牙适配器向蓝牙读卡器发送配置信道参数请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则执行步骤2-7,若接收超时则连接失败;
[0087]具体地,配置信道参数请求中包含的需要配置的参数包括:MTU (MaximumTransmiss1n Unit,最大传输单元)、Flush_TimeOut 和 QoS0
[0088]步骤2-7、蓝牙适配器根据蓝牙读卡器的应答判断信道参数是否配置成功,是则执行步骤2-8,否则连接失败;
[0089]步骤2-7中蓝牙适配器判断信道参数配置不成功时还可以返回执行步骤2-6 ;
[0090]进一步地,步骤2-7中蓝牙适配器判断信道参数配置不成功返回执行步骤2-6之前还可以包括:判断配置失败次数是否超过预设次数,是则连接失败,否则返回步骤2-6 ;
[0091]具体地,蓝牙适配器根据蓝牙读卡器的应答中的结果字段(Result)判断信道参数是否配置成功,若Result为第二预设值,则信道参数配置成功,若Result不为第二预设值,则信道参数配置失败;优选地,第二预设值为0x00 00。
[0092]步骤2-8、蓝牙适配器根据蓝牙读卡器的应答判断是否需要调整信道参数,若需要则根据蓝牙读卡器的应答调整信道参数,连接成功,若不需要则连接成功。
[0093]具体地,蓝牙适配器根据蓝牙读卡器的应答中的调整参数字段(Opt1ns)判断是否需要调整信道参数,若Opt1ns为空则不需要调整信道参数,若Opt1ns不为空则需要调整信道参数;
[0094]本实施例中,当Opt1ns不为空时,Opt1ns包含至少一个以下格式的数据:参数标识+参数值长度+参数值,蓝牙适配器根据参数标识判断需要调整的信道参数,将其调整为对应的参数值;例如,参数标识为0x01,表示需要调整的信道参数为MTU。
[0095]或者,本实施例中,如图4所示,蓝牙适配器与蓝牙读卡器建立连接具体包括:
[0096]步骤3-1、蓝牙适配器向蓝牙读卡器发送连接请求,等待蓝牙读卡器应答,若接收到蓝牙读卡器的应答则执行步骤3-2,若接收超时则连接失败;
[0097]步骤3-2、蓝牙适配器根据蓝牙读卡器的应答判断是否连接成功,是则执行步骤
3-3,否则连接失败;
[0098]具体地,蓝牙适配器读取蓝牙读卡器的应答中的第4个字节得到状态字段,判断状态字段是否为第三预设值,是则连接成功,否则连接失败;优选地,第三预设值为0x00。
[0099]步骤3-3、蓝牙适配器从读卡器的应答中获取连接句柄,向蓝牙读卡器发送主服务UUID (Universally Unique Identifier,通用唯一识别码),等待蓝牙读卡器应答,若接收到蓝牙读卡器的应答则执行步骤3-4,若接收超时则连接失败;
[0100]具体地,蓝牙适配器读取蓝牙读卡器的应答第5至第6字节得到连接句柄。
[0101]步骤3-4、蓝牙适配器根据蓝牙读卡器的应答判断服务是否匹配,是则执行步骤
3-5,否则连接失败;
[0102]具体地,蓝牙适配器通过检查蓝牙设备的应答中的句柄信息字段(Handle Info)是否为空来判断服务是否匹配,若Handle Info为空则服务不匹配,若Handle Info不为空则服务匹配。
[0103]本实施例中,蓝牙读卡器接收到蓝牙适配器发送的主服务UUID后,判断是否与自身的主服务UUID相同,若相同则服务匹配,若不相同则服务不匹配,根据判断结果向蓝牙适配器返回相应应答。
[0104]步骤3-5、蓝牙适配器向蓝牙读卡器发送获取特性值句柄请求,等待蓝牙读卡器的应答,若接收到蓝牙读卡器的应答则获取蓝牙读卡器的应答中的特性值句柄,连接成功,若接收超时则连接失败。
[0105]本实施例中,蓝牙适配器向蓝牙读卡器发送的获取特性值句柄请求中包含具有写特性的UUID,蓝牙读卡器接收到获取特性值句柄请求后,获取请求中的具有写特性的UUID,查找该具有写特性的UUID对应的特性值句柄,返回给蓝牙适配器。
[0106]本实施例中,提示连接结果可以为向上位机发送连接结果,也可以通过蓝牙适配器上的显示装置或语音播放装置进行提示,例如通过指示灯的不同显示方式(颜色、闪烁次数等)表示连接成功和连接失败。
[0107]步骤102、蓝牙适配器判断是否接收到上位机下发的CCID指令,是则执行步骤103,否则重新执行步骤102 ;
[0108]步骤103、蓝牙适配器将上位机下发的CCID指令转换为蓝牙协议数据,发送蓝牙协议数据给蓝牙读卡器;
[0109]本实施例中,步骤103可以具体包括:
[0110]步骤4-1、蓝牙适配器计算CCID指令的CRC校验位,对上位机下发的CCID指令添加蓝牙协议头和CRC校验位,得到蓝牙协议数据;
[0111]步骤4-2、蓝牙适配器向蓝牙读卡器发送蓝牙协议数据;
[0112]进一步地,步骤4-1之前还可以包括:
[0113]步骤4-0、蓝牙适配器判断上位机下发的CCID指令的长度是否超过MTU,若未超过则执行步骤4-1,若超过则根据MTU对上位机下发的CCID指令分包,分别计算分包得到的每个指令数据包的CRC校验位,依次对每个指令数据包添加蓝牙协议头和CRC校验位,得到蓝牙协议数据,向蓝牙读卡器发送蓝牙协议数据;
[0114]具体地,蓝牙协议头长度为13个字节,第I个字节为事件类型标志;第2个字节至第5个字节为HCI (Host Controller Interface,主机控制接口)层蓝牙协议头,其中,第2至第3个字节填充的是第一运算结果,第4个字节和第5个字节为HCI层有效载荷;第6个字节至第9个字节为L2CAP层(逻辑链路与适配协议层)蓝牙协议头,其中,第6个字节和第7个字节为L2CAP层有效载荷,第8个字节和第9个字节为信道ID ;第10个字节为第二运算结果;第11个字节为本地特定的UIH(unnumbered informat1n with header)值;第12个和第13个字节为CCID指令数据的长度;
[0115]如上所述的事件类型标志具体为0x02 ;第一运算结果具体为将PB标志(Packet_Boundary Flag)的值左移12位得到的结果、BC标志(Broadcast Flag)的值左移14位的结果和ACL连接句柄三者进行或运算得到的运算结果,其中,PB标志的值具体为0x00 00,BC标志的值具体为0x00 00 ;HCI层有效载荷具体为HCI层蓝牙协议头之后的数据的长度;L2CAP层有效载荷具体为L2CAP层蓝牙协议头之后的数据的长度;第二运算结果具体为将0x01、outgoing 的值左移 I 位的结果和 DLCI (Data Link Connect1n Identifier,数据链路连接标识)左移2位的结果三者进行或运算得到的结果,即第二运算结果=(0x01?0)
(outgoing?l) I (DLCI?2)其中,DLCI具体为将Server_channel的值左移I位的结果和outgoing的值与0x01进行按位异或运算的结果二者进行或运算得到的运算结果,即DLCI=(server_channel〈〈l) | (outgoing" I),上述 outgoing 的值为 0x01,Server_channel 的值为第四预设值;本地特定的UIH值具体为OxEF ;CCID指令数据的长度具体为所述第13个字节之后的数据的长度;
[0116]例如,上位机下发的CCID 指令为 Ox 6F 05 00 00 00 00 OA 00 00 00 00 84 0000 08,ACL连接句柄为0x0033,信道ID为0x0040,第四预设值为0x06,上位机下发的CCID指令的长度未超过MTU,因此对上位机下发的CCID指令添加蓝牙协议头和CRC校验位得到的蓝牙协议数据为 Ox 02 33 00 18 00 14 00 40 00 33 EF IE 00 6F 05 00 00 00 00OA 00 00 00 00 84 00 00 08 4F (小端存储方式);
[0117]或者,步骤103具体包括:
[0118]步骤5-1、蓝牙适配器对上位机下发的CCID指令添加蓝牙协议头,得到蓝牙协议数据
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1