RTKLIB 中的 rtknavi 中的选项的传递过程

RTKLIB 中的 rtknavi 中的选项的传递过程

最近看了一下RTKLIB的源码,追了一下其中的 rtknavi 中的选项是如何传递进去生效的。过程如下,以处理过程选项(PrcOpt:Process Options)为例。

  1. 点击打开Options窗口时调用 TMainForm::BtnOptClick,从 TMainForm 的成员 PrcOpt 和 SolOpt 中 读取选项值到 TOptDialog 的成员 PrcOpt 和 SolOpt 中:
  OptDialog->PrcOpt     =PrcOpt;
  OptDialog->SolOpt     =SolOpt;

然后显示 Options 对话框。

if (OptDialog->ShowModal()!=mrOk) return;
  1. Options窗口中设置选项点击确认后调用 TOptDialog::BtnOkClick,TOptDialog::BtnOkClick 调用 TOptDialog::SetOpt,TOptDialog::SetOpt 会把选项存到 TOptDialog 的成员 PrcOpt 和 SolOpt 中。

  2. Options窗口返回 TMainForm::BtnOptClick 后,若是确认返回的执行

  PrcOpt     =OptDialog->PrcOpt;
  SolOpt     =OptDialog->SolOpt;

把选项值存回到 TMainForm 的成员 PrcOpt 和 SolOpt 中。若是取消返回的则不执行此动作,直接返回。

  1. TMainForm::SvrStart 调用 rtksvrstart 时把 PrcOpt 传进去:
// start rtk server
if (!rtksvrstart(&rtksvr,SvrCycle,SvrBuffSize,strs,paths,Format,NavSelect,
                 cmds,rcvopts,NmeaCycle,NmeaReq,nmeapos,&PrcOpt,solopt,
                 &monistr)) {
    traceclose();
    return;
}
  1. rtksvrstart 调用 rtkinit(&svr->rtk,prcopt) 时把 prcopt 存到 svr->rtk->opt 中:
rtkinit(&svr->rtk,prcopt);
  1. rtksvrstart 调用 pthread_create 创建线程时把 svr 作为参数传进去:
if (pthread_create(&svr->thread,NULL,rtksvrthread,svr))
  1. rtksvrthread 调用 rtkpos 把 svr->rtk 传进去:
rtkpos(&svr->rtk,obs.data,obs.n,&svr->nav)
  1. rtkpos 得到了 rtk,其中有 rtk->opt,即为处理过程选项。rtkpos 可以根据选项的要求进行定位解算。

你可能感兴趣的:(GNSS)