1 #ifndef TEZZERETAPP_HPP_
2 #define TEZZERETAPP_HPP_
4 #include <GpsStrings.hpp>
6 #if (EMULATE_MFAM_SENSOR == GEO_TRUE) || (MFAM_MODULE == GEO_TRUE)
7 #include <GmMFAMDataSource.hpp>
9 #include <GmPpsEvent.hpp>
10 #include <GmAppEvent.hpp>
11 #include "GmTcpip.hpp"
13 #include "Analogs.hpp"
14 #include <GmLoggingApp.hpp>
16 #if GEO_LEGACY_MAG_SERIAL_OUT == GEO_TRUE
17 #include "GmUartOut.hpp"
19 #include <GmRingBuffer.hpp>
20 #include <GmManagedRingBuffer.hpp>
21 #include <GmCm221.hpp>
23 #if (EMULATE_MFAM_SENSOR == GEO_TRUE) || (MFAM_MODULE == GEO_TRUE)
24 #include <MfamMonitor.hpp>
27 #if EMULATE_862_SENSOR == GEO_TRUE
28 #include <Gm862Emulator.hpp>
31 #if GEO_MFAM_FILTER == GEO_TRUE || GEO_MFAM_FULL_FILTER == GEO_TRUE || GEO_MFAM_FREQUENCY_MEASURE == GEO_TRUE
32 #include <GmMfamFilter.hpp>
35 #if UNMIRRORED_STORAGE == GEO_TRUE
36 #include <GmCharRingBufferStorage.hpp>
38 #if GEO_SDCARD == GEO_TRUE
39 #include <GmTivaSDStorage.hpp>
43 #if GEO_OFFBOARD_I2C == GEO_TRUE
44 #include <ti/drivers/I2C.h>
49 #define GM_TZC_NEW_SURVEY ((UInt32)(GM_TZCC_VALID_WHILE_NOT_LOGGING | GM_TZCC_DB_CHANGE | (GM_TZ_MINIMUM_APPLICATION_COMMAND+1)))
50 #define GM_TZC_SET_MAG_SAMPLE_RATE ((UInt32)(GM_TZCC_VALID_WHILE_NOT_LOGGING | GM_TZCC_DB_CHANGE | (GM_TZ_MINIMUM_APPLICATION_COMMAND+2)))
55 #define THIS_APP_SERVICE_TOPIC 0
56 #define THIS_APP_MAG_TEXT_DATA_TOPIC 1
57 #define THIS_APP_MAG_BINARY_DATA_TOPIC 2
58 #define THIS_APP_PPS_TEXT_DATA_TOPIC 3
59 #define THIS_APP_PPS_BINARY_DATA_TOPIC 4
60 #define THIS_APP_APPEVENT_TEXT_DATA_TOPIC 5
61 #define THIS_APP_APPEVENT_BINARY_DATA_TOPIC 6
62 #define THIS_APP_MAG_FRAME_TOPIC 7
63 #define THIS_APP_GPS_TEXT_DATA_TOPIC 8
64 #define THIS_APP_GPS_BINARY_DATA_TOPIC 9
65 #define THIS_APP_PPS_SYNCH_TEXT_DATA_TOPIC 10
66 #define THIS_APP_PPS_SYNCH_BINARY_DATA_TOPIC 11
67 #define MAGARROW_ARRAY_DATA_TOPIC (12)
68 #define THIS_APP_864_BINARY_MAG_01_TOPIC 13
69 #define THIS_APP_864_BINARY_MAG_01_WITH_SENTENCE_TOPIC 14
70 #define THIS_APP_APPEVENT_TYPED_BINARY_DATA_TOPIC 15
71 #define THIS_APP_LOKI_FILTERED_TOPIC 16
72 #define THIS_APP_864_MAG_TIMESTAMPED_TOPIC 17
73 #define THIS_APP_GPS_TIMESTAMPED_DATA_TOPIC 18
76 #if USE_MAG_ARROW_HARDWARE == GEO_TRUE
77 typedef enum MagArrowAppState {
78 MAG_ARROW_STATE_STARTUP,
79 MAG_ARROW_STATE_NORMAL,
83 typedef enum MagArrowStartupState {
84 MAG_ARROW_STARTUP_STATE_UNKNOWN,
85 MAG_ARROW_STARTUP_STATE_MFAM,
86 MAG_ARROW_STARTUP_STATE_GPS,
87 MAG_ARROW_STARTUP_STATE_PPS_LOCKING,
88 MAG_ARROW_STARTUP_STATE_STARTUP_COMPLETE
89 } MagArrowStartupState;
91 typedef enum MagArrowFaultType {
92 MAG_ARROW_FAULT_NOTHING,
93 MAG_ARROW_FAULT_MFAM_FAILURE,
94 MAG_ARROW_FAULT_PPS_MISSING,
95 MAG_ARROW_FAULT_GPS_DILUTION_OF_PRECISION_TOO_HIGH,
96 MAG_ARROW_FAULT_PRIMARY_STORAGE_ERROR,
97 MAG_ARROW_FAULT_PRIMARY_STORAGE_TOO_SLOW,
98 MAG_ARROW_FAULT_FLASH_ERROR,
99 MAG_ARROW_FAULT_BATTERY_LOW,
100 MAG_ARROW_FAULT_BATTERY_TOO_LOW_WIFI_ONLY,
104 bool MagArrowGPSOnOffStatus;
105 bool MagArrowMFAMOnOffStatus;
106 bool MagArrowWifiOnOffStatus;
107 bool MagArrowUSBOnOffStatus;
120 virtual int LoadConfigsFromFile (
const char *szConfigFileName);
121 int LoadAppConfigsFromFile (
const char *fileName);
124 #if GEO_WIFI_STATION_MODE == GEO_TRUE
125 char m_wifiAccessPointPassKey[50];
126 char m_wifiAccessPointSsid[50];
128 #if GEO_MQTT_CONNECT_TO_BROKER == GEO_TRUE
132 #if GEO_LOAD_MFAM_SAMPLE_RATE_FROM_CONFIGS == GEO_TRUE
133 int m_mfamSampleRate;
136 #if GEO_DYNAMIC_CFG_RECORDS_PER_FILE == GEO_TRUE
140 #if GEO_ACCESS_POINT_PASSWORD == GEO_TRUE
141 static char s_wifiStationPassword[11];
143 #if GEO_ACCESS_POINT_CHANNEL == GEO_TRUE
144 static int s_wifiStationChannel;
145 static Bool s_wifiRotateChannels;
148 #if LOKI_TWEETER == GEO_TRUE
149 uint32_t m_audioVolume;
151 #if GEO_DYNAMIC_WIFI_SSID == GEO_TRUE
152 static char s_wifiSsid[11];
155 #if GEO_CONFIG_STATIC_IP == GEO_TRUE
156 static char s_staticIpAddress[20];
158 #if GEO_DEVICE_NICKNAME == GEO_TRUE
159 static char s_staticDeviceNickname[20];
172 #if USE_MAG_ARROW_HARDWARE == GEO_TRUE
179 static void GetApplicationState();
180 static MagArrowAppState m_AppState;
181 static bool m_WifiConnected;
182 static MagArrowStartupState m_StartupState;
183 static MagArrowFaultType m_FaultSource;
209 #if (EMULATE_MFAM_SENSOR == GEO_TRUE) || (MFAM_MODULE == GEO_TRUE)
210 UInt16 MfamSystemStatus ();
224 #if GEO_CONFIGPROVISION_EEPROM == GEO_TRUE
231 #if (EMULATE_MFAM_SENSOR == GEO_TRUE) || (MFAM_MODULE == GEO_TRUE)
234 #if GEO_MFAM_FREQUENCY_MEASURE == GEO_TRUE
241 #if GEO_NET_NDK == GEO_TRUE
251 #if GEO_DATA_STORAGE == GEO_TRUE
252 UInt32 CreateNewSurvey (
char *szName,
253 char *pcAnswerBuffer);
254 UInt32 CreateNewAcquisition (
char *szInfo);
255 UInt32 SetActiveAcquisition (
char *pcAcquisitionName);
256 #if GEO_WATCHDOG == GEO_TRUE
257 static void WatchdogReset ();
258 static void WatchdogInit();
259 static void watchdogCallback(uintptr_t );
263 #if GEO_NET_NDK == GEO_TRUE
264 int mNetworkReadyCountdown;
266 #if GEO_MFAM_FULL_FILTER == GEO_TRUE
267 static ti_sysbios_knl_Semaphore_Handle sDecimationSemaphore;
269 int SetDecimation (
int newTargetSampleRate);
305 #if GEO_NET_NDK == GEO_TRUE
311 void EthernetShutdown ();
320 #if (GEO_WRITE_MFAM_BLOCKS == GEO_TRUE)
322 void EmptyMfamCache ();
323 Bool MfamCacheIsFull ();
324 int WriteMfamCache ();
339 #if GEO_MFAM_FULL_FILTER == GEO_TRUE
341 *mMfamStageTwoFilter;
343 int mDecimatedSampleRate;
346 void MainShutdown ();
350 #if GEO_864_PPS_LOCK == GEO_TRUE
351 static void InitPPSLock();
352 int SetSamplePeriod (
int newSampleRateMilliseconds);
356 #if (EMULATE_MFAM_SENSOR == GEO_TRUE) || (MFAM_MODULE == GEO_TRUE)
360 #if GEO_TCP_STREAMING == GEO_TRUE
364 void LoadAutoStart ();
365 #if ((GEO_APP_G864 == GEO_TRUE)||(GEO_APP_SERENITY == GEO_TRUE)) && (BOARD_UNIFIED_03 == GEO_TRUE)
366 void InitG864ResetButton ();
378 UInt8 *pui8AddedInfo,
379 UInt32 uiAddedInfoSize);
408 static double OnMfamPps (
unsigned int index);
411 #if GEO_SERIAL_CESIUM_MAG == GEO_TRUE
412 #if GEO_CM221_MAG_DATA == GEO_TRUE
417 #
if GEO_MQTT == GEO_TRUE
421 #
if GEO_TCP_STREAMING == GEO_TRUE
430 #if EMULATE_862_SENSOR == GEO_TRUE
431 void Start862Emulator ();
432 #if GEO_CM221_MAG_DATA == GEO_TRUE
435 #
if GEO_MQTT == GEO_TRUE
439 #
if GEO_TCP_STREAMING == GEO_TRUE
446 #if GEO_PPS_EVENTS == GEO_TRUE
449 #
if GEO_MQTT == GEO_TRUE
456 #if (EMULATE_MFAM_SENSOR == GEO_TRUE) || (MFAM_MODULE == GEO_TRUE)
457 #if GEO_TCP_STREAMING == GEO_FALSE
459 #
if GEO_MQTT == GEO_TRUE
463 #
if GEO_TCP_STREAMING == GEO_TRUE
471 volatile bool mStartedCache;
472 volatile int mPacketsInCache;
473 uint64_t mFirstIndexInCache;
476 #if GEO_STREAMING_BLOCK == GEO_TRUE
480 #if (GEO_TCP_STREAMING == GEO_TRUE) && (GEO_MFAM_FULL_FILTER == GEO_TRUE)
486 int LogAppEvent (IndexedAppEvent *piaeEvent,
490 #if GPS_ENABLED == GEO_TRUE
495 #
if GEO_SDCARD == GEO_TRUE
498 #
if GEO_MQTT == GEO_TRUE
503 #
if GEO_MQTT == GEO_TRUE
508 #if GEO_MQTT == GEO_TRUE
517 UInt32 NotifyAllNewLoggingMode (UInt32 iNewLoggingMode);
518 UInt32 ChangeLoggingMode (UInt32 iNewLoggingMode);
524 #if GEO_APP_MAG_ARROW == GEO_TRUE
525 UInt32 SetupMagArrowLoggingModes ();
526 #elif GEO_APP_PACTRON_DEV_KIT == GEO_TRUE
527 UInt32 SetupDevKitLoggingModes ();
528 #elif GEO_APP_G864 == GEO_TRUE
529 UInt32 SetupG864LoggingModes ();
530 #elif GEO_APP_MAGEX == GEO_TRUE
531 UInt32 SetupLokiLoggingModes ();
532 #elif GEO_APP_TRANQUILITY == GEO_TRUE
533 UInt32 SetupTranquilityLoggingModes ();
534 #elif GEO_APP_SERENITY == GEO_TRUE
535 UInt32 SetupSerenityLoggingModes ();
536 #elif GEO_APP_INTREPID == GEO_TRUE
537 UInt32 SetupIntrepidLoggingModes ();
538 #elif GEO_APP_EAGLE == GEO_TRUE
539 UInt32 SetupEagleLoggingModes ();
540 #elif GEO_APP_AQUARIUS == GEO_TRUE
541 UInt32 SetupAquariusLoggingModes ();
542 #elif GEO_APP_KLOKI == GEO_TRUE
543 UInt32 SetupKlokiLoggingModes ();
544 #elif GEO_APP_G864_MFAM_FILTERED == GEO_TRUE
545 UInt32 SetupG864MfamFilteredLoggingModes ();
546 #elif GEO_APP_TCP_STREAMER == GEO_TRUE
547 Uint32 SetupTCPStreamerLoggingModes ();
548 #elif GEO_APP_PACTRON_DEV_KIT_STREAMER == GEO_TRUE
549 Uint32 SetupPactronDevKitStreamerLoggingModes ();
550 #elif GEO_APP_DOLPHIN == GEO_TRUE
551 Uint32 SetupDolphinLoggingModes ();
552 #elif GEO_APP_EXAMPLE == GEO_TRUE
553 Uint32 SetupExampleLoggingModes ();
555 UInt32 SetupLoggingModes ();
558 #if MFAM_FRAMES == GEO_TRUE
559 Int32 m_iMachineIndex,
566 #if (EMULATE_MFAM_SENSOR == GEO_TRUE) || (MFAM_MODULE == GEO_TRUE)
570 #if GEO_SERIAL_CESIUM_MAG == GEO_TRUE
574 #if EMULATE_862_SENSOR == GEO_TRUE
579 #if GEO_TCP_STREAMING == GEO_TRUE
584 static char acWebInfoStr[200];
586 #if LOKI_PICKLE_SWITCH == GEO_TRUE
587 bool mHasDestination;
588 double mDestinationLatitude;
589 double mDestinationLongitude;
590 int mDestinationIndex;
593 #if GEO_OFFBOARD_I2C == GEO_TRUE
594 I2C_Handle mOffboardI2cHandle;
595 I2C_Params mOffboardI2cParams;
Definition: GmAppCfg.hpp:29
Definition: GmMqttCfg.hpp:17
Definition: TezzeretApp.hpp:176
Definition: TezzeretApp.hpp:167
Definition: TezzeretApp.hpp:115
Definition: GmTivaSDStorage.hpp:40
Definition: GmUartOut.hpp:24
Definition: Gm862Emulator.hpp:23
Definition: GmCm221.hpp:63
The sensor class for the traditional cesium mags used by the G-864.
Definition: GmCm221.hpp:116
Definition: GmLoggingApp.hpp:89
Direct base class for Tezzeret applications. Includes the main event queue, general command logic,...
Definition: GmLoggingApp.hpp:122
Abstract class - the interface - to the MFAM sensor. This abstract layer was created in order to acco...
Definition: GmMFAMDataSource.hpp:36
Definition: GmMfamFilter.hpp:161
Definition: GmMfamFilter.hpp:72
Definition: GmMQTT.hpp:36
Definition: GmTcpip.hpp:40
An HTTP server is an integral part of the framework, both to display UI in a browser and to provide a...
Definition: GmWebServer.hpp:83
Definition: GmMfamFilter.hpp:142
Definition: MfamMonitor.hpp:19
The top-level application object. It is a singleton, and a Tezzeret application runs in this object's...
Definition: TezzeretApp.hpp:196
virtual GmLoggingAppState * GetLoggingAppState()
Get the object that describes the state of the immediate base class for this object.
Definition: TezzeretApp.hpp:395
void StartStorages()
Storage startups. Add startup and verification logic for storage - network, SD/USB,...
Definition: AppStartup.cpp:450
static double OnMfamPps(unsigned int index)
Definition: TezzeretApp.cpp:1476
void EthernetSetups()
Set up ethernet - daemons, file descriptors, etc. -, after having gotten notice of link,...
Definition: TezzeretApp.cpp:3702
virtual UInt32 ProcessCommand(UInt32 iCommand, UInt8 commandSource, UInt8 *pui8AddedInfo, UInt32 uiAddedInfoSize)
ProcessCommand implements command processing specialized to this application. "Core" commands are imp...
Definition: TezzeretApp.cpp:1622
static TezzeretApp * m_static_paTheSingleApp
TezzeretApp is a singleton.
Definition: TezzeretApp.hpp:218
void StartSensors()
Sensor startups. Add a new function for the specific sensor or event source, and then call it from th...
Definition: AppStartup.cpp:824
void NetworkSetupCountdown(bool starting)
Called during various network startup hooks - link and ipAddress - and at the end of general applicat...
Definition: TezzeretApp.cpp:3650
int AddEvent(UInt32 uiEventCode, UInt32 uiEventInfo, UInt32 uiDataLength, char *caData)
Utility function for adding an event to the main event queue. This is a very broadly useful facility ...
Definition: TezzeretApp.cpp:1651
static void SystemStartup()
Most startup logic belongs here; called once during system startup.
Definition: TezzeretApp.cpp:3313
void EarlyStartupRequirements()
A few components need to be started before anything else.
Definition: AppStartup.cpp:792
int MainStartup()
Calls all the other startup functions.
Definition: TezzeretApp.cpp:2468
TezzeretApp()
Constructor.
Definition: TezzeretApp.cpp:837
void Start()
Start the application. This function simply calls TezzeretApp::MainStartup and then starts reading th...
Definition: TezzeretApp.cpp:2450
virtual UInt32 FlushInputQueue()
Event handlers and storage are called from this function, which is called from the main loop when the...
Definition: TezzeretApp.cpp:1833
void StartMonitors()
Start monitors. Add startup logic here for new monitors.
Definition: AppStartup.cpp:816
GmApp/GmLoggingApp.hpp>
Definition: Analogs.hpp:47
Definition: GmProvision.hpp:55
Definition: GmPpsEvent.hpp:28
Definition: GmMfamData.hpp:332
Definition: TezzeretApp.hpp:103
Definition: GmLocation.hpp:100
Definition: magstructs.h:72