diff --git a/app/convbin/convbin.c b/app/convbin/convbin.c index 6736183c0c48f4812f5c08302fb7ed409e8a5009..0d5b713ae1e5bf0007161c79e13afd5d4326020c 100644 --- a/app/convbin/convbin.c +++ b/app/convbin/convbin.c @@ -326,7 +326,7 @@ static void setmask(const char *argv, rnxopt_t *opt, int mask) else if (p[0]=='C') i=5; else if (p[0]=='I') i=6; else continue; - if ((code=obs2code(p+2,NULL))) { + if ((code=obs2code(0,p+2,NULL))) { opt->mask[i][code-1]=mask?'1':'0'; } } diff --git a/app/rtknavi/mondlg.cpp b/app/rtknavi/mondlg.cpp index b5e75e07025e70614a9a10e0533767b57c3592ad..68ab7adcfa091488b2fcd02b91bc591634c636e9 100644 --- a/app/rtknavi/mondlg.cpp +++ b/app/rtknavi/mondlg.cpp @@ -1017,7 +1017,7 @@ void __fastcall TMonitorDialog::ShowObs(void) Tbl->Cells[j++][i+1]=s.sprintf("%d",obs[i].LLI[k]); } for (k=0;k<NFREQ+nex;k++) { - code=code2obs(obs[i].code[k],NULL); + code=code2obs(0,obs[i].code[k],NULL); if (*code) Tbl->Cells[j++][i+1]=s.sprintf("L%s",code); else Tbl->Cells[j++][i+1]=""; } @@ -1917,13 +1917,13 @@ void __fastcall TMonitorDialog::ShowRtcmSsr(void) buff[0]='\0'; for (p=buff,k=0;k<MAXCODE;k++) { if (ssr[i].cbias[k]==0.0) continue; - p+=sprintf(p,"%s:%.3f ",code2obs(k+1,NULL),ssr[i].cbias[k]); + p+=sprintf(p,"%s:%.3f ",code2obs(0,k+1,NULL),ssr[i].cbias[k]); } Tbl->Cells[j++][i+1]=buff; buff[0]='\0'; for (p=buff,k=0;k<MAXCODE;k++) { if (ssr[i].pbias[k]==0.0) continue; - p+=sprintf(p,"%s:%.3f ",code2obs(k+1,NULL),ssr[i].pbias[k]); + p+=sprintf(p,"%s:%.3f ",code2obs(0,k+1,NULL),ssr[i].pbias[k]); } Tbl->Cells[j++][i+1]=buff; } diff --git a/app/rtkplot/plotcmn.cpp b/app/rtkplot/plotcmn.cpp index 077588bd91fe210c85603466d31c084421f728f3..7cb1fb05bd2f1b1e85f2c94f9aebc8140d712fd4 100644 --- a/app/rtkplot/plotcmn.cpp +++ b/app/rtkplot/plotcmn.cpp @@ -294,8 +294,8 @@ TColor __fastcall TPlot::ObsColor(const obsd_t *obs, double az, double el) { TColor color=clBlack; AnsiString ObsType_Text; - char *code=""; - int i; + char *code="",*codeType=""; + int i,frq,frqType,sys; trace(4,"ObsColor\n"); @@ -303,18 +303,22 @@ TColor __fastcall TPlot::ObsColor(const obsd_t *obs, double az, double el) if (PlotType==PLOT_SNR||PlotType==PLOT_SNRE) { ObsType_Text=ObsType2->Text; - code=ObsType_Text.c_str()+1; + codeType=ObsType_Text.c_str()+1; + frqType=ObsType2->ItemIndex; } else if (ObsType->ItemIndex) { ObsType_Text=ObsType->Text; - code=ObsType_Text.c_str()+1; + codeType=ObsType_Text.c_str()+1; + frqType=ObsType->ItemIndex; } if (SimObs) { color=SysColor(obs->sat); } - else if (*code) { + else if (*codeType) { for (i=0;i<NFREQ+NEXOBS;i++) { - if (!strstr(code2obs(obs->code[i],NULL),code)) continue; + sys=satsys(obs->sat,NULL); + code=code2obs(sys,obs->code[i],&frq); + if (frq!=frqType&&!strstr(code,codeType)) continue; color=SnrColor(obs->SNR[i]*0.25); break; } diff --git a/app/rtkplot/plotdata.cpp b/app/rtkplot/plotdata.cpp index 3f991ee8f95bfd839149ef5abdb5076257e1fd7e..40266536dbf9750cd7a65cf0375ca87a3c935ecf 100644 --- a/app/rtkplot/plotdata.cpp +++ b/app/rtkplot/plotdata.cpp @@ -937,7 +937,7 @@ void __fastcall TPlot::SaveSnrMp(AnsiString file) if (Obs.data[j].sat!=i+1) continue; for (k=0;k<NFREQ+NEXOBS;k++) { - if (strstr(code2obs(Obs.data[j].code[k],NULL),code)) break; + if (strstr(code2obs(0,Obs.data[j].code[k],NULL),code)) break; } if (k>=NFREQ+NEXOBS) continue; @@ -1204,14 +1204,10 @@ void __fastcall TPlot::UpdateMp(void) for (j=0;j<NFREQ+NEXOBS;j++) { Mp[j][i]=0.0; - code2obs(data->code[j],&f1); - - if (sys==SYS_CMP) { - if (f1==5) f1=2; /* B2 */ - else if (f1==4) f1=3; /* B3 */ - } - if (sys==SYS_GAL) f2=f1==1?3:1; /* E1/E5a */ - else if (sys==SYS_SBS) f2=f1==1?3:1; /* L1/L5 */ + code2obs(sys,data->code[j],&f1); + + if (sys==SYS_GAL) f2=f1==1?3:1; /* E1/E5b */ + else if (sys==SYS_SBS) f2=f1==1?4:1; /* L1/L5 */ else if (sys==SYS_CMP) f2=f1==1?2:1; /* B1/B2 */ else f2=f1==1?2:1; /* L1/L2 */ @@ -1232,12 +1228,8 @@ void __fastcall TPlot::UpdateMp(void) for (j=k=n=0,B=0.0;j<Obs.n;j++) { if (Obs.data[j].sat!=sat) continue; - code2obs(Obs.data[j].code[i],&f1); - - if (sys==SYS_CMP) { - if (f1==5) f1=2; /* B2 */ - else if (f1==4) f1=3; /* B3 */ - } + code2obs(sys,Obs.data[j].code[i],&f1); + if (sys==SYS_GAL) f2=f1==1?3:1; else if (sys==SYS_CMP) f2=f1==1?2:1; else f2=f1==1?2:1; diff --git a/app/rtkplot/plotdraw.cpp b/app/rtkplot/plotdraw.cpp index f7613b2d16007c917dcb9db055d4cfd6e37e70c8..fd66ff273ef26f992006692123ae993f1b4a415c 100644 --- a/app/rtkplot/plotdraw.cpp +++ b/app/rtkplot/plotdraw.cpp @@ -66,6 +66,32 @@ void __fastcall TPlot::UpdateDisp(void) } Flush=0; } +// check ObsType for code or freq match --------------------------------------------- +int __fastcall TPlot::CheckObsTypeForMatch(const obsd_t *obs,int i) +{ + AnsiString ObsTypeText=ObsType->Text; + char *obs1, *obsType; + int frq,frqType,sys; + + obsType=ObsTypeText.c_str()+1; + frqType=ObsType->ItemIndex; + sys=satsys(obs->sat,NULL); + obs1=code2obs(sys,obs->code[i],&frq); + return frq==frqType||strstr(obs1,obsType); +} +// check ObsType2 for code or freq match --------------------------------------------- +int __fastcall TPlot::CheckObsType2ForMatch(const obsd_t *obs,int i) +{ + AnsiString ObsTypeText=ObsType2->Text; + char *obs1, *obsType; + int frq,frqType,sys; + + obsType=ObsTypeText.c_str()+1; + frqType=ObsType->ItemIndex; + sys=satsys(obs->sat,NULL); + obs1=code2obs(sys,obs->code[i],&frq); + return frq==frqType||strstr(obs1,obsType); +} // draw track-plot ---------------------------------------------------------- void __fastcall TPlot::DrawTrk(int level) { @@ -1002,8 +1028,8 @@ void __fastcall TPlot::DrawObsSlip(double *yp) if (!SatSel[obs->sat-1]) continue; slip=0; for (j=0;j<NFREQ+NEXOBS;j++) { - if ((!*code||strstr(code2obs(obs->code[j],NULL),code))&& - (obs->LLI[j]&2)) slip=1; + if ((!*code||CheckObsTypeForMatch(obs,j))&&(obs->LLI[j]&2)) + slip=1; } if (!slip) continue; if (!GraphR->ToPoint(TimePos(obs->time),yp[obs->sat-1],ps[0])) continue; @@ -1022,8 +1048,9 @@ void __fastcall TPlot::DrawObsSlip(double *yp) slip=0; if (ShowSlip==2) { // LLI for (j=0;j<NFREQ+NEXOBS;j++) { - if ((!*code||strstr(code2obs(obs->code[j],NULL),code))&& - (obs->LLI[j]&1)) slip=1; + if ((!*code||CheckObsTypeForMatch(obs,j))&& + (obs->LLI[j]&1)) + slip=1; } } else if (!*code||!strcmp(code,"1")||!strcmp(code,"2")) { @@ -1213,8 +1240,7 @@ void __fastcall TPlot::DrawSky(int level) slip=0; if (ShowSlip==2) { // LLI for (j=0;j<NFREQ+NEXOBS;j++) { - if ((!*code||strstr(code2obs(obs->code[j],NULL),code))&& - (obs->LLI[j]&1)) slip=1; + if ((!*code||CheckObsTypeForMatch(obs,j))&&(obs->LLI[j]&1)) slip=1; } } else if (!*code||!strcmp(code,"1")||!strcmp(code,"2")) { @@ -1308,14 +1334,14 @@ void __fastcall TPlot::DrawSky(int level) } else { for (j=0;j<NFREQ+NEXOBS;j++) { - if (strstr(code2obs(obs->code[j],NULL),code)) break; + if (CheckObsTypeForMatch(obs,j)) break; } if (j>=NFREQ+NEXOBS) continue; - + s+=ss.sprintf("%s%s%s : %04.1f : %d : %s",obs->P[j]==0.0?"-":"C", obs->L[j]==0.0?"-":"L",obs->D[j]==0.0?"-":"D", obs->SNR[j]*0.25,obs->LLI[j], - code2obs(obs->code[j],NULL)); + code2obs(0,obs->code[j],NULL)); } TColor col=ObsColor(obs,Az[i],El[i]); p2.y+=hh; @@ -1566,7 +1592,7 @@ void __fastcall TPlot::DrawSnr(int level) if (Obs.data[j].sat!=sat) continue; for (k=0;k<NFREQ+NEXOBS;k++) { - if (strstr(code2obs(Obs.data[j].code[k],NULL),code)) break; + if (CheckObsType2ForMatch(&Obs.data[j],k)) break; } if (k>=NFREQ+NEXOBS) continue; @@ -1709,7 +1735,7 @@ void __fastcall TPlot::DrawSnrE(int level) if (Obs.data[j].sat!=sat) continue; for (k=0;k<NFREQ+NEXOBS;k++) { - if (strstr(code2obs(Obs.data[j].code[k],NULL),code)) break; + if (CheckObsType2ForMatch(&Obs.data[j],k)) break; } if (k>=NFREQ+NEXOBS) continue; if (El[j]<=0.0) continue; @@ -1831,7 +1857,7 @@ void __fastcall TPlot::DrawMpS(int level) if (Obs.data[i].sat!=sat) continue; for (j=0;j<NFREQ+NEXOBS;j++) { - if (strstr(code2obs(Obs.data[i].code[j],NULL),code)) break; + if (CheckObsType2ForMatch(&Obs.data[i],j)) break; } if (j>=NFREQ+NEXOBS) continue; if (El[i]<=0.0) continue; @@ -1857,7 +1883,7 @@ void __fastcall TPlot::DrawMpS(int level) obs=&Obs.data[i]; if (SatMask[obs->sat-1]||!SatSel[obs->sat-1]||El[i]<=0.0) continue; for (j=0;j<NFREQ+NEXOBS;j++) { - if (strstr(code2obs(obs->code[j],NULL),code)) break; + if (CheckObsTypeForMatch(obs,j)) break; } if (j>=NFREQ+NEXOBS) continue; col=MpColor(!Mp[j]?0.0:Mp[j][i]); diff --git a/app/rtkplot/plotinfo.cpp b/app/rtkplot/plotinfo.cpp index 0a8a3078141888b88b8b2abd13f75e474cf95f6c..c01e00f5f74d81de2c8d4e06c780fc16853cc519 100644 --- a/app/rtkplot/plotinfo.cpp +++ b/app/rtkplot/plotinfo.cpp @@ -318,7 +318,8 @@ void __fastcall TPlot::UpdateSatList(void) void __fastcall TPlot::UpdateObsType(void) { AnsiString s; - char *codes[MAXCODE+1],freqs[]="125678"; + char *codes[MAXCODE+1]; + const char *freqs[]={"L1","L2","E5b","L5","E6","E5ab"}; int i,j,n=0,cmask[MAXCODE+1]={0},fmask[6]={0}; trace(3,"UpdateObsType\n"); @@ -328,7 +329,8 @@ void __fastcall TPlot::UpdateObsType(void) } for (i=1;i<=MAXCODE;i++) { if (!cmask[i]) continue; - codes[n++]=code2obs(i,&j); + + codes[n++]=code2obs(satsys(Obs.data[i].sat,NULL),i,&j); fmask[j-1]=1; } ObsType ->Items->Clear(); @@ -337,8 +339,8 @@ void __fastcall TPlot::UpdateObsType(void) for (i=0;i<6;i++) { if (!fmask[i]) continue; - ObsType ->Items->Add(s.sprintf("L%c",freqs[i])); - ObsType2->Items->Add(s.sprintf("L%c",freqs[i])); + ObsType ->Items->Add(s.sprintf("%s",freqs[i])); + ObsType2->Items->Add(s.sprintf("%s",freqs[i])); } for (i=0;i<n;i++) { ObsType ->Items->Add(s.sprintf("L%s",codes[i])); diff --git a/app/rtkplot/plotmain.cpp b/app/rtkplot/plotmain.cpp index 14f506f7a02b35df8b3a191902a3c16b285f6920..f73af191a57228bdb744c6a1b558f268dfbbfb42 100644 --- a/app/rtkplot/plotmain.cpp +++ b/app/rtkplot/plotmain.cpp @@ -176,10 +176,10 @@ __fastcall TPlot::TPlot(TComponent* Owner) : TForm(Owner) FrqType->Items->Clear(); FrqType->Items->Add("L1/LC"); if (nfreq>=2) FrqType->Items->Add("L2"); - if (nfreq>=3) FrqType->Items->Add("L5"); - if (nfreq>=4) FrqType->Items->Add("L6"); - if (nfreq>=5) FrqType->Items->Add("L7"); - if (nfreq>=6) FrqType->Items->Add("L8"); + if (nfreq>=3) FrqType->Items->Add("E5b"); + if (nfreq>=4) FrqType->Items->Add("L5"); + if (nfreq>=5) FrqType->Items->Add("E6"); + if (nfreq>=6) FrqType->Items->Add("E5ab"); FrqType->ItemIndex=0; TLEData.n=TLEData.nmax=0; diff --git a/app/rtkplot/plotmain.dfm b/app/rtkplot/plotmain.dfm index 811d0b58ed281abddfb1170101b62e73b10410b1..9ce60565039ca7c7cb3c44c89b4e993fbc8860c9 100644 --- a/app/rtkplot/plotmain.dfm +++ b/app/rtkplot/plotmain.dfm @@ -196,7 +196,6 @@ object Plot: TPlot 'NMEA (*.nmea)' 'Solution Status (*.stat)' 'All (*.*)') - ExplicitWidth = 150 end end end diff --git a/app/rtkplot/plotmain.h b/app/rtkplot/plotmain.h index 287849d890264d6a5e61ba3458e29bb094afee9b..7ff52eb0cc900aa44bdda5b86e8f5b189ea46bd1 100644 --- a/app/rtkplot/plotmain.h +++ b/app/rtkplot/plotmain.h @@ -492,6 +492,8 @@ private: void __fastcall MouseMoveSol (int X, int Y, double dx, double dy, double dxs, double dys); void __fastcall MouseMoveObs (int X, int Y, double dx, double dy, double dxs, double dys); + int __fastcall CheckObsTypeForMatch(const obsd_t *obs, int i); + int __fastcall CheckObsType2ForMatch(const obsd_t *obs, int i); void __fastcall DrawTrk (int level); void __fastcall DrawTrkImage (int level); void __fastcall DrawTrkMap (int level); diff --git a/src/rcv/ublox.c b/src/rcv/ublox.c index aa6ecf211e6cb090918a0bb6b56a5b06461e080c..884e8068234f186c5db52690efa5f3b271d4d4c0 100644 --- a/src/rcv/ublox.c +++ b/src/rcv/ublox.c @@ -387,8 +387,9 @@ static int decode_rxmrawx(raw_t *raw) if (slip) raw->lockflag[sat-1][f-1]=slip; raw->lockt[sat-1][f-1]=lockt*1E-3; raw->halfc[sat-1][f-1]=halfc; - /* LLI: bit1=slip,bit2=half-cycle-invalid, bit7=half-cycle-subtract */ - LLI=(halfc?LLI_HALFS:0)|(!halfv&&L!=0.0?LLI_HALFC:0); + /* LLI: bit1=slip,bit2=half-cycle-invalid */ + LLI=!halfv&&L!=0.0?LLI_HALFC:0; + LLI|=halfc!=raw->halfc[sat-1][f-1]?1:0; if (L!=0.0) LLI|=raw->lockflag[sat-1][f-1]>0.0?LLI_SLIP:0; for (j=0;j<n;j++) {