【BLE-CC2640】CC2640之广播MAC

本篇博文最后修改时间:2017年06月02日,15:30。


一、简介

本文以SimpleBLEPeripheral工程为例,介绍如何将mac放在扫描应答数据中广播出去


二、实验平台

协议栈版本:ble_cc26xx_2_01_00_44423

编译软件:IAR Embedded Workbench for ARM Version 7.40

硬件平台:CC26xxDK开发板

仿真器:XDS100V3(香瓜)

手机平台:小米4S

APP:BLE读写器


版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:897503845@qq.com

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
香瓜单片机之Linux群:512598061
香瓜单片机之职场交流群:450154342
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

四、 实验前提
1、在进行本文步骤前,请先阅读以下博文:
1)《CC2541之广播MAC》:http://blog.csdn.net/feilusia/article/details/48176695

2、在进行本文步骤前,请先实现以下博文:

五、实验步骤
1、修改扫描应答缓冲区(替换SimpleBLEPeripheral.c中的scanRspData数组)
// GAP - SCAN RSP data (max size = 31 bytes)
static uint8_t scanRspData[] =
{
  // complete name  
  //0x14,   // length of this data  
  0x11,  
  GAP_ADTYPE_LOCAL_NAME_COMPLETE,  
    
  0x47, //G  
  0x55, //U         
  0x41, //A    
  0x23, //# 
    
  0x20, //给MAC地址预留位置  
  0x20,  
  0x20,  
  0x20,  
  0x20,  
  0x20,  
  0x20,  
  0x20,  
  0x20,  
  0x20,  
  0x20,  
  0x20,     
/*   
  0x53,   // 'S' 
  0x69,   // 'i' 
  0x6d,   // 'm' 
  0x70,   // 'p' 
  0x6c,   // 'l' 
  0x65,   // 'e' 
  0x42,   // 'B' 
  0x4c,   // 'L' 
  0x45,   // 'E' 
  0x50,   // 'P' 
  0x65,   // 'e' 
  0x72,   // 'r' 
  0x69,   // 'i' 
  0x70,   // 'p' 
  0x68,   // 'h' 
  0x65,   // 'e' 
  0x72,   // 'r' 
  0x61,   // 'a' 
  0x6c,   // 'l' 
*/ 

  // 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
};

2、添加读取mac的相关函数
1)添加读取mac的相关函数(SimpleBLEPeripheral.c中)
//******************************************************************************          
//name:             GUA_Read_Mac         
//introduce:        香瓜的读mac函数      
//parameter:        pGUA_Address:6个字节的mac地址缓冲区        
//return:           none       
//author:           甜甜的大香瓜               
//email:            897503845@qq.com   
//QQ group          香瓜BLE之CC2640(557278427)                
//changetime:       2016.09.12                   
//****************************************************************************** 
static void GUA_Read_Mac(uint8 *pGUA_Address)      
{  
  uint32_t nGUA_Mac0 = HWREG(FCFG1_BASE + FCFG1_O_MAC_BLE_0);
  uint32_t nGUA_Mac1 = HWREG(FCFG1_BASE + FCFG1_O_MAC_BLE_1);
  
  pGUA_Address[5] = nGUA_Mac0;
  pGUA_Address[4] = nGUA_Mac0 >> 8;
  pGUA_Address[3] = nGUA_Mac0 >> 16;
  pGUA_Address[2] = nGUA_Mac0 >> 24;
  pGUA_Address[1] = nGUA_Mac1;
  pGUA_Address[0] = nGUA_Mac1 >> 8;
}  

//******************************************************************************          
//name:             GUA_Addr2Str         
//introduce:        16进制地址转字符串   
//parameter:        pGUA_Addr:6个字节的十六进制mac地址      
//return:           12字节的字符串mac地址       
//author:           甜甜的大香瓜               
//email:            897503845@qq.com   
//QQ group          香瓜BLE之CC2640(557278427)                
//changetime:       2016.09.12                   
//****************************************************************************** 
char *GUA_Addr2Str(uint8 *pGUA_Addr)  
{  
  uint8         i;  
  char          bGUA_Hex[] = "0123456789ABCDEF";  
  static char   bGUA_Str[B_ADDR_LEN*2];  
  char          *pGUA_Str = bGUA_Str;  
  
  for(i = B_ADDR_LEN; i > 0; i--)  
  {  
    *pGUA_Str++ = bGUA_Hex[*pGUA_Addr >> 4];  
    *pGUA_Str++ = bGUA_Hex[*pGUA_Addr++ & 0x0F];  
  }  
  
  return bGUA_Str;  
}  

2)声明读取mac的相关函数(SimpleBLEPeripheral.c中)
//GUA
static void GUA_Read_Mac(uint8 *pGUA_Address);
char *GUA_Addr2Str(uint8 *pGUA_Addr);
//GUA

3、初始化扫描应答数据(SimpleBLEPeripheral.c的SimpleBLEPeripheral_Init中)
      GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData),
                           scanRspData);   
替换为
    //广播mac
    {
      uint8 nGUA_Address[B_ADDR_LEN];
      
      //将mac从flash中读出,并放入scanRspData缓冲区中
      GUA_Read_Mac(nGUA_Address);
      memcpy(scanRspData+6, GUA_Addr2Str(nGUA_Address), 12);
      
      //将scanRspData设置为扫描应答缓冲区
      GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData),
                           scanRspData);    
    }

五、实验结果
仿真并全速运行,用app可看到设备名称已经带上了mac。


因此,实验成功。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值