CC2640之广播设备名上添加MAC地址

测试环境


协议栈版本:BLE-STACK V2.1

IAR开发环境版本:IAR for Arm 7.40

示例测试Demo工程:simpleBLEPeripheral工程




需求介绍

 

默认情况下,同一款产品的多个设备的设备名是一样的,这样,用户如果同时拥有多个此款设备,那就不容易判断哪个是哪个了。所以,我们可以在原来定义的设备名后面加上MAC地址的后两个字节的数据,用于区分同款不同设备,后两个字节就可以表示 65536 个设备,如果你的产品数量超过这个,可以再多加上MAC地址的几个字节,原理和方法都一样,根据自己的情况来实际操作即可。




实现方法


之前有篇博文,我们介绍了如何在广播的扫描回应数据中添加MAC地址,请先看一下那篇博文,链接如下:

点击打开广播数据中添加MAC地址的博文链接

 

操作步骤:

1.在广播扫描回应数据数组的设备名AD部分,预留MAC地址后两个字节存放空间,代码如下:

// GAP - SCAN RSP data (max size = 31 bytes)
static uint8_t scanRspData[] =
{
	// complete name
	0x0C,   // length of this data
	GAP_ADTYPE_LOCAL_NAME_COMPLETE,
	0x53,   // 'S'
	0x69,   // 'i'
	0x6d,   // 'm'
	0x70,   // 'p'
	0x6c,   // 'l'
	0x65,   // 'e'
	'-',
	0x00,
	0x00,
	0x00,
	0x00,
	
	// connection interval range
	0x05,   // length of this data
	GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,
	LO_UINT16(DEFAULT_DESIRED_MIN_CONN_INTERVAL),   // 100ms
	HI_UINT16(DEFAULT_DESIRED_MIN_CONN_INTERVAL),
	LO_UINT16(DEFAULT_DESIRED_MAX_CONN_INTERVAL),   // 1s
	HI_UINT16(DEFAULT_DESIRED_MAX_CONN_INTERVAL),

	// Tx power level
	0x02,   // length of this data
	GAP_ADTYPE_POWER_LEVEL,
	0       // 0dBm
};

原来的设备名是Simple,设备名和MAC地址之间加上了一个-用于分隔,预留4个字节来显示MAC地址的后两个字节的字符。

 

2.添加一个获取MAC地址并将后两个字节的16进制数据转换成对应的字符(并且是大写)的接口,源码如下:

static void readMacAndConvert(uint8_t * data)
{
	char mac_address[6];
	char str[2];
	
	uint32_t mac0 = HWREG(FCFG1_BASE + FCFG1_O_MAC_BLE_0);  
	uint32_t mac1 = HWREG(FCFG1_BASE + FCFG1_O_MAC_BLE_1);  

	mac_address[0] = HI_UINT16(mac1);
	mac_address[1] = LO_UINT16(mac1);
	mac_address[2] = BREAK_UINT32(mac0, 3);
	mac_address[3] = BREAK_UINT32(mac0, 2);
	mac_address[4] = BREAK_UINT32(mac0, 1);
	mac_address[5] = BREAK_UINT32(mac0, 0);

	sprintf(str,"%02x",mac_address[4]);
	*data++ = toupper(str[0]);
	*data++ = toupper(str[1]);
	
	sprintf(str,"%02x",mac_address[5]);
	*data++ = toupper(str[0]);
	*data++ = toupper(str[1]);
}

将上述接口放到simpleBLEPeripheral.c文件的最后即可,为了编译通过,需要在该c文件的开头添加下列头文件引用:

#include <stdarg.h>
#include <stdio.h>
#include <ctype.h>

然后在该c文件的开头声明该方法:

static void readMacAndConvert(uint8_t * data);

3.在simpleBLEPeripheral.c文件的初始化接口SimpleBLEPeripheral_init中设置扫描回应数据之前添加如下代码:

readMacAndConvert(&scanRspData[9]);
GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData), scanRspData);

上面第一行代码是添加的,至于数组下标的确定,可以从前面的扫描回应数据数组中查到。


4.如上修改之后,重新编译,然后烧录到从设备中即可。




测试结果


用BLE调试工具搜索烧录上述软件的从设备,显示如下:



从上面的截图中可以看出,之前的设备名是Simple,修改之后的是Simple-08A7,修改成功。


















  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值