diff --git a/tests/nimble_statconn_gnrc_ext/Makefile b/tests/nimble_statconn_gnrc_ext/Makefile new file mode 100644 index 0000000000..c0a373c6dc --- /dev/null +++ b/tests/nimble_statconn_gnrc_ext/Makefile @@ -0,0 +1,23 @@ +BOARD ?= nrf52dk +include ../Makefile.tests_common + +# include shell support +USEMODULE += shell +USEMODULE += shell_commands +USEMODULE += ps + +# Include GNRC and RPL +USEMODULE += auto_init_gnrc_netif +USEMODULE += gnrc_ipv6_router_default +USEMODULE += auto_init_gnrc_rpl +USEMODULE += gnrc_rpl +USEMODULE += gnrc_icmpv6_echo + +# Setup Nimble +USEMODULE += nimble_statconn_ext +FEATURES_OPTIONAL += ble_phy_2mbit +FEATURES_OPTIONAL += ble_phy_coded + +TEST_ON_CI_WHITELIST += nrf52dk nrf52840dk + +include $(RIOTBASE)/Makefile.include diff --git a/tests/nimble_statconn_gnrc_ext/Makefile.ci b/tests/nimble_statconn_gnrc_ext/Makefile.ci new file mode 100644 index 0000000000..4079597a0f --- /dev/null +++ b/tests/nimble_statconn_gnrc_ext/Makefile.ci @@ -0,0 +1,4 @@ +BOARD_INSUFFICIENT_MEMORY := \ + e104-bt5010a-tb \ + e104-bt5011a-tb \ + # diff --git a/tests/nimble_statconn_gnrc_ext/main.c b/tests/nimble_statconn_gnrc_ext/main.c new file mode 100644 index 0000000000..ffc45a567f --- /dev/null +++ b/tests/nimble_statconn_gnrc_ext/main.c @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2020 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 Run IP-over-BLE using the 'statconn' BLE connection manager + * + * @author Hauke Petersen + * + * @} + */ + +#include + +#include "shell.h" +#include "msg.h" +#include "nimble_statconn.h" +#include "net/bluetil/addr.h" + +#define MAIN_QUEUE_SIZE (8) +static msg_t _main_msg_queue[MAIN_QUEUE_SIZE]; + +static void _print_evt(const char *msg, int handle, const uint8_t *addr) +{ + printf("[ble] %s (%i|", msg, handle); + if (addr) { + bluetil_addr_print(addr); + } + else { + printf("n/a"); + } + puts(")"); +} + +static void _on_ble_evt(int handle, nimble_netif_event_t event, + const uint8_t *addr) +{ + switch (event) { + case NIMBLE_NETIF_CONNECTED_MASTER: + _print_evt("CONNECTED master", handle, addr); + break; + case NIMBLE_NETIF_CONNECTED_SLAVE: + _print_evt("CONNECTED slave", handle, addr); + break; + case NIMBLE_NETIF_CLOSED_MASTER: + _print_evt("CLOSED master", handle, addr); + break; + case NIMBLE_NETIF_CLOSED_SLAVE: + _print_evt("CLOSED slave", handle, addr); + break; + case NIMBLE_NETIF_CONN_UPDATED: + _print_evt("UPDATED", handle, addr); + break; + default: + /* do nothing */ + return; + } +} + +int main(void) +{ + puts("IPv6-over-BLE with statconn BLE connection manager"); + + /* we need a message queue for the thread running the shell in order to + * receive potentially fast incoming networking packets */ + msg_init_queue(_main_msg_queue, MAIN_QUEUE_SIZE); + + /* register for BLE events */ + nimble_statconn_eventcb(_on_ble_evt); + + /* start shell */ + puts("All up, running the shell now"); + char line_buf[SHELL_DEFAULT_BUFSIZE]; + shell_run(NULL, line_buf, SHELL_DEFAULT_BUFSIZE); + + /* should never be reached */ + return 0; +}