int main(int argc, char **argv) { int dev_id; int err, opt, dd; uint8_t own_type = 0x00; uint8_t scan_type = 0x01; uint8_t filter_type = 0; uint8_t filter_policy = 0x00; uint16_t interval = htobs(0x0010); uint16_t window = htobs(0x0010); // uint8_t filter_dup = 1; uint8_t filter_dup = 0; // don't filter duplicate dev_id = hci_get_route(NULL); dd = hci_open_dev( dev_id ); if (dev_id < 0 || dd < 0) { perror("opening socket"); exit(1); } err = hci_le_set_scan_parameters(dd, scan_type, interval, window, own_type, filter_policy, 1000); if (err < 0) { perror("Set scan parameters failed"); } err = hci_le_set_scan_enable(dd, 0x01, filter_dup, 1000); if (err < 0) { perror("Enable scan failed"); exit(1); } printf("LE Scan ... \n"); err = print_advertising_devices(dd, filter_type); if (err < 0) { perror("Could not receive advertising events"); exit(1); } err = hci_le_set_scan_enable(dd, 0x00, filter_dup, 1000); if (err < 0) { perror("Disable scan failed"); exit(1); } hci_close_dev(dd); return 0; }
int do_lescan() { int dev_id, sock; int ret; if (!strncmp(g_src, "hci", 3)) dev_id = atoi(g_src + 3); else dev_id = hci_get_route(NULL); sock = hci_open_dev(dev_id); if (dev_id < 0 || sock < 0) { perror("opening socket"); exit(1); } uint8_t own_type = 0x00; uint16_t interval = htobs(0x0012); uint16_t window = htobs(0x0012); uint8_t scan_type = 0x01; uint8_t filter_dup = 1; uint8_t filter_type = 0; ret = hci_le_set_scan_parameters(sock, scan_type, interval, window, own_type, 0x00, 1000); if (ret) { perror("hci_le_set_scan_parameters"); exit(1); } ret = hci_le_set_scan_enable(sock, 0x01, filter_dup, 1000); if (ret) { perror("hci_le_set_scan_enable"); exit(1); } print_advertising_devices(sock, filter_type); ret = hci_le_set_scan_enable(sock, 0x00, filter_dup, 1000); close(sock); return 0; }