main/ble_adv.c

changeset 31
ec5c7794dcd6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/ble_adv.c	Mon Apr 17 14:54:35 2023 +0200
@@ -0,0 +1,82 @@
+/**
+ * @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