Skip to content

Commit

Permalink
fiz lora cicle
Browse files Browse the repository at this point in the history
  • Loading branch information
sabas1080 committed Feb 15, 2024
1 parent 840a466 commit 8a81a21
Showing 1 changed file with 19 additions and 65 deletions.
84 changes: 19 additions & 65 deletions src/arduino-rfm/LoRaMAC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,7 @@ void LORA_Cycle(sBuffer *Data_Tx, sBuffer *Data_Rx, RFM_command_t *RFM_Command,
sLoRa_OTAA *OTAA_Data, sLoRa_Message *Message_Rx, sSettings *LoRa_Settings)
{
static const unsigned int Receive_Delay_1 = 1000;
static const unsigned int Receive_Delay_2 = 2000; // Receive_Delay_2 >= Receive_Delay_1 + RX1_Window
static const unsigned int RX1_Window = 1000;
static const unsigned int RX2_Window = 1000;

static const unsigned int Receive_Delay_2 = 1000;
unsigned long prevTime = 0;
unsigned char rx1_ch = LoRa_Settings->Channel_Rx;
#ifdef US_915
Expand All @@ -90,12 +87,8 @@ void LORA_Cycle(sBuffer *Data_Tx, sBuffer *Data_Rx, RFM_command_t *RFM_Command,
pinMode(RFM_SWITCH,OUTPUT);
digitalWrite(RFM_SWITCH,0); //Rf switch inside RAK module change to Tx
#endif

//Lora send data
LORA_Send_Data(Data_Tx, Session_Data, LoRa_Settings);



LORA_Send_Data(Data_Tx, Session_Data, LoRa_Settings);
prevTime = millis();

#if (SAMR34)
Expand Down Expand Up @@ -123,6 +116,7 @@ void LORA_Cycle(sBuffer *Data_Tx, sBuffer *Data_Rx, RFM_command_t *RFM_Command,
#endif
LORA_Receive_Data(Data_Rx, Session_Data, OTAA_Data, Message_Rx, LoRa_Settings); //BUG DETECT SENDED PACKET ALWAYS (IT DOES UPDATE)
}

//Wait rx1 window delay
//Receive on RX2 if countinous mode is available
//check if anything if coming on class C RX2 window in class A no DIO0 flag will be activated
Expand All @@ -140,68 +134,28 @@ void LORA_Cycle(sBuffer *Data_Tx, sBuffer *Data_Rx, RFM_command_t *RFM_Command,
LoRa_Settings->Datarate_Rx = rx1_dr; //set RX1 datarate
//Receive Data RX1
LORA_Receive_Data(Data_Rx, Session_Data, OTAA_Data, Message_Rx, LoRa_Settings);
}while(millis() - prevTime < Receive_Delay_1 + RX1_Window);
//Return if message on RX1
if (Data_Rx->Counter>0){
return;
}

// Class C open RX2 immediately after first rx window
if(LoRa_Settings->Mote_Class == CLASS_C){
#ifdef US_915
LoRa_Settings->Channel_Rx = 0x08; // set Rx2 channel 923.3 MHZ
LoRa_Settings->Datarate_Rx = SF12BW500; //set RX2 datarate 12
#elif defined(EU_868)
LoRa_Settings->Channel_Rx = CHRX2; // set Rx2 channel 923.3 MHZ
LoRa_Settings->Datarate_Rx = SF12BW125; //set RX2 datarate 12
#elif defined(IN_865)
LoRa_Settings->Channel_Rx = CHRX2; // set Rx2 channel 866.550 MHZ
LoRa_Settings->Datarate_Rx = SF10BW125; //set RX2 datarate 10
#elif defined(AS_923) || defined(AS_923_2)
LoRa_Settings->Channel_Rx = 0x00; // set Rx2 channel 923.2 (AS_923) or 921.4 (AS_923_2)
LoRa_Settings->Datarate_Rx = SF10BW125; //set RX2 datarate 10
/* Added the band AU_915 for use in class C */
#elif defined(AU_915)
LoRa_Settings->Channel_Rx = 0x08; // set Rx2 channel 923.3 MHZ
LoRa_Settings->Datarate_Rx = SF12BW500; //set RX2 datarate 12
#endif
LORA_Receive_Data(Data_Rx, Session_Data, OTAA_Data, Message_Rx, LoRa_Settings); //BUG DETECT SENDED PACKET ALWAYS (IT DOES UPDATE)
}
//Wait rx2 window delay
do{
//Poll Rx done for getting message
//DIO0 flag will only be active while class C
if(digitalRead(RFM_pins.DIO0))
LORA_Receive_Data(Data_Rx, Session_Data, OTAA_Data, Message_Rx, LoRa_Settings);
}while(millis() - prevTime < Receive_Delay_2);
//Return if message on RX1
if (Data_Rx->Counter>0)return;

//LoRaWAN Link Layer Specification v1.0.4 line 375
//Wait rx2 window delay, TO TEST check if class c receives anything
do{
yield(); // Do nothing during rx2 window delay
}while(millis() - prevTime < Receive_Delay_2);

//RX2 Window
//Configure datarate and channel for RX2
#ifdef US_915
LoRa_Settings->Channel_Rx = 0x08; // set Rx2 channel 923.3 MHZ
LoRa_Settings->Datarate_Rx = SF12BW500; //set RX2 datarate 12
#elif defined(EU_868)
LoRa_Settings->Channel_Rx = CHRX2; // set Rx2 channel 923.3 MHZ
LoRa_Settings->Datarate_Rx = SF12BW125; //set RX2 datarate 12
#elif defined(IN_865)
LoRa_Settings->Channel_Rx = CHRX2; // set Rx2 channel 866.550 MHZ
LoRa_Settings->Datarate_Rx = SF10BW125; //set RX2 datarate 10
#elif defined(AS_923) || defined(AS_923_2)
LoRa_Settings->Channel_Rx = 0x00; // set Rx2 channel 923.2 (AS_923) or 921.4 (AS_923_2)
LoRa_Settings->Datarate_Rx = SF10BW125; //set RX2 datarate 10
#elif defined(AU_915)
LoRa_Settings->Channel_Rx = 0x08; // set Rx2 channel 923.3 MHZ
LoRa_Settings->Datarate_Rx = SF12BW500; //set RX2 datarate 12
#endif

//Receive Data RX2
do{
//Configure datarate and channel for RX2
LoRa_Settings->Channel_Rx = 0x08; // set RX2 channel
LoRa_Settings->Datarate_Rx = 0x08; //set RX2 datarate
//Receive Data RX2
//If class A timeout will apply
//If class C continous Rx will happen
LORA_Receive_Data(Data_Rx, Session_Data, OTAA_Data, Message_Rx, LoRa_Settings);
*RFM_Command = NO_RFM_COMMAND;

}
}



/*
*****************************************************************************************
* Description : Function that is used to build a LoRaWAN data message and then tranmit it.
Expand Down

0 comments on commit 8a81a21

Please sign in to comment.