Embedded System Design 2 - Project
rn2483.c File Reference
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <em_device.h>
#include <em_chip.h>
#include <em_cmu.h>
#include <em_gpio.h>
#include <em_usart.h>
#include <em_leuart.h>
#include "lora.h"
#include "leuart.h"
#include "rn2483.h"
#include "delay.h"
#include "pin_mapping.h"
#include "util_string.h"

Go to the source code of this file.

Functions

static RN2483_Status_t RN2483_ProcessMacCommand (char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
 
static RN2483_Status_t RN2483_ProcessSleepCommand (char *receiveBuffer, uint8_t bufferSize, volatile bool *wakeUp)
 
void RN2483_Init (void)
 
RN2483_Status_t RN2483_MacReset (char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_GetHardwareEUI (char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_GetSystemVersion (char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_GetApplicationEUI (char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_SetDeviceEUI (char *eui, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_SetApplicationEUI (char *eui, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_SetApplicationKey (char *key, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_SetApplicationSessionKey (char *key, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_SetNetworkSessionKey (char *key, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_SetDeviceAddress (char *address, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_SetOutputPower (uint8_t pwr, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_DisableAdaptiveDataRate (char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_DisableAutomaticReplies (char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_SetDataRate (uint8_t dr, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_GetDataRate (int8_t *dr, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_EnableAdaptiveDataRate (char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_SetBatteryLevel (uint8_t battery, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_JoinOTAA (char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_JoinABP (char *receiveBuffer, uint8_t bufferSize)
 
static RN2483_Status_t RN2483_SetDefaultOperation (LoRaSettings_t settings, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_Setup (LoRaSettings_t settings, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_SetupOTAA (LoRaSettings_t settings, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_SetupABP (LoRaSettings_t settings, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_TransmitUnconfirmed (uint8_t *data, uint8_t payloadSize, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_TransmitConfirmed (uint8_t *data, uint8_t payloadSize, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_SaveMac (char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_ResumeMac (char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_Sleep (uint32_t sleepTime, volatile bool *wakeUp, char *receiveBuffer, uint8_t bufferSize)
 
RN2483_Status_t RN2483_Wake (char *receiveBuffer, uint8_t bufferSize)
 

Variables

char commandBuffer [160]
 

Function Documentation

◆ RN2483_DisableAdaptiveDataRate()

RN2483_Status_t RN2483_DisableAdaptiveDataRate ( char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 193 of file rn2483.c.

193  {
194  sprintf(commandBuffer, "mac set adr off\r\n");
195  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
196 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_DisableAutomaticReplies()

RN2483_Status_t RN2483_DisableAutomaticReplies ( char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 198 of file rn2483.c.

198  {
199  sprintf(commandBuffer, "mac set ar off\r\n");
200  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
201 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_EnableAdaptiveDataRate()

RN2483_Status_t RN2483_EnableAdaptiveDataRate ( char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 226 of file rn2483.c.

226  {
227  sprintf(commandBuffer, "mac set adr on\r\n");
228  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
229 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_GetApplicationEUI()

RN2483_Status_t RN2483_GetApplicationEUI ( char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 153 of file rn2483.c.

153  {
154  sprintf(commandBuffer, "sys get appeui\r\n");
155  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
156 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_GetDataRate()

RN2483_Status_t RN2483_GetDataRate ( int8_t *  dr,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 208 of file rn2483.c.

208  {
209  sprintf(commandBuffer, "mac get dr\r\n");
210  RN2483_Status_t status = RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false);
211  if(status != DATA_RETURNED){
212  return (status);
213  }
214 
215  /* Convert ascii to unsigned */
216  *dr = receiveBuffer[0] - '0';
217  /* Final data check */
218  if(*dr >= 0 && *dr <= 7){
219  return (MAC_OK);
220  }
221  else{
222  return (MAC_ERR);
223  }
224 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
Definition: rn2483.h:47
char commandBuffer[160]
Definition: rn2483.c:42
enum rn2483_statuses RN2483_Status_t
Definition: rn2483.h:34
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_GetHardwareEUI()

RN2483_Status_t RN2483_GetHardwareEUI ( char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 143 of file rn2483.c.

143  {
144  sprintf(commandBuffer, "mac get deveui\r\n");
145  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
146 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_GetSystemVersion()

RN2483_Status_t RN2483_GetSystemVersion ( char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 148 of file rn2483.c.

148  {
149  sprintf(commandBuffer, "sys get ver\r\n");
150  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
151 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_Init()

void RN2483_Init ( void  )

Definition at line 123 of file rn2483.c.

123  { /* Setup with autobaud */
124  GPIO_PinModeSet(RN2483_TX_PORT, RN2483_TX_PIN, gpioModePushPull, 1);
125  delay(100);
126  GPIO_PinModeSet(RN2483_RESET_PORT, RN2483_RESET_PIN, gpioModePushPull, 1);
127  delay(50);
128  GPIO_PinModeSet(RN2483_RESET_PORT, RN2483_RESET_PIN, gpioModePushPull, 0);
129  delay(50);
130  GPIO_PinModeSet(RN2483_RESET_PORT, RN2483_RESET_PIN, gpioModePushPull, 1);
131  delay(350);
132 
134 
135  Leuart_Init();
136 }
#define RN2483_RESET_PORT
Definition: pin_mapping.h:121
#define RN2483_RESET_PIN
Definition: pin_mapping.h:122
void Leuart_Init(void)
Definition: leuart.c:306
#define RN2483_TX_PIN
Definition: pin_mapping.h:118
#define RN2483_TX_PORT
Definition: pin_mapping.h:117
char commandBuffer[160]
Definition: rn2483.c:42
void delay(uint32_t msDelay)
Wait for a certain amount of milliseconds in EM2/3.
Definition: delay.c:124
#define RN2483_COMMANDBUFFER_SIZE
Definition: rn2483.h:26

◆ RN2483_JoinABP()

RN2483_Status_t RN2483_JoinABP ( char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 241 of file rn2483.c.

241  {
242  sprintf(commandBuffer, "mac join abp\r\n");
243  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, true));
244 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_JoinOTAA()

RN2483_Status_t RN2483_JoinOTAA ( char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 236 of file rn2483.c.

236  {
237  sprintf(commandBuffer, "mac join otaa\r\n");
238  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, true));
239 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_MacReset()

RN2483_Status_t RN2483_MacReset ( char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 138 of file rn2483.c.

138  {
139  sprintf(commandBuffer, "mac reset 868\r\n");
140  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
141 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_ProcessMacCommand()

static RN2483_Status_t RN2483_ProcessMacCommand ( char *  receiveBuffer,
uint8_t  bufferSize,
bool  secondResponse 
)
static

Definition at line 44 of file rn2483.c.

44  {
45  volatile bool dummy = false;
47  return (RN_TX_TIMEOUT);
48  }
49 
50  /* Read first response */
52 
53  /* Analyze response */
55  if(secondResponse){
56  /* Wait for second response */
58  /* Read second response */
60  /* Analyze response */
61  if(StringStartsWith(receiveBuffer, "accepted")){
62  return (JOIN_ACCEPTED);
63  } else if(StringStartsWith(receiveBuffer, "denied")){
64  return (JOIN_DENIED);
65  } else if(StringStartsWith(receiveBuffer, "mac_tx_ok")){
66  return (MAC_TX_OK);
67  } else if(StringStartsWith(receiveBuffer, "mac_rx")){
68  // TODO: capture data
69  return (MAC_RX);
70  } else if(StringStartsWith(receiveBuffer, "mac_err")){
71  return (MAC_ERR);
72  } else if(StringStartsWith(receiveBuffer, "invalid_data_len")){
73  return (INVALID_DATA_LEN);
74  } else if(StringStartsWith(receiveBuffer, "radio_tx_ok")){
75  return (RADIO_TX_OK);
76  } else if(StringStartsWith(receiveBuffer, "radio_err")){
77  return (RADIO_ERR);
78  }
79  return (UNKOWN_ERR);
80  } else {
81  return (MAC_OK);
82  }
83  }
84  else if(StringStartsWith(receiveBuffer, "invalid_param")){
85  return (INVALID_PARAM);
86  } else if(StringStartsWith(receiveBuffer, "not_joined")){
87  return (NOT_JOINED);
88  } else if(StringStartsWith(receiveBuffer, "no_free_ch")){
89  return (NO_FREE_CH);
90  } else if(StringStartsWith(receiveBuffer, "silent")){
91  return (SILENT);
92  } else if(StringStartsWith(receiveBuffer, "frame_counter_err_rejoin_needed")){
94  } else if(StringStartsWith(receiveBuffer, "busy")){
95  return (BUSY);
96  } else if(StringStartsWith(receiveBuffer, "mac_paused")){
97  return (MAC_PAUSED);
98  } else if(StringStartsWith(receiveBuffer, "invalid_data_len")){
99  return (INVALID_DATA_LEN);
100  }
101 
102  return (DATA_RETURNED);
103 }
Definition: rn2483.h:40
Leuart_Status_t Leuart_SendCommand(char *cb, uint8_t cbl, volatile bool *wakeUp)
Definition: leuart.c:392
Definition: rn2483.h:46
Definition: rn2483.h:42
Leuart_Status_t Leuart_WaitForResponse()
Definition: leuart.c:430
Definition: rn2483.h:47
bool StringStartsWith(char *str, char *seq)
Definition: util_string.c:27
char commandBuffer[160]
Definition: rn2483.c:42
Definition: rn2483.h:34
void Leuart_ReadResponse(char *buffer, uint8_t bufferLength)
Definition: leuart.c:351
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_ProcessSleepCommand()

static RN2483_Status_t RN2483_ProcessSleepCommand ( char *  receiveBuffer,
uint8_t  bufferSize,
volatile bool *  wakeUp 
)
static

Definition at line 105 of file rn2483.c.

105  {
106  if(Leuart_SendCommand(commandBuffer, strlen(commandBuffer), wakeUp) == TX_TIMEOUT){
107  return (RN_TX_TIMEOUT);
108  }
109 
110  /* Read first response */
111  Leuart_ReadResponse(receiveBuffer, bufferSize);
112 
113  /* Analyze response */
114  if(StringStartsWith(receiveBuffer, "ok")){
115  return (MAC_OK);
116  } else if(StringStartsWith(receiveBuffer, "invalid_param")){
117  return (INVALID_PARAM);
118  }
119 
120  return (UNKOWN_ERR);
121 }
Leuart_Status_t Leuart_SendCommand(char *cb, uint8_t cbl, volatile bool *wakeUp)
Definition: leuart.c:392
bool StringStartsWith(char *str, char *seq)
Definition: util_string.c:27
char commandBuffer[160]
Definition: rn2483.c:42
Definition: rn2483.h:34
void Leuart_ReadResponse(char *buffer, uint8_t bufferLength)
Definition: leuart.c:351
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_ResumeMac()

RN2483_Status_t RN2483_ResumeMac ( char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 369 of file rn2483.c.

369  {
370  sprintf(commandBuffer, "mac resume\r\n");
371  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
372 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_SaveMac()

RN2483_Status_t RN2483_SaveMac ( char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 364 of file rn2483.c.

364  {
365  sprintf(commandBuffer, "mac save\r\n");
366  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
367 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_SetApplicationEUI()

RN2483_Status_t RN2483_SetApplicationEUI ( char *  eui,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 163 of file rn2483.c.

163  {
164  sprintf(commandBuffer, "mac set appeui %s\r\n", eui);
165  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
166 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_SetApplicationKey()

RN2483_Status_t RN2483_SetApplicationKey ( char *  key,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 168 of file rn2483.c.

168  {
169  sprintf(commandBuffer, "mac set appkey %s\r\n", key);
170  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
171 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_SetApplicationSessionKey()

RN2483_Status_t RN2483_SetApplicationSessionKey ( char *  key,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 173 of file rn2483.c.

173  {
174  sprintf(commandBuffer, "mac set appskey %s\r\n", key);
175  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
176 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_SetBatteryLevel()

RN2483_Status_t RN2483_SetBatteryLevel ( uint8_t  battery,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 231 of file rn2483.c.

231  {
232  sprintf(commandBuffer, "mac set bat %i\r\n", battery);
233  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
234 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_SetDataRate()

RN2483_Status_t RN2483_SetDataRate ( uint8_t  dr,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 203 of file rn2483.c.

203  {
204  sprintf(commandBuffer, "mac set dr %i\r\n", dr);
205  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
206 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_SetDefaultOperation()

static RN2483_Status_t RN2483_SetDefaultOperation ( LoRaSettings_t  settings,
char *  receiveBuffer,
uint8_t  bufferSize 
)
static

Definition at line 246 of file rn2483.c.

246  {
248  if(status != MAC_OK){
249  return (status);
250  }
251  status = RN2483_DisableAutomaticReplies(receiveBuffer, bufferSize);
252  if(status != MAC_OK){
253  return (status);
254  }
255  status = RN2483_DisableAdaptiveDataRate(receiveBuffer, bufferSize);
256  if(status != MAC_OK){
257  return (status);
258  }
259  status = RN2483_SetDataRate(settings.dataRate, receiveBuffer, bufferSize);
260  if(status != MAC_OK){
261  return (status);
262  }
263  status = RN2483_EnableAdaptiveDataRate(receiveBuffer, bufferSize);
264  if(status != MAC_OK){
265  return (status);
266  }
267  return (RN2483_SetBatteryLevel(254, receiveBuffer, bufferSize));
268 }
RN2483_Status_t RN2483_EnableAdaptiveDataRate(char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:226
RN2483_Status_t RN2483_DisableAutomaticReplies(char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:198
RN2483_Status_t RN2483_SetOutputPower(uint8_t pwr, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:188
#define RN2483_POWER_14DBM
Definition: rn2483.h:27
RN2483_Status_t RN2483_SetDataRate(uint8_t dr, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:203
RN2483_Status_t RN2483_SetBatteryLevel(uint8_t battery, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:231
enum rn2483_statuses RN2483_Status_t
LoRaDataRate_t dataRate
Definition: lora.h:56
RN2483_Status_t RN2483_DisableAdaptiveDataRate(char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:193
Definition: rn2483.h:34
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_SetDeviceAddress()

RN2483_Status_t RN2483_SetDeviceAddress ( char *  address,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 183 of file rn2483.c.

183  {
184  sprintf(commandBuffer, "mac set devaddr %s\r\n", address);
185  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
186 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_SetDeviceEUI()

RN2483_Status_t RN2483_SetDeviceEUI ( char *  eui,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 158 of file rn2483.c.

158  {
159  sprintf(commandBuffer, "mac set deveui %s\r\n", eui);
160  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
161 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_SetNetworkSessionKey()

RN2483_Status_t RN2483_SetNetworkSessionKey ( char *  key,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 178 of file rn2483.c.

178  {
179  sprintf(commandBuffer, "mac set nwkskey %s\r\n", key);
180  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
181 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_SetOutputPower()

RN2483_Status_t RN2483_SetOutputPower ( uint8_t  pwr,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 188 of file rn2483.c.

188  {
189  sprintf(commandBuffer, "mac set pwridx %i\r\n", pwr);
190  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, false));
191 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_Setup()

RN2483_Status_t RN2483_Setup ( LoRaSettings_t  settings,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 270 of file rn2483.c.

270  {
271  if(settings.activationMethod == OTAA){
272  return (RN2483_SetupOTAA(settings, receiveBuffer, bufferSize));
273  }else{
274  return (RN2483_SetupABP(settings, receiveBuffer, bufferSize));
275  }
276 }
Definition: lora.h:40
LoRaActivationMethod_t activationMethod
Definition: lora.h:55
RN2483_Status_t RN2483_SetupOTAA(LoRaSettings_t settings, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:278
RN2483_Status_t RN2483_SetupABP(LoRaSettings_t settings, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:315
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_SetupABP()

RN2483_Status_t RN2483_SetupABP ( LoRaSettings_t  settings,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 315 of file rn2483.c.

315  {
316  RN2483_Status_t status = RN2483_MacReset(receiveBuffer, bufferSize);
317  if(status != MAC_OK){
318  return (status);
319  }
320  status = RN2483_SetDeviceAddress(settings.deviceAddress, receiveBuffer, bufferSize);
321  if(status != MAC_OK){
322  return (status);
323  }
324  status = RN2483_SetNetworkSessionKey(settings.networkSessionKey, receiveBuffer, bufferSize);
325  if(status != MAC_OK){
326  return (status);
327  }
329  if(status != MAC_OK){
330  return (status);
331  }
332  status = RN2483_SetDefaultOperation(settings, receiveBuffer, bufferSize);
333  if(status != MAC_OK){
334  return (status);
335  }
336  return (RN2483_JoinABP(receiveBuffer, bufferSize));
337 }
char deviceAddress[8+1]
Definition: lora.h:60
char networkSessionKey[32+1]
Definition: lora.h:61
static RN2483_Status_t RN2483_SetDefaultOperation(LoRaSettings_t settings, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:246
RN2483_Status_t RN2483_SetDeviceAddress(char *address, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:183
enum rn2483_statuses RN2483_Status_t
RN2483_Status_t RN2483_MacReset(char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:138
char applicationSessionKey[32+1]
Definition: lora.h:62
Definition: rn2483.h:34
RN2483_Status_t RN2483_SetApplicationSessionKey(char *key, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:173
RN2483_Status_t RN2483_SetNetworkSessionKey(char *key, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:178
char receiveBuffer[50]
Definition: leuart.c:78
RN2483_Status_t RN2483_JoinABP(char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:241

◆ RN2483_SetupOTAA()

RN2483_Status_t RN2483_SetupOTAA ( LoRaSettings_t  settings,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 278 of file rn2483.c.

278  {
279  RN2483_Status_t status = RN2483_MacReset(receiveBuffer, bufferSize);
280  if(status != MAC_OK){
281  return (status);
282  }
283  if(settings.deviceEUI == NULL){
284  status = RN2483_GetHardwareEUI(receiveBuffer, bufferSize);
285  if(status != DATA_RETURNED){
286  return (status);
287  }
288  char address[16];
289  sprintf(address, "%s", receiveBuffer);
290  status = RN2483_SetDeviceEUI(address, receiveBuffer, bufferSize);
291  if(status != MAC_OK){
292  return (status);
293  }
294  }else{
295  status = RN2483_SetDeviceEUI(settings.deviceEUI, receiveBuffer, bufferSize);
296  if(status != MAC_OK){
297  return (status);
298  }
299  }
300  status = RN2483_SetApplicationEUI(settings.applicationEUI, receiveBuffer, bufferSize);
301  if(status != MAC_OK){
302  return (status);
303  }
304  status = RN2483_SetApplicationKey(settings.applicationKey, receiveBuffer, bufferSize);
305  if(status != MAC_OK){
306  return (status);
307  }
308  status = RN2483_SetDefaultOperation(settings, receiveBuffer, bufferSize);
309  if(status != MAC_OK){
310  return (status);
311  }
312  return (RN2483_JoinOTAA(receiveBuffer, bufferSize));
313 }
char applicationKey[32+1]
Definition: lora.h:59
RN2483_Status_t RN2483_SetDeviceEUI(char *eui, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:158
char applicationEUI[16+1]
Definition: lora.h:58
RN2483_Status_t RN2483_SetApplicationKey(char *key, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:168
char deviceEUI[16+1]
Definition: lora.h:57
RN2483_Status_t RN2483_JoinOTAA(char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:236
RN2483_Status_t RN2483_SetApplicationEUI(char *eui, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:163
static RN2483_Status_t RN2483_SetDefaultOperation(LoRaSettings_t settings, char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:246
enum rn2483_statuses RN2483_Status_t
RN2483_Status_t RN2483_GetHardwareEUI(char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:143
RN2483_Status_t RN2483_MacReset(char *receiveBuffer, uint8_t bufferSize)
Definition: rn2483.c:138
Definition: rn2483.h:34
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_Sleep()

RN2483_Status_t RN2483_Sleep ( uint32_t  sleepTime,
volatile bool *  wakeUp,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 374 of file rn2483.c.

374  {
375  sprintf(commandBuffer, "sys sleep %lu\r\n", (unsigned long) sleepTime);
376  return (RN2483_ProcessSleepCommand(receiveBuffer, bufferSize, wakeUp));
377 }
static RN2483_Status_t RN2483_ProcessSleepCommand(char *receiveBuffer, uint8_t bufferSize, volatile bool *wakeUp)
Definition: rn2483.c:105
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_TransmitConfirmed()

RN2483_Status_t RN2483_TransmitConfirmed ( uint8_t *  data,
uint8_t  payloadSize,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 354 of file rn2483.c.

354  {
355  char * encodedPayload;
356  if(!HexToString(data, payloadSize, &encodedPayload )){
357  return (MAC_ERR);
358  }
359  sprintf(commandBuffer, "mac tx cnf 1 %s\r\n", encodedPayload);
360  free(encodedPayload);
361  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, true));
362 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
bool HexToString(uint8_t *bin, uint8_t binsz, char **result)
Definition: util_string.c:37
MeasurementData_t data
Definition: main.c:189
Definition: rn2483.h:47
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_TransmitUnconfirmed()

RN2483_Status_t RN2483_TransmitUnconfirmed ( uint8_t *  data,
uint8_t  payloadSize,
char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 339 of file rn2483.c.

339  {
340  char * encodedPayload;
341  if(!HexToString(data, payloadSize, &encodedPayload )){
342  return (MAC_ERR);
343  }
344  //StringToHexString(data, payloadSize/2, &decodedPayload);
345 
346  // Sprintf caused a problem where it would overwrite data when using long LoRaWAN packets because the malloc statement
347  // in HexToString would create a too small buffer (according to RN2483_COMMANDBUFFER_SIZE, was 80 and increased to 160)
348  // compared to the data of the converted LoRaWAN packet.
349  sprintf(commandBuffer, "mac tx uncnf 1 %s\r\n", encodedPayload);
350  free(encodedPayload);
351  return (RN2483_ProcessMacCommand(receiveBuffer, bufferSize, true));
352 }
static RN2483_Status_t RN2483_ProcessMacCommand(char *receiveBuffer, uint8_t bufferSize, bool secondResponse)
Definition: rn2483.c:44
bool HexToString(uint8_t *bin, uint8_t binsz, char **result)
Definition: util_string.c:37
MeasurementData_t data
Definition: main.c:189
Definition: rn2483.h:47
char commandBuffer[160]
Definition: rn2483.c:42
char receiveBuffer[50]
Definition: leuart.c:78

◆ RN2483_Wake()

RN2483_Status_t RN2483_Wake ( char *  receiveBuffer,
uint8_t  bufferSize 
)

Definition at line 379 of file rn2483.c.

379  {
380  Leuart_Reinit();
381 
382  /* Capture response "ok" from previous sleep command */
384  /* Read second response */
385  Leuart_ReadResponse(receiveBuffer, bufferSize);
386  if(StringStartsWith(receiveBuffer, "ok")){
387  return (MAC_OK);
388  }
389 
390  return (MAC_ERR);
391 }
void Leuart_Reinit(void)
Definition: leuart.c:323
Leuart_Status_t Leuart_WaitForResponse()
Definition: leuart.c:430
Definition: rn2483.h:47
bool StringStartsWith(char *str, char *seq)
Definition: util_string.c:27
Definition: rn2483.h:34
void Leuart_ReadResponse(char *buffer, uint8_t bufferLength)
Definition: leuart.c:351
char receiveBuffer[50]
Definition: leuart.c:78

Variable Documentation

◆ commandBuffer

char commandBuffer[160]

Definition at line 42 of file rn2483.c.