mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
304 lines
7.3 KiB
C
304 lines
7.3 KiB
C
/*
|
|
* Copyright (C) 2017 Inria
|
|
*
|
|
* 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 pkg_semtech-loramac
|
|
* @brief Public API and definitions of the Semtech LoRaMAC
|
|
* @{
|
|
*
|
|
* @file
|
|
*
|
|
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
|
|
*/
|
|
|
|
#ifndef SEMTECH_LORAMAC_H
|
|
#define SEMTECH_LORAMAC_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <inttypes.h>
|
|
#include "net/loramac.h"
|
|
|
|
#include "sx127x.h"
|
|
|
|
/**
|
|
* @name Definitions for messages exchanged between the MAC and call threads
|
|
* @{
|
|
*/
|
|
#define MSG_TYPE_ISR (0x3456) /**< radio device ISR */
|
|
#define MSG_TYPE_RX_TIMEOUT (0x3457) /**< radio driver RX timeout */
|
|
#define MSG_TYPE_TX_TIMEOUT (0x3458) /**< radio driver TX timeout */
|
|
#define MSG_TYPE_MAC_TIMEOUT (0x3459) /**< MAC timers timeout */
|
|
#define MSG_TYPE_LORAMAC_CMD (0x3460) /**< Command sent to the MAC */
|
|
#define MSG_TYPE_LORAMAC_NOTIFY (0x3461) /**< MAC notifications */
|
|
/** @} */
|
|
|
|
/**
|
|
* @brief Maximum payload size of a LoRaWAN application data
|
|
*/
|
|
#define LORAWAN_APP_DATA_MAX_SIZE (242U)
|
|
|
|
/**
|
|
* @brief LoRaMAC status
|
|
*/
|
|
enum {
|
|
SEMTECH_LORAMAC_JOIN_SUCCEEDED, /**< Join procedure succeeded */
|
|
SEMTECH_LORAMAC_JOIN_FAILED, /**< Join procedure failed */
|
|
SEMTECH_LORAMAC_NOT_JOINED, /**< MAC is not joined */
|
|
SEMTECH_LORAMAC_TX_DONE, /**< Transmission completed */
|
|
SEMTECH_LORAMAC_RX_DATA, /**< Data received */
|
|
};
|
|
|
|
typedef struct {
|
|
uint8_t payload[LORAWAN_APP_DATA_MAX_SIZE]; /**< RX payload buffer */
|
|
uint8_t payload_len; /**< Length of the RX payload */
|
|
uint8_t port; /**< RX port */
|
|
} semtech_loramac_rx_data_t;
|
|
|
|
/**
|
|
* @brief Initializes semtech loramac
|
|
*
|
|
* @param[in] dev pointer to the radio device
|
|
*
|
|
* @return 0 on success
|
|
* @return -1 on failure
|
|
*/
|
|
int semtech_loramac_init(sx127x_t *dev);
|
|
|
|
/**
|
|
* @brief Starts a LoRaWAN network join procedure
|
|
*
|
|
* @param[in] type The type of join procedure (otaa or abp)
|
|
*
|
|
* @return SEMTECH_LORAMAC_JOIN_SUCCEEDED on success
|
|
* @return SEMTECH_LORAMAC_JOIN_FAILED on failure
|
|
*/
|
|
uint8_t semtech_loramac_join(uint8_t type);
|
|
|
|
/**
|
|
* @brief Sends data to LoRaWAN
|
|
*
|
|
* @param[in] cnf Use confirmable/unconfirmable send type
|
|
* @param[in] port The send port to use (between 1 and 223)
|
|
* @param[in] tx_buf The TX buffer
|
|
* @param[in] tx_len The length of the TX buffer
|
|
* @param[out] rx_data The RX data descriptor
|
|
*
|
|
* @return SEMTECH_LORAMAC_NOT_JOINED when the network is not joined
|
|
* @return SEMTECH_LORAMAC_TX_DONE when TX has completed, no data received
|
|
* @return SEMTECH_LORAMAC_RX_DATA when TX has completed and data is received
|
|
*/
|
|
uint8_t semtech_loramac_send(uint8_t cnf, uint8_t port,
|
|
uint8_t *tx_buf, uint8_t tx_len,
|
|
semtech_loramac_rx_data_t *rx_data);
|
|
|
|
/**
|
|
* @brief Sets the device EUI
|
|
*
|
|
* @param[in] eui The device EUI
|
|
*/
|
|
void semtech_loramac_set_deveui(const uint8_t *eui);
|
|
|
|
/**
|
|
* @brief Gets the device EUI
|
|
*
|
|
* @param[out] eui The device EUI
|
|
*/
|
|
void semtech_loramac_get_deveui(uint8_t *eui);
|
|
|
|
/**
|
|
* @brief Sets the application EUI
|
|
*
|
|
* @param[in] eui The application EUI
|
|
*/
|
|
void semtech_loramac_set_appeui(const uint8_t *eui);
|
|
|
|
/**
|
|
* @brief Gets the application EUI
|
|
*
|
|
* @param[out] eui The application EUI
|
|
*/
|
|
void semtech_loramac_get_appeui(uint8_t *eui);
|
|
|
|
/**
|
|
* @brief Sets the application key
|
|
*
|
|
* @param[in] key The application key
|
|
*/
|
|
void semtech_loramac_set_appkey(const uint8_t *key);
|
|
|
|
/**
|
|
* @brief Gets the application key
|
|
*
|
|
* @param[in] key The application key
|
|
*/
|
|
void semtech_loramac_get_appkey(uint8_t *key);
|
|
|
|
/**
|
|
* @brief Sets the application session key
|
|
*
|
|
* @param[in] key The application session key
|
|
*/
|
|
void semtech_loramac_set_appskey(const uint8_t *skey);
|
|
|
|
/**
|
|
* @brief Gets the application session key
|
|
*
|
|
* @param[in] key The application session key
|
|
*/
|
|
void semtech_loramac_get_appskey(uint8_t *skey);
|
|
|
|
/**
|
|
* @brief Sets the network session key
|
|
*
|
|
* @param[in] key The network session key
|
|
*/
|
|
void semtech_loramac_set_nwkskey(const uint8_t *skey);
|
|
|
|
/**
|
|
* @brief Gets the network session key
|
|
*
|
|
* @param[in] key The network session key
|
|
*/
|
|
void semtech_loramac_get_nwkskey(uint8_t *skey);
|
|
|
|
/**
|
|
* @brief Sets the device address
|
|
*
|
|
* @param[in] addr The device address
|
|
*/
|
|
void semtech_loramac_set_devaddr(const uint8_t *addr);
|
|
|
|
/**
|
|
* @brief Gets the device address
|
|
*
|
|
* @param[in] addr The device address
|
|
*/
|
|
void semtech_loramac_get_devaddr(uint8_t *addr);
|
|
|
|
/**
|
|
* @brief Sets the device class
|
|
*
|
|
* @param[in] cls The device class
|
|
*/
|
|
void semtech_loramac_set_class(loramac_class_t cls);
|
|
|
|
/**
|
|
* @brief Gets the device class
|
|
*
|
|
* @return The device class
|
|
*/
|
|
loramac_class_t semtech_loramac_get_class(void);
|
|
|
|
/**
|
|
* @brief Sets the channels datarate
|
|
*
|
|
* @param[in] dr The datarate (from 1 to 16)
|
|
*/
|
|
void semtech_loramac_set_dr(uint8_t dr);
|
|
|
|
/**
|
|
* @brief Gets the channels datarate
|
|
*
|
|
* @return The datarate (from 1 to 16)
|
|
*/
|
|
uint8_t semtech_loramac_get_dr(void);
|
|
|
|
/**
|
|
* @brief Enables/disable adaptive datarate
|
|
*
|
|
* @param[in] adr Adaptive datarate mode
|
|
*/
|
|
void semtech_loramac_set_adr(bool adr);
|
|
|
|
/**
|
|
* @brief Checks if adaptive datarate is set
|
|
*
|
|
* @return true if adr is on, false otherwise
|
|
*/
|
|
bool semtech_loramac_get_adr(void);
|
|
|
|
/**
|
|
* @brief Enable/disable the public network mode
|
|
*
|
|
* @param[in] public The public network mode
|
|
*/
|
|
void semtech_loramac_set_public_network(bool public);
|
|
|
|
/**
|
|
* @brief Checks if public network is set
|
|
*
|
|
* @return true if public network is on, false otherwise
|
|
*/
|
|
bool semtech_loramac_get_public_network(void);
|
|
|
|
/**
|
|
* @brief Sets the NetID (only useful with ABP join procedure)
|
|
*
|
|
* @param[in] network_id The NetID
|
|
*/
|
|
void semtech_loramac_set_netid(uint32_t netid);
|
|
|
|
/**
|
|
* @brief Gets the NetID
|
|
*
|
|
* @return The NetID
|
|
*/
|
|
uint32_t semtech_loramac_get_netid(void);
|
|
|
|
/**
|
|
* @brief Sets the channels TX power index
|
|
*
|
|
* @param[in] dr The TX power index (from 1 to 16)
|
|
*/
|
|
void semtech_loramac_set_tx_power(uint8_t power);
|
|
|
|
/**
|
|
* @brief Gets the channels TX power index
|
|
*
|
|
* @return The TX power index (from 1 to 16)
|
|
*/
|
|
uint8_t semtech_loramac_get_tx_power(void);
|
|
|
|
/**
|
|
* @brief Sets the RX2 frequency
|
|
*
|
|
* @param[in] freq The RX2 frequency
|
|
*/
|
|
void semtech_loramac_set_rx2_freq(uint8_t freq);
|
|
|
|
/**
|
|
* @brief Gets the RX2 frequency
|
|
*
|
|
* @return The RX2 frequency
|
|
*/
|
|
uint32_t semtech_loramac_get_rx2_freq(void);
|
|
|
|
/**
|
|
* @brief Sets the RX2 datarate
|
|
*
|
|
* @param[in] freq The RX2 datarate
|
|
*/
|
|
void semtech_loramac_set_rx2_dr(uint8_t dr);
|
|
|
|
/**
|
|
* @brief Gets the RX2 datarate
|
|
*
|
|
* @return The RX2 datarate
|
|
*/
|
|
uint8_t semtech_loramac_get_rx2_dr(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* SEMTECH_LORAMAC_H */
|
|
/** @} */
|