Choose particular protocols to be transmitted by mean of TxProtMask parameter

master
Pawel Jalocha 2023-07-14 06:43:53 +01:00
rodzic 3158945266
commit 1304bfa49d
6 zmienionych plików z 65 dodań i 21 usunięć

Wyświetl plik

@ -75,13 +75,13 @@
// #define WITH_VARIO
#define WITH_ADSL
// #define WITH_PAW
// #define WITH_FANET
#define WITH_PAW
#define WITH_FANET
#define WITH_LORAWAN
#define WITH_AP // WiFi Access Point: can work together with BT_SPP
#define WITH_AP_BUTTON // only starts when button pressed at sartup
// #define WITH_BT_SPP // Bluetooth serial port for smartphone/tablet link: can work together with WiFi Access point
#define WITH_BT_SPP // Bluetooth serial port for smartphone/tablet link: can work together with WiFi Access point
// #define WITH_STRATUX // beta-code: connect to Stratux WiFi and serve as GPS and OGN transmitter/receiver
// #define WITH_APRS // alpha-code: attempt to connect to the wifi router for uploading the log files to APRS

Wyświetl plik

@ -1,3 +1,7 @@
# you may need to change the port name
# you may need to change python into python3
# you may need to install pyserial python or python3 module: pip install pyserial
# you may need to install python or python3 pip: sudo apt-get install python-pip
python esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset \
write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 \
build/bootloader/bootloader.bin 0x10000 build/esp32-ogn-tracker.bin 0x8000 build/partitions.bin

Wyświetl plik

@ -42,7 +42,7 @@
#define STR(macro) QUOTE(macro)
#ifndef VERSION
#define VERSION 0.1.5
#define VERSION 0.1.6
#endif
static char Line[128];
@ -824,8 +824,8 @@ void OLED_DrawID(u8g2_t *OLED, GPS_Position *GPS)
else
{
#ifdef WITH_FollowMe
u8g2_DrawStr(OLED, 15, 44, "FollowMe868");
u8g2_DrawStr(OLED, 20, 56, "by AVIONIX");
u8g2_DrawStr(OLED, 15, 37, "FollowMe868");
u8g2_DrawStr(OLED, 20, 49, "by AVIONIX");
#endif
}
// u8g2_SetFont(OLED, u8g2_font_5x8_tr);

Wyświetl plik

@ -179,6 +179,34 @@ uint16_t StratuxPort;
uint8_t AppKey[16];
#endif
union
{ uint16_t TxProtMask;
struct
{ bool TxSpare:1;
bool TxOGN:1;
bool TxADSL:1;
bool TxPAW:1;
bool TxFNT:1;
bool TxWAN:1;
bool TxADSB:1;
bool TxODID:1;
} ;
} ;
union
{ uint16_t RxProtMask;
struct
{ bool RxSpare:1;
bool RxOGN:1;
bool RxADSL:1;
bool RxPAW:1;
bool RxFNT:1;
bool RxWAN:1;
bool RxADSB:1;
bool RxODID:1;
} ;
} ;
uint32_t CheckSum;
#ifdef WITH_APRS
@ -247,6 +275,8 @@ uint16_t StratuxPort;
TxPower = 14; // [dBm] for RFM69HW
RFchipTypeHW = 1;
#endif
TxProtMask = 0xFF;
RxProtMask = 0xFF;
Flags = 0;
#ifdef WITH_GPS_UBX
@ -691,9 +721,15 @@ uint16_t StratuxPort;
if(strcmp(Name, "GNSS")==0)
{ int32_t Mode=0; if(Read_Int(Mode, Value)<=0) return 0;
GNSS=Mode; return 1; }
if(strcmp(Name, "TxProtMask")==0)
{ int32_t Mask=0; if(Read_Int(Mask, Value)<=0) return 0;
TxProtMask=Mask; return 1; }
if(strcmp(Name, "RxProtMask")==0)
{ int32_t Mask=0; if(Read_Int(Mask, Value)<=0) return 0;
RxProtMask=Mask; return 1; }
if(strcmp(Name, "PageMask")==0)
{ int32_t Mode=0; if(Read_Int(Mode, Value)<=0) return 0;
PageMask=Mode; return 1; }
{ int32_t Mask=0; if(Read_Int(Mask, Value)<=0) return 0;
PageMask=Mask; return 1; }
if(strcmp(Name, "InitialPage")==0)
{ int32_t Mode=0; if(Read_Int(Mode, Value)<=0) return 0;
InitialPage=Mode; return 1; }
@ -871,6 +907,8 @@ uint16_t StratuxPort;
Write_Hex (Line, "CONprot" , CONprot, 1); strcat(Line, " # [ mask]\n"); if(fputs(Line, File)==EOF) return EOF;
Write_SignDec(Line, "TxPower" , TxPower ); strcat(Line, " # [ dBm]\n"); if(fputs(Line, File)==EOF) return EOF;
Write_UnsDec (Line, "TxHW" ,(uint32_t)RFchipTypeHW ); strcat(Line, " # [ bool]\n"); if(fputs(Line, File)==EOF) return EOF;
Write_Hex (Line, "TxProtMask" , (uint32_t)TxProtMask,2); strcat(Line, " # [ mask]\n"); if(fputs(Line, File)==EOF) return EOF;
Write_Hex (Line, "RxProtMask" , (uint32_t)RxProtMask,2); strcat(Line, " # [ mask]\n"); if(fputs(Line, File)==EOF) return EOF;
Write_UnsDec (Line, "FreqPlan" ,(uint32_t)FreqPlan ); strcat(Line, " # [ 0..5]\n"); if(fputs(Line, File)==EOF) return EOF;
Write_Float1 (Line, "FreqCorr" , (int32_t)RFchipFreqCorr ); strcat(Line, " # [ ppm]\n"); if(fputs(Line, File)==EOF) return EOF;
Write_SignDec(Line, "TempCorr" , (int32_t)RFchipTempCorr ); strcat(Line, " # [ degC]\n"); if(fputs(Line, File)==EOF) return EOF;
@ -942,6 +980,8 @@ uint16_t StratuxPort;
Write_Hex (Line, "CONprot" , CONprot, 1); strcat(Line, " # [ mask]\n"); Format_String(Output, Line);
Write_SignDec(Line, "TxPower" , TxPower ); strcat(Line, " # [ dBm]\n"); Format_String(Output, Line);
Write_UnsDec (Line, "TxHW" ,(uint32_t)RFchipTypeHW ); strcat(Line, " # [ bool]\n"); Format_String(Output, Line);
Write_Hex (Line, "TxProtMask" , (uint32_t)TxProtMask,2); strcat(Line, " # [ mask]\n"); Format_String(Output, Line);
Write_Hex (Line, "RxProtMask" , (uint32_t)RxProtMask,2); strcat(Line, " # [ mask]\n"); Format_String(Output, Line);
Write_UnsDec (Line, "FreqPlan" ,(uint32_t)FreqPlan ); strcat(Line, " # [ 0..5]\n"); Format_String(Output, Line);
Write_Float1 (Line, "FreqCorr" , (int32_t)RFchipFreqCorr ); strcat(Line, " # [ ppm]\n"); Format_String(Output, Line);
Write_SignDec(Line, "TempCorr" , (int32_t)RFchipTempCorr ); strcat(Line, " # [ degC]\n"); Format_String(Output, Line);

Wyświetl plik

@ -667,7 +667,7 @@ void vTaskPROC(void* pvParameters)
static uint8_t FNTbackOff=0;
if(FNTbackOff) FNTbackOff--;
// if( (SlotTime&0x07)==(RX_Random&0x07) ) // every 8sec
else if(RF_FreqPlan.Plan<=1)
else if(Parameters.TxFNT && RF_FreqPlan.Plan<=1)
{ FANET_Packet *Packet = FNT_TxFIFO.getWrite();
Packet->setAddress(Parameters.Address);
Position->EncodeAirPos(*Packet, Parameters.AcftType, !Parameters.Stealth);

Wyświetl plik

@ -657,10 +657,10 @@ extern "C"
// CONS_UART_Write('0'+ADSL_Slot);
// Format_String(CONS_UART_Write, "\n"); }
#endif
const uint8_t *TxPktData0=0;
const uint8_t *TxPktData1=0;
const OGN_TxPacket<OGN_Packet> *TxPkt0 = RF_TxFIFO.getRead(0); // get 1st packet from TxFIFO
const OGN_TxPacket<OGN_Packet> *TxPkt1 = RF_TxFIFO.getRead(1); // get 2nd packet from TxFIFO
const uint8_t *TxPktData0=0; // pointers to OGN packet data to be sent
const uint8_t *TxPktData1=0; // during the two time slots
const OGN_TxPacket<OGN_Packet> *TxPkt0 = RF_TxFIFO.getRead(0); // get 1st packet from TxFIFO (NULL if none)
const OGN_TxPacket<OGN_Packet> *TxPkt1 = RF_TxFIFO.getRead(1); // get 2nd packet from TxFIFO (NULL if none)
if(TxPkt0) TxPktData0=TxPkt0->Byte(); // if 1st is not NULL then get its data
if(TxPkt1) TxPktData1=TxPkt1->Byte(); // if 2nd if not NULL then get its data
else TxPktData1=TxPktData0; // but if NULL then take copy of the 1st packet
@ -670,11 +670,11 @@ extern "C"
{ const uint8_t *Tmp=TxPktData0; TxPktData0=TxPktData1; TxPktData1=Tmp; } // swap 1st and 2nd packet data
}
#ifdef WITH_ADSL
if(ADSL_Slot==0 && ADSL_TxPkt)
if(Parameters.TxADSL && RF_FreqPlan.Plan<=1 && ADSL_Slot==0 && ADSL_TxPkt)
TimeSlot(TxChan, 800-TimeSync_msTime(), ADSL_TxPkt, TRX.averRSSI, 0, TxTime);
else
#endif
TimeSlot(TxChan, 800-TimeSync_msTime(), TxPktData0, TRX.averRSSI, 0, TxTime); // run a Time-Slot till 0.800sec
TimeSlot(TxChan, 800-TimeSync_msTime(), Parameters.TxOGN?TxPktData0:0, TRX.averRSSI, 0, TxTime); // run a Time-Slot till 0.800sec
TRX.setModeStandby();
TxChan = RF_FreqPlan.getChannel(RF_SlotTime, 1, 1); // transmit channel
@ -733,25 +733,25 @@ extern "C"
#ifdef WITH_LORAWAN
bool WANtx = 0;
if(WAN_BackOff) WAN_BackOff--;
else if(RF_FreqPlan.Plan<=1 && Parameters.TxPower!=(-32)) // decide to transmit in this slot
else if(Parameters.TxWAN && RF_FreqPlan.Plan<=1 && Parameters.TxPower!=(-32)) // decide to transmit in this slot
{ if(WANdev.State==0 || WANdev.State==2) //
{ WANtx=1; SlotEnd=1220; }
}
#endif
#ifdef WITH_ADSL
if(RF_FreqPlan.Plan<=1 && ADSL_Slot==1 && ADSL_TxPkt)
if(Parameters.TxADSL && RF_FreqPlan.Plan<=1 && ADSL_Slot==1 && ADSL_TxPkt)
TimeSlot(TxChan, SlotEnd-TimeSync_msTime(), ADSL_TxPkt, TRX.averRSSI, 0, TxTime);
else
#endif
TimeSlot(TxChan, SlotEnd-TimeSync_msTime(), TxPktData1, TRX.averRSSI, 0, TxTime);
TimeSlot(TxChan, SlotEnd-TimeSync_msTime(), Parameters.TxOGN?TxPktData1:0, TRX.averRSSI, 0, TxTime);
#ifdef WITH_PAW
static uint8_t PAWtxBackOff = 4;
#ifdef WITH_LORAWAN
if(!WANtx && TxPkt0 && TxPkt0->Packet.Header.AddrType && WANdev.State!=1 && WANdev.State!=3) // if no WAN transmission/reception scheduled
if(Parameters.TxPAW && RF_FreqPlan.Plan<=1 && !WANtx && TxPkt0 && TxPkt0->Packet.Header.AddrType && WANdev.State!=1 && WANdev.State!=3) // if no WAN transmission/reception scheduled
#else
if(RF_FreqPlan.Plan<=1 && TxPkt0 && TxPkt0->Packet.Header.AddrType)
#endif
if(Parameters.TxPAW && RF_FreqPlan.Plan<=1 && TxPkt0 && TxPkt0->Packet.Header.AddrType)
#endif // WITH_LORAWAN
{ PAW_Packet Packet; Packet.Clear();
OGN1_Packet TxPkt = TxPkt0->Packet;
TxPkt.Dewhiten(); // de-whiten the OGN packet so it can be converted to PAW format