kopia lustrzana https://github.com/pjalocha/esp32-ogn-tracker
Choose particular protocols to be transmitted by mean of TxProtMask parameter
rodzic
3158945266
commit
1304bfa49d
|
@ -75,13 +75,13 @@
|
||||||
// #define WITH_VARIO
|
// #define WITH_VARIO
|
||||||
|
|
||||||
#define WITH_ADSL
|
#define WITH_ADSL
|
||||||
// #define WITH_PAW
|
#define WITH_PAW
|
||||||
// #define WITH_FANET
|
#define WITH_FANET
|
||||||
#define WITH_LORAWAN
|
#define WITH_LORAWAN
|
||||||
|
|
||||||
#define WITH_AP // WiFi Access Point: can work together with BT_SPP
|
#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_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_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
|
// #define WITH_APRS // alpha-code: attempt to connect to the wifi router for uploading the log files to APRS
|
||||||
|
|
||||||
|
|
|
@ -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 \
|
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 \
|
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
|
build/bootloader/bootloader.bin 0x10000 build/esp32-ogn-tracker.bin 0x8000 build/partitions.bin
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
#define STR(macro) QUOTE(macro)
|
#define STR(macro) QUOTE(macro)
|
||||||
|
|
||||||
#ifndef VERSION
|
#ifndef VERSION
|
||||||
#define VERSION 0.1.5
|
#define VERSION 0.1.6
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char Line[128];
|
static char Line[128];
|
||||||
|
@ -824,8 +824,8 @@ void OLED_DrawID(u8g2_t *OLED, GPS_Position *GPS)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef WITH_FollowMe
|
#ifdef WITH_FollowMe
|
||||||
u8g2_DrawStr(OLED, 15, 44, "FollowMe868");
|
u8g2_DrawStr(OLED, 15, 37, "FollowMe868");
|
||||||
u8g2_DrawStr(OLED, 20, 56, "by AVIONIX");
|
u8g2_DrawStr(OLED, 20, 49, "by AVIONIX");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
// u8g2_SetFont(OLED, u8g2_font_5x8_tr);
|
// u8g2_SetFont(OLED, u8g2_font_5x8_tr);
|
||||||
|
|
|
@ -179,6 +179,34 @@ uint16_t StratuxPort;
|
||||||
uint8_t AppKey[16];
|
uint8_t AppKey[16];
|
||||||
#endif
|
#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;
|
uint32_t CheckSum;
|
||||||
|
|
||||||
#ifdef WITH_APRS
|
#ifdef WITH_APRS
|
||||||
|
@ -247,6 +275,8 @@ uint16_t StratuxPort;
|
||||||
TxPower = 14; // [dBm] for RFM69HW
|
TxPower = 14; // [dBm] for RFM69HW
|
||||||
RFchipTypeHW = 1;
|
RFchipTypeHW = 1;
|
||||||
#endif
|
#endif
|
||||||
|
TxProtMask = 0xFF;
|
||||||
|
RxProtMask = 0xFF;
|
||||||
|
|
||||||
Flags = 0;
|
Flags = 0;
|
||||||
#ifdef WITH_GPS_UBX
|
#ifdef WITH_GPS_UBX
|
||||||
|
@ -691,9 +721,15 @@ uint16_t StratuxPort;
|
||||||
if(strcmp(Name, "GNSS")==0)
|
if(strcmp(Name, "GNSS")==0)
|
||||||
{ int32_t Mode=0; if(Read_Int(Mode, Value)<=0) return 0;
|
{ int32_t Mode=0; if(Read_Int(Mode, Value)<=0) return 0;
|
||||||
GNSS=Mode; return 1; }
|
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)
|
if(strcmp(Name, "PageMask")==0)
|
||||||
{ int32_t Mode=0; if(Read_Int(Mode, Value)<=0) return 0;
|
{ int32_t Mask=0; if(Read_Int(Mask, Value)<=0) return 0;
|
||||||
PageMask=Mode; return 1; }
|
PageMask=Mask; return 1; }
|
||||||
if(strcmp(Name, "InitialPage")==0)
|
if(strcmp(Name, "InitialPage")==0)
|
||||||
{ int32_t Mode=0; if(Read_Int(Mode, Value)<=0) return 0;
|
{ int32_t Mode=0; if(Read_Int(Mode, Value)<=0) return 0;
|
||||||
InitialPage=Mode; return 1; }
|
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_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_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_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_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_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;
|
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_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_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_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_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_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);
|
Write_SignDec(Line, "TempCorr" , (int32_t)RFchipTempCorr ); strcat(Line, " # [ degC]\n"); Format_String(Output, Line);
|
||||||
|
|
|
@ -667,7 +667,7 @@ void vTaskPROC(void* pvParameters)
|
||||||
static uint8_t FNTbackOff=0;
|
static uint8_t FNTbackOff=0;
|
||||||
if(FNTbackOff) FNTbackOff--;
|
if(FNTbackOff) FNTbackOff--;
|
||||||
// if( (SlotTime&0x07)==(RX_Random&0x07) ) // every 8sec
|
// 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();
|
{ FANET_Packet *Packet = FNT_TxFIFO.getWrite();
|
||||||
Packet->setAddress(Parameters.Address);
|
Packet->setAddress(Parameters.Address);
|
||||||
Position->EncodeAirPos(*Packet, Parameters.AcftType, !Parameters.Stealth);
|
Position->EncodeAirPos(*Packet, Parameters.AcftType, !Parameters.Stealth);
|
||||||
|
|
24
main/rf.cpp
24
main/rf.cpp
|
@ -657,10 +657,10 @@ extern "C"
|
||||||
// CONS_UART_Write('0'+ADSL_Slot);
|
// CONS_UART_Write('0'+ADSL_Slot);
|
||||||
// Format_String(CONS_UART_Write, "\n"); }
|
// Format_String(CONS_UART_Write, "\n"); }
|
||||||
#endif
|
#endif
|
||||||
const uint8_t *TxPktData0=0;
|
const uint8_t *TxPktData0=0; // pointers to OGN packet data to be sent
|
||||||
const uint8_t *TxPktData1=0;
|
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
|
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
|
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(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
|
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
|
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
|
{ const uint8_t *Tmp=TxPktData0; TxPktData0=TxPktData1; TxPktData1=Tmp; } // swap 1st and 2nd packet data
|
||||||
}
|
}
|
||||||
#ifdef WITH_ADSL
|
#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);
|
TimeSlot(TxChan, 800-TimeSync_msTime(), ADSL_TxPkt, TRX.averRSSI, 0, TxTime);
|
||||||
else
|
else
|
||||||
#endif
|
#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();
|
TRX.setModeStandby();
|
||||||
TxChan = RF_FreqPlan.getChannel(RF_SlotTime, 1, 1); // transmit channel
|
TxChan = RF_FreqPlan.getChannel(RF_SlotTime, 1, 1); // transmit channel
|
||||||
|
@ -733,25 +733,25 @@ extern "C"
|
||||||
#ifdef WITH_LORAWAN
|
#ifdef WITH_LORAWAN
|
||||||
bool WANtx = 0;
|
bool WANtx = 0;
|
||||||
if(WAN_BackOff) WAN_BackOff--;
|
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) //
|
{ if(WANdev.State==0 || WANdev.State==2) //
|
||||||
{ WANtx=1; SlotEnd=1220; }
|
{ WANtx=1; SlotEnd=1220; }
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef WITH_ADSL
|
#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);
|
TimeSlot(TxChan, SlotEnd-TimeSync_msTime(), ADSL_TxPkt, TRX.averRSSI, 0, TxTime);
|
||||||
else
|
else
|
||||||
#endif
|
#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
|
#ifdef WITH_PAW
|
||||||
static uint8_t PAWtxBackOff = 4;
|
static uint8_t PAWtxBackOff = 4;
|
||||||
#ifdef WITH_LORAWAN
|
#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
|
#else
|
||||||
if(RF_FreqPlan.Plan<=1 && TxPkt0 && TxPkt0->Packet.Header.AddrType)
|
if(Parameters.TxPAW && RF_FreqPlan.Plan<=1 && TxPkt0 && TxPkt0->Packet.Header.AddrType)
|
||||||
#endif
|
#endif // WITH_LORAWAN
|
||||||
{ PAW_Packet Packet; Packet.Clear();
|
{ PAW_Packet Packet; Packet.Clear();
|
||||||
OGN1_Packet TxPkt = TxPkt0->Packet;
|
OGN1_Packet TxPkt = TxPkt0->Packet;
|
||||||
TxPkt.Dewhiten(); // de-whiten the OGN packet so it can be converted to PAW format
|
TxPkt.Dewhiten(); // de-whiten the OGN packet so it can be converted to PAW format
|
||||||
|
|
Ładowanie…
Reference in New Issue