Skip to content

Commit

Permalink
use legacy adv by default (#6)
Browse files Browse the repository at this point in the history
  • Loading branch information
buglloc committed Jun 27, 2024
1 parent 94ea5d7 commit 2bde234
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 12 deletions.
3 changes: 3 additions & 0 deletions boards/xiao_ble.conf
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
CONFIG_LOG=y
CONFIG_SERIAL=y
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_STDOUT_CONSOLE=y
CONFIG_PRINTK=y
3 changes: 2 additions & 1 deletion prj.conf
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
CONFIG_BT_DEVICE_NAME="PinkyWinky"
CONFIG_PW_SIGN_KEY="lol-kek-cheburek"
CONFIG_BT_EXT_ADV=n


CONFIG_MAIN_STACK_SIZE=4096

Expand Down Expand Up @@ -28,7 +30,6 @@ CONFIG_SPI=n
CONFIG_BOOT_BANNER=n

CONFIG_BT=y
CONFIG_BT_EXT_ADV=y
CONFIG_BT_PER_ADV=n
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_CTLR_ADV_DATA_LEN_MAX=128
Expand Down
75 changes: 64 additions & 11 deletions src/ble.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "ble.h"

#include <stdbool.h>

#include <zephyr/kernel.h>
#include <zephyr/sys/byteorder.h>
#include <zephyr/logging/log.h>
Expand Down Expand Up @@ -39,13 +41,25 @@ static uint8_t mfg_data[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

static const struct bt_data advertising[] = {

static const struct bt_data ad_data[] = {
BT_DATA_BYTES(BT_DATA_FLAGS, BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR),
#if CONFIG_BT_EXT_ADV
BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1),
#endif
BT_DATA(BT_DATA_MANUFACTURER_DATA, mfg_data, ARRAY_SIZE(mfg_data)),
};

#if !CONFIG_BT_EXT_ADV
static const struct bt_data sd_data[] = {
BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1),
};
#endif

#if CONFIG_BT_EXT_ADV
static struct bt_le_ext_adv *adv = NULL;
#endif

static uint32_t pw_initial_ts = 0;
static uint32_t pw_last_ts = 0;

Expand Down Expand Up @@ -84,7 +98,7 @@ int pw_ble_update_mfg_sign()
return 0;
}

void pw_ble_update_adv_data()
void pw_ble_update_adv_data(bool set)
{
int err;

Expand All @@ -98,15 +112,23 @@ void pw_ble_update_adv_data()
LOG_ERR("failed to sign mfg data (err %d)", err);
}

err = bt_le_ext_adv_set_data(adv, advertising, ARRAY_SIZE(advertising), NULL, 0);
if (!set) {
return;
}

#if CONFIG_BT_EXT_ADV
err = bt_le_ext_adv_set_data(adv, ad_data, ARRAY_SIZE(ad_data), NULL, 0);
#else
err = bt_le_adv_update_data(ad_data, ARRAY_SIZE(ad_data), sd_data, ARRAY_SIZE(sd_data));
#endif
if (err) {
LOG_ERR("failed to update adv data (err %d)", err);
}
}

void pw_ble_refresh_adv_data(struct k_work *work)
{
pw_ble_update_adv_data();
pw_ble_update_adv_data(true);
}

K_WORK_DEFINE(refresh_adv_data_work, pw_ble_refresh_adv_data);
Expand All @@ -121,7 +143,6 @@ int pw_ble_init_adv_data()
return -1;
}

pw_ble_update_adv_data();
return 0;
}

Expand All @@ -137,7 +158,13 @@ int pw_ble_enable()
return -1;
}

/* Create a non-connectable advertising set */
err = pw_ble_init_adv_data();
if (err) {
LOG_ERR("advertising init failed (err %d)", err);
return -1;
}

#if CONFIG_BT_EXT_ADV
err = bt_le_ext_adv_create(
BT_LE_ADV_PARAM(
BT_LE_ADV_OPT_EXT_ADV | PW_BLE_EXT_ADV_OPTS,
Expand All @@ -148,28 +175,54 @@ int pw_ble_enable()
&adv
);
if (err) {
LOG_ERR("failed to create advertising set (err %d)", err);
LOG_ERR("failed to create extended advertising (err %d)", err);
return -1;
}

err = pw_ble_init_adv_data();
LOG_INF("start extended advertising...");
pw_ble_update_adv_data(true);
err = bt_le_ext_adv_start(adv, BT_LE_EXT_ADV_START_DEFAULT);
if (err) {
LOG_ERR("advertising init failed (err %d)", err);
LOG_ERR("failed to start extended advertising (err %d)", err);
return -1;
}

#else

LOG_INF("start extended advertising...");
err = bt_le_ext_adv_start(adv, BT_LE_EXT_ADV_START_DEFAULT);
pw_ble_update_adv_data(false);
err = bt_le_adv_start(
BT_LE_ADV_PARAM(
PW_BLE_EXT_ADV_OPTS,
CONFIG_ADV_INTERVAL_MIN, CONFIG_ADV_INTERVAL_MAX,
NULL
),
ad_data, ARRAY_SIZE(ad_data),
sd_data, ARRAY_SIZE(sd_data)
);
if (err) {
LOG_ERR("failed to start extended advertising (err %d)", err);
return -1;
}
#endif

LOG_INF("BLE initialized");
return 0;
}

int pw_ble_refresh_data()
{
return k_work_submit(&refresh_adv_data_work);
int ret;

ret = k_work_submit(&refresh_adv_data_work);
if (ret >= 0) {
/*
* 0 – if work was already submitted to a queue
* 1 – if work was not submitted and has been queued to queue
* 2 – if work was running and has been queued to the queue that was running it
*/
return 0;
}

return ret;
}

0 comments on commit 2bde234

Please sign in to comment.