Working on FANET

pull/20/head
Pawel Jalocha 2020-05-06 00:13:14 +01:00
rodzic 94d26bf7f0
commit 947e96a890
4 zmienionych plików z 33 dodań i 10 usunięć

Wyświetl plik

@ -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)

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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