Skip to content

Commit

Permalink
Merge pull request #99 from icssw-org/oe1kbc_4.34k
Browse files Browse the repository at this point in the history
V.434l Retransmit MSG
  • Loading branch information
oe1kbc authored Jan 23, 2025
2 parents a2ec7f4 + 266b791 commit 3b44b4a
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 22 deletions.
20 changes: 20 additions & 0 deletions src/command_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,24 @@ void commandAction(char *msg_text, bool ble)
return;
}
else
if(commandCheck(msg_text+2, (char*)"setretx off") == 0)
{
Serial.println("\nsetretx off");

bDisplayRetx=false;

return;
}
else
if(commandCheck(msg_text+2, (char*)"setretx on") == 0)
{
Serial.println("\nsetretx on");

bDisplayRetx=true;

return;
}
else
if(commandCheck(msg_text+2, (char*)"shortpath off") == 0)
{
Serial.println("\nshortpath off");
Expand Down Expand Up @@ -1253,6 +1271,7 @@ void commandAction(char *msg_text, bool ble)
{
bLORADEBUG=true;
bDisplayInfo=true;
bDisplayRetx=true;

meshcom_settings.node_sset = meshcom_settings.node_sset | 0x0200; //

Expand All @@ -1270,6 +1289,7 @@ void commandAction(char *msg_text, bool ble)
{
bLORADEBUG=false;
bDisplayInfo=false;
bDisplayRetx=false;

meshcom_settings.node_sset = meshcom_settings.node_sset & 0x7DFF; //

Expand Down
2 changes: 1 addition & 1 deletion src/configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ definitions

#define SOURCE_TYPE "C"
#define SOURCE_VERSION "4.34"
#define SOURCE_VERSION_SUB "k"
#define SOURCE_VERSION_SUB "l"

//Hardware Types
#define TLORA_V2 1
Expand Down
2 changes: 1 addition & 1 deletion src/esp32/esp32_gps.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ unsigned int getGPS(void)
if(!bGPSON)
{
if(meshcom_settings.node_postime > 0)
return meshcom_settings.node_postime;
return (unsigned long)meshcom_settings.node_postime;

return POSINFO_INTERVAL;
}
Expand Down
4 changes: 2 additions & 2 deletions src/esp32/esp32_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ bool init_flash_done=false;

String strText="";

unsigned int getMacAddr(void)
unsigned int getMacAddr(void)
{
uint64_t dmac64 = ESP.getEfuseMac();

Expand Down Expand Up @@ -1449,7 +1449,7 @@ void esp32loop()
}

#ifdef ENABLE_GPS
unsigned int igps = getGPS();
unsigned int igps = (unsigned int)getGPS();
if(igps > 0)
posinfo_interval = igps;
else
Expand Down
17 changes: 11 additions & 6 deletions src/loop_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ bool bPosDisplay = true;
bool bDisplayOff = false;
bool bDisplayVolt = false;
bool bDisplayInfo = false;
bool bDisplayRetx = false;
unsigned long DisplayOffWait = 0;
bool bDisplayTrack = false;
bool bGPSON = false;
Expand Down Expand Up @@ -1454,7 +1455,6 @@ void sendDisplayPosition(struct aprsMessage &aprsmsg, int16_t rssi, int8_t snr)

initAPRSPOS(aprspos);

Serial.println("2");
decodeAPRSPOS(aprsmsg.msg_payload, aprspos);

//display positions from myheard nodes only
Expand Down Expand Up @@ -1975,16 +1975,21 @@ void sendMessage(char *msg_text, int len)
// local messages send to LoRa TX
ringBuffer[iWrite][0]=aprsmsg.msg_len;
memcpy(ringBuffer[iWrite]+2, msg_buffer, aprsmsg.msg_len);

if (ringBuffer[iWrite][2] == 0x3A) // only Messages
{
ringBuffer[iWrite][1] = 0x00; // retransmission Status ...0xFF no retransmission
}
else
{
ringBuffer[iWrite][1] = 0xFF; // retransmission Status ...0xFF no retransmission
}

if(bLORADEBUG)
{
unsigned int ring_msg_id = (ringBuffer[iWrite][6]<<24) | (ringBuffer[iWrite][5]<<16) | (ringBuffer[iWrite][4]<<8) | ringBuffer[iWrite][3];
Serial.printf("einfügen retid:%i status:%02X lng;%02X msg-id:%c-%08X\n", iWrite, ringBuffer[iWrite][1], ringBuffer[iWrite][0], ringBuffer[iWrite][2], ring_msg_id);
}
if(bDisplayRetx)
{
unsigned int ring_msg_id = (ringBuffer[iWrite][6]<<24) | (ringBuffer[iWrite][5]<<16) | (ringBuffer[iWrite][4]<<8) | ringBuffer[iWrite][3];
Serial.printf("einfügen retid:%i status:%02X lng;%02X msg-id: %c-%08X\n", iWrite, ringBuffer[iWrite][1], ringBuffer[iWrite][0], ringBuffer[iWrite][2], ring_msg_id);
}

iWrite++;
if(iWrite >= MAX_RING)
Expand Down
1 change: 1 addition & 0 deletions src/loop_functions_extern.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ extern bool bPosDisplay;
extern bool bDisplayOff;
extern bool bDisplayVolt;
extern bool bDisplayInfo;
extern bool bDisplayRetx;
extern unsigned long DisplayOffWait;
extern int DisplayTimeWait;
extern unsigned long BattTimeWait;
Expand Down
66 changes: 54 additions & 12 deletions src/lora_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,12 +142,12 @@ void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)

//Serial.println("got lora rx");

unsigned int rx_msg_id= (RcvBuffer[4]<<24) | (RcvBuffer[3]<<16) | (RcvBuffer[2]<<8) | RcvBuffer[1];
unsigned int rx_msg_id = (RcvBuffer[4]<<24) | (RcvBuffer[3]<<16) | (RcvBuffer[2]<<8) | RcvBuffer[1];

// RX-OK do not need retransmission
for(int ircheck=0;ircheck<MAX_RING;ircheck++)
{
if(ringBuffer[ircheck][0] > 0 && ringBuffer[ircheck][1] > 0x00 && ringBuffer[ircheck][1] != 0xFF)
if(ringBuffer[ircheck][0] > 0 && ringBuffer[ircheck][1] != 0x01 && ringBuffer[ircheck][1] != 0xFF)
{
unsigned int ring_msg_id = (ringBuffer[ircheck][6]<<24) | (ringBuffer[ircheck][5]<<16) | (ringBuffer[ircheck][4]<<8) | ringBuffer[ircheck][3];

Expand All @@ -157,13 +157,20 @@ void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
{
ringBuffer[ircheck][1] = 0xFF; // no retransmission

if(bLORADEBUG)
if(bDisplayRetx)
{
Serial.printf("got lora rx for retid:%i no need status:%02X lng;%i msg-id:%c-%08X\n", ircheck, ringBuffer[ircheck][1], ringBuffer[ircheck][0], ringBuffer[ircheck][2], ring_msg_id);
}

break;
}
else
{
if(bDisplayRetx)
{
Serial.printf("got lora not found ring_msg_id:%08X != rx_msg_id:%08X\n", ring_msg_id, rx_msg_id);
}
}
}
}

Expand Down Expand Up @@ -519,7 +526,7 @@ void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)

Serial.printf("ACK from LoRa GW %02X %02X%02X%02X%02X %02X %02X\n", print_buff[5], print_buff[9], print_buff[8], print_buff[7], print_buff[6], print_buff[10], print_buff[11]);

unsigned int mid = (print_buff[1]) | (print_buff[2]<<8) | (print_buff[3]<<16) | (print_buff[4]<<24);
unsigned long mid = (print_buff[1]) | (print_buff[2]<<8) | (print_buff[3]<<16) | (print_buff[4]<<24);
addLoraRxBuffer(mid);

msg_counter=millis(); // ACK mit neuer msg_id versenden
Expand Down Expand Up @@ -609,9 +616,20 @@ void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)

if(size + 1 > UDP_TX_BUF_SIZE)
size = UDP_TX_BUF_SIZE - 1;

ringBuffer[iWrite][0]=size;
ringBuffer[iWrite][1]=0xFF; // retransmission Status ...0xFF no retransmission
memcpy(ringBuffer[iWrite]+2, RcvBuffer, size);
if (ringBuffer[iWrite][2] == 0x3A) // only Messages
ringBuffer[iWrite][1] = 0x00; // retransmission Status ...0xFF no retransmission
else
ringBuffer[iWrite][1] = 0xFF; // retransmission Status ...0xFF no retransmission

if(bDisplayRetx)
{
unsigned int ring_msg_id = (ringBuffer[iWrite][6]<<24) | (ringBuffer[iWrite][5]<<16) | (ringBuffer[iWrite][4]<<8) | ringBuffer[iWrite][3];
Serial.printf("einfügen retid:%i status:%02X lng;%02X msg-id: %c-%08X\n", iWrite, ringBuffer[iWrite][1], ringBuffer[iWrite][0], ringBuffer[iWrite][2], ring_msg_id);
}

iWrite++;
if(iWrite >= MAX_RING)
iWrite=0;
Expand Down Expand Up @@ -729,17 +747,29 @@ bool doTX(int iReadTX, bool bRTX)
sendlng = ringBuffer[iReadTX][0];
memcpy(lora_tx_buffer, ringBuffer[iReadTX] + 2, sendlng);

// Retransmit
// nur wenn retransmit
bool bRTX_Display = false;

if(bRTX)
{
ringBuffer[iReadTX][1]=0xFF; // mark retransmission Status sent
bRTX_Display = true;
}
else
ringBuffer[iReadTX][1]=0x01; // mark retransmission Status sent
{
if(ringBuffer[iReadTX][1] == 0x00)
{
// nur wenn retransmit gepklant
ringBuffer[iReadTX][1]=0x01; // mark retransmission Status start retransmission
bRTX_Display = true;
}
}


if(bLORADEBUG)
if(bDisplayRetx && bRTX_Display)
{
unsigned int ring_msg_id = (ringBuffer[iReadTX][6]<<24) | (ringBuffer[iReadTX][5]<<16) | (ringBuffer[iReadTX][4]<<8) | ringBuffer[iReadTX][3];
Serial.printf("senden retid:%i status:%02X lng;%02X msg-id:%c-%08X\n", iReadTX, ringBuffer[iReadTX][1], ringBuffer[iReadTX][0], ringBuffer[iReadTX][2], ring_msg_id);
Serial.printf("senden retid:%i status:%02X lng;%02X msg-id: %c-%08X\n", iReadTX, ringBuffer[iReadTX][1], ringBuffer[iReadTX][0], ringBuffer[iReadTX][2], ring_msg_id);
}

lora_tx_buffer[sendlng]=0x00;
Expand Down Expand Up @@ -894,15 +924,27 @@ bool updateRetransmissionStatus()
ringBuffer[ircheck][1] = 0xFF;
}

if(ringBuffer[ircheck][0] > 0 && ringBuffer[ircheck][1] > 0x00 && ringBuffer[ircheck][1] != 0xFF)
if(ringBuffer[ircheck][0] > 0 && ringBuffer[ircheck][1] != 0x00 && ringBuffer[ircheck][1] != 0xFF)
{
ringBuffer[ircheck][1]++;

// stoppen da kein Empfang über längere Zeit
if(ringBuffer[ircheck][1] == 0x10)
{
int ring_msg_id = (ringBuffer[ircheck][6]<<24) | (ringBuffer[ircheck][5]<<16) | (ringBuffer[ircheck][4]<<8) | ringBuffer[ircheck][3];
Serial.printf("Retransmit retid:%i status:%02X lng;%02X msg-id:%c-%08X\n", ircheck, ringBuffer[ircheck][1], ringBuffer[ircheck][0], ringBuffer[ircheck][2], ring_msg_id);
int ring_msg_lng = ringBuffer[ircheck][0];

if(bDisplayRetx)
{
unsigned int ring_msg_id = (ringBuffer[ircheck][6]<<24) | (ringBuffer[ircheck][5]<<16) | (ringBuffer[ircheck][4]<<8) | ringBuffer[ircheck][3];
Serial.printf("Retransmit retid:%i status:%02X lng;%02X msg-id: %c-%08X\n", ircheck, ringBuffer[ircheck][1], ringBuffer[ircheck][0], ringBuffer[ircheck][2], ring_msg_id);

for(int iq=0;iq<ring_msg_lng+2;iq++)
{
if(ringBuffer[ircheck][iq] > 0x20 && ringBuffer[ircheck][iq] < 0x7F)
Serial.printf("%c", ringBuffer[ircheck][iq]);
}
Serial.println("");
}

iRetransmit = ircheck;

Expand Down

0 comments on commit 3b44b4a

Please sign in to comment.