您当前的位置: 首页 > 

仙剑情缘

暂无认证

  • 0浏览

    0关注

    333博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

NRF52832基于SDK15.3 S332协议栈实现adv和rsp广播厂商自定义数据

仙剑情缘 发布时间:2020-08-25 07:25:14 ,浏览量:0

  • DEMO下载地址

https://download.csdn.net/download/mygod2008ok/12740643

  • 定义广播所需要的变量
static ble_gap_adv_params_t adv_params;
static ble_gap_adv_data_t   advdata_enc;
static ble_advdata_t        advdata;      
static ble_advdata_t        rspdata;

static ble_advdata_manuf_data_t m_spec_data;	 // ADV厂商广播变量													
static uint8_t s_specData[2];                   // ADV厂商广播数据数组
static ble_advdata_manuf_data_t m_spec_rspdata;	 // rsp厂商广播变量																					
static uint8_t s_specrspData[20];	         // rsp厂商广播数据数组	

ble_uuid_t adv_uuids[] =
{				
		{BLE_UUID_HEART_RATE_SERVICE,         BLE_UUID_TYPE_BLE},			
};	
  • 广播初时化函数,上电仅调用一次
/**@brief Advertising functionality initialization.
 *
 * @details Encodes the required advertising data and passes it to the stack.
 *          Also builds a structure to be passed to the stack when starting advertising.
 */
static void advertising_init(void)
{
    uint32_t             err_code;
        
    static uint8_t       advdata_buff[BLE_GAP_ADV_SET_DATA_SIZE_MAX];
    uint16_t             advdata_buff_len = BLE_GAP_ADV_SET_DATA_SIZE_MAX;
    static uint8_t       rspdata_buff[BLE_GAP_ADV_SET_DATA_SIZE_MAX];
    uint16_t             rspdata_buff_len = BLE_GAP_ADV_SET_DATA_SIZE_MAX;
	
    uint8_t              flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;

    // Build and set advertising data.
    memset(&advdata, 0, sizeof(advdata));

    advdata.name_type               = BLE_ADVDATA_FULL_NAME;
    advdata.include_appearance      = false;
    advdata.flags                   = flags;
#if UUID_BROADCAST_ENABLED
    advdata.uuids_complete.uuid_cnt = sizeof(adv_uuids) / sizeof(adv_uuids[0]);
    advdata.uuids_complete.p_uuids  = adv_uuids;
#endif
//-----------------------广播指定数据-----------------------------------------
#if SPEC_DATA_FLAG_ENABLED		  
    m_spec_data.company_identifier = COMPANY_IDENTIFIER_ID;
    s_specData[0] = 0;
    s_specData[1] = 60;
				
    m_spec_data.data.p_data = s_specData;
    m_spec_data.data.size = sizeof(s_specData);
    advdata.p_manuf_specific_data = &m_spec_data;
#endif		
    err_code = ble_advdata_encode(&advdata, advdata_buff, &advdata_buff_len);
    APP_ERROR_CHECK(err_code);
		
    memset(&rspdata, 0, sizeof(rspdata));
    m_spec_rspdata.company_identifier = COMPANY_IDENTIFIER_ID;
    m_spec_rspdata.data.p_data = s_specrspData;
    m_spec_rspdata.data.size = sizeof(s_specrspData);
    for(uint8_t i=0; i

evt.gap_evt.params.adv_set_terminated.reason ==                 BLE_GAP_EVT_ADV_SET_TERMINATED_REASON_TIMEOUT)             { //               NRF_LOG_INFO("BLE_GAP_EVT_ADV_SET_TERMINATED");                                                   #if SPEC_DATA_FLAG_ENABLED                                         beacon_advertising_init();     // 厂商数据广播更新                         #else                                              advertising_start();                         #endif                                 //NRF_LOG_INFO("BLE_START2=%d",s_powerOffFlag);                                              // Go to system-off mode (this function will not return; wakeup will cause a reset) //                err_code = sd_power_system_off(); //                APP_ERROR_CHECK(err_code);             }             break;

       ......

   } 

}

  • 厂商数据内容更新
  1. ADV厂商数据内容更新,操作更新specData数组里的内容即可
  2. rsp厂商数据内容更新,操作更新s_specrspData数组里的内容即可
  • 运行结果效果图

 

 

 

 

     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

关注
打赏
1658017818
查看更多评论
0.0369s