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;
}
Пример #2
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;
}