39 LoRaMacTxInfo_t txInfo;
40 LoRaMacStatus_t status = LoRaMacQueryTxPossible(0, &txInfo);
48 return (status == LORAMAC_STATUS_OK) ? txInfo.MaxPossibleApplicationDataSize : 51;
54 if (LORAMAC_HANDLER_SUCCESS != LmHandlerStop())
56 writeLog(
"myLoraWan_Reconnect Stop on going ...");
60 writeLog(
"myLoraWan_Reconnect Start join");
93 LmHandlerAppData_t appData;
94 LmHandlerErrorStatus_t status;
96 if (data == NULL || dataSize == 0 || dataSize > 242)
99 return LORAMAC_HANDLER_ERROR;
102 appData.Buffer = data;
103 appData.BufferSize = dataSize;
106 writeLog(
"Sending confirmed data to LoRaWAN: port=%d, size=%d bytes", port, dataSize);
109 status = LmHandlerSend(&appData, LORAMAC_HANDLER_CONFIRMED_MSG,
false);
113 case LORAMAC_HANDLER_SUCCESS:
114 writeLog(
"Confirmed data queued for transmission");
117 case LORAMAC_HANDLER_NO_NETWORK_JOINED:
118 writeLog(
"Cannot send: Not joined to network");
121 case LORAMAC_HANDLER_BUSY_ERROR:
122 writeLog(
"Cannot send: MAC layer busy");
125 case LORAMAC_HANDLER_DUTYCYCLE_RESTRICTED:
130 writeLog(
"Send failed with status: %d", status);
145 uint8_t *ptr, sz, isOK = 1;
153 if (ptr != NULL && isOK)
177 if (memsData != NULL)
197 writeLog(
"myloraWan_MeasureFinish - end");
208 writeLog(
"myLoraWan_LastDataSend - begin");
213 HAL_StatusTypeDef memsStatus;
255 writeLog(
"myLoraWan_LastDataSend - maximum data payload reached:%d", (
int)maxPayLoad);
258 memsStatus = HAL_BUSY;
262 writeLog(
"myLoraWan_LastDataSend - mems no more data");
265 writeLog(
"myLoraWan_LastDataSend - mems error");
278 writeLog(
"myLoraWan_LastDataSend - sendConfirmedData: no data");
282 writeLog(
"myLoraWan_LastDataSend - busy");
283 writeLog(
"myLoraWan_LastDataSend - end");
286 writeLog(
"myLoraWan_LastDataSend - not connected");
293 SysTime_t currentSysTime = SysTimeGet();
294 SysTimeLocalTime(currentSysTime.Seconds, &
_localTime);
306 writeLog(
"LoRaWAN connected successfully!");
311 LmHandlerErrorStatus_t status = LmHandlerDeviceTimeReq();
313 if (status == LORAMAC_HANDLER_SUCCESS)
315 writeLog(
"Time synchronization request sent");
319 writeLog(
"Failed to send time synchronization request");
324 writeLog(
"Measure done, start myLoraWan_LastDataSend");
357 if (appData == NULL || params == NULL)
359 writeLog(
"Invalid RX data parameters");
363 writeLog(
"Received data from server:");
364 writeLog(
" Port: %d", appData->Port);
365 writeLog(
" Size: %d bytes", appData->BufferSize);
366 writeLog(
" RSSI: %d dBm", params->Rssi);
367 writeLog(
" SNR: %d dB", params->Snr);
368 writeLog(
" Downlink Counter: %lu", params->DownlinkCounter);
371 if (appData->BufferSize > 0)
374 switch (appData->Port)
378 if (appData->BufferSize >= 1)
380 uint8_t command = appData->Buffer[0];
381 writeLog(
" Command received: 0x%02X", command);
387 writeLog(
" -> Command: Request immediate sensor reading");
391 writeLog(
" -> Command: Change reporting interval");
392 if (appData->BufferSize >= 3)
394 uint16_t interval = (appData->Buffer[1] << 8) | appData->Buffer[2];
395 writeLog(
" -> New interval: %d seconds", interval);
406 writeLog(
" Configuration data received");
417 if (params->IsMcpsIndication == 0)
419 writeLog(
" This is an ACK for confirmed uplink");
435 writeLog(
"Transmission completed:");
436 writeLog(
" Uplink Counter: %lu", params->UplinkCounter);
437 writeLog(
" Datarate: DR%d", params->Datarate);
438 writeLog(
" TX Power: %d dBm", params->TxPower);
439 writeLog(
" Channel: %d", params->Channel);
441 if (params->MsgType == LORAMAC_HANDLER_CONFIRMED_MSG)
443 if (params->AckReceived)
446 writeLog(
" Status: ACK received from server");
453 writeLog(
" Status: next data is going to send");
457 writeLog(
" Status: No ACK received (will retry)");
463 writeLog(
" Status: Unconfirmed message sent");
466 if (params->Status != LORAMAC_EVENT_INFO_STATUS_OK)
468 writeLog(
" TX Error: %d", params->Status);
uint8_t CayenneLppMaxBuffer()
Implements the Cayenne Low Power Protocol.
Header of application of the LRWAN Middleware.
#define LORAWAN_DEFAULT_ACTIVATION_TYPE
: Header for main.c file. This file contains the common defines of the application.
void writeLog(const char *format,...)
Format and send a log message over UART (printf-style). Available only when WRITELOG is defined; comp...
static void myloraWan_MeasureFinish()
the measure has been finished, sensor data save to memory or local buffer, if no memory is exist or i...
static uint8_t _isDataSending
static void myLoraWan_LastDataSend()
take data from LIFO - last data and send. Cannot be nested only if is LoRa connected
void GetTimeDate()
Filled up _currentTime & _currentDate.
void OnTimeSynchronized(void)
Called after date/time has been synchronized from LoRaWAN.
static uint8_t myloraWan_PrepareSendingBuffer(const mems_DataBlock_t *data, uint8_t reset, uint8_t maxSize)
the preparing _currentSendingDataBuffer/_currentSendingDataSz from CayennelLpp to send data to LoRaWa...
static uint8_t myLoRaWAN_GetMaxPayloadSize(void)
Get the maximum application payload size for the current data rate. Returns 0 if the query fails or c...
void OnLoRaWANRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params)
Handle received downlink data from LoRaWAN server.
void myloraWan_Init(uint32_t myloraWanAppBit)
initialization of myloraWan process, sequencer
static void myLoraWan_Reconnect()
static uint8_t _currentSendingDataSz
static uint32_t _myloraWanAppBit
void OnLoRaWanConnected(void)
Called after LoRaWAN successfully connects to the server.
static void myLoraWan_StartReconnect()
static uint8_t _fromEndInx
void OnLoRaWANTxData(LmHandlerTxParams_t *params)
Handle transmission event callback.
static LmHandlerErrorStatus_t LoRaWAN_SendConfirmedData(uint8_t *data, uint8_t dataSize, uint8_t port)
Send confirmed data to LoRaWAN network.
static struct tm _localTime
static uint8_t _connectedCount
static uint8_t _currentSendingDataBuffer[256]
static uint8_t _isConnected
void mems_RemoveLastData(uint8_t fromEndTo)
remove last data
HAL_StatusTypeDef mems_GetLastData(mems_DataBlock_t **memBlock, uint8_t inxFromEnd)
Get the last sensor data if exists. The data and mem block is stored in work buffer,...
mems_MainBlock_t _memsMainBlock
Global instance of the main flash control block; loaded by mems_ReadMainBlock().
HAL_StatusTypeDef mems_AddData(const void *data, mems_DataType_t type, uint8_t size)
write new data of sensor at the end of queue, if is no space, the most older data start to rewrites
mems_DataBlock_t * mems_InicBuffer(mems_DataType_t type)
Initialize the work buffer - _memsDataBlock.
void sensors_WriteFromBckToDataBlock(mems_DataBlock_t *data)
filling the data block from sensor data - store to memory the methods works with _bck_XXXXX senzor,...
uint8_t * sensors_CayennelFromBckData(uint8_t *sizeOut)
collecting sensor data into CayenneLppGetBuffer buffer for sending them via LoRa the methods works wi...
void sensors_CopyToBck()
The copying data from current sensors buffer to backUp - _bck_XXXXX.
uint8_t sensors_ReadToBckFromDataBlock(const mems_DataBlock_t *data)
reading from memory block and filling specified sensor from memory - ready for sensors_CayennelData t...
systemParams_t _systemParams
This file contains all the function prototypes for the rtc.c file.
Sensor data record stored as one element in the flash circular queue.
Function prototypes for sys_app.c file.