广播初始化 - ble_advertising_init()

本文详细介绍了蓝牙广播的初始化过程,包括ble_advertising_init()函数的使用,广播模式配置,如白名单和定向广播。还讨论了外观特性、广播标志及其在不同场景下的应用。
摘要由CSDN通过智能技术生成

广播就是为了让别人能发现你。

记得初始化完毕还要在协议栈初始化通过ble_evt_dispatch分发事件,on_adv_evt()处理。


ble_advertising.h涉及的函数

协议栈广播派发事件  : void ble_advertising_on_ble_evt(const ble_evt_t * const p_ble_evt);

系统事件  : void ble_advertising_on_sys_evt(uint32_t sys_evt);

广播初始化

uint32_t ble_advertising_init(ble_advdata_t const                 * p_advdata,

                             ble_advdata_t const                * p_srdata,

                              ble_adv_modes_config_t const        * p_config,

                             ble_advertising_evt_handler_t const  evt_handler,

                             ble_advertising_error_handler_t const error_handler);

开始广播  : uint32_t ble_advertising_start(ble_adv_mode_t advertising_mode);

设置配对地址  : uint32_t ble_advertising_peer_addr_reply(ble_gap_addr_t *p_peer_addr);

设置白名单  : uint32_t ble_advertising_whitelist_reply(ble_gap_whitelist_t *p_whitelist);

禁止白名单广告  : uint32_t ble_advertising_restart_without_whitelist(void);

-----------------------------------------------------------------------------------------------------------------------------------

广播模式处理函数:on_adv_evt(ble_adv_evt_t ble_adv_evt)

typedef enum

{

BLE_ADV_EVT_IDLE,                /**< Idle; no connectableadvertising is ongoing.*/

BLE_ADV_EVT_DIRECTED, //定向广播,只能被指定的设备连接

BLE_ADV_EVT_DIRECTED_SLOW, 

BLE_ADV_EVT_FAST,//快速广播

BLE_ADV_EVT_SLOW,

BLE_ADV_EVT_FAST_WHITELIST, //白名单快速广播

BLE_ADV_EVT_SLOW_WHITELIST,  

BLE_ADV_EVT_WHITELIST_REQUEST,  /**< Request a whitelist from the mainapplication. For whitelist advertising to work, the whit

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#define DEVICE_NAME "BL618_GATT" // 设备名称 #define PROFILE_NUM 1 // 设备支持的服务数量 #define PROFILE_A_APP_ID 0 // 第一个服务的ID static void gap_event_handler(ble_event_t *event); static void gatt_event_handler(ble_event_t *event); int main(void) { // 初始化蓝牙协议栈 bluetooth_init(gap_event_handler, gatt_event_handler); // 设置设备名称 bluetooth_set_device_name(DEVICE_NAME); // 创建一个服务 bluetooth_gatt_create_service(PROFILE_NUM); // 添加服务的特征值 bluetooth_gatt_add_char(PROFILE_A_APP_ID, "CHAR_A", 0xFF01, 0x20, NULL); // 开始广播 bluetooth_start_advertising(); while (1) { // 等待事件 bluetooth_wait_for_event(); } return 0; } static void gap_event_handler(ble_event_t *event) { switch (event->type) { case BLE_GAP_EVENT_ADV_IND: { // 收到广播包,可以连接该设备 ble_gap_connect(&event->gap_event.adv_ind.address); break; } case BLE_GAP_EVENT_CONNECTED: { // 连接成功,可以开始 GATT 操作 break; } case BLE_GAP_EVENT_DISCONNECTED: { // 断开连接,重新开始广播 bluetooth_start_advertising(); break; } default: break; } } static void gatt_event_handler(ble_event_t *event) { switch (event->type) { case BLE_GATT_EVENT_READ: { // 处理读操作 break; } case BLE_GATT_EVENT_WRITE: { // 处理写操作 ble_err_t err = ble_gatt_server_send_indication(event->conn_handle, 0x1234, raw_data, sizeof(raw_data)); // 发送通知给主机 if (err != BLE_ERR_NONE) { // 发送失败,需要处理错误 break; } break; } default: break; } }给出无注释代码
05-25
#define DEVICE_NAME "BL618_GATT" // 设备名称 #define PROFILE_NUM 1 // 设备支持的服务数量 #define PROFILE_A_APP_ID 0 // 第一个服务的ID static void gap_event_handler(ble_event_t *event) { // 处理 GAP 事件 } static void gatt_event_handler(ble_event_t *event) { // 处理 GATT 事件 } int main(void) { // 初始化蓝牙协议栈 bluetooth_init(gap_event_handler, gatt_event_handler); // 设置设备名称 bluetooth_set_device_name(DEVICE_NAME); // 创建一个服务 bluetooth_gatt_create_service(PROFILE_NUM); // 添加服务的特征值 bluetooth_gatt_add_char(PROFILE_A_APP_ID, "CHAR_A", 0xFF01, 0x20, NULL); // 开始广播 bluetooth_start_advertising(); while (1) { // 等待事件 bluetooth_wait_for_event(); } return 0; static void gap_event_handler(ble_event_t *event) { switch (event->type) { case BLE_GAP_EVENT_ADV_IND: { // 收到广播包,可以连接该设备 ble_gap_connect(&event->gap_event.adv_ind.address); break; } case BLE_GAP_EVENT_CONNECTED: { // 连接成功,可以开始 GATT 操作 break; } case BLE_GAP_EVENT_DISCONNECTED: { // 断开连接,重新开始广播 bluetooth_start_advertising(); break; } default: break; } } static void gatt_event_handler(ble_event_t *event) { switch (event->type) { case BLE_GATT_EVENT_READ: { // 处理读操作 break; } case BLE_GATT_EVENT_WRITE: { // 处理写操作 ble_gatt_server_send_indication(event->conn_handle, 0x1234, raw_data, sizeof(raw_data)); // 发送通知给主机 break; } default: break; } } } }优化
05-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值