From ed43765cd247e2e8d561bd1b867506c47c00cc8f Mon Sep 17 00:00:00 2001 From: TimEverett <tim.everett3@gmail.com> Date: Wed, 31 Oct 2018 15:10:56 -0600 Subject: [PATCH] Clean up Beidou for B1/B2 processing. --- app/appcmn/aboutdlg.cpp | 2 +- app/rtkconv/codeopt.cpp | 24 +++++++------- app/rtkconv/codeopt.dfm | 54 +++++++++++++++---------------- app/rtkconv/codeopt.h | 6 ++-- app/rtkconv/convmain.cpp | 2 +- app/rtkpost/postopt.cpp | 4 +-- app/rtkpost/postopt.dfm | 70 ++++++++++++++++++++-------------------- src/convrnx.c | 20 ++++++------ src/rcv/binex.c | 2 +- src/rcv/ublox.c | 14 ++++---- src/rinex.c | 8 ++--- src/rtcm3.c | 17 ++++------ src/rtcm3e.c | 10 +++--- src/rtkcmn.c | 41 +++++++++++++++++------ src/rtklib.h | 4 +-- 15 files changed, 147 insertions(+), 131 deletions(-) diff --git a/app/appcmn/aboutdlg.cpp b/app/appcmn/aboutdlg.cpp index 8122970..ac08333 100644 --- a/app/appcmn/aboutdlg.cpp +++ b/app/appcmn/aboutdlg.cpp @@ -20,7 +20,7 @@ void __fastcall TAboutDialog::FormShow(TObject *Sender) AnsiString s; if (IconIndex>0) icon[IconIndex-1]->Visible=true; LabelAbout->Caption=About; - LabelVer->Caption=s.sprintf("with RTKLIB ver.%s %s",VER_RTKLIB,PATCH_LEVEL); + LabelVer->Caption=s.sprintf("with RTKLIB ver:%s %s",VER_RTKLIB,PATCH_LEVEL); LabelCopyright->Caption=COPYRIGHT_RTKLIB; } //--------------------------------------------------------------------------- diff --git a/app/rtkconv/codeopt.cpp b/app/rtkconv/codeopt.cpp index df21713..b95baba 100644 --- a/app/rtkconv/codeopt.cpp +++ b/app/rtkconv/codeopt.cpp @@ -81,9 +81,9 @@ void __fastcall TCodeOptDialog::FormShow(TObject *Sender) J35->Checked=mask[3][34]=='1'; J36->Checked=mask[3][35]=='1'; J33->Checked=mask[3][32]=='1'; - C47->Checked=mask[5][46]=='1'; - C48->Checked=mask[5][47]=='1'; - C12->Checked=mask[5][11]=='1'; + C40->Checked=mask[5][39]=='1'; + C41->Checked=mask[5][40]=='1'; + C18->Checked=mask[5][11]=='1'; C27->Checked=mask[5][26]=='1'; C28->Checked=mask[5][27]=='1'; C29->Checked=mask[5][28]=='1'; @@ -172,9 +172,9 @@ void __fastcall TCodeOptDialog::BtnOkClick(TObject *Sender) if (J35->Checked) mask[3][34]='1'; if (J36->Checked) mask[3][35]='1'; if (J33->Checked) mask[3][32]='1'; - if (C47->Checked) mask[5][46]='1'; - if (C48->Checked) mask[5][47]='1'; - if (C12->Checked) mask[5][11]='1'; + if (C40->Checked){mask[5][39]='1';mask[5][46]='1';} + if (C41->Checked){mask[5][40]='1';mask[5][47]='1';} + if (C18->Checked){mask[5][17]='1';mask[5][11]='1';} if (C27->Checked) mask[5][26]='1'; if (C28->Checked) mask[5][27]='1'; if (C29->Checked) mask[5][28]='1'; @@ -261,9 +261,9 @@ void __fastcall TCodeOptDialog::BtnSetAllClick(TObject *Sender) J35->Checked=set; J36->Checked=set; J33->Checked=set; - C47->Checked=set; - C48->Checked=set; - C12->Checked=set; + C40->Checked=set; + C41->Checked=set; + C18->Checked=set; C27->Checked=set; C28->Checked=set; C29->Checked=set; @@ -348,9 +348,9 @@ void __fastcall TCodeOptDialog::UpdateEnable(void) J35->Enabled=(NavSys&SYS_QZS)&&(FreqType&FREQTYPE_E6); J36->Enabled=(NavSys&SYS_QZS)&&(FreqType&FREQTYPE_E6); J33->Enabled=(NavSys&SYS_QZS)&&(FreqType&FREQTYPE_E6); - C47->Enabled=(NavSys&SYS_CMP)&&(FreqType&FREQTYPE_L2); - C48->Enabled=(NavSys&SYS_CMP)&&(FreqType&FREQTYPE_L2); - C12->Enabled=(NavSys&SYS_CMP)&&(FreqType&FREQTYPE_L2); + C40->Enabled=(NavSys&SYS_CMP)&&(FreqType&FREQTYPE_L2); + C41->Enabled=(NavSys&SYS_CMP)&&(FreqType&FREQTYPE_L2); + C18->Enabled=(NavSys&SYS_CMP)&&(FreqType&FREQTYPE_L2); C27->Enabled=(NavSys&SYS_CMP)&&(FreqType&FREQTYPE_E5b); C28->Enabled=(NavSys&SYS_CMP)&&(FreqType&FREQTYPE_E5b); C29->Enabled=(NavSys&SYS_CMP)&&(FreqType&FREQTYPE_E5b); diff --git a/app/rtkconv/codeopt.dfm b/app/rtkconv/codeopt.dfm index 8354e84..b6d3984 100644 --- a/app/rtkconv/codeopt.dfm +++ b/app/rtkconv/codeopt.dfm @@ -67,7 +67,7 @@ object CodeOptDialog: TCodeOptDialog OnClick = BtnOkClick end object BtnCancel: TButton - Left = 324 + Left = 318 Top = 301 Width = 71 Height = 29 @@ -606,23 +606,23 @@ object CodeOptDialog: TCodeOptDialog OnClick = BtnSetAllClick end object GroupBox6: TGroupBox - Left = 0 - Top = 228 + Left = 4 + Top = 230 Width = 393 Height = 34 Caption = 'BeiDou' TabOrder = 8 - object C47: TCheckBox - Left = 10 - Top = 14 - Width = 35 + object C40: TCheckBox + Left = 5 + Top = 15 + Width = 40 Height = 16 - Caption = '2I' + Caption = '1I/2I' Enabled = False TabOrder = 2 end object C42: TCheckBox - Left = 238 + Left = 270 Top = 14 Width = 32 Height = 16 @@ -631,25 +631,25 @@ object CodeOptDialog: TCodeOptDialog TabOrder = 0 end object C27: TCheckBox - Left = 124 + Left = 157 Top = 14 - Width = 34 + Width = 33 Height = 16 Caption = '7I' Enabled = False TabOrder = 3 end object C28: TCheckBox - Left = 162 + Left = 192 Top = 14 - Width = 44 + Width = 34 Height = 16 Caption = '7Q' Enabled = False TabOrder = 4 end object C29: TCheckBox - Left = 201 + Left = 232 Top = 14 Width = 34 Height = 16 @@ -657,26 +657,26 @@ object CodeOptDialog: TCodeOptDialog Enabled = False TabOrder = 1 end - object C48: TCheckBox - Left = 48 + object C41: TCheckBox + Left = 52 Top = 14 - Width = 34 + Width = 50 Height = 16 - Caption = '2Q' + Caption = '1Q/2Q' Enabled = False TabOrder = 5 end - object C12: TCheckBox - Left = 86 + object C18: TCheckBox + Left = 106 Top = 14 - Width = 34 + Width = 49 Height = 16 - Caption = '2X' + Caption = '1X/2X' Enabled = False TabOrder = 6 end object C43: TCheckBox - Left = 276 + Left = 308 Top = 14 Width = 32 Height = 16 @@ -685,10 +685,10 @@ object CodeOptDialog: TCodeOptDialog TabOrder = 7 end object C33: TCheckBox - Left = 314 - Top = 14 - Width = 32 - Height = 16 + Left = 344 + Top = 12 + Width = 33 + Height = 19 Caption = '6X' Enabled = False TabOrder = 8 diff --git a/app/rtkconv/codeopt.h b/app/rtkconv/codeopt.h index 6819651..c97d216 100644 --- a/app/rtkconv/codeopt.h +++ b/app/rtkconv/codeopt.h @@ -81,13 +81,13 @@ __published: TButton *BtnSetAll; TCheckBox *J33; TGroupBox *GroupBox6; - TCheckBox *C47; + TCheckBox *C40; TCheckBox *C42; TCheckBox *C27; TCheckBox *C28; TCheckBox *C29; - TCheckBox *C48; - TCheckBox *C12; + TCheckBox *C41; + TCheckBox *C18; TCheckBox *C43; TCheckBox *C33; TCheckBox *R44; diff --git a/app/rtkconv/convmain.cpp b/app/rtkconv/convmain.cpp index 6477986..f9b79b8 100644 --- a/app/rtkconv/convmain.cpp +++ b/app/rtkconv/convmain.cpp @@ -83,7 +83,7 @@ void __fastcall TMainWindow::FormCreate(TObject *Sender) { AnsiString s; - Caption=s.sprintf("%s ver.%s %s",PRGNAME,VER_RTKLIB,PATCH_LEVEL); + Caption=s.sprintf("%s ver:%s %s",PRGNAME,VER_RTKLIB,PATCH_LEVEL); ::DragAcceptFiles(Handle,true); } diff --git a/app/rtkpost/postopt.cpp b/app/rtkpost/postopt.cpp index 9ddd454..bec5dff 100644 --- a/app/rtkpost/postopt.cpp +++ b/app/rtkpost/postopt.cpp @@ -25,14 +25,14 @@ __fastcall TOptDialog::TOptDialog(TComponent* Owner) : TForm(Owner) { AnsiString label,s; - int freq[]={1,2,5,6,7,8,9}; + const char *freqs[]={"L1","L2","E5b","L5","E6","E5ab"}; int nglo=MAXPRNGLO,ngal=MAXPRNGAL,nqzs=MAXPRNQZS,ncmp=MAXPRNCMP; int nirn=MAXPRNIRN; #if 0 Freq->Items->Clear(); for (int i=0;i<NFREQ;i++) { - label=label+(i>0?"+":"L")+s.sprintf("%d",freq[i]); + label=label+(i>0?"+":"")+s.sprintf("%s",freqs[i]); Freq->Items->Add(label); } #endif diff --git a/app/rtkpost/postopt.dfm b/app/rtkpost/postopt.dfm index 893ca29..337bd98 100644 --- a/app/rtkpost/postopt.dfm +++ b/app/rtkpost/postopt.dfm @@ -101,41 +101,43 @@ object OptDialog: TOptDialog Top = 1 Width = 411 Height = 377 - ActivePage = TabSheet2 + ActivePage = TabSheet1 TabOrder = 4 object TabSheet1: TTabSheet Caption = 'Setting&1' + ExplicitLeft = 1 + ExplicitTop = 21 object Label3: TLabel Left = 24 - Top = 73 + Top = 95 Width = 183 Height = 13 Caption = 'Rec Dynamics / Earth Tides Correction' end object Label8: TLabel Left = 24 - Top = 95 - Width = 108 + Top = 27 + Width = 58 Height = 13 - Caption = 'Ionosphere Correction' + Caption = 'Frequencies' end object LabelPosMode: TLabel Left = 24 - Top = 7 + Top = 5 Width = 80 Height = 13 Caption = 'Positioning Mode' end object LabelFreq: TLabel Left = 24 - Top = 29 - Width = 119 + Top = 51 + Width = 51 Height = 13 - Caption = 'Frequencies / Filter Type' + Caption = 'Filter Type' end object LabelElMask: TLabel Left = 23 - Top = 51 + Top = 73 Width = 179 Height = 13 Caption = 'Elevation Mask ('#176') / SNR Mask (dBHz)' @@ -157,13 +159,13 @@ object OptDialog: TOptDialog object Label9: TLabel Left = 23 Top = 117 - Width = 114 + Width = 107 Height = 13 - Caption = 'Troposphere Correction' + Caption = 'Iono/Tropo Correction' end object DynamicModel: TComboBox Left = 248 - Top = 70 + Top = 92 Width = 75 Height = 21 Style = csDropDownList @@ -176,9 +178,9 @@ object OptDialog: TOptDialog 'ON') end object IonoOpt: TComboBox - Left = 248 - Top = 92 - Width = 152 + Left = 247 + Top = 114 + Width = 76 Height = 21 Style = csDropDownList DropDownCount = 16 @@ -198,9 +200,9 @@ object OptDialog: TOptDialog 'Input TEC') end object TropOpt: TComboBox - Left = 248 + Left = 324 Top = 114 - Width = 152 + Width = 76 Height = 21 Style = csDropDownList ItemIndex = 0 @@ -217,7 +219,7 @@ object OptDialog: TOptDialog end object PosMode: TComboBox Left = 248 - Top = 4 + Top = 2 Width = 152 Height = 21 Style = csDropDownList @@ -240,24 +242,22 @@ object OptDialog: TOptDialog end object Freq: TComboBox Left = 248 - Top = 26 - Width = 75 + Top = 25 + Width = 152 Height = 21 Style = csDropDownList - ItemIndex = 0 TabOrder = 1 - Text = 'L1' OnChange = FreqChange Items.Strings = ( 'L1' 'L1+L2' - 'L1+L2+L5' - 'L1+L5') + 'L1+L2+E5b' + 'L1+L2+E5b+L5') end object Solution: TComboBox - Left = 325 - Top = 26 - Width = 75 + Left = 248 + Top = 48 + Width = 152 Height = 21 Style = csDropDownList ItemIndex = 0 @@ -339,7 +339,7 @@ object OptDialog: TOptDialog end object TideCorr: TComboBox Left = 325 - Top = 70 + Top = 92 Width = 75 Height = 21 Style = csDropDownList @@ -363,7 +363,7 @@ object OptDialog: TOptDialog end object ElMask: TComboBox Left = 248 - Top = 48 + Top = 70 Width = 75 Height = 21 AutoComplete = False @@ -422,7 +422,7 @@ object OptDialog: TOptDialog end object BtnMask: TButton Left = 324 - Top = 47 + Top = 69 Width = 77 Height = 23 Caption = '...' @@ -2132,14 +2132,14 @@ object OptDialog: TOptDialog '(*.blq)|*.blq|Ionosphere Data File (*.*i,*stec)|*.*i;*.stec' Options = [ofHideReadOnly, ofNoChangeDir, ofEnableSizing] Title = 'Load File' - Left = 201 - Top = 157 + Left = 121 + Top = 309 end object SaveDialog: TSaveDialog Filter = 'All (*.*)|*.*|Options File (*.conf)|*.conf' Options = [ofHideReadOnly, ofNoChangeDir, ofEnableSizing] Title = 'Save File' - Left = 203 - Top = 109 + Left = 171 + Top = 309 end end diff --git a/src/convrnx.c b/src/convrnx.c index 7d24f89..dd71a02 100644 --- a/src/convrnx.c +++ b/src/convrnx.c @@ -432,8 +432,8 @@ static void sort_codes(unsigned char *codes, unsigned char *types, int n) int i,j; for (i=0;i<n-1;i++) for (j=i+1;j<n;j++) { - obs1=code2obs(codes[i],NULL); - obs2=code2obs(codes[j],NULL); + obs1=code2obs(NULL,codes[i],NULL); + obs2=code2obs(NULL,codes[j],NULL); if (strcmp(obs1,obs2)<=0) continue; tmp=codes[i]; codes[i]=codes[j]; codes[j]=tmp; tmp=types[i]; types[i]=types[j]; types[j]=tmp; @@ -455,7 +455,7 @@ static void setopt_obstype(const unsigned char *codes, for (i=0;codes[i];i++) { - if (!(id=code2obs(codes[i],&freq))) continue; + if (!(id=code2obs(sys,codes[i],&freq))) continue; if (!(opt->freqtype&(1<<(freq-1)))||opt->mask[sys][codes[i]-1]=='0') { continue; @@ -664,7 +664,7 @@ static int scan_obstype(int format, char **files, int nf, rnxopt_t *opt, return 0; } for (i=0;i<NSATSYS;i++) for (j=0;j<n[i];j++) { - trace(2,"scan_obstype: sys=%d code=%s type=%d\n",i,code2obs(codes[i][j],NULL),types[i][j]); + trace(2,"scan_obstype: sys=%d code=%s type=%d\n",i,code2obs(NULL,codes[i][j],NULL),types[i][j]); } for (i=0;i<NSATSYS;i++) { @@ -675,7 +675,7 @@ static int scan_obstype(int format, char **files, int nf, rnxopt_t *opt, setopt_obstype(codes[i],types[i],i,opt); for (j=0;j<n[i];j++) { - trace(3,"scan_obstype: sys=%d code=%s\n",i,code2obs(codes[i][j],NULL)); + trace(3,"scan_obstype: sys=%d code=%s\n",i,code2obs(NULL,codes[i][j],NULL)); } } return 1; @@ -704,8 +704,8 @@ static void set_obstype(int format, rnxopt_t *opt) {CODE_L1C,CODE_L1S,CODE_L1L,CODE_L1X,CODE_L1Z,CODE_L2S,CODE_L2L,CODE_L2X, CODE_L5I,CODE_L5Q,CODE_L5X,CODE_L6S,CODE_L6L,CODE_L6X}, {CODE_L1C,CODE_L5I,CODE_L5Q,CODE_L5X}, - {CODE_L1I,CODE_L1Q,CODE_L1X,CODE_L7I,CODE_L7Q,CODE_L7X,CODE_L6I,CODE_L6Q, - CODE_L6X}, + {CODE_L1I,CODE_L1Q,CODE_L1X,CODE_L2I,CODE_L2Q,CODE_L2X, + CODE_L7I,CODE_L7Q,CODE_L7X,CODE_L6I,CODE_L6Q,CODE_L6X}, {CODE_L5A,CODE_L5B,CODE_L5C,CODE_L5X,CODE_L9A,CODE_L9B,CODE_L9C,CODE_L9X} }; static const unsigned char codes_cnav[NSATSYS][8]={ /* comnav */ @@ -764,8 +764,8 @@ static void set_obstype(int format, rnxopt_t *opt) {CODE_L1C,CODE_L1S,CODE_L1L,CODE_L1X,CODE_L1Z,CODE_L2S,CODE_L2L,CODE_L2X, CODE_L5I,CODE_L5Q,CODE_L5X,CODE_L6S,CODE_L6L,CODE_L6X}, {CODE_L1C,CODE_L5I,CODE_L5Q,CODE_L5X}, - {CODE_L1I,CODE_L1Q,CODE_L1X,CODE_L7I,CODE_L7Q,CODE_L7X,CODE_L6I,CODE_L6Q, - CODE_L6X}, + {CODE_L1I,CODE_L1Q,CODE_L1X,CODE_L2I,CODE_L2Q,CODE_L2X, + CODE_L7I,CODE_L7Q,CODE_L7X,CODE_L6I,CODE_L6Q,CODE_L6X}, {CODE_L5A,CODE_L5B,CODE_L5C,CODE_L5X,CODE_L9A,CODE_L9B,CODE_L9C,CODE_L9X} }; static const unsigned char codes_rt17[NSATSYS][8]={ /* rt17 */ @@ -801,7 +801,7 @@ static void set_obstype(int format, rnxopt_t *opt) {CODE_L1C,CODE_L1X,CODE_L7Q}, {CODE_L1C}, {CODE_L1C}, - {CODE_L1I,CODE_L7I}, + {CODE_L1I,CODE_L2I,CODE_L7I}, {0} }; const unsigned char *codes; diff --git a/src/rcv/binex.c b/src/rcv/binex.c index 03f213f..0616244 100644 --- a/src/rcv/binex.c +++ b/src/rcv/binex.c @@ -975,7 +975,7 @@ static unsigned char *decode_bnx_7f_05_obs(raw_t *raw, unsigned char *buff, /* get code priority */ for (i=0;i<nobs;i++) { - code2obs(codes[code[i]&0x3F],freq+i); + code2obs(sys,codes[code[i]&0x3F],freq+i); pri[i]=getcodepri(sys,codes[code[i]&0x3F],raw->opt); /* frequency index for beidou */ diff --git a/src/rcv/ublox.c b/src/rcv/ublox.c index a524e05..aa6ecf2 100644 --- a/src/rcv/ublox.c +++ b/src/rcv/ublox.c @@ -164,8 +164,8 @@ static int ubx_sig(int sys, int sigid) if (sigid == 6) return CODE_L7Q; /* E5bQ */ } else if (sys == SYS_CMP) { - if (sigid == 0) return CODE_L1I; /* B1I D1 (rinex 3.02) */ - if (sigid == 1) return CODE_L1I; /* B1I D2 (rinex 3.02) */ + if (sigid == 0) return CODE_L2I; /* B1I D1 (rinex 3.03) */ + if (sigid == 1) return CODE_L2I; /* B1I D2 (rinex 3.03) */ if (sigid == 2) return CODE_L7I; /* B2I D1 */ if (sigid == 3) return CODE_L7I; /* B2I D2 */ } @@ -183,7 +183,7 @@ static double sig_freq(int sys, int f, int fcn) { static const double freq_glo[8]={FREQ1_GLO,FREQ2_GLO,FREQ3_GLO}; static const double dfrq_glo[8]={DFRQ1_GLO,DFRQ2_GLO}; - static const double freq_bds[8]={FREQ1_CMP,0,0,FREQ3_CMP,FREQ2_CMP}; + static const double freq_bds[8]={FREQ1_CMP,FREQ2_CMP,FREQ3_CMP}; if (sys == SYS_GLO) { return freq_glo[f-1]+dfrq_glo[f-1]*fcn; @@ -363,9 +363,9 @@ static int decode_rxmrawx(raw_t *raw) code=ubx_sig(sys,sigid); } else { - code=(sys==SYS_CMP)?CODE_L1I:((sys==SYS_GAL)?CODE_L1X:CODE_L1C); + code=(sys==SYS_CMP)?CODE_L2I:((sys==SYS_GAL)?CODE_L1X:CODE_L1C); } - code2obs(code,&f); /* freq index */ + code2obs(sys,code,&f); /* freq index */ if (f==0||f>NFREQ) { trace(2,"ubx rxmrawx signal error: sys=%2d code=%2d\n",sys,code); @@ -678,7 +678,7 @@ static int decode_trkmeas(raw_t *raw) raw->obs.data[n].L[0]=-adr; raw->obs.data[n].D[0]=(float)dop; raw->obs.data[n].SNR[0]=(unsigned char)(snr*4.0); - raw->obs.data[n].code[0]=sys==SYS_CMP?CODE_L1I:CODE_L1C; + raw->obs.data[n].code[0]=sys==SYS_CMP?CODE_L2I:CODE_L1C; raw->obs.data[n].qualL[0]=8-qi; raw->obs.data[n].LLI[0]=raw->lockt[sat-1][1]>0.0?1:0; if (sys==SYS_SBS) { /* half-cycle valid */ @@ -803,7 +803,7 @@ static int decode_trkd5(raw_t *raw) raw->obs.data[n].L[0]=-adr; raw->obs.data[n].D[0]=(float)dop; raw->obs.data[n].SNR[0]=(unsigned char)(snr*4.0); - raw->obs.data[n].code[0]=sys==SYS_CMP?CODE_L1I:CODE_L1C; + raw->obs.data[n].code[0]=sys==SYS_CMP?CODE_L2I:CODE_L1C; raw->obs.data[n].LLI[0]=raw->lockt[sat-1][1]>0.0?1:0; raw->lockt[sat-1][1]=0.0; diff --git a/src/rinex.c b/src/rinex.c index 74cde15..c60835e 100644 --- a/src/rinex.c +++ b/src/rinex.c @@ -879,7 +879,7 @@ static void set_index(double ver, int sys, const char *opt, int i,j,k,n; for (i=n=0;*tobs[i];i++,n++) { - ind->code[i]=obs2code(tobs[i]+1,ind->frq+i); + ind->code[i]=obs2code(sys,tobs[i]+1,ind->frq+i); ind->type[i]=(p=strchr(obscodes,tobs[i][0]))?(int)(p-obscodes):0; ind->pri[i]=getcodepri(sys,ind->code[i],opt); ind->pos[i]=-1; @@ -903,7 +903,7 @@ static void set_index(double ver, int sys, const char *opt, for (p=opt;p&&(p=strchr(p,'-'));p++) { if (sscanf(p,optstr,str,&shift)<2) continue; for (i=0;i<n;i++) { - if (strcmp(code2obs(ind->code[i],NULL),str)) continue; + if (strcmp(code2obs(NULL,ind->code[i],NULL),str)) continue; ind->shift[i]=shift; trace(2,"phase shift: sys=%2d tobs=%s shift=%.3f\n",sys, tobs[i],shift); @@ -2078,12 +2078,12 @@ static int obsindex(double ver, int sys, const unsigned char *code, return i; } else { - id=code2obs(code[i],NULL); + id=code2obs(NULL,code[i],NULL); if (id[0]==tobs[1]) return i; } } else { /* ver.3 */ - id=code2obs(code[i],NULL); + id=code2obs(NULL,code[i],NULL); if (!strcmp(id,tobs+1)) return i; } } diff --git a/src/rtcm3.c b/src/rtcm3.c index d831ec1..038e2f2 100644 --- a/src/rtcm3.c +++ b/src/rtcm3.c @@ -1365,8 +1365,8 @@ static const int codes_qzs[]={ CODE_L5X,CODE_L6S,CODE_L6L,CODE_L6X,CODE_L1X }; static const int codes_bds[]={ - CODE_L1I,CODE_L1Q,CODE_L1X,CODE_L7I,CODE_L7Q,CODE_L7X,CODE_L6I,CODE_L6Q, - CODE_L6X + CODE_L1I,CODE_L1Q,CODE_L1X,CODE_L2I,CODE_L2Q,CODE_L2X, + CODE_L7I,CODE_L7Q,CODE_L7X,CODE_L6I,CODE_L6Q,CODE_L6X }; static const int codes_sbs[]={ CODE_L1C,CODE_L5I,CODE_L5Q,CODE_L5X @@ -1482,7 +1482,7 @@ static int decode_ssr3(rtcm_t *rtcm, int sys) case SYS_GLO: np=5; offp= 0; codes=codes_glo; ncode= 4; break; case SYS_GAL: np=6; offp= 0; codes=codes_gal; ncode=19; break; case SYS_QZS: np=4; offp=192; codes=codes_qzs; ncode=13; break; - case SYS_CMP: np=6; offp= 1; codes=codes_bds; ncode= 9; break; + case SYS_CMP: np=6; offp= 1; codes=codes_bds; ncode=12; break; case SYS_SBS: np=6; offp=120; codes=codes_sbs; ncode= 4; break; default: return sync?0:10; } @@ -1706,7 +1706,7 @@ static int decode_ssr7(rtcm_t *rtcm, int sys) case SYS_GLO: np=5; offp= 0; codes=codes_glo; ncode= 4; break; case SYS_GAL: np=6; offp= 0; codes=codes_gal; ncode=19; break; case SYS_QZS: np=4; offp=192; codes=codes_qzs; ncode=13; break; - case SYS_CMP: np=6; offp= 1; codes=codes_bds; ncode= 9; break; + case SYS_CMP: np=6; offp= 1; codes=codes_bds; ncode=12; break; default: return sync?0:10; } for (j=0;j<nsat&&i+5+17+np<=rtcm->len*8;j++) { @@ -1820,13 +1820,8 @@ static void save_msm_obs(rtcm_t *rtcm, int sys, msm_h_t *h, const double *r, default: sig[i]=""; break; } /* signal to rinex obs type */ - code[i]=obs2code(sig[i],freq+i); - - /* freqency index for beidou */ - if (sys==SYS_CMP) { - if (freq[i]==5) freq[i]=2; /* B2 */ - else if (freq[i]==4) freq[i]=3; /* B3 */ - } + code[i]=obs2code(sys,sig[i],freq+i); + if (code[i]!=CODE_NONE) { if (q) q+=sprintf(q,"L%s%s",sig[i],i<h->nsig-1?",":""); } diff --git a/src/rtcm3e.c b/src/rtcm3e.c index 38503df..7ffcb5e 100644 --- a/src/rtcm3e.c +++ b/src/rtcm3e.c @@ -1387,8 +1387,8 @@ static const int codes_qzs[]={ CODE_L5X,CODE_L6S,CODE_L6L,CODE_L6X,CODE_L1X }; static const int codes_bds[]={ - CODE_L1I,CODE_L1Q,CODE_L1X,CODE_L7I,CODE_L7Q,CODE_L7X,CODE_L6I,CODE_L6Q, - CODE_L6X + CODE_L1I,CODE_L1Q,CODE_L1X,CODE_L2I,CODE_L2Q,CODE_L2X, + CODE_L7I,CODE_L7Q,CODE_L7X,CODE_L6I,CODE_L6Q,CODE_L6X }; static const int codes_sbs[]={ CODE_L1C,CODE_L5I,CODE_L5Q,CODE_L5X @@ -1506,7 +1506,7 @@ static int encode_ssr3(rtcm_t *rtcm, int sys, int sync) case SYS_GLO: np=5; offp= 0; codes=codes_glo; ncode= 4; break; case SYS_GAL: np=6; offp= 0; codes=codes_gal; ncode=19; break; case SYS_QZS: np=4; offp=192; codes=codes_qzs; ncode=13; break; - case SYS_CMP: np=6; offp= 1; codes=codes_bds; ncode= 9; break; + case SYS_CMP: np=6; offp= 1; codes=codes_bds; ncode=12; break; case SYS_SBS: np=6; offp=120; codes=codes_sbs; ncode= 4; break; default: return 0; } @@ -1690,7 +1690,7 @@ static int encode_ssr7(rtcm_t *rtcm, int sys, int sync) case SYS_GLO: np=5; offp= 0; codes=codes_glo; ncode= 4; break; case SYS_GAL: np=6; offp= 0; codes=codes_gal; ncode=19; break; case SYS_QZS: np=4; offp=192; codes=codes_qzs; ncode=13; break; - case SYS_CMP: np=6; offp= 1; codes=codes_bds; ncode= 9; break; + case SYS_CMP: np=6; offp= 1; codes=codes_bds; ncode=12; break; default: return 0; } /* number of satellites */ @@ -1760,7 +1760,7 @@ static int to_sigid(int sys, unsigned char code, int *freq) else if (code==CODE_L2M) code=CODE_L2P; else if (code==CODE_L2N) code=CODE_L2P; } - if (!*(sig=code2obs(code,freq))) return 0; + if (!*(sig=code2obs(sys,code,freq))) return 0; switch (sys) { case SYS_GPS: msm_sig=msm_sig_gps; break; diff --git a/src/rtkcmn.c b/src/rtkcmn.c index 40f6531..8013b93 100644 --- a/src/rtkcmn.c +++ b/src/rtkcmn.c @@ -252,17 +252,27 @@ static char *obscodes[]={ /* observation code strings */ "5B","5C","9A","9B","9C", "9X","" ,"" ,"" ,"" /* 50-59 */ }; static unsigned char obsfreqs[]={ - /* 1:L1/E1, 2:L2/B1, 3:E5b/B2, 4:L5/E5a/L3, 5:L6/LEX/B3, 6:E5(a+b), 7:S */ + /* 1:L1/E1, 2:L2, 3:E5b, 4:L5/E5a/L3, 5:E6/LEX, 6:E5(a+b), 7:S */ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0- 9 */ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, /* 10-19 */ 2, 2, 2, 2, 4, 4, 4, 3, 3, 3, /* 20-29 */ 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, /* 30-39 */ - 2, 2, 5, 5, 4, 4, 4, 1, 1, 4, /* 40-49 */ + 1, 1, 3, 3, 4, 4, 4, 1, 1, 4, /* 40-49 */ 4, 4, 7, 7, 7, 7, 0, 0, 0, 0 /* 50-59 */ }; +static unsigned char obsfreqs_cmp[]={ + /* 1:B1, 2:B2, 3:B3 */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0- 9 */ + 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, /* 10-19 */ + 2, 2, 2, 2, 4, 4, 4, 2, 2, 2, /* 20-29 */ + 5, 5, 5, 3, 5, 5, 5, 6, 6, 6, /* 30-39 */ + 1, 1, 3, 3, 4, 4, 4, 1, 1, 4, /* 40-49 */ + 4, 4, 7, 7, 7, 7, 0, 0, 0, 0 /* 50-59 */ +}; + static char codepris[7][MAXFREQ][16]={ /* code priority table */ - /* L1/E1 L2/B1 E5b/B2 L5/E5a/L3 L6/LEX/B3 E5(a+b) S */ + /* L1/E1/B1 L2/B2 E5b/B3 L5/E5a/L3 E6/LEX E5(a+b) S */ {"CPYWMNSL","CLPYWMNDSX","IQX" ,"IQX" ,"" ,"" ,"" }, /* GPS */ {"PC" ,"PC" ,"IQX" ,"IQX" ,"" ,"" ,"" }, /* GLO */ {"CABXZ" ,"" ,"IQX" ,"IQX" ,"ABCXZ" ,"IQX" ,"" }, /* GAL */ @@ -586,13 +596,19 @@ extern int testsnr(int base, int freq, double el, double snr, * return : obs code (CODE_???) * notes : obs codes are based on reference [6] and qzss extension *-----------------------------------------------------------------------------*/ -extern unsigned char obs2code(const char *obs, int *freq) +extern unsigned char obs2code(int sys, const char *obs, int *freq) { int i; if (freq) *freq=0; for (i=1;*obscodes[i];i++) { if (strcmp(obscodes[i],obs)) continue; - if (freq) *freq=obsfreqs[i]; + + if (freq) { + if (sys==SYS_CMP) + *freq=obsfreqs_cmp[i]; + else + *freq=obsfreqs[i]; + } return (unsigned char)i; } return CODE_NONE; @@ -601,16 +617,21 @@ extern unsigned char obs2code(const char *obs, int *freq) * convert obs code to obs code string * args : unsigned char code I obs code (CODE_???) * int *freq IO frequency (NULL: no output) -* (1:L1/E1, 2:L2/B1, 3:L5/E5a/L3, 4:L6/LEX/B3, - 5:E5b/B2, 6:E5(a+b), 7:S) +* (1:L1/E1/B1, 2:L2/B2, 3:L5/E5a/L3/B3, 4:L6/LEX, + 5:E5b, 6:E5(a+b), 7:S) * return : obs code string ("1C","1P","1P",...) * notes : obs codes are based on reference [6] and qzss extension *-----------------------------------------------------------------------------*/ -extern char *code2obs(unsigned char code, int *freq) +extern char *code2obs(int sys, unsigned char code, int *freq) { if (freq) *freq=0; if (code<=CODE_NONE||MAXCODE<code) return ""; - if (freq) *freq=obsfreqs[code]; + if (freq) { + if (sys==SYS_CMP) + *freq=obsfreqs_cmp[code]; + else + *freq=obsfreqs[code]; + } return obscodes[code]; } /* set code priority ----------------------------------------------------------- @@ -657,7 +678,7 @@ extern int getcodepri(int sys, unsigned char code, const char *opt) case SYS_IRN: i=6; optstr="-IL%2s"; break; default: return 0; } - obs=code2obs(code,&j); + obs=code2obs(sys,code,&j); /* parse code options */ for (p=opt;p&&(p=strchr(p,'-'));p++) { diff --git a/src/rtklib.h b/src/rtklib.h index 5b3e212..b11139a 100644 --- a/src/rtklib.h +++ b/src/rtklib.h @@ -1449,8 +1449,8 @@ EXPORT int satno (int sys, int prn); EXPORT int satsys (int sat, int *prn); EXPORT int satid2no(const char *id); EXPORT void satno2id(int sat, char *id); -EXPORT unsigned char obs2code(const char *obs, int *freq); -EXPORT char *code2obs(unsigned char code, int *freq); +EXPORT unsigned char obs2code(int sys, const char *obs, int *freq); +EXPORT char *code2obs(int sys, unsigned char code, int *freq); EXPORT int satexclude(int sat, double var, int svh, const prcopt_t *opt); EXPORT int testsnr(int base, int freq, double el, double snr, const snrmask_t *mask); -- GitLab