@@ -577,6 +577,67 @@ static int cmd_config_clear_tags(const struct shell *shell, size_t argc, char **
577
577
return 0 ;
578
578
}
579
579
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
+
580
641
static int cmd_config_enroll (const struct shell * shell , size_t argc , char * * argv )
581
642
{
582
643
k_sem_take (& m_scan_sem , K_FOREVER );
@@ -645,10 +706,11 @@ SHELL_STATIC_SUBCMD_SET_CREATE(
645
706
sub_tag_config_devices ,
646
707
647
708
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 ),
649
710
SHELL_CMD_ARG (list , NULL , "List all devices." , cmd_config_list_tags , 1 , 0 ),
650
711
SHELL_CMD_ARG (remove , NULL , "Remove a device." , cmd_config_remove_tag , 2 , 0 ),
651
712
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 ),
652
714
653
715
SHELL_SUBCMD_SET_END
654
716
);
@@ -683,7 +745,7 @@ static void start_scan_work_handler(struct k_work *work)
683
745
{
684
746
k_sem_take (& m_scan_sem , K_FOREVER );
685
747
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 );
687
749
if (ret ) {
688
750
LOG_ERR ("Call `bt_le_scan_start` failed: %d" , ret );
689
751
k_sem_give (& m_scan_sem );
@@ -742,7 +804,7 @@ static int init(void)
742
804
return ret ;
743
805
}
744
806
745
- m_scan_params .type = BT_HCI_LE_SCAN_ACTIVE ;
807
+ m_scan_params .type = BT_LE_SCAN_TYPE_ACTIVE ;
746
808
m_scan_params .options = BT_LE_SCAN_OPT_FILTER_ACCEPT_LIST ;
747
809
m_scan_params .interval = CTR_BLE_TAG_SCAN_MAX_TIME ;
748
810
m_scan_params .window = CTR_BLE_TAG_SCAN_MAX_TIME ;
@@ -754,14 +816,14 @@ static int init(void)
754
816
}
755
817
756
818
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 ])) {
758
820
bt_addr_le_t addr = {
759
821
.type = BT_ADDR_LE_PUBLIC ,
760
822
};
761
823
762
824
memcpy (addr .a .val , m_config_interim .addr [i ], BT_ADDR_SIZE );
763
825
764
- ret = bt_le_filter_accept_list_add (& addr );
826
+ ret = bt_le_filter_accept_list_add (( const bt_addr_le_t * ) & addr );
765
827
if (ret ) {
766
828
LOG_ERR ("Call `bt_le_filter_accept_list_add` failed: %d" , ret );
767
829
return ret ;
0 commit comments