1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include <bluetooth/bluetooth.h> #include <bluetooth/hci.h>
static void scan_cb(const bt_addr_le_t *addr, int8_t rssi, uint8_t adv_type, struct net_buf_simple *buf); static bool parse_cb(struct bt_data *data, void *user_data);
void ble_scan() { struct bt_le_scan_param scan_param = { .type = BT_HCI_LE_SCAN_PASSIVE, .options = BT_LE_SCAN_OPT_NONE, .interval = 0x0010, .window = 0x0010, }; int err;
err = bt_enable(NULL); if (err) { printk("[Bluetooth] init failed (err %d)\n", err); return; }
err = bt_le_scan_start(&scan_param, scan_cb); if (err) { printk("[Bluetooth] start scanning failed (err %d)\n", err); return; } }
static void scan_cb(const bt_addr_le_t *addr, int8_t rssi, uint8_t adv_type, struct net_buf_simple *buf) { bt_data_parse(buf, parse_cb, (void *)addr); }
static bool parse_cb(struct bt_data *data, void *user_data) { bt_addr_le_t *addr = (bt_addr_le_t *)user_data;
switch (data->type) { case BT_DATA_NAME_COMPLETE: printk("ble addr: "); printk("%x:", addr->a.val[5]); printk("%x:", addr->a.val[4]); printk("%x:", addr->a.val[3]); printk("%x:", addr->a.val[2]); printk("%x:", addr->a.val[1]); printk("%x", addr->a.val[0]); printk("\n");
printk("ble name: "); for (int i = 0; i < data->data_len; i++) { printk("%c", data->data[i]); } printk("\n");
return false; default: return true; } }
|