工作中有使用到nrf51822,开始蓝牙名通过宏定义为固定的字符串,但是因为使用场景,不同的设备有不同的ID,所以就有通过蓝牙知道设备ID需求;通过多次实验,最终得以实现。
首先,应为id为16进制数,0x100000xx,但蓝牙名为字符串;所以需要有将16进制的ID转化成字符串的函数,
UCHAR8* hextochar(UINT32 num)
{
UCHAR8 i;
static UCHAR8 string[8]={0};//切记定义为static变量,否则后续蓝牙名获取会有问题。
for(i=0;i<8;i++)
{
string[i]=(UCHAR8)((num >> (28-i*4))&0x0f);
if((string[i]>=0) && (string[i] <= 9))
string[i]=string[i]+0x30;
else if((string[i]>=0xa) && (string[i]<=0xf))
string[i]=string[i]+0x37;
}
return string;
}
然后在51822自带代码中找到设置蓝牙名的函数:(红色为增加部分)
static void gap_static_params_init(void)
{
uint32_t err_code;
ble_gap_conn_params_t gap_conn_params;
ble_gap_conn_sec_mode_t sec_mode;
UCHAR8* p_