kopia lustrzana https://github.com/pjalocha/esp32-ogn-tracker
Working on FANET
rodzic
94d26bf7f0
commit
947e96a890
|
@ -17,7 +17,10 @@ class FANET_Packet
|
|||
union
|
||||
{ uint8_t Flags;
|
||||
struct
|
||||
{ uint8_t CR:3; // Coding rate
|
||||
{ uint8_t CR:3; // Coding rate used (RX) or to be used (TX)
|
||||
bool hasCRC:1; // CRC was there (RX)
|
||||
bool badCRC:1; // CRC was bad (RX)
|
||||
bool Done:1;
|
||||
} ;
|
||||
} ;
|
||||
uint8_t Len; // [bytes] packet length
|
||||
|
@ -298,7 +301,7 @@ class FANET_RxPacket: public FANET_Packet
|
|||
void Print(char *Name=0) const
|
||||
{ char HHMMSS[8];
|
||||
Format_HHMMSS(HHMMSS, SlotTime()); HHMMSS[6]='h'; HHMMSS[7]=0;
|
||||
printf("%s %3.1fdB/%de %+3.1fkHz ", HHMMSS, 0.25*SNR, BitErr, 1e-2*FreqOfs);
|
||||
printf("%s CR%c%c%c %3.1fdB/%de %+3.1fkHz ", HHMMSS, '0'+CR, hasCRC?'c':'_', badCRC?'-':'+', 0.25*SNR, BitErr, 1e-2*FreqOfs);
|
||||
FANET_Packet::Print(Name); }
|
||||
|
||||
int WriteAPRS(char *Out)
|
||||
|
|
|
@ -580,10 +580,11 @@ void vTaskPROC(void* pvParameters)
|
|||
RF_TxFIFO.Write(); // complete the write into the TxFIFO
|
||||
Position->Sent=1;
|
||||
#ifdef WITH_FANET
|
||||
if( (SlotTime&0x07)==4 ) // every 8sec
|
||||
if( (SlotTime&0x07)==(RX_Random&0x07) ) // every 8sec
|
||||
{ FANET_Packet *FNTpkt = FNT_TxFIFO.getWrite();
|
||||
FNTpkt->setAddress(Parameters.Address);
|
||||
Position->EncodeAirPos(*FNTpkt, Parameters.AcftType, !Parameters.Stealth);
|
||||
XorShift32(RX_Random);
|
||||
FNT_TxFIFO.Write(); }
|
||||
#endif
|
||||
#ifdef WITH_LOOKOUT
|
||||
|
@ -676,10 +677,11 @@ void vTaskPROC(void* pvParameters)
|
|||
#endif
|
||||
|
||||
#ifdef WITH_FANET
|
||||
if(Parameters.Pilot[0] && (SlotTime&0xFF)==0 ) // every 256sec
|
||||
if(Parameters.Pilot[0] && (SlotTime&0xFF)==(RX_Random&0xFF) ) // every 256sec
|
||||
{ FANET_Packet *FNTpkt = FNT_TxFIFO.getWrite();
|
||||
FNTpkt->setAddress(Parameters.Address);
|
||||
FNTpkt->setName(Parameters.Pilot);
|
||||
XorShift32(RX_Random);
|
||||
FNT_TxFIFO.Write(); }
|
||||
#endif
|
||||
|
||||
|
|
20
main/rfm.h
20
main/rfm.h
|
@ -537,20 +537,28 @@ class RFM_TRX
|
|||
return 0; } // afterwards just wait for TX mode to stop
|
||||
|
||||
int ReceivePacketFNT(FANET_RxPacket &Packet)
|
||||
{ uint8_t Stat = ReadByte(REG_LORA_MODEM_STATUS); // coding rate in three top bits
|
||||
{ uint8_t Flags = ReadByte(REG_LORA_IRQ_FLAGS);
|
||||
if((Flags&LORA_FLAG_RX_DONE)==0) return 0;
|
||||
uint8_t Stat = ReadByte(REG_LORA_MODEM_STATUS); // coding rate in three top bits
|
||||
uint8_t HopChan = ReadByte(REG_LORA_HOP_CHANNEL);
|
||||
Packet.CR = Stat>>5; // coding rate used for this packet
|
||||
Packet.hasCRC = HopChan&0x40; // did this packet have CRC ? (flags should be checked for CRC error)
|
||||
Packet.badCRC = Flags&LORA_FLAG_BAD_CRC;
|
||||
Packet.SNR = ReadByte(REG_LORA_PACKET_SNR); // [0.25dB] read SNR
|
||||
Packet.RSSI = -157+ReadByte(REG_LORA_PACKET_RSSI); // [dBm] read RSSI
|
||||
int32_t FreqOfs = ReadFreq(REG_LORA_FREQ_ERR_MSB); // (FreqOfs*1718+0x8000)>>16 [10Hz]
|
||||
Packet.FreqOfs = (FreqOfs*1718+0x8000)>>16; // [10Hz]
|
||||
int32_t FreqOfs = ReadFreq(REG_LORA_FREQ_ERR_MSB); //
|
||||
if(FreqOfs&0x00080000) FreqOfs|=0xFFF00000; // extend the sign bit
|
||||
else FreqOfs&=0x000FFFFF;
|
||||
Packet.BitErr=0;
|
||||
Packet.CodeErr=0;
|
||||
Packet.FreqOfs = (FreqOfs*1718+0x8000)>>16; // [10Hz]
|
||||
Packet.BitErr = 0;
|
||||
Packet.CodeErr = 0;
|
||||
int Len=ReceivePacketFNT(Packet.Byte, Packet.MaxBytes);
|
||||
// printf("ReceivePacketFNT() => %d %02X %3.1fdB %+ddBm 0x%08X=%+6.3fkHz, %02X%02X%02X%02X\n",
|
||||
// Packet.Len, Stat, 0.25*Packet.SNR, Packet.RSSI, FreqOfs, 0.5*0x1000000/32e9*FreqOfs,
|
||||
// Packet.Byte[0], Packet.Byte[1], Packet.Byte[2], Packet.Byte[3]);
|
||||
Packet.Len=Len; return Len; }
|
||||
Packet.Len=Len;
|
||||
WriteByte(LORA_FLAG_RX_DONE | LORA_FLAG_BAD_CRC, REG_LORA_IRQ_FLAGS);
|
||||
return Len; }
|
||||
|
||||
int ReceivePacketFNT(uint8_t *Data, uint8_t MaxLen)
|
||||
{ uint8_t Len=ReadByte(REG_LORA_PACKET_BYTES); // packet length
|
||||
|
|
|
@ -140,6 +140,16 @@ Maintainer: Miguel Luis and Gregory Cristian
|
|||
#define REG_LORA_DETECT_THRESHOLD 0x37 // for SF6
|
||||
#define REG_LORA_SYNC 0x39 // 0xF1 for FANET, default = 0x12 (for old FANET)
|
||||
|
||||
// LoRa flags
|
||||
#define LORA_FLAG_TIMEOUT 0x80 // timeout in single packet reception ?
|
||||
#define LORA_FLAG_RX_DONE 0x40 // new packet received
|
||||
#define LORA_FLAG_BAD_CRC 0x20 // packet received with bad CRC
|
||||
#define LORA_FLAG_RX_HEADER 0x10 // received a valid header
|
||||
#define LORA_FLAG_TX_DONE 0x08 // packet transmission completed
|
||||
#define LORA_FLAG_CAD_DONE 0x04 // CArrier Detect completed
|
||||
#define LORA_FLAG_FHSS_CHANGE 0x02 // hopping channel changed ?
|
||||
#define LORA_FLAG_CAD_DETECT 0x01 // LoRa symbol(s) detected during CArrier Detection
|
||||
|
||||
/*!
|
||||
* ============================================================================
|
||||
* SX1276 FSK bits control definition
|
||||
|
|
Ładowanie…
Reference in New Issue