/* * Copyright (C) 2019 Freie Universität Berlin * * This file is subject to the terms and conditions of the GNU Lesser * General Public License v2.1. See the file LICENSE in the top level * directory for more details. */ /** * @ingroup examples * @{ * * @file * @brief Example for using NimBLE as a BLE scanner * * @author Hauke Petersen * * @} */ #include #include #include #include "xtimer.h" #include "shell.h" #include "shell_commands.h" #include "nimble_scanner.h" #include "nimble_scanlist.h" /* default scan duration (1s) */ #define DEFAULT_DURATION (1000000U) int _cmd_scan(int argc, char **argv) { uint32_t timeout = DEFAULT_DURATION; if ((argc == 2) && (memcmp(argv[1], "help", 4) == 0)) { printf("usage: %s [timeout in ms]\n", argv[0]); return 0; } if (argc >= 2) { timeout = (uint32_t)(atoi(argv[1]) * 1000); } nimble_scanlist_clear(); printf("Scanning for %ums now ...", (unsigned)(timeout / 1000)); nimble_scanner_start(); xtimer_usleep(timeout); nimble_scanner_stop(); puts(" done\n\nResults:"); nimble_scanlist_print(); puts(""); return 0; } static const shell_command_t _commands[] = { { "scan", "trigger a BLE scan", _cmd_scan }, { NULL, NULL, NULL } }; int main(void) { puts("NimBLE Scanner Example Application"); puts("Type `scan help` for more information"); /* in this example, we want Nimble to scan 'full time', so we set the * window equal the interval */ struct ble_gap_disc_params scan_params = { .itvl = BLE_GAP_LIM_DISC_SCAN_INT, .window = BLE_GAP_LIM_DISC_SCAN_WINDOW, .filter_policy = 0, /* don't use */ .limited = 0, /* no limited discovery */ .passive = 0, /* no passive scanning */ . filter_duplicates = 0, /* no duplicate filtering */ }; /* initialize the nimble scanner */ nimble_scanlist_init(); nimble_scanner_init(&scan_params, nimble_scanlist_update); /* start shell */ char line_buf[SHELL_DEFAULT_BUFSIZE]; shell_run(_commands, line_buf, SHELL_DEFAULT_BUFSIZE); return 0; }