概述
我们称主设备为Master(手机、PC机等),从设备为Slave(手环等)。Master向Slave发送connect request,需要与slave建立连接。在slave收到Master发出的connect request时,在开始建立连接的同时也要更新和计算的Master的channel map表,以及下一个连接使用的频点。
如下图所示,为Master发出的CONNECT_REQ的Payload,图中的ChM和hop参数,分别表示Channel map表,即建立连接后有哪些channel是可以被使用的,有哪些channel是不可用的。hop表示跳数,表示跳频每次的跳频的间隔。
具体参数介绍参考 第五章第5节
跳频原理
例如,ChM 和 Hop分别为 ChM[5] = {0x02,0x56, 0x49, 0x13, 0x11]; hop = 5;
将ChM转换为二进制数,则为00010001 00010011 01001001 01010110 00000010,频道位被置为1的表示该信道可用,信道位被置为0表示该信道不可用。那么可用的频道used = [1, 9, 10, 12, 14, 16, 19, 22, 24, 25, 28,32, 36 ];可使用的信道数numUsed = 13。
接下来需要计算下一个连接使用的频道
Mod指求余运算。
计算步骤:
第一次:
- 默认第一次选择频道0作为fn
- fn+1 = (fn + hop) mod 37即fn+1 = (0 + 5) % 37= 5
- 通过查询used可知频道5不是一个好频道
- 所以要在好的channel表里找一个channel,即used[5 % numused] = used[5 % 13] = 16
- 所以第一次通讯选择的频道是16
第二次:
- 选择频道16作为fn
- fn+1 = (fn + hop) mod 37即 fn+1 = (5 + 5) % 37 = 10
- 通过查询used可知频道10是一个好频道
- 所以第二次通讯选择的频道是10