287 lines
7.9 KiB
C
287 lines
7.9 KiB
C
/* USER CODE BEGIN Header */
|
|
/**
|
|
******************************************************************************
|
|
* @file lora_app.c
|
|
* @author MCD Application Team
|
|
* @brief Application of the LRWAN Middleware
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2023 STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file
|
|
* in the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
/* USER CODE END Header */
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "platform.h"
|
|
#include "sys_app.h"
|
|
#include "lora_app.h"
|
|
#include "app_version.h"
|
|
#include "LmHandler.h"
|
|
|
|
/* USER CODE BEGIN Includes */
|
|
|
|
#include "lora_info.h"
|
|
|
|
/* USER CODE END Includes */
|
|
|
|
/* External variables ---------------------------------------------------------*/
|
|
/* USER CODE BEGIN EV */
|
|
|
|
/* USER CODE END EV */
|
|
|
|
/* Private typedef -----------------------------------------------------------*/
|
|
/* USER CODE BEGIN PTD */
|
|
|
|
/* USER CODE END PTD */
|
|
|
|
/* Private define ------------------------------------------------------------*/
|
|
/**
|
|
* LEDs period value of the timer in ms
|
|
*/
|
|
#define LED_PERIOD_TIME 500
|
|
|
|
/* USER CODE BEGIN PD */
|
|
|
|
/* USER CODE END PD */
|
|
|
|
/* Private macro -------------------------------------------------------------*/
|
|
/* USER CODE BEGIN PM */
|
|
|
|
/* USER CODE END PM */
|
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
/**
|
|
* @brief join event callback function
|
|
* @param joinParams status of join
|
|
*/
|
|
static void OnJoinRequest(LmHandlerJoinParams_t *joinParams);
|
|
|
|
/**
|
|
* @brief callback when LoRaWAN application has sent a frame
|
|
* @brief tx event callback function
|
|
* @param params status of last Tx
|
|
*/
|
|
static void OnTxData(LmHandlerTxParams_t *params);
|
|
|
|
/**
|
|
* @brief callback when LoRaWAN application has received a frame
|
|
* @param appData data received in the last Rx
|
|
* @param params status of last Rx
|
|
*/
|
|
static void OnRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params);
|
|
|
|
/**
|
|
* @brief callback when LoRaWAN Beacon status is updated
|
|
* @param params status of Last Beacon
|
|
*/
|
|
static void OnBeaconStatusChange(LmHandlerBeaconParams_t *params);
|
|
|
|
/**
|
|
* @brief callback when system time has been updated
|
|
*/
|
|
static void OnSysTimeUpdate(void);
|
|
|
|
/**
|
|
* @brief callback when LoRaWAN application Class is changed
|
|
* @param deviceClass new class
|
|
*/
|
|
static void OnClassChange(DeviceClass_t deviceClass);
|
|
|
|
/**
|
|
* Will be called each time a Radio IRQ is handled by the MAC layer
|
|
*
|
|
*/
|
|
static void OnMacProcessNotify(void);
|
|
|
|
/**
|
|
* @brief Change the periodicity of the uplink frames
|
|
* @param periodicity uplink frames period in ms
|
|
* @note Compliance test protocol callbacks
|
|
*/
|
|
static void OnTxPeriodicityChanged(uint32_t periodicity);
|
|
|
|
/**
|
|
* @brief Change the confirmation control of the uplink frames
|
|
* @param isTxConfirmed Indicates if the uplink requires an acknowledgement
|
|
* @note Compliance test protocol callbacks
|
|
*/
|
|
static void OnTxFrameCtrlChanged(LmHandlerMsgTypes_t isTxConfirmed);
|
|
|
|
/**
|
|
* @brief Change the periodicity of the ping slot frames
|
|
* @param pingSlotPeriodicity ping slot frames period in ms
|
|
* @note Compliance test protocol callbacks
|
|
*/
|
|
static void OnPingSlotPeriodicityChanged(uint8_t pingSlotPeriodicity);
|
|
|
|
/**
|
|
* @brief Will be called to reset the system
|
|
* @note Compliance test protocol callbacks
|
|
*/
|
|
static void OnSystemReset(void);
|
|
|
|
/* USER CODE BEGIN PFP */
|
|
|
|
/* USER CODE END PFP */
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/**
|
|
* @brief LoRaWAN handler Callbacks
|
|
*/
|
|
static LmHandlerCallbacks_t LmHandlerCallbacks =
|
|
{
|
|
.GetBatteryLevel = GetBatteryLevel,
|
|
.GetTemperature = GetTemperatureLevel,
|
|
.GetUniqueId = GetUniqueId,
|
|
.GetDevAddr = GetDevAddr,
|
|
.OnMacProcess = OnMacProcessNotify,
|
|
.OnJoinRequest = OnJoinRequest,
|
|
.OnTxData = OnTxData,
|
|
.OnRxData = OnRxData,
|
|
.OnBeaconStatusChange = OnBeaconStatusChange,
|
|
.OnSysTimeUpdate = OnSysTimeUpdate,
|
|
.OnClassChange = OnClassChange,
|
|
.OnTxPeriodicityChanged = OnTxPeriodicityChanged,
|
|
.OnTxFrameCtrlChanged = OnTxFrameCtrlChanged,
|
|
.OnPingSlotPeriodicityChanged = OnPingSlotPeriodicityChanged,
|
|
.OnSystemReset = OnSystemReset,
|
|
};
|
|
|
|
/* USER CODE BEGIN PV */
|
|
|
|
static LmHandlerParams_t LmHandlerParams =
|
|
{
|
|
.ActiveRegion = ACTIVE_REGION,
|
|
.DefaultClass = LORAWAN_DEFAULT_CLASS,
|
|
.AdrEnable = LORAWAN_ADR_STATE,
|
|
.IsTxConfirmed = LORAWAN_DEFAULT_CONFIRMED_MSG_STATE,
|
|
.TxDatarate = LORAWAN_DEFAULT_DATA_RATE,
|
|
.TxPower = LORAWAN_DEFAULT_TX_POWER,
|
|
.PingSlotPeriodicity = LORAWAN_DEFAULT_PING_SLOT_PERIODICITY,
|
|
.RxBCTimeout = LORAWAN_DEFAULT_CLASS_B_C_RESP_TIMEOUT
|
|
};
|
|
|
|
|
|
/* USER CODE END PV */
|
|
|
|
/* Exported functions ---------------------------------------------------------*/
|
|
/* USER CODE BEGIN EF */
|
|
|
|
/* USER CODE END EF */
|
|
|
|
void LoRaWAN_Init(void)
|
|
{
|
|
/* USER CODE BEGIN LoRaWAN_Init_LV */
|
|
|
|
/* USER CODE END LoRaWAN_Init_LV */
|
|
|
|
/* USER CODE BEGIN LoRaWAN_Init_1 */
|
|
|
|
LoraInfo_Init();
|
|
|
|
/* USER CODE END LoRaWAN_Init_1 */
|
|
|
|
/* Init the Lora Stack*/
|
|
LmHandlerInit(&LmHandlerCallbacks, APP_VERSION);
|
|
|
|
/* USER CODE BEGIN LoRaWAN_Init_Last */
|
|
|
|
LmHandlerConfigure(&LmHandlerParams);
|
|
LmHandlerJoin(ACTIVATION_TYPE_OTAA, false);
|
|
|
|
/* USER CODE END LoRaWAN_Init_Last */
|
|
}
|
|
|
|
/* USER CODE BEGIN PB_Callbacks */
|
|
|
|
/* USER CODE END PB_Callbacks */
|
|
|
|
/* Private functions ---------------------------------------------------------*/
|
|
/* USER CODE BEGIN PrFD */
|
|
|
|
/* USER CODE END PrFD */
|
|
|
|
static void OnRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params)
|
|
{
|
|
/* USER CODE BEGIN OnRxData_1 */
|
|
/* USER CODE END OnRxData_1 */
|
|
}
|
|
|
|
/* USER CODE BEGIN PrFD_LedEvents */
|
|
|
|
/* USER CODE END PrFD_LedEvents */
|
|
|
|
static void OnTxData(LmHandlerTxParams_t *params)
|
|
{
|
|
/* USER CODE BEGIN OnTxData_1 */
|
|
/* USER CODE END OnTxData_1 */
|
|
}
|
|
|
|
static void OnJoinRequest(LmHandlerJoinParams_t *joinParams)
|
|
{
|
|
/* USER CODE BEGIN OnJoinRequest_1 */
|
|
/* USER CODE END OnJoinRequest_1 */
|
|
}
|
|
|
|
static void OnBeaconStatusChange(LmHandlerBeaconParams_t *params)
|
|
{
|
|
/* USER CODE BEGIN OnBeaconStatusChange_1 */
|
|
/* USER CODE END OnBeaconStatusChange_1 */
|
|
}
|
|
|
|
static void OnSysTimeUpdate(void)
|
|
{
|
|
/* USER CODE BEGIN OnSysTimeUpdate_1 */
|
|
|
|
/* USER CODE END OnSysTimeUpdate_1 */
|
|
}
|
|
|
|
static void OnClassChange(DeviceClass_t deviceClass)
|
|
{
|
|
/* USER CODE BEGIN OnClassChange_1 */
|
|
/* USER CODE END OnClassChange_1 */
|
|
}
|
|
|
|
static void OnMacProcessNotify(void)
|
|
{
|
|
/* USER CODE BEGIN OnMacProcessNotify_1 */
|
|
|
|
/* USER CODE END OnMacProcessNotify_1 */
|
|
}
|
|
|
|
static void OnTxPeriodicityChanged(uint32_t periodicity)
|
|
{
|
|
/* USER CODE BEGIN OnTxPeriodicityChanged_1 */
|
|
|
|
/* USER CODE END OnTxPeriodicityChanged_1 */
|
|
}
|
|
|
|
static void OnTxFrameCtrlChanged(LmHandlerMsgTypes_t isTxConfirmed)
|
|
{
|
|
/* USER CODE BEGIN OnTxFrameCtrlChanged_1 */
|
|
|
|
/* USER CODE END OnTxFrameCtrlChanged_1 */
|
|
}
|
|
|
|
static void OnPingSlotPeriodicityChanged(uint8_t pingSlotPeriodicity)
|
|
{
|
|
/* USER CODE BEGIN OnPingSlotPeriodicityChanged_1 */
|
|
|
|
/* USER CODE END OnPingSlotPeriodicityChanged_1 */
|
|
}
|
|
|
|
static void OnSystemReset(void)
|
|
{
|
|
/* USER CODE BEGIN OnSystemReset_1 */
|
|
|
|
/* USER CODE END OnSystemReset_1 */
|
|
}
|
|
|