/**
 * @defgroup pkg_semtech-loramac   Semtech LoRaMAC implementation
 * @ingroup  pkg
 * @ingroup  net
 * @brief    Provides a RIOT adaption of Semtech LoRaMAC implementation
 *
 * # Introduction
 *
 * This package provides an API built on top of the
 * [Semtech LoRaMAC-node](https://github.com/Lora-net/LoRaMac-node) reference
 * implementation of a LoRa network.
 *
 *
 * # Importing this package in an application
 *
 * This package only works with Semtech SX1272 and SX1276 radio devices. Thus,
 * in order to use it properly, the application `Makefile` must import the
 * corresponding device driver:
 * ```
 *     USEMODULE += sx1272  # for a SX1272 radio device
 *     USEMODULE += sx1276  # for a SX1276 radio device
 * ```
 *
 * In order to use this package in an application, add the following in
 * the application `Makefile`:
 * ```
 *     USEPKG += semtech-loramac
 * ```
 *
 * Since the LoRa radio depends on regional parameters regarding the access
 * to the physical support, the region where the device is used needs to be
 * set at compile time. Example for EU868:
 * ```
 *     CFLAGS += -DREGION_EU868
 * ```
 *
 * # Using the package API
 *
 * The package provides a simple API for initializing the MAC, setting/getting
 * parameters, joining a network and sending/receiving packets to/from a LoRa
 * Network.
 *
 * In your `main.c`, some header files must be first included:
 * ```c
 *     #include "net/loramac.h"     /* core loramac definitions */
 *     #include "semtech-loramac.h" /* package API */
 *     #include "sx127x.h"          /* SX1272/6 device driver API */
 *     #include "sx127x_params.h"   /* SX1272/6 device driver initialization parameters */
 * ```
 *
 * Then define global variables:
 * ```c
 *     sx127x_t sx127x;  /* SX1272/6 device descriptor */
 *     /* define the required keys for OTAA, e.g over-the-air activation (the
 *        null arrays need to be updated with valid LoRa values) */
 *     static const uint8_t deveui[LORAMAC_DEVEUI_LEN] = { 0x00, 0x00, 0x00, 0x00, \
 *                                                         0x00, 0x00, 0x00, 0x00 };
 *     static const uint8_t appeui[LORAMAC_APPEUI_LEN] = { 0x00, 0x00, 0x00, 0x00, \
 *                                                         0x00, 0x00, 0x00, 0x00 };
 *     static const uint8_t appkey[LORAMAC_APPKEY_LEN] = { 0x00, 0x00, 0x00, 0x00, \
 *                                                         0x00, 0x00, 0x00, 0x00, \
 *                                                         0x00, 0x00, 0x00, 0x00, \
 *                                                         0x00, 0x00, 0x00, 0x00 };
 * ```
 *
 * Now in the `main` function:
 * 1. setup the radio driver with the initialization parameters (spi bus, pins, etc)
 * 2. initialize the LoRaMAC MAC layer
 * 3. set the LoRa keys
 * 4. join the network
 * 5. send some data to the network
 *
 * ```c
 * int main(void)
 * {
 *     /* 1. setup the radio driver */
 *     sx127x_setup(&sx127x, &sx127x_params[0]);
 *
 *     /* 2. initialize the LoRaMAC MAC layer */
 *     semtech_loramac_init(&sx127x);
 *
 *     /* 3. set the device required keys */
 *     semtech_loramac_set_deveui(deveui);
 *     semtech_loramac_set_appeui(appeui);
 *     semtech_loramac_set_appkey(appkey);
 *
 *     /* 4. join the network */
 *     if (semtech_loramac_join(LORAMAC_JOIN_OTAA) != SEMTECH_LORAMAC_JOIN_SUCCEEDED) {
 *         puts("Join procedure failed");
 *         return 1;
 *     }
 *     puts("Join procedure succeeded");
 *
 *     /* 5. send some data using confirmable mode on port 10 and assuming no
 *           data is received */
 *     char *message = "This is RIOT";
 *     semtech_loramac_rx_data_t rx_data;
 *     semtech_loramac_send(LORAMAC_TX_CNF, 10,
                            (uint8_t *)message, strlen(message), &rx_data);
 * }
 * ```
 *
 * @warning It is not possible to directly call the original LoRaMAC-node API
 *          using this package. This package should only be considered as a
 *          wrapper around the original LoRaMAC-node API and only the API
 *          provided by this package should be used.
 *
 * # License
 *
 * The library is using the BSD 3-clause license.
 *
 * @see      github.com/Lora-net/LoRaMac-node
 */