1eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh/* Copyright (c) 2017, The Linux Foundation. All rights reserved.
2eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *
3eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * Redistribution and use in source and binary forms, with or without
4eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * modification, are permitted provided that the following conditions are
5eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * met:
6eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *     * Redistributions of source code must retain the above copyright
7eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *       notice, this list of conditions and the following disclaimer.
8eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *     * Redistributions in binary form must reproduce the above
9eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *       copyright notice, this list of conditions and the following
10eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *       disclaimer in the documentation and/or other materials provided
11eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *       with the distribution.
12eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *     * Neither the name of The Linux Foundation, nor the names of its
13eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *       contributors may be used to endorse or promote products derived
14eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *       from this software without specific prior written permission.
15eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *
16eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh *
28eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh */
29eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#ifndef __SYSTEM_STATUS__
30eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define __SYSTEM_STATUS__
31eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
32eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <stdint.h>
33eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <string>
34eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <vector>
35eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <platform_lib_log_util.h>
36eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <MsgTask.h>
378f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan#include <IDataItemCore.h>
38eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <IOsObserver.h>
39eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <SystemStatusOsObserver.h>
40eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
41eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <gps_extended_c.h>
42eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
43eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define GPS_MIN  (1)   //1-32
44eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define SBAS_MIN (33)
45eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define GLO_MIN  (65)  //65-88
46eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define QZSS_MIN (193) //193-197
47eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define BDS_MIN  (201) //201-237
48eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define GAL_MIN  (301) //301-336
49eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
50eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define GPS_NUM  (32)
51eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define SBAS_NUM (32)
52eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define GLO_NUM  (24)
53eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define QZSS_NUM (5)
54eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define BDS_NUM  (37)
55eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define GAL_NUM  (36)
56eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define SV_ALL_NUM  (GPS_NUM+GLO_NUM+QZSS_NUM+BDS_NUM+GAL_NUM) //=134
57eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
58eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhnamespace loc_core
59eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
60eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
61eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh/******************************************************************************
62eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh SystemStatus report data structure
63eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh******************************************************************************/
64eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusItemBase
65eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
66eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
67eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    timespec mUtcTime;     // UTC timestamp when this info was last updated
68eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    timespec mUtcReported; // UTC timestamp when this info was reported
69eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
70eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    SystemStatusItemBase() {
71eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        timeval tv;
72eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        gettimeofday(&tv, NULL);
73eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mUtcTime.tv_sec  = tv.tv_sec;
74eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mUtcTime.tv_nsec = tv.tv_usec *1000ULL;
75eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mUtcReported = mUtcTime;
76eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    };
77eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    virtual ~SystemStatusItemBase() { };
78eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    virtual void dump(void) { };
79eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
80eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
81eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusLocation : public SystemStatusItemBase
82eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
83eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
84eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool mValid;
85eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    UlpLocation mLocation;
86eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    GpsLocationExtended mLocationEx;
87eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusLocation() :
88eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mValid(false) {}
89eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusLocation(const UlpLocation& location,
90eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh                         const GpsLocationExtended& locationEx) :
91eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mValid(true),
92eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mLocation(location),
93eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mLocationEx(locationEx) { }
94eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusLocation& peer);
95eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
96eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
97eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
98eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusPQWM1;
99eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusTimeAndClock : public SystemStatusItemBase
100eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
101eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
102eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint16_t mGpsWeek;
103eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t mGpsTowMs;
104eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint8_t  mTimeValid;
105eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint8_t  mTimeSource;
106eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    int32_t  mTimeUnc;
107eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    int32_t  mClockFreqBias;
108eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    int32_t  mClockFreqBiasUnc;
109eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    int32_t  mLeapSeconds;
110eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    int32_t  mLeapSecUnc;
111eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusTimeAndClock() :
112eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGpsWeek(0),
113eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGpsTowMs(0),
114eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mTimeValid(0),
115eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mTimeSource(0),
116eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mTimeUnc(0),
117eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mClockFreqBias(0),
118eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mClockFreqBiasUnc(0),
119eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mLeapSeconds(0),
120eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mLeapSecUnc(0) {}
121eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusTimeAndClock(const SystemStatusPQWM1& nmea);
122eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusTimeAndClock& peer);
123eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
124eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
125eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
126eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusXoState : public SystemStatusItemBase
127eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
128eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
129eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint8_t  mXoState;
130eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusXoState() :
131eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mXoState(0) {}
132eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusXoState(const SystemStatusPQWM1& nmea);
133eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusXoState& peer);
134eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
135eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
136eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
137eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusRfAndParams : public SystemStatusItemBase
138eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
139eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
140eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    int32_t  mPgaGain;
141eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t mGpsBpAmpI;
142eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t mGpsBpAmpQ;
143eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t mAdcI;
144eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t mAdcQ;
145eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t mJammerGps;
146eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t mJammerGlo;
147eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t mJammerBds;
148eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t mJammerGal;
149eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    double   mAgcGps;
150eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    double   mAgcGlo;
151eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    double   mAgcBds;
152eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    double   mAgcGal;
153eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusRfAndParams() :
154eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mPgaGain(0),
155eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGpsBpAmpI(0),
156eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGpsBpAmpQ(0),
157eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mAdcI(0),
158eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mAdcQ(0),
159eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mJammerGps(0),
160eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mJammerGlo(0),
161eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mJammerBds(0),
162eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mJammerGal(0),
163eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mAgcGps(0),
164eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mAgcGlo(0),
165eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mAgcBds(0),
166eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mAgcGal(0) {}
167eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusRfAndParams(const SystemStatusPQWM1& nmea);
168eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusRfAndParams& peer);
169eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
170eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
171eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
172eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusErrRecovery : public SystemStatusItemBase
173eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
174eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
175eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t mRecErrorRecovery;
176eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusErrRecovery() :
177eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mRecErrorRecovery(0) {};
178eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusErrRecovery(const SystemStatusPQWM1& nmea);
179eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusErrRecovery& peer);
180eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
181eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
182eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
183eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusPQWP1;
184eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusInjectedPosition : public SystemStatusItemBase
185eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
186eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
187eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint8_t  mEpiValidity;
188eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    float    mEpiLat;
189eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    float    mEpiLon;
190eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    float    mEpiAlt;
191eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    float    mEpiHepe;
192eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    float    mEpiAltUnc;
193eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint8_t  mEpiSrc;
194eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusInjectedPosition() :
195eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mEpiValidity(0),
196eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mEpiLat(0),
197eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mEpiLon(0),
198eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mEpiAlt(0),
199eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mEpiHepe(0),
200eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mEpiAltUnc(0),
201eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mEpiSrc(0) {}
202eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusInjectedPosition(const SystemStatusPQWP1& nmea);
203eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusInjectedPosition& peer);
204eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
205eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
206eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
207eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusPQWP2;
208eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusBestPosition : public SystemStatusItemBase
209eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
210eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
211eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool     mValid;
212eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    float    mBestLat;
213eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    float    mBestLon;
214eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    float    mBestAlt;
215eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    float    mBestHepe;
216eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    float    mBestAltUnc;
217eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusBestPosition() :
218eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mValid(false),
219eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mBestLat(0),
220eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mBestLon(0),
221eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mBestAlt(0),
222eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mBestHepe(0),
223eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mBestAltUnc(0) {}
224eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusBestPosition(const SystemStatusPQWP2& nmea);
225eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusBestPosition& peer);
226eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
227eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
228eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
229eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusPQWP3;
230eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusXtra : public SystemStatusItemBase
231eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
232eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
233eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint8_t   mXtraValidMask;
234eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGpsXtraAge;
235eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGloXtraAge;
236eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mBdsXtraAge;
237eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGalXtraAge;
238eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mQzssXtraAge;
239eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGpsXtraValid;
240eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGloXtraValid;
241eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint64_t  mBdsXtraValid;
242eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint64_t  mGalXtraValid;
243eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint8_t   mQzssXtraValid;
244eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusXtra() :
245eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mXtraValidMask(0),
246eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGpsXtraAge(0),
247eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGloXtraAge(0),
248eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mBdsXtraAge(0),
249eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGalXtraAge(0),
250eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mQzssXtraAge(0),
251eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGpsXtraValid(0),
252eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGloXtraValid(0),
253eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mBdsXtraValid(0ULL),
254eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGalXtraValid(0ULL),
255eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mQzssXtraValid(0) {}
256eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusXtra(const SystemStatusPQWP3& nmea);
257eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusXtra& peer);
258eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
259eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
260eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
261eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusPQWP4;
262eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusEphemeris : public SystemStatusItemBase
263eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
264eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
265eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGpsEpheValid;
266eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGloEpheValid;
267eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint64_t  mBdsEpheValid;
268eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint64_t  mGalEpheValid;
269eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint8_t   mQzssEpheValid;
270eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusEphemeris() :
271eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGpsEpheValid(0),
272eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGloEpheValid(0),
273eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mBdsEpheValid(0ULL),
274eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGalEpheValid(0ULL),
275eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mQzssEpheValid(0) {}
276eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusEphemeris(const SystemStatusPQWP4& nmea);
277eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusEphemeris& peer);
278eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
279eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
280eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
281eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusPQWP5;
282eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusSvHealth : public SystemStatusItemBase
283eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
284eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
285eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGpsUnknownMask;
286eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGloUnknownMask;
287eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint64_t  mBdsUnknownMask;
288eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint64_t  mGalUnknownMask;
289eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint8_t   mQzssUnknownMask;
290eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGpsGoodMask;
291eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGloGoodMask;
292eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint64_t  mBdsGoodMask;
293eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint64_t  mGalGoodMask;
294eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint8_t   mQzssGoodMask;
295eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGpsBadMask;
296eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mGloBadMask;
297eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint64_t  mBdsBadMask;
298eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint64_t  mGalBadMask;
299eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint8_t   mQzssBadMask;
300eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusSvHealth() :
301eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGpsUnknownMask(0),
302eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGloUnknownMask(0),
303eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mBdsUnknownMask(0ULL),
304eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGalUnknownMask(0ULL),
305eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mQzssUnknownMask(0),
306eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGpsGoodMask(0),
307eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGloGoodMask(0),
308eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mBdsGoodMask(0ULL),
309eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGalGoodMask(0ULL),
310eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mQzssGoodMask(0),
311eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGpsBadMask(0),
312eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGloBadMask(0),
313eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mBdsBadMask(0ULL),
314eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mGalBadMask(0ULL),
315eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mQzssBadMask(0) {}
316eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusSvHealth(const SystemStatusPQWP5& nmea);
317eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusSvHealth& peer);
318eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
319eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
320eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
321eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusPQWP6;
322eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusPdr : public SystemStatusItemBase
323eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
324eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
325eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mFixInfoMask;
326eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusPdr() :
327eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mFixInfoMask(0) {}
328eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusPdr(const SystemStatusPQWP6& nmea);
329eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusPdr& peer);
330eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
331eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
332eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
333eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusPQWP7;
334eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhstruct SystemStatusNav
335eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
336eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    GnssEphemerisType   mType;
337eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    GnssEphemerisSource mSource;
338eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    int32_t             mAgeSec;
339eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
340eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
341eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusNavData : public SystemStatusItemBase
342eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
343eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
344eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    SystemStatusNav mNav[SV_ALL_NUM];
345eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusNavData() {
346eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        for (uint32_t i=0; i<SV_ALL_NUM; i++) {
347eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh            mNav[i].mType = GNSS_EPH_TYPE_UNKNOWN;
348eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh            mNav[i].mSource = GNSS_EPH_SOURCE_UNKNOWN;
349eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh            mNav[i].mAgeSec = 0;
350eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        }
351eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    }
352eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusNavData(const SystemStatusPQWP7& nmea);
353eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusNavData& peer);
354eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
355eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
356eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
357eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusPQWS1;
358eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusPositionFailure : public SystemStatusItemBase
359eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
360eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
361eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mFixInfoMask;
362eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    uint32_t  mHepeLimit;
363eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusPositionFailure() :
364eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mFixInfoMask(0),
365eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh        mHepeLimit(0) {}
366eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline SystemStatusPositionFailure(const SystemStatusPQWS1& nmea);
367eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool equals(SystemStatusPositionFailure& peer);
368eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    void dump(void);
369eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
370eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
371eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh/******************************************************************************
3728f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan SystemStatus report data structure - from DataItem observer
3738f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan******************************************************************************/
3748f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharanclass SystemStatusGpsState : public SystemStatusItemBase, public IDataItemCore
3758f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan{
3768f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharanpublic:
3778f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline SystemStatusGpsState() :
3788f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mEnabled(false) {}
3798f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline SystemStatusGpsState(bool enabled) :
3808f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mEnabled(enabled) {}
3818f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
3828f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    bool mEnabled;
3838f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
3848f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline bool equals(SystemStatusGpsState& peer) {
3858f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        return (mEnabled == peer.mEnabled);
3868f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
3878f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline void dump(void) {
3888f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        LOC_LOGD("GpsState: state=%u", mEnabled);
3898f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
3908f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline DataItemId getId() {
3918f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        return GPSSTATE_DATA_ITEM_ID;
3928f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
3938f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline void stringify(string& valueStr) {
3948f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        valueStr.clear();
3958f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        valueStr += "GpsState: enabled=";
3968f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        valueStr += to_string(mEnabled);
3978f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
3988f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline int32_t copy(IDataItemCore* src, bool* dataItemCopied = nullptr) {
3998f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        SystemStatusGpsState* gpsstate = static_cast<SystemStatusGpsState*>(src);
4008f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        mEnabled = gpsstate->mEnabled;
4018f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        if (dataItemCopied) {
4028f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            *dataItemCopied = true;
4038f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        }
4048f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        return 1;
4058f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
4068f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan};
4078f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
4088f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharanclass SystemStatusNetworkInfo : public SystemStatusItemBase, public IDataItemCore
4098f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan{
4108f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharanpublic:
4118f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline SystemStatusNetworkInfo() :
4128f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mType(0),
4138f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mTypeName(""),
4148f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mSubTypeName(""),
4158f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mAvailable(false),
4168f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mConnected(false),
4178f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mRoaming(false) {}
4188f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline SystemStatusNetworkInfo(
4198f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            uint32_t type,
4208f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            std::string typeName,
4218f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            std::string subTypeName,
4228f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            bool available,
4238f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            bool connected,
4248f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            bool roaming) :
4258f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mType(type),
4268f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mTypeName(typeName),
4278f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mSubTypeName(subTypeName),
4288f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mAvailable(available),
4298f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mConnected(connected),
4308f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mRoaming(roaming) {}
4318f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
4328f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    uint32_t mType;
4338f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    std::string mTypeName;
4348f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    std::string mSubTypeName;
4358f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    bool mAvailable;
4368f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    bool mConnected;
4378f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    bool mRoaming;
4388f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
4398f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline bool equals(SystemStatusNetworkInfo& peer) {
4408f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        if ((mType != peer.mType) ||
4418f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            (mTypeName != peer.mTypeName) ||
4428f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            (mSubTypeName != peer.mSubTypeName) ||
4438f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            (mAvailable != peer.mAvailable) ||
4448f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            (mConnected != peer.mConnected) ||
4458f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            (mRoaming != peer.mRoaming)) {
4468f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            return false;
4478f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        }
4488f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        return true;
4498f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
4508f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline void dump(void) {
4518f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        LOC_LOGD("NetworkInfo: type=%u connected=%u", mType, mConnected);
4528f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
4538f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline DataItemId getId() {
4548f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        return NETWORKINFO_DATA_ITEM_ID;
4558f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
4568f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline void stringify(string& /*valueStr*/) { }
4578f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline int32_t copy(IDataItemCore* src, bool* dataItemCopied = nullptr) {
4588f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        SystemStatusNetworkInfo* networkinfo = static_cast<SystemStatusNetworkInfo*>(src);
4598f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        mType = networkinfo->mType;
4608f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        mTypeName = networkinfo->mTypeName;
4618f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        mSubTypeName = networkinfo->mSubTypeName;
4628f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        mAvailable = networkinfo->mAvailable;
4638f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        mConnected = networkinfo->mConnected;
4648f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        mRoaming = networkinfo->mRoaming;
4658f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        if (dataItemCopied) {
4668f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            *dataItemCopied = true;
4678f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        }
4688f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        return 1;
4698f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
4708f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan};
4718f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
4728f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharanclass SystemStatusTac : public SystemStatusItemBase, public IDataItemCore
4738f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan{
4748f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharanpublic:
4758f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline SystemStatusTac() :
4768f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mValue("") {}
4778f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline SystemStatusTac(std::string value) :
4788f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mValue(value) {}
4798f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
4808f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    std::string mValue;
4818f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
4828f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline bool equals(SystemStatusTac& peer) {
4838f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        return (mValue == peer.mValue);
4848f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
4858f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline void dump(void) {
4868f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        LOC_LOGD("Tac: value=%s", mValue.c_str());
4878f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
4888f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline DataItemId getId() {
4898f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        return TAC_DATA_ITEM_ID;
4908f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
4918f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline void stringify(string& /*valueStr*/) { }
4928f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline int32_t copy(IDataItemCore* src, bool* dataItemCopied = nullptr) {
4938f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        SystemStatusTac* tac = static_cast<SystemStatusTac*>(src);
4948f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        mValue = tac->mValue;
4958f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        if (dataItemCopied) {
4968f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            *dataItemCopied = true;
4978f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        }
4988f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        return 1;
4998f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
5008f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan};
5018f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
5028f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharanclass SystemStatusMccMnc : public SystemStatusItemBase, public IDataItemCore
5038f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan{
5048f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharanpublic:
5058f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline SystemStatusMccMnc() :
5068f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mValue("") {}
5078f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline SystemStatusMccMnc(std::string value) :
5088f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            mValue(value) {}
5098f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
5108f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    std::string mValue;
5118f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
5128f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline bool equals(SystemStatusMccMnc& peer) {
5138f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        return (mValue == peer.mValue);
5148f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
5158f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline void dump(void) {
5168f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        LOC_LOGD("TacMccMnc value=%s", mValue.c_str());
5178f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
5188f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline DataItemId getId() {
5198f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        return MCCMNC_DATA_ITEM_ID;
5208f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
5218f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline void stringify(string& /*valueStr*/) { }
5228f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    inline int32_t copy(IDataItemCore* src, bool* dataItemCopied = nullptr) {
5238f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        SystemStatusMccMnc* mccmnc = static_cast<SystemStatusMccMnc*>(src);
5248f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        mValue = mccmnc->mValue;
5258f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        if (dataItemCopied) {
5268f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan            *dataItemCopied = true;
5278f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        }
5288f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan        return 1;
5298f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    }
5308f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan};
5318f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
5328f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan/******************************************************************************
533eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh SystemStatusReports
534eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh******************************************************************************/
535eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatusReports
536eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
537eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
5388f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    // from QMI_LOC indication
539eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusLocation>         mLocation;
540eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
5418f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    // from ME debug NMEA
542eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusTimeAndClock>     mTimeAndClock;
543eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusXoState>          mXoState;
544eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusRfAndParams>      mRfAndParams;
545eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusErrRecovery>      mErrRecovery;
546eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
5478f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    // from PE debug NMEA
548eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusInjectedPosition> mInjectedPosition;
549eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusBestPosition>     mBestPosition;
550eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusXtra>             mXtra;
551eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusEphemeris>        mEphemeris;
552eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusSvHealth>         mSvHealth;
553eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusPdr>              mPdr;
554eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusNavData>          mNavData;
555eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
5568f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    // from SM debug NMEA
557eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    std::vector<SystemStatusPositionFailure>  mPositionFailure;
5588f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
5598f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    // from dataitems observer
5608f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    std::vector<SystemStatusGpsState>         mGpsState;
5618f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    std::vector<SystemStatusNetworkInfo>      mNetworkInfo;
5628f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    std::vector<SystemStatusTac>              mTac;
5638f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    std::vector<SystemStatusMccMnc>           mMccMnc;
564eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
565eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
566eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh/******************************************************************************
567eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh SystemStatus
568eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh******************************************************************************/
569eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass SystemStatus
570eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh{
571eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhprivate:
572eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static SystemStatus                       *mInstance;
573eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    SystemStatusOsObserver                    mSysStatusObsvr;
574eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    // ctor
575eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    SystemStatus(const MsgTask* msgTask);
576eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    // dtor
577eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    inline ~SystemStatus() {}
578eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
579eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    // Data members
580eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static pthread_mutex_t                    mMutexSystemStatus;
581eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
582eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxLocation = 5;
583eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
584eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxTimeAndClock = 5;
585eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxXoState = 5;
586eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxRfAndParams = 5;
587eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxErrRecovery = 5;
588eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
589eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxInjectedPosition = 5;
590eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxBestPosition = 5;
591eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxXtra = 5;
592eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxEphemeris = 5;
593eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxSvHealth = 5;
594eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxPdr = 5;
595eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxNavData = 5;
596eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
597eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static const uint32_t                     maxPositionFailure = 5;
598eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
5998f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    static const uint32_t                     maxGpsState = 5;
6008f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    static const uint32_t                     maxNetworkInfo = 5;
6018f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    static const uint32_t                     maxTac = 5;
6028f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    static const uint32_t                     maxMccMnc = 5;
6038f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
604eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    SystemStatusReports mCache;
6058f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    bool mConnected;
606eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
607eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setLocation(const UlpLocation& location);
608eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
609eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setTimeAndCLock(const SystemStatusPQWM1& nmea);
610eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setXoState(const SystemStatusPQWM1& nmea);
611eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setRfAndParams(const SystemStatusPQWM1& nmea);
612eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setErrRecovery(const SystemStatusPQWM1& nmea);
613eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
614eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setInjectedPosition(const SystemStatusPQWP1& nmea);
615eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setBestPosition(const SystemStatusPQWP2& nmea);
616eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setXtra(const SystemStatusPQWP3& nmea);
617eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setEphemeris(const SystemStatusPQWP4& nmea);
618eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setSvHealth(const SystemStatusPQWP5& nmea);
619eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setPdr(const SystemStatusPQWP6& nmea);
620eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setNavData(const SystemStatusPQWP7& nmea);
621eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
622eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setPositionFailure(const SystemStatusPQWS1& nmea);
623eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
6248f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    bool setNetworkInfo(IDataItemCore* dataitem);
6258f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan
626eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic:
627eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    // Static methods
628eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static SystemStatus* getInstance(const MsgTask* msgTask);
629eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    static void destroyInstance();
630eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    IOsObserver* getOsObserver();
631eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
632eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    // Helpers
633eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool eventPosition(const UlpLocation& location,const GpsLocationExtended& locationEx);
6348f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    bool eventDataItemNotify(IDataItemCore* dataitem);
635eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setNmeaString(const char *data, uint32_t len);
636eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool getReport(SystemStatusReports& reports, bool isLatestonly = false) const;
637eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh    bool setDefaultReport(void);
6388f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan    bool eventConnectionStatus(bool connected, uint8_t type);
639eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh};
640eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
641eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} // namespace loc_core
642eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
643eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#endif //__SYSTEM_STATUS__
644eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh
645