main/ble_adv.c

Mon, 17 Apr 2023 14:54:35 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Mon, 17 Apr 2023 14:54:35 +0200
changeset 31
ec5c7794dcd6
permissions
-rw-r--r--

Added basic BLE code.

/**
 * @file ble_adv.c
 * @brief BLE ADV service.
 */

#include "config.h"


static const char *TAG = "ble_adv";

#ifdef CONFIG_CODE_PRODUCTION
#define IOTBALKON_DEVICE_NAME		"IOT_BALKON"
#endif
#ifdef CONFIG_CODE_TESTING
#define IOTBALKON_DEVICE_NAME		"IOT_ESP32C3"
#endif


#define adv_config_flag      (1 << 0)
static uint8_t adv_config_done = 0;

static esp_ble_adv_params_t adv_params = {
    .adv_int_min        = 0x20,
    .adv_int_max        = 0x40,
    .adv_type           = ADV_TYPE_IND,
    .own_addr_type      = BLE_ADDR_TYPE_PUBLIC,
    .channel_map        = ADV_CHNL_ALL,
    .adv_filter_policy = ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY,
};


esp_err_t ble_balkon_adv_config(void)
{
    esp_err_t	ret = ESP_OK;

    esp_ble_adv_data_t adv_data = {
        .set_scan_rsp = false,
        .include_name = true,
        .include_txpower = false,
        .min_interval = 0x0006, //slave connection min interval, Time = min_interval * 1.25 msec
        .max_interval = 0x0010, //slave connection max interval, Time = max_interval * 1.25 msec
        .appearance = 0x00,
        .manufacturer_len = 0,
        .p_manufacturer_data =  NULL,
        .service_data_len = 0,
        .p_service_data = NULL,
        .service_uuid_len = 0,
        .p_service_uuid = NULL,
        .flag = (ESP_BLE_ADV_FLAG_GEN_DISC | ESP_BLE_ADV_FLAG_BREDR_NOT_SPT),
    };

    esp_err_t set_dev_name_ret = esp_ble_gap_set_device_name(IOTBALKON_DEVICE_NAME);
    if (set_dev_name_ret){
	ESP_LOGE(TAG, "set device name failed, error code = %x", set_dev_name_ret);
	return set_dev_name_ret;
    }

    //config adv data
    ret = esp_ble_gap_config_adv_data(&adv_data);
    if (ret){
        ESP_LOGE(TAG, "config adv data failed, error code = %x", ret);
    }
    adv_config_done |= adv_config_flag;

    return ret;
}


void ble_balkon_adv_start(void)
{
    esp_ble_gap_start_advertising(&adv_params);
}


void ble_balkon_adv_set_complete_handle(void)
{
    adv_config_done &= (~adv_config_flag);
    if (adv_config_done == 0){
        esp_ble_gap_start_advertising(&adv_params);
    }
}

mercurial