nrf52 - 快速广播与慢速广播
来源:互联网 发布:sql慢查询优化 编辑:程序博客网 时间:2024/06/03 21:44
许多应用都对功耗有严格要求,而且会要求一直处于广播模式,这时就要考虑降低广播频率来降低功耗,此时可以称为慢速广播,但是广播频率越快越利于手机连接,所以为了快速发现和连接,往往需要快速广播,一般的处理方式是快速广播30s然后进入慢速广播。
nordic考虑到了这种应用场景,所以用nordic的sdk很容易实现上述方案:
首先介绍一下广播参数的结构体:
typedef struct{ bool ble_adv_whitelist_enabled; /**< Enable or disable use of the whitelist. */ bool ble_adv_directed_enabled; /**< Enable or disable direct advertising mode. */ bool ble_adv_directed_slow_enabled; /**< Enable or disable direct advertising mode. */ uint32_t ble_adv_directed_slow_interval; /**< Advertising interval for directed advertising. */ uint32_t ble_adv_directed_slow_timeout; /**< Time-out (number of tries) for direct advertising. */ bool ble_adv_fast_enabled; /**< Enable or disable fast advertising mode. */ uint32_t ble_adv_fast_interval; /**< Advertising interval for fast advertising. */ uint32_t ble_adv_fast_timeout; /**< Time-out (in seconds) for fast advertising. */ bool ble_adv_slow_enabled; /**< Enable or disable slow advertising mode. */ uint32_t ble_adv_slow_interval; /**< Advertising interval for slow advertising. */ uint32_t ble_adv_slow_timeout; /**< Time-out (in seconds) for slow advertising. */}ble_adv_modes_config_t;
注释写的很清楚,前面有广播白名单、定向广播的设置,我们一般应用都是普通广播模式,所以重点看以下几个结构体成员
bool ble_adv_fast_enabled; /**< Enable or disable fast advertising mode. */ uint32_t ble_adv_fast_interval; /**< Advertising interval for fast advertising. */ uint32_t ble_adv_fast_timeout; /**< Time-out (in seconds) for fast advertising. */ bool ble_adv_slow_enabled; /**< Enable or disable slow advertising mode. */ uint32_t ble_adv_slow_interval; /**< Advertising interval for slow advertising. */ uint32_t ble_adv_slow_timeout; /**< Time-out (in seconds) for slow advertising. */
前面三个是快速广播使能,以及广播间隔和广播时间,后面三个是慢速广播的
快速广播使能后,开始广播的时候选择快速模式就会进入快速广播模式,如果timeout设置非0,则时间到了timeout后退出快速广播模式,
此时如果慢速广播使能了,则进入慢速广播模式,如果timeout设置非0,则时间到了timeout后不再进行广播,
timeout设置为0则不退出当前广播模式,持续广播
了解了这个结构体,想必怎么实现开头说的方案就很简单了,下面贴一下具体实现代码:
1、相关宏定义
#define APP_ADV_FAST_INTERVAL 0x0028 /**< Fast advertising interval (in units of 0.625 ms.). */#define APP_ADV_SLOW_INTERVAL 0x0C80 /**< Slow advertising interval (in units of 0.625 ms. ). */#define APP_ADV_FAST_TIMEOUT 30 /**< The duration of the fast advertising period (in seconds). */#define APP_ADV_SLOW_TIMEOUT 0
2、广播初始化函数
static void advertising_init(void){ uint32_t err_code; ble_advdata_t advdata; // Build advertising data struct to pass into @ref ble_advertising_init. memset(&advdata, 0, sizeof(advdata)); advdata.name_type = BLE_ADVDATA_FULL_NAME; advdata.include_appearance = true; advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE; advdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]); advdata.uuids_complete.p_uuids = m_adv_uuids; //ble_adv_modes_config_t options = {0}; //options.ble_adv_fast_enabled = BLE_ADV_FAST_ENABLED; //options.ble_adv_fast_interval = APP_ADV_INTERVAL; //options.ble_adv_fast_timeout = APP_ADV_TIMEOUT_IN_SECONDS; ble_adv_modes_config_t options = { BLE_ADV_WHITELIST_DISABLED, BLE_ADV_DIRECTED_DISABLED, BLE_ADV_DIRECTED_SLOW_DISABLED, 0,0, BLE_ADV_FAST_ENABLED, APP_ADV_FAST_INTERVAL, APP_ADV_FAST_TIMEOUT, BLE_ADV_SLOW_ENABLED, APP_ADV_SLOW_INTERVAL, APP_ADV_SLOW_TIMEOUT }; err_code = ble_advertising_init(&advdata, NULL, &options, on_adv_evt, NULL); APP_ERROR_CHECK(err_code);}
ble_advertising_start(BLE_ADV_MODE_FAST);
0 0
- nrf52 - 快速广播与慢速广播
- udp广播与直接广播
- 动态广播与静态广播
- 有序广播与无序广播
- 静态广播与动态广播
- 有序广播与无序广播
- 广播与广播接受者简述
- 普通广播与本地广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播:
- [Leetcode]19. Remove Nth Node From End of List
- ESRI官网关于Javascript的内容(3)__将3.x升级到4.0
- IOS Dev Intro - Create UImage from Sample Buffer Data
- 如何去除UITableView多余的空Cell
- bzoj2818(改为线性筛求欧拉函数的模版)
- nrf52 - 快速广播与慢速广播
- PHP中MySQL、MySQLi和PDO的用法和区别
- 自定义控件时绘制文字居中
- 双向链表
- Java枚举
- TCPDUMP抓包
- <input type="hidden">的问题
- STL::string类
- JTAG无法识别单片机(JTAG Device chain)