/* * Copyright (C) 2017 Inria * 2017 Inria Chile * * 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 tests * * @file * @brief Semtech LoRaMAC test application * * @author Alexandre Abadie * @author Jose Alamos */ #include #ifdef MODULE_SEMTECH_LORAMAC_RX #include "thread.h" #include "msg.h" #endif #include "shell.h" #include "semtech_loramac.h" extern semtech_loramac_t loramac; #ifdef MODULE_SEMTECH_LORAMAC_RX #define LORAMAC_RECV_MSG_QUEUE (4U) static msg_t _loramac_recv_queue[LORAMAC_RECV_MSG_QUEUE]; static char _recv_stack[THREAD_STACKSIZE_DEFAULT]; static void *_wait_recv(void *arg) { msg_init_queue(_loramac_recv_queue, LORAMAC_RECV_MSG_QUEUE); (void)arg; while (1) { /* blocks until something is received */ switch (semtech_loramac_recv(&loramac)) { case SEMTECH_LORAMAC_RX_DATA: loramac.rx_data.payload[loramac.rx_data.payload_len] = 0; printf("Data received: %s, port: %d\n", (char *)loramac.rx_data.payload, loramac.rx_data.port); break; case SEMTECH_LORAMAC_RX_LINK_CHECK: printf("Link check information:\n" " - Demodulation margin: %d\n" " - Number of gateways: %d\n", loramac.link_chk.demod_margin, loramac.link_chk.nb_gateways); break; case SEMTECH_LORAMAC_RX_CONFIRMED: puts("Received ACK from network"); break; case SEMTECH_LORAMAC_TX_SCHEDULE: puts("The Network Server has pending data"); break; default: break; } } return NULL; } #endif /* loramac shell command handler is implemented in sys/shell/commands/sc_loramac.c */ int main(void) { #ifdef MODULE_SEMTECH_LORAMAC_RX thread_create(_recv_stack, sizeof(_recv_stack), THREAD_PRIORITY_MAIN - 1, 0, _wait_recv, NULL, "recv thread"); #endif puts("All up, running the shell now"); char line_buf[SHELL_DEFAULT_BUFSIZE]; shell_run(NULL, line_buf, SHELL_DEFAULT_BUFSIZE); }