【BLE-CC2640】CC2640之广播MAC

来源:互联网 发布:中国近10年gdp数据 编辑:程序博客网 时间:2024/05/29 06:37

本篇博文最后修改时间:2017年02月16日,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
甜甜的大香瓜的小店(淘宝店):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中)
//GUAstatic 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 0