<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>.directory</filename>
    </added>
    <added>
      <filename>objects/ephemeris.cpp</filename>
    </added>
    <added>
      <filename>objects/ephemeris.h</filename>
    </added>
    <added>
      <filename>objects/pvt.cpp</filename>
    </added>
    <added>
      <filename>objects/pvt.h</filename>
    </added>
    <added>
      <filename>objects/sv_select.cpp</filename>
    </added>
    <added>
      <filename>objects/sv_select.h</filename>
    </added>
    <added>
      <filename>objects/telemetry.cpp</filename>
    </added>
    <added>
      <filename>objects/telemetry.h</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -3,8 +3,8 @@
 
 &lt;cproject&gt;
 &lt;storageModule moduleId=&quot;org.eclipse.cdt.core.settings&quot;&gt;
-&lt;cconfiguration id=&quot;cdt.managedbuild.config.gnu.exe.debug.2104979463&quot;&gt;
-&lt;storageModule buildSystemId=&quot;org.eclipse.cdt.managedbuilder.core.configurationDataProvider&quot; id=&quot;cdt.managedbuild.config.gnu.exe.debug.2104979463&quot; moduleId=&quot;org.eclipse.cdt.core.settings&quot; name=&quot;Debug&quot;&gt;
+&lt;cconfiguration id=&quot;cdt.managedbuild.config.gnu.exe.debug.77584363&quot;&gt;
+&lt;storageModule buildSystemId=&quot;org.eclipse.cdt.managedbuilder.core.configurationDataProvider&quot; id=&quot;cdt.managedbuild.config.gnu.exe.debug.77584363&quot; moduleId=&quot;org.eclipse.cdt.core.settings&quot; name=&quot;Debug&quot;&gt;
 &lt;externalSettings/&gt;
 &lt;extensions&gt;
 &lt;extension id=&quot;org.eclipse.cdt.core.ELF&quot; point=&quot;org.eclipse.cdt.core.BinaryParser&quot;/&gt;
@@ -15,23 +15,32 @@
 &lt;/extensions&gt;
 &lt;/storageModule&gt;
 &lt;storageModule moduleId=&quot;cdtBuildSystem&quot; version=&quot;4.0.0&quot;&gt;
-&lt;configuration artifactName=&quot;gps-sdr&quot; buildArtefactType=&quot;org.eclipse.cdt.build.core.buildArtefactType.exe&quot; buildProperties=&quot;org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe&quot; cleanCommand=&quot;rm -rf&quot; description=&quot;&quot; id=&quot;cdt.managedbuild.config.gnu.exe.debug.2104979463&quot; name=&quot;Debug&quot; parent=&quot;cdt.managedbuild.config.gnu.exe.debug&quot;&gt;
-&lt;folderInfo id=&quot;cdt.managedbuild.config.gnu.exe.debug.2104979463.&quot; name=&quot;/&quot; resourcePath=&quot;&quot;&gt;
-&lt;toolChain id=&quot;cdt.managedbuild.toolchain.gnu.exe.debug.1315644368&quot; name=&quot;Linux GCC&quot; superClass=&quot;cdt.managedbuild.toolchain.gnu.exe.debug&quot;&gt;
-&lt;targetPlatform id=&quot;cdt.managedbuild.target.gnu.platform.exe.debug.1068335862&quot; name=&quot;Debug Platform&quot; superClass=&quot;cdt.managedbuild.target.gnu.platform.exe.debug&quot;/&gt;
-&lt;builder buildPath=&quot;${workspace_loc:/gps-sdr/Debug}&quot; id=&quot;cdt.managedbuild.target.gnu.builder.exe.debug.1402111636&quot; managedBuildOn=&quot;true&quot; name=&quot;Gnu Make Builder.Debug&quot; superClass=&quot;cdt.managedbuild.target.gnu.builder.exe.debug&quot;/&gt;
-&lt;tool id=&quot;cdt.managedbuild.tool.gnu.archiver.base.1072028718&quot; name=&quot;GCC Archiver&quot; superClass=&quot;cdt.managedbuild.tool.gnu.archiver.base&quot;/&gt;
-&lt;tool id=&quot;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1064811947&quot; name=&quot;GCC C++ Compiler&quot; superClass=&quot;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug&quot;&gt;
-&lt;option id=&quot;gnu.cpp.compiler.exe.debug.option.optimization.level.2061905273&quot; superClass=&quot;gnu.cpp.compiler.exe.debug.option.optimization.level&quot; value=&quot;gnu.cpp.compiler.optimization.level.none&quot; valueType=&quot;enumerated&quot;/&gt;
-&lt;option id=&quot;gnu.cpp.compiler.exe.debug.option.debugging.level.1532906187&quot; superClass=&quot;gnu.cpp.compiler.exe.debug.option.debugging.level&quot; value=&quot;gnu.cpp.compiler.debugging.level.max&quot; valueType=&quot;enumerated&quot;/&gt;
+&lt;configuration artifactName=&quot;gps-sdr&quot; buildArtefactType=&quot;org.eclipse.cdt.build.core.buildArtefactType.exe&quot; buildProperties=&quot;org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe&quot; cleanCommand=&quot;rm -rf&quot; description=&quot;&quot; id=&quot;cdt.managedbuild.config.gnu.exe.debug.77584363&quot; name=&quot;Debug&quot; parent=&quot;cdt.managedbuild.config.gnu.exe.debug&quot;&gt;
+&lt;folderInfo id=&quot;cdt.managedbuild.config.gnu.exe.debug.77584363.&quot; name=&quot;/&quot; resourcePath=&quot;&quot;&gt;
+&lt;toolChain id=&quot;cdt.managedbuild.toolchain.gnu.exe.debug.192384869&quot; name=&quot;Linux GCC&quot; superClass=&quot;cdt.managedbuild.toolchain.gnu.exe.debug&quot;&gt;
+&lt;targetPlatform id=&quot;cdt.managedbuild.target.gnu.platform.exe.debug.727751360&quot; name=&quot;Debug Platform&quot; superClass=&quot;cdt.managedbuild.target.gnu.platform.exe.debug&quot;/&gt;
+&lt;builder buildPath=&quot;${workspace_loc:/gps-sdr/}&quot; id=&quot;cdt.managedbuild.target.gnu.builder.exe.debug.1990275351&quot; keepEnvironmentInBuildfile=&quot;false&quot; managedBuildOn=&quot;false&quot; name=&quot;Gnu Make Builder&quot; superClass=&quot;cdt.managedbuild.target.gnu.builder.exe.debug&quot;/&gt;
+&lt;tool id=&quot;cdt.managedbuild.tool.gnu.archiver.base.1973994625&quot; name=&quot;GCC Archiver&quot; superClass=&quot;cdt.managedbuild.tool.gnu.archiver.base&quot;/&gt;
+&lt;tool id=&quot;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.316470541&quot; name=&quot;GCC C++ Compiler&quot; superClass=&quot;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug&quot;&gt;
+&lt;option id=&quot;gnu.cpp.compiler.exe.debug.option.optimization.level.493837322&quot; name=&quot;Optimization Level&quot; superClass=&quot;gnu.cpp.compiler.exe.debug.option.optimization.level&quot; value=&quot;gnu.cpp.compiler.optimization.level.none&quot; valueType=&quot;enumerated&quot;/&gt;
+&lt;option id=&quot;gnu.cpp.compiler.exe.debug.option.debugging.level.154312303&quot; name=&quot;Debug Level&quot; superClass=&quot;gnu.cpp.compiler.exe.debug.option.debugging.level&quot; value=&quot;gnu.cpp.compiler.debugging.level.max&quot; valueType=&quot;enumerated&quot;/&gt;
+&lt;inputType id=&quot;cdt.managedbuild.tool.gnu.cpp.compiler.input.1499118183&quot; superClass=&quot;cdt.managedbuild.tool.gnu.cpp.compiler.input&quot;/&gt;
 &lt;/tool&gt;
-&lt;tool id=&quot;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.297552181&quot; name=&quot;GCC C Compiler&quot; superClass=&quot;cdt.managedbuild.tool.gnu.c.compiler.exe.debug&quot;&gt;
-&lt;option defaultValue=&quot;gnu.c.optimization.level.none&quot; id=&quot;gnu.c.compiler.exe.debug.option.optimization.level.2034179796&quot; superClass=&quot;gnu.c.compiler.exe.debug.option.optimization.level&quot; valueType=&quot;enumerated&quot;/&gt;
-&lt;option id=&quot;gnu.c.compiler.exe.debug.option.debugging.level.1698950407&quot; superClass=&quot;gnu.c.compiler.exe.debug.option.debugging.level&quot; value=&quot;gnu.c.debugging.level.max&quot; valueType=&quot;enumerated&quot;/&gt;
+&lt;tool id=&quot;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.776235249&quot; name=&quot;GCC C Compiler&quot; superClass=&quot;cdt.managedbuild.tool.gnu.c.compiler.exe.debug&quot;&gt;
+&lt;option defaultValue=&quot;gnu.c.optimization.level.none&quot; id=&quot;gnu.c.compiler.exe.debug.option.optimization.level.1024402410&quot; name=&quot;Optimization Level&quot; superClass=&quot;gnu.c.compiler.exe.debug.option.optimization.level&quot; valueType=&quot;enumerated&quot;/&gt;
+&lt;option id=&quot;gnu.c.compiler.exe.debug.option.debugging.level.659731994&quot; name=&quot;Debug Level&quot; superClass=&quot;gnu.c.compiler.exe.debug.option.debugging.level&quot; value=&quot;gnu.c.debugging.level.max&quot; valueType=&quot;enumerated&quot;/&gt;
+&lt;inputType id=&quot;cdt.managedbuild.tool.gnu.c.compiler.input.926966354&quot; superClass=&quot;cdt.managedbuild.tool.gnu.c.compiler.input&quot;/&gt;
+&lt;/tool&gt;
+&lt;tool id=&quot;cdt.managedbuild.tool.gnu.c.linker.exe.debug.1522152180&quot; name=&quot;GCC C Linker&quot; superClass=&quot;cdt.managedbuild.tool.gnu.c.linker.exe.debug&quot;/&gt;
+&lt;tool id=&quot;cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.275877220&quot; name=&quot;GCC C++ Linker&quot; superClass=&quot;cdt.managedbuild.tool.gnu.cpp.linker.exe.debug&quot;&gt;
+&lt;inputType id=&quot;cdt.managedbuild.tool.gnu.cpp.linker.input.1954109296&quot; superClass=&quot;cdt.managedbuild.tool.gnu.cpp.linker.input&quot;&gt;
+&lt;additionalInput kind=&quot;additionalinputdependency&quot; paths=&quot;$(USER_OBJS)&quot;/&gt;
+&lt;additionalInput kind=&quot;additionalinput&quot; paths=&quot;$(LIBS)&quot;/&gt;
+&lt;/inputType&gt;
+&lt;/tool&gt;
+&lt;tool id=&quot;cdt.managedbuild.tool.gnu.assembler.exe.debug.1993913674&quot; name=&quot;GCC Assembler&quot; superClass=&quot;cdt.managedbuild.tool.gnu.assembler.exe.debug&quot;&gt;
+&lt;inputType id=&quot;cdt.managedbuild.tool.gnu.assembler.input.199240112&quot; superClass=&quot;cdt.managedbuild.tool.gnu.assembler.input&quot;/&gt;
 &lt;/tool&gt;
-&lt;tool id=&quot;cdt.managedbuild.tool.gnu.c.linker.exe.debug.2088896898&quot; name=&quot;GCC C Linker&quot; superClass=&quot;cdt.managedbuild.tool.gnu.c.linker.exe.debug&quot;/&gt;
-&lt;tool id=&quot;cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.1826194429&quot; name=&quot;GCC C++ Linker&quot; superClass=&quot;cdt.managedbuild.tool.gnu.cpp.linker.exe.debug&quot;/&gt;
-&lt;tool id=&quot;cdt.managedbuild.tool.gnu.assembler.exe.debug.846231409&quot; name=&quot;GCC Assembler&quot; superClass=&quot;cdt.managedbuild.tool.gnu.assembler.exe.debug&quot;/&gt;
 &lt;/toolChain&gt;
 &lt;/folderInfo&gt;
 &lt;/configuration&gt;
@@ -118,7 +127,7 @@
 &lt;parser enabled=&quot;true&quot;/&gt;
 &lt;/scannerInfoProvider&gt;
 &lt;/profile&gt;
-&lt;scannerConfigBuildInfo instanceId=&quot;cdt.managedbuild.config.gnu.exe.debug.2104979463;cdt.managedbuild.config.gnu.exe.debug.2104979463.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.297552181;cdt.managedbuild.tool.gnu.c.compiler.input.225396790&quot;&gt;
+&lt;scannerConfigBuildInfo instanceId=&quot;cdt.managedbuild.config.gnu.exe.debug.77584363;cdt.managedbuild.config.gnu.exe.debug.77584363.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.776235249;cdt.managedbuild.tool.gnu.c.compiler.input.602098326&quot;&gt;
 &lt;autodiscovery enabled=&quot;true&quot; problemReportingEnabled=&quot;true&quot; selectedProfileId=&quot;org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC&quot;/&gt;
 &lt;profile id=&quot;org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile&quot;&gt;
 &lt;buildOutputProvider&gt;
@@ -201,7 +210,7 @@
 &lt;/scannerInfoProvider&gt;
 &lt;/profile&gt;
 &lt;/scannerConfigBuildInfo&gt;
-&lt;scannerConfigBuildInfo instanceId=&quot;cdt.managedbuild.config.gnu.exe.debug.2104979463;cdt.managedbuild.config.gnu.exe.debug.2104979463.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1064811947;cdt.managedbuild.tool.gnu.cpp.compiler.input.1676041878&quot;&gt;
+&lt;scannerConfigBuildInfo instanceId=&quot;cdt.managedbuild.config.gnu.exe.debug.77584363;cdt.managedbuild.config.gnu.exe.debug.77584363.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.316470541;cdt.managedbuild.tool.gnu.cpp.compiler.input.1204114487&quot;&gt;
 &lt;autodiscovery enabled=&quot;true&quot; problemReportingEnabled=&quot;true&quot; selectedProfileId=&quot;org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP&quot;/&gt;
 &lt;profile id=&quot;org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile&quot;&gt;
 &lt;buildOutputProvider&gt;
@@ -286,9 +295,37 @@
 &lt;/scannerConfigBuildInfo&gt;
 &lt;/storageModule&gt;
 &lt;storageModule moduleId=&quot;org.eclipse.cdt.core.externalSettings&quot;/&gt;
+&lt;storageModule moduleId=&quot;org.eclipse.cdt.make.core.buildtargets&quot;&gt;
+&lt;buildTargets&gt;
+&lt;target name=&quot;gps-sdr&quot; path=&quot;&quot; targetID=&quot;org.eclipse.cdt.build.MakeTargetBuilder&quot;&gt;
+&lt;buildCommand&gt;make&lt;/buildCommand&gt;
+&lt;buildArguments/&gt;
+&lt;buildTarget&gt;gps-sdr&lt;/buildTarget&gt;
+&lt;stopOnError&gt;true&lt;/stopOnError&gt;
+&lt;useDefaultCommand&gt;false&lt;/useDefaultCommand&gt;
+&lt;runAllBuilders&gt;false&lt;/runAllBuilders&gt;
+&lt;/target&gt;
+&lt;target name=&quot;clean&quot; path=&quot;&quot; targetID=&quot;org.eclipse.cdt.build.MakeTargetBuilder&quot;&gt;
+&lt;buildCommand&gt;make&lt;/buildCommand&gt;
+&lt;buildArguments/&gt;
+&lt;buildTarget&gt;clean&lt;/buildTarget&gt;
+&lt;stopOnError&gt;true&lt;/stopOnError&gt;
+&lt;useDefaultCommand&gt;true&lt;/useDefaultCommand&gt;
+&lt;runAllBuilders&gt;false&lt;/runAllBuilders&gt;
+&lt;/target&gt;
+&lt;target name=&quot;extras&quot; path=&quot;&quot; targetID=&quot;org.eclipse.cdt.build.MakeTargetBuilder&quot;&gt;
+&lt;buildCommand&gt;make&lt;/buildCommand&gt;
+&lt;buildArguments/&gt;
+&lt;buildTarget&gt;extras&lt;/buildTarget&gt;
+&lt;stopOnError&gt;true&lt;/stopOnError&gt;
+&lt;useDefaultCommand&gt;true&lt;/useDefaultCommand&gt;
+&lt;runAllBuilders&gt;false&lt;/runAllBuilders&gt;
+&lt;/target&gt;
+&lt;/buildTargets&gt;
+&lt;/storageModule&gt;
 &lt;/cconfiguration&gt;
-&lt;cconfiguration id=&quot;cdt.managedbuild.config.gnu.exe.release.577884912&quot;&gt;
-&lt;storageModule buildSystemId=&quot;org.eclipse.cdt.managedbuilder.core.configurationDataProvider&quot; id=&quot;cdt.managedbuild.config.gnu.exe.release.577884912&quot; moduleId=&quot;org.eclipse.cdt.core.settings&quot; name=&quot;Release&quot;&gt;
+&lt;cconfiguration id=&quot;cdt.managedbuild.config.gnu.exe.release.2008364267&quot;&gt;
+&lt;storageModule buildSystemId=&quot;org.eclipse.cdt.managedbuilder.core.configurationDataProvider&quot; id=&quot;cdt.managedbuild.config.gnu.exe.release.2008364267&quot; moduleId=&quot;org.eclipse.cdt.core.settings&quot; name=&quot;Release&quot;&gt;
 &lt;externalSettings/&gt;
 &lt;extensions&gt;
 &lt;extension id=&quot;org.eclipse.cdt.core.ELF&quot; point=&quot;org.eclipse.cdt.core.BinaryParser&quot;/&gt;
@@ -299,23 +336,32 @@
 &lt;/extensions&gt;
 &lt;/storageModule&gt;
 &lt;storageModule moduleId=&quot;cdtBuildSystem&quot; version=&quot;4.0.0&quot;&gt;
-&lt;configuration artifactName=&quot;gps-sdr&quot; buildArtefactType=&quot;org.eclipse.cdt.build.core.buildArtefactType.exe&quot; buildProperties=&quot;org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe&quot; cleanCommand=&quot;rm -rf&quot; description=&quot;&quot; id=&quot;cdt.managedbuild.config.gnu.exe.release.577884912&quot; name=&quot;Release&quot; parent=&quot;cdt.managedbuild.config.gnu.exe.release&quot;&gt;
-&lt;folderInfo id=&quot;cdt.managedbuild.config.gnu.exe.release.577884912.&quot; name=&quot;/&quot; resourcePath=&quot;&quot;&gt;
-&lt;toolChain id=&quot;cdt.managedbuild.toolchain.gnu.exe.release.669590308&quot; name=&quot;Linux GCC&quot; superClass=&quot;cdt.managedbuild.toolchain.gnu.exe.release&quot;&gt;
-&lt;targetPlatform id=&quot;cdt.managedbuild.target.gnu.platform.exe.release.1386884189&quot; name=&quot;Debug Platform&quot; superClass=&quot;cdt.managedbuild.target.gnu.platform.exe.release&quot;/&gt;
-&lt;builder buildPath=&quot;${workspace_loc:/gps-sdr/Release}&quot; id=&quot;cdt.managedbuild.target.gnu.builder.exe.release.1406140088&quot; managedBuildOn=&quot;true&quot; name=&quot;Gnu Make Builder.Release&quot; superClass=&quot;cdt.managedbuild.target.gnu.builder.exe.release&quot;/&gt;
-&lt;tool id=&quot;cdt.managedbuild.tool.gnu.archiver.base.354596229&quot; name=&quot;GCC Archiver&quot; superClass=&quot;cdt.managedbuild.tool.gnu.archiver.base&quot;/&gt;
-&lt;tool id=&quot;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.1565930157&quot; name=&quot;GCC C++ Compiler&quot; superClass=&quot;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release&quot;&gt;
-&lt;option id=&quot;gnu.cpp.compiler.exe.release.option.optimization.level.1924126081&quot; superClass=&quot;gnu.cpp.compiler.exe.release.option.optimization.level&quot; value=&quot;gnu.cpp.compiler.optimization.level.most&quot; valueType=&quot;enumerated&quot;/&gt;
-&lt;option id=&quot;gnu.cpp.compiler.exe.release.option.debugging.level.462324478&quot; superClass=&quot;gnu.cpp.compiler.exe.release.option.debugging.level&quot; value=&quot;gnu.cpp.compiler.debugging.level.none&quot; valueType=&quot;enumerated&quot;/&gt;
+&lt;configuration artifactName=&quot;gps-sdr&quot; buildArtefactType=&quot;org.eclipse.cdt.build.core.buildArtefactType.exe&quot; buildProperties=&quot;org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe&quot; cleanCommand=&quot;rm -rf&quot; description=&quot;&quot; id=&quot;cdt.managedbuild.config.gnu.exe.release.2008364267&quot; name=&quot;Release&quot; parent=&quot;cdt.managedbuild.config.gnu.exe.release&quot;&gt;
+&lt;folderInfo id=&quot;cdt.managedbuild.config.gnu.exe.release.2008364267.&quot; name=&quot;/&quot; resourcePath=&quot;&quot;&gt;
+&lt;toolChain id=&quot;cdt.managedbuild.toolchain.gnu.exe.release.175498023&quot; name=&quot;Linux GCC&quot; superClass=&quot;cdt.managedbuild.toolchain.gnu.exe.release&quot;&gt;
+&lt;targetPlatform id=&quot;cdt.managedbuild.target.gnu.platform.exe.release.709887846&quot; name=&quot;Debug Platform&quot; superClass=&quot;cdt.managedbuild.target.gnu.platform.exe.release&quot;/&gt;
+&lt;builder buildPath=&quot;${workspace_loc:/gps-sdr/Release}&quot; id=&quot;cdt.managedbuild.target.gnu.builder.exe.release.1941379052&quot; managedBuildOn=&quot;true&quot; name=&quot;Gnu Make Builder.Release&quot; superClass=&quot;cdt.managedbuild.target.gnu.builder.exe.release&quot;/&gt;
+&lt;tool id=&quot;cdt.managedbuild.tool.gnu.archiver.base.1295504480&quot; name=&quot;GCC Archiver&quot; superClass=&quot;cdt.managedbuild.tool.gnu.archiver.base&quot;/&gt;
+&lt;tool id=&quot;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.360335903&quot; name=&quot;GCC C++ Compiler&quot; superClass=&quot;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release&quot;&gt;
+&lt;option id=&quot;gnu.cpp.compiler.exe.release.option.optimization.level.601843637&quot; superClass=&quot;gnu.cpp.compiler.exe.release.option.optimization.level&quot; value=&quot;gnu.cpp.compiler.optimization.level.most&quot; valueType=&quot;enumerated&quot;/&gt;
+&lt;option id=&quot;gnu.cpp.compiler.exe.release.option.debugging.level.526710715&quot; superClass=&quot;gnu.cpp.compiler.exe.release.option.debugging.level&quot; value=&quot;gnu.cpp.compiler.debugging.level.none&quot; valueType=&quot;enumerated&quot;/&gt;
+&lt;inputType id=&quot;cdt.managedbuild.tool.gnu.cpp.compiler.input.514879585&quot; superClass=&quot;cdt.managedbuild.tool.gnu.cpp.compiler.input&quot;/&gt;
+&lt;/tool&gt;
+&lt;tool id=&quot;cdt.managedbuild.tool.gnu.c.compiler.exe.release.454239375&quot; name=&quot;GCC C Compiler&quot; superClass=&quot;cdt.managedbuild.tool.gnu.c.compiler.exe.release&quot;&gt;
+&lt;option defaultValue=&quot;gnu.c.optimization.level.most&quot; id=&quot;gnu.c.compiler.exe.release.option.optimization.level.230957965&quot; superClass=&quot;gnu.c.compiler.exe.release.option.optimization.level&quot; valueType=&quot;enumerated&quot;/&gt;
+&lt;option id=&quot;gnu.c.compiler.exe.release.option.debugging.level.282954418&quot; superClass=&quot;gnu.c.compiler.exe.release.option.debugging.level&quot; value=&quot;gnu.c.debugging.level.none&quot; valueType=&quot;enumerated&quot;/&gt;
+&lt;inputType id=&quot;cdt.managedbuild.tool.gnu.c.compiler.input.36191756&quot; superClass=&quot;cdt.managedbuild.tool.gnu.c.compiler.input&quot;/&gt;
 &lt;/tool&gt;
-&lt;tool id=&quot;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1095741912&quot; name=&quot;GCC C Compiler&quot; superClass=&quot;cdt.managedbuild.tool.gnu.c.compiler.exe.release&quot;&gt;
-&lt;option defaultValue=&quot;gnu.c.optimization.level.most&quot; id=&quot;gnu.c.compiler.exe.release.option.optimization.level.1997955697&quot; superClass=&quot;gnu.c.compiler.exe.release.option.optimization.level&quot; valueType=&quot;enumerated&quot;/&gt;
-&lt;option id=&quot;gnu.c.compiler.exe.release.option.debugging.level.941441799&quot; superClass=&quot;gnu.c.compiler.exe.release.option.debugging.level&quot; value=&quot;gnu.c.debugging.level.none&quot; valueType=&quot;enumerated&quot;/&gt;
+&lt;tool id=&quot;cdt.managedbuild.tool.gnu.c.linker.exe.release.231746357&quot; name=&quot;GCC C Linker&quot; superClass=&quot;cdt.managedbuild.tool.gnu.c.linker.exe.release&quot;/&gt;
+&lt;tool id=&quot;cdt.managedbuild.tool.gnu.cpp.linker.exe.release.952224396&quot; name=&quot;GCC C++ Linker&quot; superClass=&quot;cdt.managedbuild.tool.gnu.cpp.linker.exe.release&quot;&gt;
+&lt;inputType id=&quot;cdt.managedbuild.tool.gnu.cpp.linker.input.2076835108&quot; superClass=&quot;cdt.managedbuild.tool.gnu.cpp.linker.input&quot;&gt;
+&lt;additionalInput kind=&quot;additionalinputdependency&quot; paths=&quot;$(USER_OBJS)&quot;/&gt;
+&lt;additionalInput kind=&quot;additionalinput&quot; paths=&quot;$(LIBS)&quot;/&gt;
+&lt;/inputType&gt;
+&lt;/tool&gt;
+&lt;tool id=&quot;cdt.managedbuild.tool.gnu.assembler.exe.release.477966137&quot; name=&quot;GCC Assembler&quot; superClass=&quot;cdt.managedbuild.tool.gnu.assembler.exe.release&quot;&gt;
+&lt;inputType id=&quot;cdt.managedbuild.tool.gnu.assembler.input.1112600992&quot; superClass=&quot;cdt.managedbuild.tool.gnu.assembler.input&quot;/&gt;
 &lt;/tool&gt;
-&lt;tool id=&quot;cdt.managedbuild.tool.gnu.c.linker.exe.release.923361994&quot; name=&quot;GCC C Linker&quot; superClass=&quot;cdt.managedbuild.tool.gnu.c.linker.exe.release&quot;/&gt;
-&lt;tool id=&quot;cdt.managedbuild.tool.gnu.cpp.linker.exe.release.1758890618&quot; name=&quot;GCC C++ Linker&quot; superClass=&quot;cdt.managedbuild.tool.gnu.cpp.linker.exe.release&quot;/&gt;
-&lt;tool id=&quot;cdt.managedbuild.tool.gnu.assembler.exe.release.1700079143&quot; name=&quot;GCC Assembler&quot; superClass=&quot;cdt.managedbuild.tool.gnu.assembler.exe.release&quot;/&gt;
 &lt;/toolChain&gt;
 &lt;/folderInfo&gt;
 &lt;/configuration&gt;
@@ -402,7 +448,7 @@
 &lt;parser enabled=&quot;true&quot;/&gt;
 &lt;/scannerInfoProvider&gt;
 &lt;/profile&gt;
-&lt;scannerConfigBuildInfo instanceId=&quot;cdt.managedbuild.config.gnu.exe.debug.2104979463;cdt.managedbuild.config.gnu.exe.debug.2104979463.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.297552181;cdt.managedbuild.tool.gnu.c.compiler.input.225396790&quot;&gt;
+&lt;scannerConfigBuildInfo instanceId=&quot;cdt.managedbuild.config.gnu.exe.debug.77584363;cdt.managedbuild.config.gnu.exe.debug.77584363.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.776235249;cdt.managedbuild.tool.gnu.c.compiler.input.602098326&quot;&gt;
 &lt;autodiscovery enabled=&quot;true&quot; problemReportingEnabled=&quot;true&quot; selectedProfileId=&quot;org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC&quot;/&gt;
 &lt;profile id=&quot;org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile&quot;&gt;
 &lt;buildOutputProvider&gt;
@@ -485,7 +531,7 @@
 &lt;/scannerInfoProvider&gt;
 &lt;/profile&gt;
 &lt;/scannerConfigBuildInfo&gt;
-&lt;scannerConfigBuildInfo instanceId=&quot;cdt.managedbuild.config.gnu.exe.debug.2104979463;cdt.managedbuild.config.gnu.exe.debug.2104979463.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.1064811947;cdt.managedbuild.tool.gnu.cpp.compiler.input.1676041878&quot;&gt;
+&lt;scannerConfigBuildInfo instanceId=&quot;cdt.managedbuild.config.gnu.exe.debug.77584363;cdt.managedbuild.config.gnu.exe.debug.77584363.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.316470541;cdt.managedbuild.tool.gnu.cpp.compiler.input.1204114487&quot;&gt;
 &lt;autodiscovery enabled=&quot;true&quot; problemReportingEnabled=&quot;true&quot; selectedProfileId=&quot;org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP&quot;/&gt;
 &lt;profile id=&quot;org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile&quot;&gt;
 &lt;buildOutputProvider&gt;
@@ -569,9 +615,38 @@
 &lt;/profile&gt;
 &lt;/scannerConfigBuildInfo&gt;
 &lt;/storageModule&gt;
+&lt;storageModule moduleId=&quot;org.eclipse.cdt.core.externalSettings&quot;/&gt;
+&lt;storageModule moduleId=&quot;org.eclipse.cdt.make.core.buildtargets&quot;&gt;
+&lt;buildTargets&gt;
+&lt;target name=&quot;gps-sdr&quot; path=&quot;&quot; targetID=&quot;org.eclipse.cdt.build.MakeTargetBuilder&quot;&gt;
+&lt;buildCommand&gt;make&lt;/buildCommand&gt;
+&lt;buildArguments/&gt;
+&lt;buildTarget&gt;gps-sdr&lt;/buildTarget&gt;
+&lt;stopOnError&gt;true&lt;/stopOnError&gt;
+&lt;useDefaultCommand&gt;false&lt;/useDefaultCommand&gt;
+&lt;runAllBuilders&gt;false&lt;/runAllBuilders&gt;
+&lt;/target&gt;
+&lt;target name=&quot;clean&quot; path=&quot;&quot; targetID=&quot;org.eclipse.cdt.build.MakeTargetBuilder&quot;&gt;
+&lt;buildCommand&gt;make&lt;/buildCommand&gt;
+&lt;buildArguments/&gt;
+&lt;buildTarget&gt;clean&lt;/buildTarget&gt;
+&lt;stopOnError&gt;true&lt;/stopOnError&gt;
+&lt;useDefaultCommand&gt;true&lt;/useDefaultCommand&gt;
+&lt;runAllBuilders&gt;false&lt;/runAllBuilders&gt;
+&lt;/target&gt;
+&lt;target name=&quot;extras&quot; path=&quot;&quot; targetID=&quot;org.eclipse.cdt.build.MakeTargetBuilder&quot;&gt;
+&lt;buildCommand&gt;make&lt;/buildCommand&gt;
+&lt;buildArguments/&gt;
+&lt;buildTarget&gt;extras&lt;/buildTarget&gt;
+&lt;stopOnError&gt;true&lt;/stopOnError&gt;
+&lt;useDefaultCommand&gt;true&lt;/useDefaultCommand&gt;
+&lt;runAllBuilders&gt;false&lt;/runAllBuilders&gt;
+&lt;/target&gt;
+&lt;/buildTargets&gt;
+&lt;/storageModule&gt;
 &lt;/cconfiguration&gt;
 &lt;/storageModule&gt;
 &lt;storageModule moduleId=&quot;cdtBuildSystem&quot; version=&quot;4.0.0&quot;&gt;
-&lt;project id=&quot;gps-sdr.cdt.managedbuild.target.gnu.exe.1829872519&quot; name=&quot;Executable&quot; projectType=&quot;cdt.managedbuild.target.gnu.exe&quot;/&gt;
+&lt;project id=&quot;gps-sdr.cdt.managedbuild.target.gnu.exe.1006261707&quot; name=&quot;Executable&quot; projectType=&quot;cdt.managedbuild.target.gnu.exe&quot;/&gt;
 &lt;/storageModule&gt;
 &lt;/cproject&gt;</diff>
      <filename>.cproject</filename>
    </modified>
    <modified>
      <diff>@@ -31,7 +31,7 @@
 				&lt;/dictionary&gt;
 				&lt;dictionary&gt;
 					&lt;key&gt;org.eclipse.cdt.make.core.buildLocation&lt;/key&gt;
-					&lt;value&gt;${workspace_loc:/gps-sdr/Debug}&lt;/value&gt;
+					&lt;value&gt;${workspace_loc:/gps-sdr/}&lt;/value&gt;
 				&lt;/dictionary&gt;
 				&lt;dictionary&gt;
 					&lt;key&gt;org.eclipse.cdt.make.core.cleanBuildTarget&lt;/key&gt;</diff>
      <filename>.project</filename>
    </modified>
    <modified>
      <diff>@@ -1,4 +1,4 @@
-#Mon Jun 23 17:32:06 EDT 2008
+#Wed May 06 10:33:13 EDT 2009
 eclipse.preferences.version=1
 indexer/indexerId=org.eclipse.cdt.core.fastIndexer
 indexerId=org.eclipse.cdt.core.fastIndexer</diff>
      <filename>.settings/org.eclipse.cdt.core.prefs</filename>
    </modified>
    <modified>
      <diff>@@ -30,6 +30,13 @@
 
 #define LINUX_OS
 
+/* Software Version */
+/*----------------------------------------------------------------------------------------------*/
+#define SOFTWARE_VERSION_MAJOR		(2)
+#define SOFTWARE_VERSION_MINOR		(5)
+#define SOFTWARE_VERSION_POSTFIX	(0)
+/*----------------------------------------------------------------------------------------------*/
+
 /* The most important thing, the NUMBER OF CORRELATORS IN THE RECEIVER and the NUMBER OF CPUs */
 /*----------------------------------------------------------------------------------------------*/
 #define MAX_CHANNELS			(12)						//!&lt; Number of channel objects
@@ -65,41 +72,47 @@
 /*----------------------------------------------------------------------------------------------*/
 
 
-/* Acquisition defines */
+/*! Config the SV Select */
 /*----------------------------------------------------------------------------------------------*/
-#define MASK_ANGLE				(5)			//!&lt; Add this many degrees to altitude dependant mask
-#define ACQ_STRONG				(0)			//!&lt; Acq strong type
-#define ACQ_MEDIUM				(1)			//!&lt; Acq medium type
-#define ACQ_WEAK 				(2)			//!&lt; Acq weak type
-
-#define ACQ_STRONG_STATE		(1)			//!&lt; 0 for off, 1 for on, 2 for hot acquisition only
-#define ACQ_MEDIUM_STATE		(2)			//!&lt; 0 for off, 1 for on, 2 for hot acquisition only
-#define ACQ_WEAK_STATE			(2)			//!&lt; 0 for off, 1 for on, 2 for hot acquisition only
-
-#define ACQ_ITERATIONS			(1)			//!&lt; Do this many acqs at a given type before moving to next type
-#define THRESH_STRONG			(1.3e7)		//!&lt; Threshold for strong signal detection
-#define THRESH_MEDIUM			(1.5e7)		//!&lt; Threshold for medium signal detection
-#define THRESH_WEAK				(1.5e7)		//!&lt; Threshold for weak signal detection
-#define MAX_DOPPLER				(45000)		//!&lt; Set the maximum Doppler frequency
-#define DOPPLER_RANGE			(1000)		//!&lt; Search this Doppler range for hot acquisitions
+#define MASK_ANGLE				(0)				//!&lt; Add this many degrees to altitude dependant mask
+#define MAX_ANTENNA				(1)				//!&lt; 6 ADCs on board
+#define ACQ_MODULO_WEAK			(8)				//!&lt; Do this many weak acqs per 32 PRN strong search
+#define MAX_DOPPLER_ABSOLUTE	(100000)		//!&lt; Limit any and all Dopplers the be within this range
+#define MAX_DOPPLER_STRONG		(18000)			//!&lt; Cold Doppler search space for strong signal
+#define MAX_DOPPLER_MEDIUM		(9000)			//!&lt; Cold Doppler search space for strong signal
+#define MAX_DOPPLER_WEAK		(9000)			//!&lt; Cold Doppler search space for weak signal
+#define MAX_DOPPLER_WARM		(1000)			//!&lt; Search this much Doppler space if state information is available
+#define ACQ_OPERATION_STRONG	(ACQ_OPERATION_COLD)		//!&lt; Acq strong mode (2 = cold &amp; warm)
+#define ACQ_OPERATION_MEDIUM	(ACQ_OPERATION_WARM)		//!&lt; Acq strong mode (2 = cold &amp; warm)
+#define ACQ_OPERATION_WEAK		(ACQ_OPERATION_DISABLED)	//!&lt; Acq weak mode (2 = warm only)
+#define THRESH_STRONG			(0)						//!&lt; Thats right zero! 40 dB-Hz and above acquisition threshold
+#define THRESH_MEDIUM			(0)						//!&lt; Thats right zero! 30 dB-Hz and above acquisition threshold
+#define THRESH_WEAK				(0)						//!&lt; 30 dB-Hz and below (down to ~22 dB-Hz &lt;-- LIAR!) acquisition threshold
 /*----------------------------------------------------------------------------------------------*/
 
 
-/* Correlator  Defines */
+/* Correlator Defines */
 /*----------------------------------------------------------------------------------------------*/
 #define CORR_DELAYS				(1)			//!&lt; Number of delays to calculate (plus-minus)
 #define CORR_SPACING			(.5)		//!&lt; How far should the correlators be spaced (chips)
 #define FRAME_SIZE_PLUS_2		(12)		//!&lt; 10 words per frame, 12 = 10 + 2
-#define MEASUREMENT_INT			(100)		//!&lt; Packets of ~1ms data
 #define CODE_BINS				(20)		//!&lt; Partial code offset bins code resolution -&gt; 1 chip/X bins
 #define CARRIER_SPACING			(20)		//!&lt; Spacing of bins (Hz)
-#define CARRIER_BINS			(MAX_DOPPLER/CARRIER_SPACING) //!&lt; Number of pre-sampled carrier wipeoff bins
+#define CARRIER_BINS			(MAX_DOPPLER_ABSOLUTE/CARRIER_SPACING) //!&lt; Number of pre-sampled carrier wipeoff bins
+/*----------------------------------------------------------------------------------------------*/
+
+
+/* Measurement/PVT Defines */
+/*----------------------------------------------------------------------------------------------*/
+#define MEASUREMENT_INT			(100)		//!&lt; Packets of ~1ms data
 #define ICP_TICS				(5)			//!&lt; Number of measurement ints (plus-minus) to calculate ICP,
 											//!&lt; this cannot exceed TICS_PER_SECOND/2 !!!!
+//#define TICS_2_SECONDS			(MEASUREMENT_INT/1000)
+//#define TICS_PER_SECOND			(1000/MEASUREMENT_INT)
 
-#define TICS_2_SECONDS			(MEASUREMENT_INT/1000)
-#define TICS_PER_SECOND			(1000/MEASUREMENT_INT)
-#define	ACQS_PER_SECOND			(20)
+#define MEASUREMENTS_PER_SECOND	(1000/MEASUREMENT_INT)
+#define SECONDS_PER_TICK		(MEASUREMENT_INT/1000)
+#define PVT_ITERATIONS			(10)		//!&lt; Max number of PVT iterations
 /*----------------------------------------------------------------------------------------------*/
 
 
@@ -117,22 +130,21 @@
 
 /* Associate each task with a enum */
 /*----------------------------------------------------------------------------------------------*/
-#define	MAX_TASKS				(16)		//!&lt; Max task number (used to allocate arrays)
+#define	MAX_TASKS				(14)			//!&lt; Max task number (used to allocate arrays)
 enum TASK_IDS
 {
-	CORRELATOR_TASK_ID = CPU_CORES,			//!&lt; Bottom tasks are the correlators, which is a variable
-	POST_PROCESS_TASK_ID,
-	FIFO_TASK_ID,
+	TRACKING_ISR_TASK_ID,
+	PVT_TASK_ID,
+	PPS_TASK_ID,
+	GEONS_TASK_ID,
 	COMMANDO_TASK_ID,
-	TELEMETRY_TASK_ID,
-	SERIAL_TELEMETRY_TASK_ID,
-	KEYBOARD_TASK_ID,
+	ACQUISITION_TASK_ID,
 	EPHEMERIS_TASK_ID,
 	SV_SELECT_TASK_ID,
-	ACQUISITION_TASK_ID,
-	PVT_TASK_ID,
+	TELEMETRY_TASK_ID,
 	EKF_TASK_ID,
-	LAST_TASK_ID
+	PATIENCE_TASK_ID,
+	IDLE_TASK_ID
 };
 /*----------------------------------------------------------------------------------------------*/
 </diff>
      <filename>includes/config.h</filename>
    </modified>
    <modified>
      <diff>@@ -38,40 +38,42 @@
 /*----------------------------------------------------------------------------------------------*/
 EXTERN class Keyboard		*pKeyboard;						//!&lt; Handle user input
 EXTERN class FIFO			*pFIFO;							//!&lt; Get data and pass it into the receiver
-//EXTERN class PVT			*pPVT;							//!&lt; Do the PVT solution
-//EXTERN class Ephemeris		*pEphemeris;					//!&lt; Extract the ephemeris
+EXTERN class PVT			*pPVT;							//!&lt; Do the PVT solution
+EXTERN class Ephemeris		*pEphemeris;					//!&lt; Extract the ephemeris
 EXTERN class Acquisition	*pAcquisition;					//!&lt; Perform acquisitions
 EXTERN class Correlator		*pCorrelator;					//!&lt; Correlator
 EXTERN class Channel		*pChannels[MAX_CHANNELS];		//!&lt; Channels (uses correlations to close the loops)
-//EXTERN class SV_Select		*pSV_Select;					//!&lt; Contains the channels and drives the channel objects
-//EXTERN class Telemetry		*pTelemetry;					//!&lt; Simple ncurses interface
+EXTERN class SV_Select		*pSV_Select;					//!&lt; Contains the channels and drives the channel objects
+EXTERN class Telemetry		*pTelemetry;					//!&lt; Simple ncurses interface
 //EXTERN class Post_Process	*pPost_Process;					//!&lt; Drive the receiver from a recorded file
 //EXTERN class Serial_Telemetry *pSerial_Telemetry;			//!&lt; Dump data to GUI over named pipe or serial
 //EXTERN class Commando		*pCommando;						//!&lt; Process and execute commands
 /*----------------------------------------------------------------------------------------------*/
 
 /*----------------------------------------------------------------------------------------------*/
-EXTERN int32 grun;											//!&lt; Keep all the threads active (technically, this should be mutex protected, but eh, who cares? )
-EXTERN Options_S gopt;										//!&lt; Global receiver options
-EXTERN struct timeval starttime;							//!&lt; Get receiver start time
+EXTERN int32 grun;									//!&lt; Keep all the threads active (technically, this should be mutex protected, but eh, who cares? )
+EXTERN Options_S gopt;								//!&lt; Global receiver options
+EXTERN struct timeval starttime;					//!&lt; Get receiver start time
 /*----------------------------------------------------------------------------------------------*/
 
 
 /* Part 3, Pipes */
 /*----------------------------------------------------------------------------------------------*/
 /* Interplay between acquisition and tracking */
-EXTERN int32 SVS_2_ACQ_P[2];						//!&lt; \ingroup PIPES Request an acquisition because some of the channels are empty
+EXTERN int32 SVS_2_COR_P[2];						//!&lt; \ingroup PIPES Send an acquisition result to the correlator to start a channel
+EXTERN int32 CHN_2_EPH_P[2];						//!&lt; \ingroup PIPES Output raw subframes to Ephemeris
+EXTERN int32 PVT_2_TLM_P[2];						//!&lt; \ingroup PIPES Output PVT state to Telemetry
+EXTERN int32 SVS_2_TLM_P[2];						//!&lt; \ingroup PIPES Output predicted SV states to Telemetry
+EXTERN int32 EKF_2_TLM_P[2];						//!&lt; \ingroup PIPES Output EKF state to Telemetry
+EXTERN int32 CMD_2_TLM_P[2];						//!&lt; \ingroup PIPES Output results of commands to Telemetry
 EXTERN int32 ACQ_2_SVS_P[2];						//!&lt; \ingroup PIPES Request an acquisition because some of the channels are empty
-EXTERN int32 SVS_2_COR_P[2];						//!&lt; \ingroup PIPES Get an acquisition result
-EXTERN int32 COR_2_PVT_P[2];						//!&lt; \ingroup PIPES Output measurements to PVT
-EXTERN int32 CHN_2_EPH_P[2];						//!&lt; \ingroup PIPES Dump raw subframes to Ephemeris
-EXTERN int32 PVT_2_TLM_P[2];						//!&lt; \ingroup PIPES Send latest nav solution to GUI
-EXTERN int32 EPH_2_TLM_P[2];						//!&lt; \ingroup PIPES Send latest ephemeris to GUI
-EXTERN int32 SVS_2_TLM_P[2];						//!&lt; \ingroup PIPES Send predicted SV states to GUI
-EXTERN int32 PVT_2_SVS_P[2];						//!&lt; \ingroup PIPES Output nav state to sat select
-EXTERN int32 TLM_2_CMD_P[2];						//!&lt; \ingroup PIPES Send received commands to Commando
-EXTERN int32 CMD_2_TLM_P[2];						//!&lt; \ingroup PIPES Send results of commands to Telemetry
-EXTERN int32 COR_2_ACQ_P[2];						//!&lt; \ingroup PIPES Send packets of IF data to the Acquisition
+EXTERN int32 EKF_2_SVS_P[2];						//!&lt; \ingroup PIPES Output EKF state to SV Select
+EXTERN int32 PVT_2_SVS_P[2];						//!&lt; \ingroup PIPES Output PVT state to SV Select
+EXTERN int32 TLM_2_CMD_P[2];						//!&lt; \ingroup PIPES Output received commands to Commando
+EXTERN int32 SVS_2_ACQ_P[2];						//!&lt; \ingroup PIPES Request an acquisition because some of the channels are empty
+EXTERN int32 COR_2_ACQ_P[2];						//!&lt; \ingroup PIPES Output packets of IF data to the Acquisition
+EXTERN int32 ISRP_2_PVT_P[2];						//!&lt; \ingroup PIPES Output measurement preamble to PVT
+EXTERN int32 ISRM_2_PVT_P[2];						//!&lt; \ingroup PIPES Output measurements to PVT
 /*----------------------------------------------------------------------------------------------*/
 
 </diff>
      <filename>includes/globals.h</filename>
    </modified>
    <modified>
      <diff>@@ -62,7 +62,7 @@
 #include &quot;sdr_structs.h&quot;		//!&lt; Structs used for interprocess communication
 #include &quot;protos.h&quot;				//!&lt; Functions &amp; thread prototypes
 #include &quot;simd.h&quot;				//!&lt; Include the SIMD functionality
-#include &quot;globals.h&quot;
+#include &quot;globals.h&quot;			//!&lt; Global objects live here
 /*----------------------------------------------------------------------------------------------*/
 
 /* Include the &quot;Threaded Objects&quot; */</diff>
      <filename>includes/includes.h</filename>
    </modified>
    <modified>
      <diff>@@ -29,6 +29,7 @@ Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1
 
 	#define IF_SAMPLE_FREQUENCY	(2048000)	//!&lt; How many CPX samples in a second
 	#define IF_FREQUENCY		(160000)	//!&lt; IF frequency
+	#define ZERO_DOPPLER_RATE	(IF_FREQUENCY)
 	#define IF_SAMPS_MS 		(2048)		//!&lt; Samples per millisecond
 
 #endif</diff>
      <filename>includes/signaldef.h</filename>
    </modified>
    <modified>
      <diff>@@ -34,12 +34,11 @@
 #include &quot;channel.h&quot;			//!&lt; Tracking channels
 #include &quot;correlator.h&quot;			//!&lt; Correlator
 #include &quot;acquisition.h&quot;		//!&lt; Acquisition
-//#include &quot;pvt.h&quot;				//!&lt; PVT solution
-//#include &quot;ephemeris.h&quot;			//!&lt; Ephemeris decode
-//#include &quot;telemetry.h&quot;			//!&lt; Ncurses telemetry
-//#include &quot;serial_telemetry.h&quot;	//!&lt; Serial/GUI telemetry
+#include &quot;pvt.h&quot;				//!&lt; PVT solution
+#include &quot;ephemeris.h&quot;			//!&lt; Ephemeris decode
+#include &quot;telemetry.h&quot;			//!&lt; Serial/GUI telemetry
 //#include &quot;commando.h&quot;			//!&lt; Command interface
-//#include &quot;sv_select.h&quot;			//!&lt; Drives acquisition/reacquisition process
+#include &quot;sv_select.h&quot;			//!&lt; Drives acquisition/reacquisition process
 //#include &quot;post_process.h&quot;		//!&lt; Run the receiver from a file
 /*----------------------------------------------------------------------------------------------*/
 
@@ -147,8 +146,8 @@ void Parse_Arguments(int32 argc, char* argv[])
 	gopt.ncurses 		= 1;
 	gopt.gui			= 0;
 	gopt.serial			= 0;
-	gopt.doppler_min 	= -MAX_DOPPLER;
-	gopt.doppler_max 	= MAX_DOPPLER;
+	gopt.doppler_min 	= -MAX_DOPPLER_STRONG;
+	gopt.doppler_max 	= MAX_DOPPLER_STRONG;
 	gopt.corr_sleep 	= 500;
 	gopt.startup		= 0;
 	gopt.usrp_internal	= 0;
@@ -321,27 +320,25 @@ int32 Object_Init(void)
 	/* Now do the hard work? */
 	pAcquisition = new Acquisition(IF_SAMPLE_FREQUENCY, IF_FREQUENCY);
 
-//	pEphemeris = new Ephemeris;
-//
+	/* Decode the almanac and ephemerides */
+	pEphemeris = new Ephemeris;
+
 	/* Get data from either the USRP or disk */
 	pFIFO = new FIFO;
 
-//	pSV_Select = new SV_Select;
+	pSV_Select = new SV_Select;
 
 	for(lcv = 0; lcv &lt; MAX_CHANNELS; lcv++)
 		pChannels[lcv] = new Channel(lcv);
 
-	pCorrelator =  new Correlator();
+	pCorrelator = new Correlator();
+
+	pTelemetry = new Telemetry();
 
-//	if(gopt.ncurses)
-//		pTelemetry = new Telemetry();
-//	else
-//		pSerial_Telemetry = new Serial_Telemetry(gopt.serial);
-//
 //	pCommando = new Commando();
-//
-//	pPVT = new PVT(gopt.startup);
-//
+
+	pPVT = new PVT();
+
 //	if(gopt.post_process)
 //		pPost_Process = new Post_Process(gopt.filename_direct);
 //
@@ -361,27 +358,41 @@ int32 Object_Init(void)
 /*----------------------------------------------------------------------------------------------*/
 
 
+
+
 /*! Initialize all pipes */
 /*----------------------------------------------------------------------------------------------*/
 int32 Pipes_Init(void)
 {
 	int32 lcv;
 
-	pipe((int *)SVS_2_ACQ_P);
-	pipe((int *)ACQ_2_SVS_P);
+	/* Create all of the pipes */
 	pipe((int *)SVS_2_COR_P);
-	pipe((int *)COR_2_PVT_P);
 	pipe((int *)CHN_2_EPH_P);
 	pipe((int *)PVT_2_TLM_P);
-	pipe((int *)EPH_2_TLM_P);
 	pipe((int *)SVS_2_TLM_P);
+	pipe((int *)EKF_2_TLM_P);
+	pipe((int *)CMD_2_TLM_P);
+	pipe((int *)ACQ_2_SVS_P);
+	pipe((int *)EKF_2_SVS_P);
 	pipe((int *)PVT_2_SVS_P);
 	pipe((int *)TLM_2_CMD_P);
-	pipe((int *)CMD_2_TLM_P);
+	pipe((int *)SVS_2_ACQ_P);
 	pipe((int *)COR_2_ACQ_P);
+	pipe((int *)ISRP_2_PVT_P);
+	pipe((int *)ISRM_2_PVT_P);
 
+	/* Setup some of the non-blocking pipes */
 	fcntl(COR_2_ACQ_P[WRITE], F_SETFL, O_NONBLOCK);
-	fcntl(SVS_2_COR_P[READ], F_SETFL, O_NONBLOCK);
+	fcntl(EKF_2_SVS_P[WRITE], F_SETFL, O_NONBLOCK);
+	fcntl(SVS_2_TLM_P[WRITE], F_SETFL, O_NONBLOCK);
+	fcntl(PVT_2_SVS_P[WRITE], F_SETFL, O_NONBLOCK);
+	fcntl(EKF_2_SVS_P[READ],  F_SETFL, O_NONBLOCK);
+	fcntl(SVS_2_COR_P[READ],  F_SETFL, O_NONBLOCK);
+	fcntl(SVS_2_TLM_P[READ],  F_SETFL, O_NONBLOCK);
+	fcntl(PVT_2_TLM_P[READ],  F_SETFL, O_NONBLOCK);
+	fcntl(SVS_2_TLM_P[READ],  F_SETFL, O_NONBLOCK);
+	fcntl(EKF_2_TLM_P[READ],  F_SETFL, O_NONBLOCK);
 
 	if(gopt.verbose)
 	{
@@ -407,43 +418,34 @@ int32 Thread_Init(void)
 	/* Start the keyboard thread to handle user input from stdio */
 	pKeyboard-&gt;Start();
 
-//	/* Startup the PVT sltn */
-//	pPVT-&gt;Start();
-//
-	/* Start up the FIFO */
-	pFIFO-&gt;Start();
-//
+	/* Startup the PVT sltn */
+	pPVT-&gt;Start();
+
 //	/* Start up the correlators */
 	pCorrelator-&gt;Start();
 
 	/* Start up the acquistion */
 	pAcquisition-&gt;Start();
 
-//	/* Start up the ephemeris */
-//	pEphemeris-&gt;Start();
-//
-//	/* Start up the command interface */
+	/* Start up the ephemeris */
+	pEphemeris-&gt;Start();
+
+	/* Start up the command interface */
 //	pCommando-&gt;Start();
-//
-//	/* Start the SV select thread */
-//	pSV_Select-&gt;Start();
-//
-//	//if(gopt.verbose)
-//	{
-//		printf(&quot;Cleared Thread Init\n&quot;);
-//		fflush(stdout);
-//	}
-//
-//	/* Last thing to do */
-//	if(gopt.ncurses)
-//		pTelemetry-&gt;Start();
-//	else
-//		pSerial_Telemetry-&gt;Start();
-//
+
+	/* Start the SV select thread */
+	pSV_Select-&gt;Start();
+
+	/* Last thing to do */
+	pTelemetry-&gt;Start();
+
 //	/* Do the post process */
 //	if(gopt.post_process)
 //		pPost_Process-&gt;Start();
 
+	/* Start up the FIFO */
+	pFIFO-&gt;Start();
+
 	return(1);
 
 }</diff>
      <filename>main/init.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -33,12 +33,12 @@
 #include &quot;channel.h&quot;			//!&lt; Tracking channels
 #include &quot;correlator.h&quot;			//!&lt; Correlator
 #include &quot;acquisition.h&quot;		//!&lt; Acquisition
-//#include &quot;pvt.h&quot;				//!&lt; PVT solution
-//#include &quot;ephemeris.h&quot;		//!&lt; Ephemeris decode
+#include &quot;pvt.h&quot;				//!&lt; PVT solution
+#include &quot;ephemeris.h&quot;			//!&lt; Ephemeris decode
 //#include &quot;telemetry.h&quot;		//!&lt; Ncurses telemetry
 //#include &quot;serial_telemetry.h&quot;	//!&lt; Serial/GUI telemetry
 //#include &quot;commando.h&quot;			//!&lt; Command interface
-//#include &quot;sv_select.h&quot;		//!&lt; Drives acquisition/reacquisition process
+#include &quot;sv_select.h&quot;			//!&lt; Drives acquisition/reacquisition process
 //#include &quot;post_process.h&quot;		//!&lt; Run the receiver from a file
 /*----------------------------------------------------------------------------------------------*/
 
@@ -53,33 +53,33 @@ void Thread_Shutdown(void)
 	/* Start the keyboard thread to handle user input from stdio */
 	pKeyboard-&gt;Stop();
 
+	/* Stop the FIFO */
+	pFIFO-&gt;Stop();
+
 	/* Stop the telemetry */
 //	if(gopt.ncurses)
 //		pTelemetry-&gt;Stop();
 //	else
 //		pSerial_Telemetry-&gt;Stop();
-//
-	/* Stop the FIFO */
-	pFIFO-&gt;Stop();
-//
-//	/* Uh-oh */
-//	pPVT-&gt;Stop();
-//
-//	/* Stop the correlator */
+
+	/* Uh-oh */
+	pPVT-&gt;Stop();
+
+	/* Stop the correlator */
 	pCorrelator-&gt;Stop();
 
 	/* Stop the acquistion */
 	pAcquisition-&gt;Stop();
-//
-//	/* Stop the ephemeris */
-//	pEphemeris-&gt;Stop();
-//
+
+	/* Stop the ephemeris */
+	pEphemeris-&gt;Stop();
+
 //	/* Stop the command interface */
 //	pCommando-&gt;Stop();
-//
-//	/* Stop the tracking */
-//	pSV_Select-&gt;Stop();
-//
+
+	/* Stop the tracking */
+	pSV_Select-&gt;Stop();
+
 //	/* Stop spoofing my named pipe yo */
 //	if(gopt.post_process)
 //		pPost_Process-&gt;Stop();
@@ -93,32 +93,35 @@ void Thread_Shutdown(void)
 void Pipes_Shutdown(void)
 {
 
-	int32 lcv;
-
-	close(SVS_2_ACQ_P[READ]);
-	close(ACQ_2_SVS_P[READ]);
 	close(SVS_2_COR_P[READ]);
-	close(COR_2_PVT_P[READ]);
 	close(CHN_2_EPH_P[READ]);
 	close(PVT_2_TLM_P[READ]);
-	close(EPH_2_TLM_P[READ]);
 	close(SVS_2_TLM_P[READ]);
+	close(EKF_2_TLM_P[READ]);
+	close(CMD_2_TLM_P[READ]);
+	close(ACQ_2_SVS_P[READ]);
+	close(EKF_2_SVS_P[READ]);
 	close(PVT_2_SVS_P[READ]);
 	close(TLM_2_CMD_P[READ]);
-	close(CMD_2_TLM_P[READ]);
+	close(SVS_2_ACQ_P[READ]);
 	close(COR_2_ACQ_P[READ]);
-	close(SVS_2_ACQ_P[WRITE]);
-	close(ACQ_2_SVS_P[WRITE]);
+	close(ISRP_2_PVT_P[READ]);
+	close(ISRM_2_PVT_P[READ]);
+
 	close(SVS_2_COR_P[WRITE]);
-	close(COR_2_PVT_P[WRITE]);
 	close(CHN_2_EPH_P[WRITE]);
 	close(PVT_2_TLM_P[WRITE]);
-	close(EPH_2_TLM_P[WRITE]);
 	close(SVS_2_TLM_P[WRITE]);
+	close(EKF_2_TLM_P[WRITE]);
+	close(CMD_2_TLM_P[WRITE]);
+	close(ACQ_2_SVS_P[WRITE]);
+	close(EKF_2_SVS_P[WRITE]);
 	close(PVT_2_SVS_P[WRITE]);
 	close(TLM_2_CMD_P[WRITE]);
-	close(CMD_2_TLM_P[WRITE]);
+	close(SVS_2_ACQ_P[WRITE]);
 	close(COR_2_ACQ_P[WRITE]);
+	close(ISRP_2_PVT_P[WRITE]);
+	close(ISRM_2_PVT_P[WRITE]);
 
 }
 /*----------------------------------------------------------------------------------------------*/
@@ -140,11 +143,11 @@ void Object_Shutdown(void)
 
 	delete pKeyboard;
 	delete pAcquisition;
-//	delete pEphemeris;
+	delete pEphemeris;
 //	delete pFIFO;
-//	delete pSV_Select;
+	delete pSV_Select;
 //	delete pTelemetry;
-//	delete pPVT;
+	delete pPVT;
 //	delete pCommando;
 
 }</diff>
      <filename>main/shutdown.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -76,7 +76,7 @@ Acquisition::Acquisition(float _fsample, float _fif):Threaded_Object(&quot;ACQTASK&quot;)
 
 	/* Acq state */
 	sv = 0;
-	state = ACQ_STRONG;
+	state = ACQ_TYPE_STRONG;
 
 	/* Grab some constants */
 	fif = _fif;
@@ -293,7 +293,7 @@ Acq_Command_S Acquisition::doAcqStrong(int32 _sv, int32 _doppmin, int32 _doppmax
 
 	result-&gt;sv = _sv;
 
-	result-&gt;type = ACQ_STRONG;
+	result-&gt;type = ACQ_TYPE_STRONG;
 
 	if(result-&gt;magnitude &gt; THRESH_STRONG)
 		result-&gt;success = 1;
@@ -428,7 +428,7 @@ Acq_Command_S Acquisition::doAcqMedium(int32 _sv, int32 _doppmin, int32 _doppmax
 
 	result-&gt;sv = _sv;
 
-	result-&gt;type = ACQ_MEDIUM;
+	result-&gt;type = ACQ_TYPE_MEDIUM;
 
 	if(result-&gt;magnitude &gt; THRESH_MEDIUM)
 		result-&gt;success = 1;
@@ -584,7 +584,7 @@ Acq_Command_S Acquisition::doAcqWeak(int32 _sv, int32 _doppmin, int32 _doppmax)
 
 	result-&gt;sv = _sv;
 
-	result-&gt;type = ACQ_WEAK;
+	result-&gt;type = ACQ_TYPE_WEAK;
 
 	if(result-&gt;magnitude &gt; THRESH_WEAK)
 		result-&gt;success = 1;
@@ -609,16 +609,16 @@ void Acquisition::Acquire()
 
 	switch(request.type)
 	{
-		case ACQ_STRONG:
-			doPrepIF(ACQ_STRONG, buff);
+		case ACQ_TYPE_STRONG:
+			doPrepIF(ACQ_TYPE_STRONG, buff);
 			doAcqStrong(request.sv, request.mindopp, request.maxdopp);
 			break;
-		case ACQ_MEDIUM:
-			doPrepIF(ACQ_MEDIUM, buff);
+		case ACQ_TYPE_MEDIUM:
+			doPrepIF(ACQ_TYPE_MEDIUM, buff);
 			doAcqMedium(request.sv, request.mindopp, request.maxdopp);
 			break;
-		case ACQ_WEAK:
-			doPrepIF(ACQ_WEAK, buff);
+		case ACQ_TYPE_WEAK:
+			doPrepIF(ACQ_TYPE_WEAK, buff);
 			doAcqWeak(request.sv, request.mindopp, request.maxdopp);
 			break;
 		default:
@@ -642,7 +642,6 @@ void Acquisition::Import()
 	int32 ms;
 	int32 ms_per_read;
 	int32 lcv;
-	ms_packet *p = NULL;
 	timespec ret;
 
 	ret.tv_sec = 0;
@@ -654,13 +653,13 @@ void Acquisition::Import()
 
 	switch(request.type)
 	{
-		case ACQ_STRONG:
+		case ACQ_TYPE_STRONG:
 			ms_per_read = 1;
 			break;
-		case ACQ_MEDIUM:
+		case ACQ_TYPE_MEDIUM:
 			ms_per_read = 10;
 			break;
-		case ACQ_WEAK:
+		case ACQ_TYPE_WEAK:
 			ms_per_read = 310;
 			break;
 		default:
@@ -677,7 +676,7 @@ void Acquisition::Import()
 		last = packet.count;
 
 		/* Read a packet in */
-		read(COR_2_ACQ_P[READ], p, sizeof(ms_packet));
+		read(COR_2_ACQ_P[READ], &amp;packet, sizeof(ms_packet));
 
 		memcpy(&amp;buff[SAMPS_MS*ms], &amp;packet.data, SAMPS_MS*sizeof(CPX));
 </diff>
      <filename>objects/acquisition.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -29,6 +29,7 @@
 #define ACQUISITION_H_
 
 #include &quot;includes.h&quot;
+#include &quot;sv_select.h&quot;
 //#include &quot;channel.h&quot;
 #include &quot;fifo.h&quot;
 #include &quot;fft.h&quot;</diff>
      <filename>objects/acquisition.h</filename>
    </modified>
    <modified>
      <diff>@@ -31,6 +31,14 @@
 #include &quot;includes.h&quot;
 #include &quot;fft.h&quot;
 
+enum Channel_State
+{
+	CHANNEL_EMPTY,			//!&lt; Channel inactive
+	CHANNEL_FINE_ACQUIRE,	//!&lt; Channel is in open loop gathering correlations for fine frequency estimate
+	CHANNEL_BIT_LOCK,		//!&lt; Channel is trying to achieve bit lock
+	CHANNEL_NORMAL			//!&lt; Channel is tracking normally (post bit lock)
+};
+
 #define FREQ_LOCK_POINTS (512)
 
 /*! \ingroup CLASSES
@@ -153,6 +161,7 @@ class Channel : public Threaded_Object
 		float getCN0(){return(cn0);};
 		float getNCO(){return(carrier_nco);};
 		int32 getActive(){return(active);};
+		int32 getState(){return(state);};
 		void setActive(int32 _active){active = _active;};
 		int32 getSV(){return(sv);};
 };</diff>
      <filename>objects/channel.h</filename>
    </modified>
    <modified>
      <diff>@@ -139,13 +139,13 @@ void Correlator::Import()
 
 		switch(result.type)
 		{
-			case ACQ_STRONG:
+			case ACQ_TYPE_STRONG:
 				aChannel[chan]-&gt;Start(result.sv, result, 1);
 				break;
-			case ACQ_MEDIUM:
+			case ACQ_TYPE_MEDIUM:
 				aChannel[chan]-&gt;Start(result.sv, result, 10);
 				break;
-			case ACQ_WEAK:
+			case ACQ_TYPE_WEAK:
 				aChannel[chan]-&gt;Start(result.sv, result, 10);
 				break;
 		}
@@ -161,9 +161,6 @@ void Correlator::Import()
 
 	packet_count++;
 
-	if((packet_count % 1000) == 0)
-		printf(&quot;Packets %d\n&quot;,packet_count);
-
 }
 /*----------------------------------------------------------------------------------------------*/
 
@@ -171,18 +168,18 @@ void Correlator::Import()
 /*----------------------------------------------------------------------------------------------*/
 void Correlator::Correlate()
 {
-	int32 lcv, leftover, rollover;
+	int32 lcv, leftover;
+	CPX *if_data;
+	NCO_Command_S *f;
 	Correlation_S *c;
 	Correlator_State_S *s;
-	NCO_Command_S *f;
-	Measurement_M *m;
-	Measurement_M *mb;
-	CPX *if_data;
 
 	IncStartTic();
 
-	//	if(packet.measurement)
-	//		TakeMeasurement();
+	if((packet_count % MEASUREMENT_INT) == 0)
+	{
+		TakeMeasurements();
+	}
 
 	for(lcv = 0; lcv &lt; MAX_CHANNELS; lcv++)
 	{
@@ -265,50 +262,78 @@ void Correlator::Correlate()
 
 
 /*----------------------------------------------------------------------------------------------*/
-void Correlator::TakeMeasurement(Correlator_State_S *s, Measurement_M *m, Measurement_M *mb)
+void Correlator::TakeMeasurements()
 {
 
 	int32 lcv, tic;
 	int32 n_dp, n_p, n_c;
+	Correlator_State_S *s;
 	Measurement_M *pmeas;
+	Measurement_M *m;
+	Measurement_M *mb;
 
-	tic = packet.measurement;
-
-	/* Step 1, copy in measurement from ICP_TICS ago */
-	memcpy(m, &amp;mb[(tic - ICP_TICS + TICS_PER_SECOND) % TICS_PER_SECOND], sizeof(Measurement_M));
-
-	/* Get carrier phase prev from 2*ICP_TICKS ago */
-	m-&gt;carrier_phase_prev = mb[(tic - 2*ICP_TICS + TICS_PER_SECOND) % TICS_PER_SECOND].carrier_phase;
+	measurement_tic++;
+	tic = measurement_tic;
 
-	/* Get current carrier phase */
-	m-&gt;carrier_phase = s-&gt;carrier_phase;
+	printf(&quot;Packet count: %d\n&quot;,packet_count);
 
-	/* Store rest of measurement in buffer to do the delay */
-	pmeas = &amp;mb[tic % (TICS_PER_SECOND)];
-	//pmeas-&gt;chan				 = chan;
-//	pmeas-&gt;code_phase 		 = s-&gt;code_phase;
-//	pmeas-&gt;code_phase_mod 	 = s-&gt;code_phase_mod;
-//	pmeas-&gt;carrier_phase 	 = s-&gt;carrier_phase;
-//	pmeas-&gt;carrier_phase_mod = s-&gt;carrier_phase_mod;
-//	pmeas-&gt;code_nco 		 = s-&gt;code_nco;
-//	pmeas-&gt;carrier_nco 		 = s-&gt;carrier_nco;
-//	pmeas-&gt;_1ms_epoch 		 = s-&gt;_1ms_epoch;
-//	pmeas-&gt;_20ms_epoch 		 = s-&gt;_20ms_epoch;
-//	pmeas-&gt;_z_count 		 = s-&gt;_z_count;
-//	pmeas-&gt;sv				 = s-&gt;sv;
-//	pmeas-&gt;count			 = packet.count;
-//	pmeas-&gt;navigate			 = s-&gt;navigate;
+	for(lcv = 0; lcv &lt; MAX_CHANNELS; lcv++)
+	{
 
-	n_dp = mb[(tic - 2*ICP_TICS + TICS_PER_SECOND) % TICS_PER_SECOND].navigate;
-	n_p = mb[(tic - ICP_TICS + TICS_PER_SECOND) % TICS_PER_SECOND].navigate;
-	n_c = mb[tic % TICS_PER_SECOND].navigate;
+		s = &amp;states[lcv];
+		m = &amp;measurements[lcv];
+		mb = measurements_buff[lcv];
 
-	/* Mark navigate only if all 3 are navigate */
-	m-&gt;navigate = n_dp &amp;&amp; n_p &amp;&amp; n_c;
+		if(s-&gt;navigate)
+		{
+			/* Step 1, copy in measurement from ICP_TICS ago */
+			memcpy(m, &amp;mb[(tic - ICP_TICS + MEASUREMENTS_PER_SECOND) % MEASUREMENTS_PER_SECOND], sizeof(Measurement_M));
+
+			/* Step 2, Get carrier phase prev from 2*ICP_TICKS ago */
+			m-&gt;frac_carrier_phase_prev = mb[(tic - 2*ICP_TICS + MEASUREMENTS_PER_SECOND) % MEASUREMENTS_PER_SECOND].frac_carrier_phase;
+			m-&gt;carrier_phase_prev = mb[(tic - 2*ICP_TICS + MEASUREMENTS_PER_SECOND) % MEASUREMENTS_PER_SECOND].carrier_phase;
+
+			/* Step 3, store rest of measurement in buffer to do the delay */
+			pmeas = &amp;mb[tic % (MEASUREMENTS_PER_SECOND)];
+			pmeas-&gt;chan				  = lcv;
+			pmeas-&gt;tic				  = tic;
+			pmeas-&gt;sv				  = s-&gt;sv;
+			pmeas-&gt;power			  = 0;
+			pmeas-&gt;antenna			  = 0;
+			pmeas-&gt;subframe_sec		  = s-&gt;_z_count;
+			pmeas-&gt;_1ms_epoch         = s-&gt;_1ms_epoch;
+			pmeas-&gt;_20ms_epoch        = s-&gt;_20ms_epoch;
+
+			/* All these values need scaled!!! */
+			pmeas-&gt;code_rate          = s-&gt;code_nco;
+			pmeas-&gt;code_phase         = s-&gt;code_phase;
+			pmeas-&gt;frac_code_phase    = s-&gt;code_phase_mod;
+			pmeas-&gt;carrier_rate		  = s-&gt;carrier_nco;
+			pmeas-&gt;frac_carrier_phase = s-&gt;carrier_phase_mod;
+			pmeas-&gt;carrier_phase      = s-&gt;carrier_phase;
+
+			/* Step 4, Get current carrier phase to finish ICP measurement */
+			m-&gt;carrier_phase          = pmeas-&gt;carrier_phase;
+			m-&gt;frac_carrier_phase     = pmeas-&gt;frac_carrier_phase;
+
+			n_dp = mb[(tic - 2*ICP_TICS + MEASUREMENTS_PER_SECOND) % MEASUREMENTS_PER_SECOND].navigate;
+			n_p = mb[(tic - ICP_TICS + MEASUREMENTS_PER_SECOND) % MEASUREMENTS_PER_SECOND].navigate;
+			n_c = mb[tic % MEASUREMENTS_PER_SECOND].navigate;
+
+			/* Mark navigate only if all 3 are navigate */
+			m-&gt;navigate = n_dp &amp;&amp; n_p &amp;&amp; n_c;
+		}
+		else
+		{
+			pmeas-&gt;navigate = false;
+			m-&gt;navigate = false;
+		}
 
-	/* Write over measurement */
-	//write(Corr_2_PVT_P[chan][WRITE], m, sizeof(Measurement_M));
+	}
 
+	/* Write the preamble, then the measurements */
+	write(ISRP_2_PVT_P[WRITE], &amp;preamble, sizeof(Preamble_2_PVT_S));
+	write(ISRM_2_PVT_P[WRITE], &amp;measurements, MAX_CHANNELS*sizeof(Measurement_M));
 }
 /*----------------------------------------------------------------------------------------------*/
 </diff>
      <filename>objects/correlator.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -29,6 +29,7 @@
 #define CORRELATOR_H_
 
 #include &quot;includes.h&quot;
+#include &quot;sv_select.h&quot;
 #include &quot;channel.h&quot;
 #include &quot;fifo.h&quot;
 
@@ -46,12 +47,14 @@ class Correlator : public Threaded_Object
 		Correlation_S  		correlations[MAX_CHANNELS];			//!&lt; Resulting correlation
 		Correlator_State_S	states[MAX_CHANNELS];				//!&lt; Correlator states
 		Measurement_M		measurements[MAX_CHANNELS];			//!&lt; Measurements to dump
-		Measurement_M		meas_buff[MAX_CHANNELS][TICS_PER_SECOND];	//!&lt; Measurements to dump
+		Measurement_M		measurements_buff[MAX_CHANNELS][MEASUREMENTS_PER_SECOND];	//!&lt; Measurements to dump
+		Preamble_2_PVT_S	preamble;
 
 		/* These variables are shared among all the channels */
 		Acq_Command_S 		result; 							//!&lt; An acquisition result has been returned!
 		ms_packet			packet;								//!&lt; 1ms of data
 		int32				packet_count;						//!&lt; Count 1ms packets
+		int32				measurement_tic;					//!&lt; Measurement tic
 		CPX 				*main_sine_table;					//!&lt; Hold the sine wipeoff table
 		CPX 				**main_sine_rows;					//!&lt; Row pointers to above
 		MIX 		 		*main_code_table;					//!&lt; Hold the PRN lookup table for all 32 SVs [2*CODE_BINS+1][2*SAMPS_MS];
@@ -75,9 +78,9 @@ class Correlator : public Threaded_Object
 		void UpdateState(Correlator_State_S *s, int32 samps);								//!&lt; Update correlator state
 		void ProcessFeedback(Correlator_State_S *s, NCO_Command_S *f);						//!&lt; Process the feedback
 		void DumpAccum(Correlator_State_S *s, Correlation_S *c, NCO_Command_S *f);			//!&lt; Dump accumulation to channel for processing
-		void TakeMeasurement(Correlator_State_S *s, Measurement_M *m, Measurement_M *mb);	//!&lt; Take some measurements
-		void Accum(Correlator_State_S *s, Correlation_S *c, CPX *data, int32 samps);	//!&lt; Do the actual accumulation
-		void SineGen(int32 samps);								//!&lt; Dynamic wipeoff generation
+		void TakeMeasurements();																//!&lt; Take some measurements
+		void Accum(Correlator_State_S *s, Correlation_S *c, CPX *data, int32 samps);		//!&lt; Do the actual accumulation
+		void SineGen(int32 samps);															//!&lt; Dynamic wipeoff generation
 };
 
 #endif /* CORRELATOR_H_ */</diff>
      <filename>objects/correlator.h</filename>
    </modified>
    <modified>
      <diff>@@ -175,7 +175,6 @@ void FIFO::Import()
 
 	IncStopTic();
 
-	/* Resample? */
 	count++;
 }
 /*----------------------------------------------------------------------------------------------*/
@@ -185,9 +184,6 @@ void FIFO::Import()
 void FIFO::Enqueue()
 {
 
-	int32 lcv;
-	ms_packet *p;
-
 	sem_wait(&amp;sem_empty);
 
 	memcpy(&amp;head-&gt;data[0], &amp;if_buff[0], SAMPS_MS*sizeof(CPX));
@@ -196,8 +192,6 @@ void FIFO::Enqueue()
 
 	sem_post(&amp;sem_full);
 
-	Unlock();
-
 }
 /*----------------------------------------------------------------------------------------------*/
 
@@ -206,9 +200,6 @@ void FIFO::Enqueue()
 void FIFO::Dequeue(ms_packet *p)
 {
 
-	if(tail-&gt;next != head)
-		tail = tail-&gt;next;
-
 	sem_wait(&amp;sem_full);
 
 	memcpy(p, tail, sizeof(ms_packet));</diff>
      <filename>objects/fifo.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -28,7 +28,7 @@
 #include &quot;threaded_object.h&quot;
 
 /*----------------------------------------------------------------------------------------------*/
-Threaded_Object::Threaded_Object(char _task_name[8])
+Threaded_Object::Threaded_Object(const char _task_name[8])
 {
 	int32 lcv;
 
@@ -221,6 +221,7 @@ void *Threaded_Object::getObjectMem()
 void Threaded_Object::IncExecTic()
 {
 	execution_tic++;
+//	printf(&quot;%s: %d\n&quot;,task_name,execution_tic);
 }
 /*----------------------------------------------------------------------------------------------*/
 </diff>
      <filename>objects/threaded_object.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -69,7 +69,7 @@ class Threaded_Object
 	public:
 
 		/* Default object methods */
-		Threaded_Object(char _task_name[8]);//!&lt; Constructor
+		Threaded_Object(const char _task_name[8]);//!&lt; Constructor
 		~Threaded_Object();		//!&lt; Destructor
 
 		void Lock();			//!&lt; Lock the object's mutex</diff>
      <filename>objects/threaded_object.h</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>Debug/accessories/subdir.mk</filename>
    </removed>
    <removed>
      <filename>Debug/acquisition/subdir.mk</filename>
    </removed>
    <removed>
      <filename>Debug/gui/subdir.mk</filename>
    </removed>
    <removed>
      <filename>Debug/main/subdir.mk</filename>
    </removed>
    <removed>
      <filename>Debug/makefile</filename>
    </removed>
    <removed>
      <filename>Debug/newgui/subdir.mk</filename>
    </removed>
    <removed>
      <filename>Debug/objects.mk</filename>
    </removed>
    <removed>
      <filename>Debug/objects/subdir.mk</filename>
    </removed>
    <removed>
      <filename>Debug/simd/subdir.mk</filename>
    </removed>
    <removed>
      <filename>Debug/sources.mk</filename>
    </removed>
    <removed>
      <filename>Debug/subdir.mk</filename>
    </removed>
    <removed>
      <filename>Debug/usrp/db_dbs_rx.d</filename>
    </removed>
    <removed>
      <filename>Debug/usrp/subdir.mk</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>f9d53812c0f200266e28c8d6317fdbece9664aa2</id>
    </parent>
  </parents>
  <author>
    <name>Gregory W Heckler</name>
    <email>gheckler@mesa3081994.(none)</email>
  </author>
  <url>http://github.com/gps-sdr/gps-sdr/commit/5b767dbe4fcaa31453614bba64912c36cc94f29a</url>
  <id>5b767dbe4fcaa31453614bba64912c36cc94f29a</id>
  <committed-date>2009-05-07T15:02:37-07:00</committed-date>
  <authored-date>2009-05-07T15:02:37-07:00</authored-date>
  <message>Near a working version.</message>
  <tree>8fbdeb738a5811e73d507aac587470c2c5f2e54c</tree>
  <committer>
    <name>Gregory W Heckler</name>
    <email>gheckler@mesa3081994.(none)</email>
  </committer>
</commit>
