广播数据

由于苹果APP无法读到设备广播时的MAC地址,所以想在广播的时候在暴露一次MAC地址,如果把MAC地址添加到广播数据里面呢?

uint8_t app_set_adv_data(uint16_t disc_mode) 修改改函数,把你的MAC地址在这里跟着写进去。个人看法,不知道对不对

wyq165 发表于 2015-5-20 17:52
uint8_t app_set_adv_data(uint16_t disc_mode) 修改改函数,把你的MAC地址在这里跟着写进去。个人看法,不 …

最好是像这样,添加到manufature data后面,但这个芯片广播的时候好像没看到manufature data

2楼说得基本对,在广播数据添加,但是格式上有要求,具体得看蓝牙spec v4.0
贴上我的一段代码,应该能帮上

		app_env.adv_data[len+0] = 0x07;
		app_env.adv_data[len+1] = 0xFF;
		get_mac_addr(&app_env.adv_data[len+2]);

		len += 8;

FireBLE_blue 发表于 2015-5-21 11:13
2楼说得基本对,在广播数据添加,但是格式上有要求,具体得看蓝牙spec v4.0
贴上我的一段代码,应该能帮上 …

get_mac_addr是你自己实现的吗,咋我放里面报错呢?

是的,具体实现如下:

void get_mac_addr(uint8_t *p_mac_addr)
{
	uint8_t mac_addr[6];
	nvds_tag_len_t add_lenth = 6;
	if (NVDS_OK != nvds_get(NVDS_TAG_BD_ADDRESS, &add_lenth, mac_addr))
	{
		 // NVDS is empty, use default name
				p_mac_addr[0] = 0x08;
				p_mac_addr[1] = 0x7C;
				p_mac_addr[2] = 0xBE;
				p_mac_addr[3] = 0x00;
				p_mac_addr[4] = 0x00;
				p_mac_addr[5] = 0x00;
	}
	else
	{
		for ( uint8_t i = 6; i >0;)
		{
			i--;
			p_mac_addr[5-i]= mac_addr[i];
		}
	}
}