kopia lustrzana https://github.com/dl9rdz/rdz_ttgo_sonde
reset DFM id after 30 minutes or >.25 lat/lon change
rodzic
f7dc810f94
commit
9140b52b43
|
@ -14,6 +14,7 @@
|
|||
|
||||
#define DFM_FRAMELEN 33
|
||||
|
||||
#define MAXIDAGE 1800
|
||||
|
||||
/*
|
||||
* observed DAT patterns for DFM-9:
|
||||
|
@ -217,6 +218,12 @@ const char* typestr[16]={
|
|||
"", ""
|
||||
};
|
||||
|
||||
void DFM::killid() {
|
||||
SondeData *sd = &(sonde.si()->d);
|
||||
sd->validID = false;
|
||||
memset((void *)&dfmstate, 0, sizeof(dfmstate));
|
||||
}
|
||||
|
||||
#define DFMIDTHRESHOLD 2
|
||||
/* inspired by oe5dxl's finddnmae in sondeudp.c of dxlaprs */
|
||||
void DFM::finddfname(uint8_t *b)
|
||||
|
@ -432,6 +439,9 @@ void DFM::decodeDAT(uint8_t *dat)
|
|||
int tt = (y-1970)*365 + (y-1969)/4; // days since 1970
|
||||
if(m<=12) { tt += MON[m]; if((y%4)==0 && m>2) tt++; }
|
||||
tt = (tt+d-1)*(60*60*24) + h*3600 + mi*60;
|
||||
// If we get a time stamp much different to the previously received one, kill the ID.
|
||||
// most likely, we have a new sonde now, so wait for the new ID.
|
||||
if(tt-dfmstate.datesec > MAXIDAGE) killid();
|
||||
dfmstate.datesec = tt;
|
||||
dfmstate.good |= 0x100;
|
||||
}
|
||||
|
@ -486,7 +496,9 @@ void DFM::decodeDAT(uint8_t *dat)
|
|||
vh = ((uint16_t)dat[4]<<8) + dat[5];
|
||||
Serial.print("GPS-lat: "); Serial.print(lat*0.0000001);
|
||||
Serial.print(", hor-V: "); Serial.print(vh*0.01);
|
||||
si->lat = lat*0.0000001;
|
||||
lat = lat*0.0000001;
|
||||
if( lat!=0 && si->lat!=0 && abs(lat-si->lat)>.25 ) killid();
|
||||
si->lat = lat;
|
||||
si->hs = vh*0.01;
|
||||
if(lat!=0 || vh!=0) si->validPos |= 0x11; else si->validPos &= ~0x11;
|
||||
}
|
||||
|
@ -496,7 +508,9 @@ void DFM::decodeDAT(uint8_t *dat)
|
|||
float lon, dir;
|
||||
lon = (int32_t)(((uint32_t)dat[0]<<24) + ((uint32_t)dat[1]<<16) + ((uint32_t)dat[2]<<8) + (uint32_t)dat[3]);
|
||||
dir = ((uint16_t)dat[4]<<8) + dat[5];
|
||||
si->lon = lon*0.0000001;
|
||||
lon = lon*0.0000001;
|
||||
if( lon!=0 && si->lon!=0 && abs(lon-si->lon)>.25 ) killid();
|
||||
si->lon = lon;
|
||||
si->dir = dir*0.01;
|
||||
Serial.print("GPS-lon: "); Serial.print(si->lon);
|
||||
Serial.print(", dir: "); Serial.print(si->dir);
|
||||
|
|
|
@ -37,8 +37,7 @@ private:
|
|||
void bitsToBytes(uint8_t *bits, uint8_t *bytes, int len);
|
||||
int processDFMdata(uint8_t dt);
|
||||
int decodeFrameDFM(uint8_t *data);
|
||||
int receiveOld();
|
||||
int receiveNew();
|
||||
void killid();
|
||||
|
||||
|
||||
#define B 8
|
||||
|
|
Ładowanie…
Reference in New Issue