kopia lustrzana https://github.com/pjalocha/esp32-ogn-tracker
Fix bug around transmitting last known position when GPS fix is lost
rodzic
7c4109151f
commit
c440a2e936
|
@ -469,7 +469,7 @@ uint16_t StratuxPort;
|
|||
Line[Len++]=HexDigit(AddrType); Line[Len++]=':';
|
||||
Len+=Format_Hex(Line+Len, Address, 6);
|
||||
{ uint64_t ID=getUniqueID(); Line[Len++]='/';
|
||||
Len+=Format_Hex(Line+Len, (uint16_t)(ID>>32)); Len+=Format_Hex(Line+Len, (uint32_t)ID); }
|
||||
Len+=Format_Hex(Line+Len, (uint32_t)(ID>>32)); Len+=Format_Hex(Line+Len, (uint32_t)ID); }
|
||||
// uint32_t DefaultAddr=getUniqueAddress();
|
||||
// if(Address!=DefaultAddr)
|
||||
// { Line[Len++]='/'; Len+=Format_Hex(Line+Len, DefaultAddr, 6); }
|
||||
|
@ -498,7 +498,7 @@ uint16_t StratuxPort;
|
|||
{ uint8_t Len=0;
|
||||
Len+=Format_String(Line+Len, "$POGNS,CPU=0x");
|
||||
uint64_t CPU=getUniqueID();
|
||||
Len+=Format_Hex(Line+Len, (uint16_t)(CPU>>32));
|
||||
Len+=Format_Hex(Line+Len, (uint32_t)(CPU>>32));
|
||||
Len+=Format_Hex(Line+Len, (uint32_t)CPU);
|
||||
Len+=Format_String(Line+Len, ",Address=0x");
|
||||
Len+=Format_Hex(Line+Len, Address, 6);
|
||||
|
|
|
@ -556,8 +556,8 @@ void vTaskPROC(void* pvParameters)
|
|||
else { SatSNR=0; }
|
||||
StatPacket.Packet.Status.SatSNR = SatSNR; }
|
||||
|
||||
if(Position && Position->isTimeValid() && Position->isDateValid()) PosTime=Position->getUnixTime();
|
||||
else PosTime=0;
|
||||
// if(Position && Position->isTimeValid() && Position->isDateValid()) PosTime=Position->getUnixTime();
|
||||
// else PosTime=0;
|
||||
|
||||
if( Position && Position->isReady && (!Position->Sent) && Position->isValid() )
|
||||
{ int16_t AverSpeed=GPS_AverageSpeed(); // [0.1m/s] average speed, including the vertical speed
|
||||
|
@ -572,7 +572,7 @@ void vTaskPROC(void* pvParameters)
|
|||
Format_String(CONS_UART_Write, " -> Sent\n");
|
||||
xSemaphoreGive(CONS_Mutex);
|
||||
#endif
|
||||
// PosTime=Position->getUnixTime();
|
||||
PosTime=Position->getUnixTime();
|
||||
PosPacket.Packet.HeaderWord=0;
|
||||
PosPacket.Packet.Header.Address = Parameters.Address; // set address
|
||||
PosPacket.Packet.Header.AddrType = Parameters.AddrType; // address-type
|
||||
|
@ -586,9 +586,9 @@ void vTaskPROC(void* pvParameters)
|
|||
{ while(BestResid>=500) BestResid-=1000; // remove full seconds
|
||||
Position->Encode(PosPacket.Packet, BestResid); }
|
||||
PosPacket.Packet.Position.AcftType = Parameters.AcftType; // aircraft-type
|
||||
PosPacket.Packet.Position.Stealth = 0; // Parameters.Stealth;
|
||||
PosPacket.Packet.Position.Stealth = Parameters.Stealth;
|
||||
#ifdef DEBUG_PRINT
|
||||
{ uint8_t Len=PosPacket.Packet.WriteAPRS(Line, PosTime); // print on the console as APRS message
|
||||
{ uint8_t Len=PosPacket.Packet.WriteAPRS(Line, PosTime); // print on the console as APRS message
|
||||
xSemaphoreTake(CONS_Mutex, portMAX_DELAY);
|
||||
Format_String(CONS_UART_Write, Line, 0, Len);
|
||||
xSemaphoreGive(CONS_Mutex); }
|
||||
|
@ -603,16 +603,17 @@ void vTaskPROC(void* pvParameters)
|
|||
TxPacket->Packet.Whiten(); // just whiten if there is no encryption
|
||||
#endif
|
||||
TxPacket->calcFEC(); // calculate FEC code
|
||||
#ifdef DEBUG_PRINT
|
||||
// #ifdef DEBUG_PRINT
|
||||
xSemaphoreTake(CONS_Mutex, portMAX_DELAY);
|
||||
Format_UnsDec(CONS_UART_Write, TimeSync_Time()%60, 2);
|
||||
CONS_UART_Write('.');
|
||||
Format_UnsDec(CONS_UART_Write, TimeSync_msTime(), 3);
|
||||
Format_String(CONS_UART_Write, " TxFIFO <- ");
|
||||
// Format_UnsDec(CONS_UART_Write, TimeSync_Time()%60, 2);
|
||||
// CONS_UART_Write('.');
|
||||
// Format_UnsDec(CONS_UART_Write, TimeSync_msTime(), 3);
|
||||
Format_UnsDec(CONS_UART_Write, PosTime);
|
||||
Format_String(CONS_UART_Write, " (*) TxFIFO <- ");
|
||||
Format_Hex(CONS_UART_Write, TxPacket->Packet.HeaderWord);
|
||||
CONS_UART_Write('\r'); CONS_UART_Write('\n');
|
||||
xSemaphoreGive(CONS_Mutex);
|
||||
#endif
|
||||
// #endif
|
||||
XorShift32(RX_Random);
|
||||
static uint8_t TxBackOff=0;
|
||||
if(TxBackOff) TxBackOff--;
|
||||
|
@ -623,29 +624,29 @@ void vTaskPROC(void* pvParameters)
|
|||
if(TX_Credit<=0) TxBackOff+=1; }
|
||||
Position->Sent=1;
|
||||
#ifdef WITH_FANET
|
||||
static uint8_t FNTbackOff=0;
|
||||
if(FNTbackOff) FNTbackOff--;
|
||||
// if( (SlotTime&0x07)==(RX_Random&0x07) ) // every 8sec
|
||||
else
|
||||
{ FANET_Packet *FNTpkt = FNT_TxFIFO.getWrite();
|
||||
FNTpkt->setAddress(Parameters.Address);
|
||||
Position->EncodeAirPos(*FNTpkt, Parameters.AcftType, !Parameters.Stealth);
|
||||
XorShift32(RX_Random);
|
||||
FNT_TxFIFO.Write();
|
||||
FNTbackOff = 8+(RX_Random&0x1); } // every 9 or 10sec
|
||||
static uint8_t FNTbackOff=0;
|
||||
if(FNTbackOff) FNTbackOff--;
|
||||
// if( (SlotTime&0x07)==(RX_Random&0x07) ) // every 8sec
|
||||
else
|
||||
{ FANET_Packet *FNTpkt = FNT_TxFIFO.getWrite();
|
||||
FNTpkt->setAddress(Parameters.Address);
|
||||
Position->EncodeAirPos(*FNTpkt, Parameters.AcftType, !Parameters.Stealth);
|
||||
XorShift32(RX_Random);
|
||||
FNT_TxFIFO.Write();
|
||||
FNTbackOff = 8+(RX_Random&0x1); } // every 9 or 10sec
|
||||
#endif
|
||||
#ifdef WITH_LOOKOUT
|
||||
const LookOut_Target *Tgt=Look.ProcessOwn(PosPacket.Packet); // process own position, get the most dangerous target
|
||||
const LookOut_Target *Tgt=Look.ProcessOwn(PosPacket.Packet); // process own position, get the most dangerous target
|
||||
#ifdef WITH_PFLAA
|
||||
if(Parameters.Verbose)
|
||||
{ xSemaphoreTake(CONS_Mutex, portMAX_DELAY);
|
||||
Look.WritePFLA(CONS_UART_Write); // produce PFLAU and PFLAA for all tracked targets
|
||||
xSemaphoreGive(CONS_Mutex);
|
||||
if(Parameters.Verbose)
|
||||
{ xSemaphoreTake(CONS_Mutex, portMAX_DELAY);
|
||||
Look.WritePFLA(CONS_UART_Write); // produce PFLAU and PFLAA for all tracked targets
|
||||
xSemaphoreGive(CONS_Mutex);
|
||||
#ifdef WITH_SDLOG
|
||||
if(Log_Free()>=512)
|
||||
{ xSemaphoreTake(Log_Mutex, portMAX_DELAY);
|
||||
Look.WritePFLA(Log_Write);
|
||||
xSemaphoreGive(Log_Mutex); }
|
||||
if(Log_Free()>=512)
|
||||
{ xSemaphoreTake(Log_Mutex, portMAX_DELAY);
|
||||
Look.WritePFLA(Log_Write);
|
||||
xSemaphoreGive(Log_Mutex); }
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
|
@ -655,10 +656,10 @@ void vTaskPROC(void* pvParameters)
|
|||
Format_String(CONS_UART_Write, Line, 0, Len);
|
||||
xSemaphoreGive(CONS_Mutex);
|
||||
#ifdef WITH_SDLOG
|
||||
if(Log_Free()>=128)
|
||||
{ xSemaphoreTake(Log_Mutex, portMAX_DELAY);
|
||||
Format_String(Log_Write, Line, 0, Len); // send the NMEA out to the log file
|
||||
xSemaphoreGive(Log_Mutex); }
|
||||
if(Log_Free()>=128)
|
||||
{ xSemaphoreTake(Log_Mutex, portMAX_DELAY);
|
||||
Format_String(Log_Write, Line, 0, Len); // send the NMEA out to the log file
|
||||
xSemaphoreGive(Log_Mutex); }
|
||||
#endif
|
||||
}
|
||||
#endif // WITH_PFLAA
|
||||
|
@ -721,17 +722,18 @@ void vTaskPROC(void* pvParameters)
|
|||
} else // if GPS position is not complete, contains no valid position, etc.
|
||||
{ if((SlotTime-PosTime)>=30) { PosPacket.Packet.Position.Time=0x3F; } // if no valid position for more than 30 seconds then set the time as unknown for the transmitted packet
|
||||
OGN_TxPacket<OGN_Packet> *TxPacket = RF_TxFIFO.getWrite();
|
||||
TxPacket->Packet = PosPacket.Packet;
|
||||
TxPacket->Packet = PosPacket.Packet; // copy the position packet
|
||||
TxPacket->Packet.Whiten(); TxPacket->calcFEC(); // whiten and calculate FEC code
|
||||
#ifdef DEBUG_PRINT
|
||||
// #ifdef DEBUG_PRINT
|
||||
xSemaphoreTake(CONS_Mutex, portMAX_DELAY);
|
||||
Format_String(CONS_UART_Write, "TxFIFO: ");
|
||||
Format_UnsDec(CONS_UART_Write, PosTime);
|
||||
Format_String(CONS_UART_Write, " (_) TxFIFO <- ");
|
||||
Format_Hex(CONS_UART_Write, TxPacket->Packet.HeaderWord);
|
||||
CONS_UART_Write('\r'); CONS_UART_Write('\n');
|
||||
xSemaphoreGive(CONS_Mutex);
|
||||
#endif
|
||||
// #endif
|
||||
XorShift32(RX_Random);
|
||||
if(PosTime && ((RX_Random&0x3)==0) ) // send if some position in the packet and at 1/4 normal rate
|
||||
if(PosTime && ((RX_Random&0x7)==0) ) // send if some position in the packet and at 1/8 normal rate
|
||||
RF_TxFIFO.Write(); // complete the write into the TxFIFO
|
||||
if(Position) Position->Sent=1;
|
||||
}
|
||||
|
|
24
sdkconfig
24
sdkconfig
|
@ -130,8 +130,8 @@ CONFIG_PARTITION_TABLE_MD5=y
|
|||
#
|
||||
# Compiler options
|
||||
#
|
||||
CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y
|
||||
# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set
|
||||
# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set
|
||||
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
|
||||
# CONFIG_COMPILER_OPTIMIZATION_PERF is not set
|
||||
# CONFIG_COMPILER_OPTIMIZATION_NONE is not set
|
||||
CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
|
||||
|
@ -139,10 +139,11 @@ CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
|
|||
# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set
|
||||
# CONFIG_COMPILER_CXX_EXCEPTIONS is not set
|
||||
# CONFIG_COMPILER_CXX_RTTI is not set
|
||||
CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
|
||||
# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set
|
||||
# CONFIG_COMPILER_STACK_CHECK_MODE_NONE is not set
|
||||
CONFIG_COMPILER_STACK_CHECK_MODE_NORM=y
|
||||
# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set
|
||||
# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set
|
||||
CONFIG_COMPILER_STACK_CHECK=y
|
||||
# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set
|
||||
CONFIG_COMPILER_DISABLE_GCC8_WARNINGS=y
|
||||
# end of Compiler options
|
||||
|
@ -604,8 +605,7 @@ CONFIG_ETH_RMII_CLK_IN_GPIO=0
|
|||
CONFIG_ETH_DMA_BUFFER_SIZE=512
|
||||
CONFIG_ETH_DMA_RX_BUFFER_NUM=10
|
||||
CONFIG_ETH_DMA_TX_BUFFER_NUM=10
|
||||
CONFIG_ETH_USE_SPI_ETHERNET=y
|
||||
CONFIG_ETH_SPI_ETHERNET_DM9051=y
|
||||
# CONFIG_ETH_USE_SPI_ETHERNET is not set
|
||||
# CONFIG_ETH_USE_OPENETH is not set
|
||||
# end of Ethernet
|
||||
|
||||
|
@ -792,7 +792,6 @@ CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y
|
|||
# CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID is not set
|
||||
# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set
|
||||
# CONFIG_FREERTOS_DEBUG_INTERNALS is not set
|
||||
CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y
|
||||
CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y
|
||||
# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set
|
||||
CONFIG_FREERTOS_DEBUG_OCDAWARE=y
|
||||
|
@ -845,7 +844,7 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
|
|||
# CONFIG_LWIP_L2_TO_L3_COPY is not set
|
||||
# CONFIG_LWIP_IRAM_OPTIMIZATION is not set
|
||||
CONFIG_LWIP_TIMERS_ONDEMAND=y
|
||||
CONFIG_LWIP_MAX_SOCKETS=10
|
||||
CONFIG_LWIP_MAX_SOCKETS=5
|
||||
# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set
|
||||
# CONFIG_LWIP_SO_LINGER is not set
|
||||
# CONFIG_LWIP_SO_REUSE is not set
|
||||
|
@ -1222,16 +1221,17 @@ CONFIG_MONITOR_BAUD_115200B=y
|
|||
# CONFIG_MONITOR_BAUD_OTHER is not set
|
||||
CONFIG_MONITOR_BAUD_OTHER_VAL=115200
|
||||
CONFIG_MONITOR_BAUD=115200
|
||||
CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y
|
||||
# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set
|
||||
# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set
|
||||
CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
|
||||
CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
|
||||
# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set
|
||||
# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set
|
||||
# CONFIG_CXX_EXCEPTIONS is not set
|
||||
CONFIG_STACK_CHECK_NONE=y
|
||||
# CONFIG_STACK_CHECK_NORM is not set
|
||||
# CONFIG_STACK_CHECK_NONE is not set
|
||||
CONFIG_STACK_CHECK_NORM=y
|
||||
# CONFIG_STACK_CHECK_STRONG is not set
|
||||
# CONFIG_STACK_CHECK_ALL is not set
|
||||
CONFIG_STACK_CHECK=y
|
||||
# CONFIG_WARN_WRITE_STRINGS is not set
|
||||
CONFIG_DISABLE_GCC8_WARNINGS=y
|
||||
# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set
|
||||
|
|
Ładowanie…
Reference in New Issue