Skip to content

Commit c4cdd60

Browse files
author
José Mendes
committed
applications: clime: add scan command + fix correct values being replaced with invalid ones + fix scan parameters and accept filter
Signed-off-by: José Mendes <[email protected]>
1 parent f36bebe commit c4cdd60

File tree

2 files changed

+73
-7
lines changed

2 files changed

+73
-7
lines changed

applications/clime/src/app_sensor.c

+6-2
Original file line numberDiff line numberDiff line change
@@ -812,8 +812,12 @@ int app_sensor_ble_tag_sample(void)
812812
app_data_lock();
813813
struct app_data_ble_tag_sensor *sensor = &g_app_data.ble_tag.sensor[i];
814814
memcpy(sensor->addr, addr, BT_ADDR_SIZE);
815-
sensor->rssi = rssi;
816-
sensor->voltage = voltage;
815+
if (rssi != INT_MAX) {
816+
sensor->rssi = rssi;
817+
}
818+
if (voltage != NAN) {
819+
sensor->voltage = voltage;
820+
}
817821
sensor->last_sample_temperature = temperature;
818822
sensor->last_sample_humidity = humidity;
819823
sensor->samples_temperature[sensor->sample_count] = temperature;

subsys/ctr_ble_tag/ctr_ble_tag.c

+67-5
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,67 @@ static int cmd_config_clear_tags(const struct shell *shell, size_t argc, char **
577577
return 0;
578578
}
579579

580+
static int cmd_config_scan(const struct shell *shell, size_t argc, char **argv)
581+
{
582+
shell_print(shell, "scanning...");
583+
584+
k_sem_take(&m_scan_sem, K_FOREVER);
585+
586+
struct bt_le_scan_param scan_params = m_scan_params;
587+
588+
int ret = bt_le_scan_start(&scan_params, scan_cb);
589+
if (ret) {
590+
LOG_ERR("Call `bt_le_scan_start` failed (err %d)", ret);
591+
k_sem_give(&m_scan_sem);
592+
return ret;
593+
}
594+
595+
k_sleep(K_SECONDS(CTR_BLE_TAG_ENROLL_TIMEOUT_SEC));
596+
597+
ret = bt_le_scan_stop();
598+
if (ret) {
599+
LOG_ERR("Call `bt_le_scan_stop` failed (err %d)", ret);
600+
k_sem_give(&m_scan_sem);
601+
return ret;
602+
}
603+
604+
k_sem_give(&m_scan_sem);
605+
606+
shell_print(shell, "scan finished");
607+
608+
for (int i = 0; i < CTR_BLE_TAG_COUNT; i++) {
609+
uint8_t addr[BT_ADDR_SIZE];
610+
int rssi;
611+
float voltage;
612+
float temperature;
613+
float humidity;
614+
bool valid;
615+
616+
ret = ctr_ble_tag_read(i, addr, &rssi, &voltage, &temperature, &humidity, &valid);
617+
if (ret) {
618+
continue;
619+
}
620+
621+
if (valid) {
622+
char addr_str[BT_ADDR_SIZE * 2 + 1];
623+
624+
ret = ctr_buf2hex(addr, BT_ADDR_SIZE, addr_str, sizeof(addr_str), true);
625+
if (ret < 0) {
626+
LOG_ERR("Call `ctr_buf2hex` failed: %d", ret);
627+
return ret;
628+
}
629+
630+
shell_print(shell,
631+
"tag index %d: addr: %s / rssi: %d dBm / voltage: %.2f V / "
632+
"temperature: %.2f C / "
633+
"humidity: %.2f %%",
634+
i, addr_str, rssi, voltage, temperature, humidity);
635+
}
636+
}
637+
638+
return 0;
639+
}
640+
580641
static int cmd_config_enroll(const struct shell *shell, size_t argc, char **argv)
581642
{
582643
k_sem_take(&m_scan_sem, K_FOREVER);
@@ -645,10 +706,11 @@ SHELL_STATIC_SUBCMD_SET_CREATE(
645706
sub_tag_config_devices,
646707

647708
SHELL_CMD_ARG(add, NULL, "Add a device.", cmd_config_add_tag, 2, 0),
648-
SHELL_CMD_ARG(enroll, NULL, "Enroll a device.", cmd_config_enroll, 1, 0),
709+
SHELL_CMD_ARG(enroll, NULL, "Enroll a device nearby (10 seconds).", cmd_config_enroll, 1, 0),
649710
SHELL_CMD_ARG(list, NULL, "List all devices.", cmd_config_list_tags, 1, 0),
650711
SHELL_CMD_ARG(remove, NULL, "Remove a device.", cmd_config_remove_tag, 2, 0),
651712
SHELL_CMD_ARG(clear, NULL, "Clear all devices.", cmd_config_clear_tags, 1, 0),
713+
SHELL_CMD_ARG(read, NULL, "Read enrolled devices (10 seconds).", cmd_config_scan, 1, 0),
652714

653715
SHELL_SUBCMD_SET_END
654716
);
@@ -683,7 +745,7 @@ static void start_scan_work_handler(struct k_work *work)
683745
{
684746
k_sem_take(&m_scan_sem, K_FOREVER);
685747

686-
int ret = bt_le_scan_start(BT_LE_SCAN_ACTIVE, scan_cb);
748+
int ret = bt_le_scan_start(&m_scan_params, scan_cb);
687749
if (ret) {
688750
LOG_ERR("Call `bt_le_scan_start` failed: %d", ret);
689751
k_sem_give(&m_scan_sem);
@@ -742,7 +804,7 @@ static int init(void)
742804
return ret;
743805
}
744806

745-
m_scan_params.type = BT_HCI_LE_SCAN_ACTIVE;
807+
m_scan_params.type = BT_LE_SCAN_TYPE_ACTIVE;
746808
m_scan_params.options = BT_LE_SCAN_OPT_FILTER_ACCEPT_LIST;
747809
m_scan_params.interval = CTR_BLE_TAG_SCAN_MAX_TIME;
748810
m_scan_params.window = CTR_BLE_TAG_SCAN_MAX_TIME;
@@ -754,14 +816,14 @@ static int init(void)
754816
}
755817

756818
for (size_t i = 0; i < CTR_BLE_TAG_COUNT; i++) {
757-
if (ctr_ble_tag_is_addr_empty(m_config_interim.addr[i])) {
819+
if (!ctr_ble_tag_is_addr_empty(m_config_interim.addr[i])) {
758820
bt_addr_le_t addr = {
759821
.type = BT_ADDR_LE_PUBLIC,
760822
};
761823

762824
memcpy(addr.a.val, m_config_interim.addr[i], BT_ADDR_SIZE);
763825

764-
ret = bt_le_filter_accept_list_add(&addr);
826+
ret = bt_le_filter_accept_list_add((const bt_addr_le_t *)&addr);
765827
if (ret) {
766828
LOG_ERR("Call `bt_le_filter_accept_list_add` failed: %d", ret);
767829
return ret;

0 commit comments

Comments
 (0)