From b5c48ef04ee62b7a332b160735507fbb69f065e8 Mon Sep 17 00:00:00 2001 From: Alexandre Abadie Date: Wed, 29 May 2019 10:10:16 +0200 Subject: [PATCH] pkg/semtech-loramac: make RX optional --- makefiles/pseudomodules.inc.mk | 1 + pkg/semtech-loramac/contrib/semtech_loramac.c | 8 ++++++++ pkg/semtech-loramac/doc.txt | 7 ++++++- pkg/semtech-loramac/include/semtech_loramac.h | 16 ++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/makefiles/pseudomodules.inc.mk b/makefiles/pseudomodules.inc.mk index b4b6abd897..1bbc7c0e43 100644 --- a/makefiles/pseudomodules.inc.mk +++ b/makefiles/pseudomodules.inc.mk @@ -68,6 +68,7 @@ PSEUDOMODULES += saul_gpio PSEUDOMODULES += saul_nrf_temperature PSEUDOMODULES += scanf_float PSEUDOMODULES += schedstatistics +PSEUDOMODULES += semtech_loramac_rx PSEUDOMODULES += sock PSEUDOMODULES += sock_ip PSEUDOMODULES += sock_tcp diff --git a/pkg/semtech-loramac/contrib/semtech_loramac.c b/pkg/semtech-loramac/contrib/semtech_loramac.c index 722e09be90..97f9bf559d 100644 --- a/pkg/semtech-loramac/contrib/semtech_loramac.c +++ b/pkg/semtech-loramac/contrib/semtech_loramac.c @@ -606,6 +606,7 @@ void *_semtech_loramac_event_loop(void *arg) msg_send(&msg_ret, mac->tx_pid); break; } +#ifdef MODULE_SEMTECH_LORAMAC_RX case MLME_LINK_CHECK: if (confirm->Status == LORAMAC_EVENT_INFO_STATUS_OK) { mac->link_chk.demod_margin = confirm->DemodMargin; @@ -619,6 +620,7 @@ void *_semtech_loramac_event_loop(void *arg) msg_ret.content.value = SEMTECH_LORAMAC_RX_LINK_CHECK; msg_send(&msg_ret, mac->rx_pid); } +#endif default: break; } @@ -732,6 +734,7 @@ void *_semtech_loramac_event_loop(void *arg) _semtech_loramac_send(mac, NULL, 0); mac->port = prev_port; } +#ifdef MODULE_SEMTECH_LORAMAC_RX if (indication->RxData) { DEBUG("[semtech-loramac] MCPS indication: data received\n"); memcpy(mac->rx_data.payload, @@ -755,6 +758,7 @@ void *_semtech_loramac_event_loop(void *arg) msg_ret.content.value = SEMTECH_LORAMAC_RX_CONFIRMED; msg_send(&msg_ret, mac->rx_pid); } +#endif break; } @@ -825,6 +829,7 @@ uint8_t semtech_loramac_join(semtech_loramac_t *mac, uint8_t type) return SEMTECH_LORAMAC_JOIN_SUCCEEDED; } +#ifdef MODULE_SEMTECH_LORAMAC_RX void semtech_loramac_request_link_check(semtech_loramac_t *mac) { mutex_lock(&mac->lock); @@ -833,6 +838,7 @@ void semtech_loramac_request_link_check(semtech_loramac_t *mac) LoRaMacMlmeRequest(&mlmeReq); mutex_unlock(&mac->lock); } +#endif uint8_t semtech_loramac_send(semtech_loramac_t *mac, uint8_t *data, uint8_t len) { @@ -856,6 +862,7 @@ uint8_t semtech_loramac_send(semtech_loramac_t *mac, uint8_t *data, uint8_t len) return (uint8_t)msg.content.value; } +#ifdef MODULE_SEMTECH_LORAMAC_RX uint8_t semtech_loramac_recv(semtech_loramac_t *mac) { /* Correctly set the receiver thread pid */ @@ -868,3 +875,4 @@ uint8_t semtech_loramac_recv(semtech_loramac_t *mac) return (uint8_t)msg.content.value; } +#endif diff --git a/pkg/semtech-loramac/doc.txt b/pkg/semtech-loramac/doc.txt index 1ef4e0ca6a..9660698aa0 100644 --- a/pkg/semtech-loramac/doc.txt +++ b/pkg/semtech-loramac/doc.txt @@ -96,7 +96,12 @@ * } * ``` * - * To receive downlink messages, use a dedicated receiving thread. + * To receive downlink messages, enable the `semtech_loramac_rx` and use a + * dedicated receiving thread. + * - In the application Makefile, add + * ```mk + * USEMODULE += semtech_loramac_rx + * ``` * - At the beginning of the application source file, add the necessary * includes and declare the message queue and stack arrays: * ```c diff --git a/pkg/semtech-loramac/include/semtech_loramac.h b/pkg/semtech-loramac/include/semtech_loramac.h index 479b9c7e03..976ecc3660 100644 --- a/pkg/semtech-loramac/include/semtech_loramac.h +++ b/pkg/semtech-loramac/include/semtech_loramac.h @@ -99,6 +99,7 @@ typedef struct { uint8_t port; /**< RX port */ } semtech_loramac_rx_data_t; +#if defined(MODULE_SEMTECH_LORAMAC_RX) || DOXYGEN /** * @brief LoRaMAC link check information */ @@ -106,6 +107,7 @@ typedef struct { uint8_t demod_margin; /**< Demodulation margin */ uint8_t nb_gateways; /**< number of LoRa gateways found */ } semtech_loramac_link_check_info_t; +#endif /** * @brief Semtech LoRaMAC descriptor @@ -113,7 +115,9 @@ typedef struct { typedef struct { mutex_t lock; /**< loramac access lock */ uint8_t tx_pid; /**< pid of sender thread */ +#if defined(MODULE_SEMTECH_LORAMAC_RX) || DOXYGEN uint8_t rx_pid; /**< pid of receiver thread */ +#endif uint8_t port; /**< application TX port */ uint8_t cnf; /**< enable/disable confirmable messages */ uint8_t deveui[LORAMAC_DEVEUI_LEN]; /**< device EUI */ @@ -122,8 +126,10 @@ typedef struct { uint8_t appskey[LORAMAC_APPSKEY_LEN]; /**< application session key */ uint8_t nwkskey[LORAMAC_NWKSKEY_LEN]; /**< network session key */ uint8_t devaddr[LORAMAC_DEVADDR_LEN]; /**< device address */ +#if defined(MODULE_SEMTECH_LORAMAC_RX) || DOXYGEN semtech_loramac_rx_data_t rx_data; /**< struct handling the RX data */ semtech_loramac_link_check_info_t link_chk; /**< link check information */ +#endif } semtech_loramac_t; /** @@ -172,6 +178,7 @@ uint8_t semtech_loramac_join(semtech_loramac_t *mac, uint8_t type); */ uint8_t semtech_loramac_send(semtech_loramac_t *mac, uint8_t *data, uint8_t len); +#if defined(MODULE_SEMTECH_LORAMAC_RX) || DOXYGEN /** * @brief Wait for a message sent by the LoRaWAN network * @@ -184,6 +191,9 @@ uint8_t semtech_loramac_send(semtech_loramac_t *mac, uint8_t *data, uint8_t len) * Be sure to call this function before the end of the RX windows otherwise it * may block the calling thread. * + * By default this feature is not available to the user application, enable it + * by adding `USEMODULE += semtech_loramac_rx` to the application Makefile. + * * @see semtech_loramac_send * * @param[in] mac Pointer to the mac @@ -193,13 +203,19 @@ uint8_t semtech_loramac_send(semtech_loramac_t *mac, uint8_t *data, uint8_t len) * @return SEMTECH_LORAMAC_RX_CONFIRMED when an ACK is received from the network */ uint8_t semtech_loramac_recv(semtech_loramac_t *mac); +#endif +#if defined(MODULE_SEMTECH_LORAMAC_RX) || DOXYGEN /** * @brief Requests a LoRaWAN link check * + * By default this feature is not available to the user application, enable it + * by adding `USEMODULE += semtech_loramac_rx` to the application Makefile. + * * @param[in] mac Pointer to the mac */ void semtech_loramac_request_link_check(semtech_loramac_t *mac); +#endif /** * @brief Sets the device EUI