MAC2AC算法更新指南
更新说明
Telink团队优化 Access Code 生成算法,可以避免因生成的Access Code不符合规范,导致影响产品无线通讯的成功率。
更新后的算法,确保了每个MAC生成的Access Code符合BLE spec规范,并且增多了Access Code的总量,降低了冲撞的概率。
以下是2.4GHz low latency相关SDK和项目中更新Access Code的生成算法的用户指南。
更新步骤
添加新Access Code代码到工程
如下图所示,将mac2ac.c拷贝到vendor/common目录下:
替代旧算法
旧MAC生成Access Code算法函数为:tsync_get_ac_chn_from_mac,位于application/tws目录下,其作用是将mac地址通过算法生成通讯用的Access Code和回连时的channel。
此函数原型为:
int tsync_get_ac_chn_from_mac (unsigned char *mac, unsigned char *ac, unsigned char *chn)
{
int c = tsync_crc16 (0xffff, mac, 6)
c = tsync_access_code_16to32 (c);
tmemcpy (ac, &c, 4);
*chn = tsync_crc16 (0x0, mac, 6) % 37;
if (*chn == 2)
{
(*chn)++;
}
return 1;
}
修改为:
int tsync_get_ac_chn_from_mac (unsigned char *mac, unsigned char *ac, unsigned char *chn)
{
#if MAC2AC_NEW_ALGORITHM
extern u32 mac2ac(u8* mac);
u32 c = mac2ac(mac);
#else
int c = tsync_crc16 (0xffff, mac, 6);
c = tsync_access_code_16to32 (c);
#endif
tmemcpy (ac, &c, 4);
*chn = tsync_crc16 (0x0, mac, 6) % 37;
if (*chn == 2)
{
(*chn)++;
}
return 1;
}
然后在app_config.h里加上如下宏定义:
#define MAC2AC_NEW_ALGORITHM 1
验证新MAC生成Access Code算法(方法1)
Step 1 烧录MAC地址:0xA4C138000000,通过BDT工具烧录如下图所示:
Step 2 在async_init函数里添加如下两行打印:
my_dump_str_data(1, "MAC", mac, 6);
my_dump_str_data(1, "AC", &ac, 4);
Step 3 编译&烧录&运行,正确移植后,能看到打印的MAC和AC结果为:
MAC: a4 c1 38 00 00 00
AC: b1 4d 6c a2
验证新MAC生成Access Code算法(方法2)
Step 1 在代码中加上如下函数,并在初始化函数(user_init)中调用:
void verify_mac2ac_algorithm()
{
u8 mac[6] = {0xA4, 0xC1, 0x38, 0x00, 0x00, 0x00};
u32 ac = 0;
u8 chn = 0;
tsync_get_ac_chn_from_mac(mac, (u8 *)&ac, &chn);
my_dump_str_data(1, "MAC", mac, 6);
my_dump_str_data(1, "AC", &ac, 4);
}
Step 2 编译&烧录&运行,正确移植后,能看到打印的MAC和AC结果为:
MAC: a4 c1 38 00 00 00
AC: b1 4d 6c a2