【esp32】blufi源码分析

一、blufi介绍

blufi是乐鑫推出的ble配网协议。

二、blufi源码分析

2.1 nvs初始化

nvs的概念:非易失性存储 (NVS) 库主要用于在 flash 中存储键值格式的数据。例程中初始化nvs是用nvs来存储kv(键值对)格式的标志位或者数据,比如存储ap的ssid和passwd、是否进行过初始化。

2.2 初始化wifi

static void initialise_wifi(void)
{
    ESP_ERROR_CHECK(esp_netif_init());
    wifi_event_group = xEventGroupCreate();
    ESP_ERROR_CHECK(esp_event_loop_create_default());
    esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();
    assert(sta_netif);
    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL));
    ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &ip_event_handler, NULL));

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
    ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );
    ESP_ERROR_CHECK( esp_wifi_start() );
}

执行流程如下:

  • 初始化tcp/ip协议栈
  • 创建一个FreeRTOS的事件组,事件组是一个16bit的数据,可以表示16个事件的状态,一个任务使用xEventGroupSetBits可以设置相应的事件标志,另一个任务使用xEventGroupWaitBits阻塞等待某个事件位被置位,从而实现多任务的同步。
  • 创建一个event loop,并且注册wifi和ip的回调函数,用于处理相应的wifi、ip事件。
  • 初始化wifi外设、设置wifi的工作模式、启动wifi。

2.3 释放蓝牙控制器内存

esp_err_t esp_bt_controller_mem_release(esp_bt_mode_t mode)
{
    ESP_LOGW(BTDM_LOG_TAG, "%s not implemented, return OK", __func__);
    return ESP_OK;
}

sdk中还没有实现释放内存的功能。

2.4 蓝牙控制器初始化

用默认配置初始化蓝牙控制器

2.5 使能蓝牙控制器

使能蓝牙控制器为BLE模式

2.6 blufi host初始化

执行到这个部分根据用户对蓝牙协议的配置有两种情况。

  • bluedroid:bluedroid是在安卓上替代linux种的bluez的一个蓝牙协议栈。
  • nimble:nimble是 Apache 基金会下一个开源的蓝牙5.0协议栈,具备完整的Host及Controller层。资源占用少,支持蓝牙5.0特性,也支持Mesh等功能。

2.6.1 使用bluedroid的情况

(未分析)

2.6.2 使用nimble的情况

  • 初始化gatt的blufi服务
  • 设置gap的设备名称
  • 创建nimble_port线程
  • 初始化bt控制器

2.7 注册blufi回调

注册blufi回调,在blufi事件产生时处理相应的事件。

2.8 执行gap回调

int esp_blufi_gap_register_callback(void)
{
    return 0;
}

例程中gap回调还没实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值