navfilterex-pseudo-container.cpp
Go to the documentation of this file.
1 //==============================================================================
2 //
3 // This file is part of GNSSTk, the ARL:UT GNSS Toolkit.
4 //
5 // The GNSSTk is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU Lesser General Public License as published
7 // by the Free Software Foundation; either version 3.0 of the License, or
8 // any later version.
9 //
10 // The GNSSTk is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with GNSSTk; if not, write to the Free Software Foundation,
17 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18 //
19 // This software was developed by Applied Research Laboratories at the
20 // University of Texas at Austin.
21 // Copyright 2004-2022, The Board of Regents of The University of Texas System
22 //
23 //==============================================================================
24 
25 //==============================================================================
26 //
27 // This software was developed by Applied Research Laboratories at the
28 // University of Texas at Austin, under contract to an agency or agencies
29 // within the U.S. Department of Defense. The U.S. Government retains all
30 // rights to use, duplicate, distribute, disclose, or release this software.
31 //
32 // Pursuant to DoD Directive 523024
33 //
34 // DISTRIBUTION STATEMENT A: This software has been approved for public
35 // release, distribution is unlimited.
36 //
37 //==============================================================================
38 
43 class NavSubframe
45 {
46 public:
49  std::vector<uint32_t> subframe;
50 };
51 
53 typedef std::list<NavSubframe*> NavSubframeList;
54 
57 {
58  NavSubframe *nsf;
59  while (sameEpoch)
60  {
61  nsf = new NavSubframe();
62  strm >> *nsf;
63  if (strm)
64  nsl.push_back(nsf);
65  }
66 }
67 
68 void filterEX()
69 {
70  // Filter manager, where the work is done
72  // Individual filters being applied
73  gnsstk::LNavCookFilter filtCook;
74  gnsstk::LNavParityFilter filtParity;
75  // Data being passed to the filter
76  gnsstk::LNavFilterData navFiltData;
77  gnsstk::NavFilter::NavMsgList::const_iterator nmli;
78  // application's nav storage
79  NavSubframeList nsl;
80  NavSubframeList::iterator nsli;
81 
82  // Tell the manager what filters to use
83  mgr.addFilter(&filtCook);
84  mgr.addFilter(&filtParity);
85 
86  while (strm)
87  {
88  readNavEpoch(nsl);
89 
90  // process each subframe read from the input stream
91  for (nsli = nsl.begin(); nsli != nsl.end(); nsli++)
92  {
93  NavSubframe *nsf = *nsli;
94  // Point the filter data to the LNAV message
95  navFiltData.sf = &nsf->subframe[1];
96 
97  // validate the subframe
98  gnsstk::NavFilter::NavMsgList l = mgr.validate(&navFiltData);
99 
100  // process the results
101  for (nmli = l.begin(); nmli != l.end(); nmli++)
102  {
104  dynamic_cast<gnsstk::LNavFilterData*>(*nmli);
105  // do something with fd (nav message that passed the filters)
106  }
107  // Because the filters are depth 1, we can immediately
108  // free the application data storage. We set the value in
109  // the list to NULL as "good practice". Erase the list at
110  // the end so that we don't end up doing any weird
111  // unnecessary memory management internal to the list
112  // implementation.
113  delete nsf;
114  *nsli = NULL;
115  }
116  nsl.clear();
117  }
118 
119  // Finalize the filters. Probably not necessary when using only
120  // depth 1 filters, but good practice in any case.
122 
123  // process the results
124  for (nmli = l.begin(); nmli != l.end(); nmli++)
125  {
127  dynamic_cast<gnsstk::LNavFilterData*>(*nmli);
128  // do something with fd (nav message that passed the filters)
129  }
130 }
NavSubframe::subframe
std::vector< uint32_t > subframe
Definition: navfilterex-pseudo-container.cpp:49
filterEX
void filterEX()
Definition: navfilterex-pseudo-container.cpp:68
gnsstk::LNavParityFilter
Definition: LNavParityFilter.hpp:53
gnsstk::LNavCookFilter
Definition: LNavCookFilter.hpp:54
gnsstk::NavFilterMgr::finalize
virtual NavFilter::NavMsgList finalize()
Definition: NavFilterMgr.cpp:78
NULL
#define NULL
Definition: getopt1.c:64
gnsstk::NavFilterMgr
Definition: NavFilterMgr.hpp:170
gnsstk::NavFilterMgr::addFilter
void addFilter(NavFilter *filt)
Definition: NavFilterMgr.cpp:50
readNavEpoch
void readNavEpoch(NavSubframeList &nsl)
function to store a single epoch's worth of NavSubframe data
Definition: navfilterex-pseudo-container.cpp:56
NavSubframe
application's navigation message storage class
Definition: navfilterex-pseudo-container.cpp:44
gnsstk::NavFilterMgr::validate
NavFilter::NavMsgList validate(NavFilterKey *msgBits)
Definition: NavFilterMgr.cpp:57
NavSubframeList
std::list< NavSubframe * > NavSubframeList
use pointers because performance
Definition: navfilterex-pseudo-container.cpp:53
gnsstk::LNavFilterData
Definition: LNavFilterData.hpp:52
gnsstk::NavFilter::NavMsgList
std::list< NavFilterKey * > NavMsgList
Definition: NavFilter.hpp:58
gnsstk::LNavFilterData::sf
uint32_t * sf
Definition: LNavFilterData.hpp:68


gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:40