Skip to content
This repository was archived by the owner on Apr 30, 2025. It is now read-only.

Commit d6a83ea

Browse files
authored
Merge pull request #190 from sacua/CustomRxDelay
Custom Rx Delay and Window
2 parents 5309766 + 19e53db commit d6a83ea

File tree

4 files changed

+50
-13
lines changed

4 files changed

+50
-13
lines changed

src/arduino-rfm/LoRaMAC.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@
6565
void LORA_Cycle(sBuffer *Data_Tx, sBuffer *Data_Rx, RFM_command_t *RFM_Command, sLoRa_Session *Session_Data,
6666
sLoRa_OTAA *OTAA_Data, sLoRa_Message *Message_Rx, sSettings *LoRa_Settings, msg_t *upMsg_Type)
6767
{
68-
static const unsigned int Receive_Delay_1 = 1000;
69-
static const unsigned int Receive_Delay_2 = 2000; // Receive_Delay_2 >= Receive_Delay_1 + RX1_Window
70-
static const unsigned int RX1_Window = 1000;
71-
static const unsigned int RX2_Window = 1000;
68+
static const unsigned int Receive_Delay_1 = LoRa_Settings->Rx1_Delay;
69+
static const unsigned int Receive_Delay_2 = LoRa_Settings->Rx2_Delay;
70+
static const unsigned int RX1_Window = LoRa_Settings->RX1_Window;
71+
static const unsigned int RX2_Window = LoRa_Settings->RX2_Window;
7272

7373
unsigned long prevTime = 0;
7474
unsigned char rx1_ch = LoRa_Settings->Channel_Rx;

src/arduino-rfm/Struct.h

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,19 @@ typedef struct{
8585

8686
//Struct used for storing settings of the mote
8787
typedef struct {
88-
unsigned char Confirm; //0x00 Unconfirmed, 0x01 Confirmed
89-
unsigned char Mport; //Port 1-223
90-
unsigned char Mote_Class; //0x00 Class A, 0x01 Class C
91-
unsigned char Datarate_Tx; //See RFM file
92-
unsigned char Datarate_Rx; //See RFM file
93-
unsigned char Channel_Tx; //See RFM file
94-
unsigned char Channel_Rx; //See RFM filed
95-
unsigned char Channel_Hopping; //0x00 No hopping, 0x01 Hopping
96-
unsigned char Transmit_Power; //0x00 to 0x0F
88+
unsigned char Confirm; //0x00 Unconfirmed, 0x01 Confirmed
89+
unsigned char Mport; //Port 1-223
90+
unsigned char Mote_Class; //0x00 Class A, 0x01 Class C
91+
unsigned char Datarate_Tx; //See RFM file
92+
unsigned char Datarate_Rx; //See RFM file
93+
unsigned char Channel_Tx; //See RFM file
94+
unsigned char Channel_Rx; //See RFM filed
95+
unsigned char Channel_Hopping; //0x00 No hopping, 0x01 Hopping
96+
unsigned char Transmit_Power; //0x00 to 0x0F
97+
unsigned int Rx1_Delay;
98+
unsigned int Rx2_Delay; // Rx2_Delay >= Rx1_Delay + RX1_Window
99+
unsigned int RX1_Window;
100+
unsigned int RX2_Window;
97101
} sSettings;
98102

99103
typedef enum {

src/arduino-rfm/lorawan-arduino-rfm.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,12 @@ bool LoRaWANClass::init(void)
111111
LoRa_Settings.Confirm = 0x00; //0x00 unconfirmed, 0x01 confirmed
112112
LoRa_Settings.Channel_Hopping = 0x00; //0x00 no channel hopping, 0x01 channel hopping
113113

114+
// Set default rx delay and window
115+
LoRa_Settings.Rx1_Delay = 1000; // Thing stack seems to be 5000 ms (so Rx2_delay 6000 ms)
116+
LoRa_Settings.Rx2_Delay = 2000; // Rx2_Delay >= Rx1_Delay + RX1_Window
117+
LoRa_Settings.RX1_Window = 1000;
118+
LoRa_Settings.RX2_Window = 1000;
119+
114120
// Initialise buffer for data to transmit
115121
memset(Data_Tx, 0x00, sizeof(Data_Tx));
116122
Buffer_Tx.Data = Data_Tx;
@@ -399,6 +405,7 @@ unsigned char LoRaWANClass::getDataRate()
399405
{
400406
return LoRa_Settings.Datarate_Tx;
401407
}
408+
402409
void LoRaWANClass::setTxPower1(unsigned char power_idx)
403410
{
404411
unsigned char RFM_Data;
@@ -407,6 +414,28 @@ void LoRaWANClass::setTxPower1(unsigned char power_idx)
407414
RFM_Write(RFM_REG_PA_CONFIG, RFM_Data);
408415
}
409416

417+
void LoRaWANClass::setRx1Delay(unsigned int ms)
418+
{
419+
LoRa_Settings.Rx1_Delay = ms;
420+
LoRa_Settings.Rx2_Delay = max(LoRa_Settings.Rx2_Delay,LoRa_Settings.Rx1_Delay + LoRa_Settings.RX1_Window);
421+
}
422+
423+
void LoRaWANClass::setRx2Delay(unsigned int ms)
424+
{
425+
LoRa_Settings.Rx2_Delay = max(ms,LoRa_Settings.Rx1_Delay + LoRa_Settings.RX1_Window);
426+
}
427+
428+
void LoRaWANClass::setRx1Window(unsigned int ms)
429+
{
430+
LoRa_Settings.RX1_Window = ms;
431+
LoRa_Settings.Rx2_Delay = max(LoRa_Settings.Rx2_Delay,LoRa_Settings.Rx1_Delay + LoRa_Settings.RX1_Window);
432+
}
433+
434+
void LoRaWANClass::setRx2Window(unsigned int ms)
435+
{
436+
LoRa_Settings.RX2_Window = ms;
437+
}
438+
410439
int LoRaWANClass::readData(char *outBuff)
411440
{
412441
int res = 0;

src/arduino-rfm/lorawan-arduino-rfm.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ class LoRaWANClass
7979
unsigned char getDataRate();
8080
void setTxPower1(unsigned char power_idx);
8181
void setTxPower(int level, txPin_t pinTx);
82+
void setRx1Delay(unsigned int ms);
83+
void setRx2Delay(unsigned int ms);
84+
void setRx1Window(unsigned int ms);
85+
void setRx2Window(unsigned int ms);
8286
int getRssi();
8387
int readData(char *outBuff);
8488
bool readAck(void);

0 commit comments

Comments
 (0)