25 #if PLATFORM_IS_WINDOWS 31 #if PLATFORM_IS_LINUX || PLATFORM_IS_APPLE 39 #define PRINTV3_P1 "%8.1f,%8.1f,%8.1f\n" 40 #define PRINTV3_P2 " %8.2f,%8.2f,%8.2f\n" 41 #define PRINTV3_P3 " %8.3f,%8.3f,%8.3f\n" 42 #define PRINTV4_P1 "%8.1f,%8.1f,%8.1f,%8.1f\n" 43 #define PRINTV4_P2 " %8.2f,%8.2f,%8.2f,%8.2f\n" 44 #define PRINTV4_P3 " %8.3f,%8.3f,%8.3f,%8.3f\n" 45 #define PRINTV3_LLA "%13.7f,%13.7f,%7.1f ellipsoid\n" 46 #define PRINTV3_LLA_MSL "%13.7f,%13.7f,%7.1f MSL\n" 49 #define DISPLAY_DELTA_TIME 0 // show delta time instead of time 53 #if PLATFORM_IS_WINDOWS 55 static bool ctrlHandler(
DWORD fdwCtrlType)
60 case CTRL_CLOSE_EVENT:
61 case CTRL_BREAK_EVENT:
62 case CTRL_LOGOFF_EVENT:
63 case CTRL_SHUTDOWN_EVENT:
89 #if PLATFORM_IS_WINDOWS 94 if (!SetConsoleCtrlHandler((PHANDLER_ROUTINE)ctrlHandler,
true))
96 std::cout <<
"Failed to set console ctrl handler!" << std::endl;
111 #if PLATFORM_IS_WINDOWS 114 m_windowsConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
115 CONSOLE_CURSOR_INFO cursorInfo;
116 GetConsoleCursorInfo(m_windowsConsoleOut, &cursorInfo);
117 cursorInfo.bVisible = visible;
118 SetConsoleCursorInfo(m_windowsConsoleOut, &cursorInfo);
135 #if PLATFORM_IS_WINDOWS 137 COORD topLeft = { 0, 0 };
138 HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
139 CONSOLE_SCREEN_BUFFER_INFO screen;
141 GetConsoleScreenBufferInfo(console, &screen);
142 FillConsoleOutputCharacterA(console,
' ', screen.dwSize.X * screen.dwSize.Y, topLeft, &written);
143 FillConsoleOutputAttribute(console, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE, screen.dwSize.X * screen.dwSize.Y, topLeft, &written);
144 SetConsoleCursorPosition(console, topLeft);
157 #if PLATFORM_IS_WINDOWS 159 COORD topLeft = { 0, 0 };
160 SetConsoleCursorPosition(m_windowsConsoleOut, topLeft);
173 #if PLATFORM_IS_WINDOWS 175 COORD pos = { 0, (int16_t)y };
176 SetConsoleCursorPosition(m_windowsConsoleOut, pos);
189 #if PLATFORM_IS_WINDOWS 191 COORD pos = { (int16_t)x, (int16_t)y };
192 SetConsoleCursorPosition(m_windowsConsoleOut, pos);
196 printf(
"\x1B[%d;%df", y, x);
204 return "$ Inertial Sense. Press CTRL-C to terminate.\n";
209 return string(
"$ Inertial Sense. Connected. Press CTRL-C to terminate. Rx ") + std::to_string(
m_rxCount) +
"\n";
216 SNPRINTF(buf,
BUF_SIZE,
"$ Inertial Sense. Replay mode at %.1lfx speed. Press CTRL-C to terminate.\n", speed);
223 return "\nThanks for using Inertial Sense!\n";
229 #if PLATFORM_IS_WINDOWS 235 PeekConsoleInputA(m_windowsConsoleIn, &ip, 1, &numRead);
238 ReadConsoleInputA(m_windowsConsoleIn, &ip, 1, &numRead);
239 if (numRead == 1 && ip.EventType == KEY_EVENT && ip.Event.KeyEvent.bKeyDown)
241 return ip.Event.KeyEvent.uChar.AsciiChar;
258 FD_SET(STDIN_FILENO, &fds);
259 select(STDIN_FILENO + 1, &fds,
NULL,
NULL, &tv);
260 if (FD_ISSET(0, &fds))
264 tcgetattr(STDIN_FILENO, &oldt);
266 newt.c_lflag &= ~(ICANON);
267 tcsetattr(STDIN_FILENO, TCSANOW, &newt);
269 tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
295 static bool isTowMode =
false;
296 static int gpsTowMsOffset = 0;
297 static int msgTimeMsOffset = 0;
305 switch (data->
hdr.
id)
347 msgTimeMs = (int)(1000.0*d.
imu.
time) + gpsTowMsOffset;
349 msgTimeMs = (int)(1000.0*d.
imu.
time);
358 if (msgTimeMs != 0 && replaySpeedX>0.0)
365 int replayTimeMs = (int)(
long)(((double)curTimeMs)*replaySpeedX);
368 if (abs(msgTimeMs + msgTimeMsOffset - replayTimeMs) > 1500)
369 msgTimeMsOffset = replayTimeMs - msgTimeMs;
372 if (replayTimeMs >= msgTimeMs + msgTimeMsOffset)
383 static int timeSinceRefreshMs = 0;
384 static int timeSinceClearMs = 0;
389 if (curTimeMs - timeSinceClearMs > 2000 || curTimeMs < timeSinceClearMs || idHist[data->
hdr.
id] == 0)
392 idHist[data->
hdr.
id] = 1;
393 timeSinceClearMs = curTimeMs;
410 if (curTimeMs - timeSinceRefreshMs > 50 || curTimeMs < timeSinceRefreshMs)
420 timeSinceRefreshMs = curTimeMs;
426 if (curTimeMs - timeSinceRefreshMs > 50 || curTimeMs < timeSinceRefreshMs)
432 timeSinceRefreshMs = curTimeMs;
450 for (
size_t i = 0; i <
m_didMsgs.size(); i++)
463 size_t id = data->
hdr.
id;
474 size_t id = data->
hdr.
id;
489 printf(
" Name DID Count dt\n");
490 for (
int i = 0; i < (int)
m_didStats.size(); i++)
508 switch (data->
hdr.
id)
537 #if 0 // List all DIDs 550 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tSTATUS\n");
551 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\t\tSatellite Rx %d Aiding: Mag %d, GPS (Hdg %d, Pos %d)\n",
558 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\t\tMode: NAV ");
562 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\t\tMode: AHRS");
579 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\t\tErrors Rx parse %d, temperature %d, self-test %d\n",
610 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_INS_1:");
612 #if DISPLAY_DELTA_TIME==1 613 static double lastTime = 0;
614 double dtMs = 1000.0*(ins1.
timeOfWeek - lastTime);
616 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %4.1lfms", dtMs);
624 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" theta[%6.2f,%6.2f,%7.2f], uvw[%6.2f,%6.2f,%6.2f], lla[%12.7f,%12.7f,%7.1f], ned[%6.3f,%6.3f,%6.3f]",
634 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n\tEuler\t");
639 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tUWV\t");
644 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tLLA\t");
661 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_INS_2:");
663 #if DISPLAY_DELTA_TIME==1 664 static double lastTime = 0;
665 double dtMs = 1000.0*(ins2.
timeOfWeek - lastTime);
667 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %4.1lfms", dtMs);
675 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" qn2b[%6.3f,%6.3f,%6.3f,%6.3f], uvw[%6.2f,%6.2f,%6.2f], lla[%12.7f,%12.7f,%7.1f]",
682 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n\tQn2b\t");
690 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\t(Euler)\t");
693 theta[1] * C_RAD2DEG_F,
694 theta[2] * C_RAD2DEG_F);
695 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tUWV\t");
700 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tLLA\t");
717 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_INS_3:");
719 #if DISPLAY_DELTA_TIME==1 720 static double lastTime = 0;
721 double dtMs = 1000.0*(ins3.
timeOfWeek - lastTime);
723 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %4.1lfms", dtMs);
731 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" qn2b[%6.3f,%6.3f,%6.3f,%6.3f], uvw[%6.2f,%6.2f,%6.2f], lla[%12.7f,%12.7f,%7.1f]",
738 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n\tQn2b\t");
746 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\t(Euler)\t");
749 theta[1] * C_RAD2DEG_F,
750 theta[2] * C_RAD2DEG_F);
751 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tUWV\t");
756 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tLLA\t");
773 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_INS_4:");
775 #if DISPLAY_DELTA_TIME==1 776 static double lastTime = 0;
777 double dtMs = 1000.0*(ins4.
timeOfWeek - lastTime);
779 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %4.1lfms", dtMs);
787 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" qe2b[%6.3f,%6.3f,%6.3f,%6.3f], ve[%6.2f,%6.2f,%6.2f], ecef[%12.7f,%12.7f,%7.1f]",
789 ins4.
ve[0], ins4.
ve[1], ins4.
ve[2],
794 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n\tQe2b\t");
802 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\t(Euler)\t");
805 theta[1] * C_RAD2DEG_F,
806 theta[2] * C_RAD2DEG_F);
807 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tVE\t");
812 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tECEF\t");
829 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_DUAL_IMU:");
831 #if DISPLAY_DELTA_TIME==1 832 static double lastTime = 0;
833 double dtMs = 1000.0*(imu.
time - lastTime);
835 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %4.1lfms", dtMs);
837 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %.3lfs", imu.
time);
842 for (
int i = 0; i < 2; i++)
844 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
", pqr[%5.1f,%5.1f,%5.1f]",
846 imu.
I[i].
pqr[1] * C_RAD2DEG_F,
847 imu.
I[i].
pqr[2] * C_RAD2DEG_F);
849 for (
int i = 0; i < 2; i++)
851 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
", acc[%5.1f,%5.1f,%5.1f]",
857 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n");
858 for (
int i = 0; i < 2; i++)
860 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tPQR\t");
863 imu.
I[i].
pqr[1] * C_RAD2DEG_F,
864 imu.
I[i].
pqr[2] * C_RAD2DEG_F);
865 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tAcc\t");
882 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_PREINTEGRATED_IMU:");
884 #if DISPLAY_DELTA_TIME==1 885 static double lastTime = 0;
886 double dtMs = 1000.0*(imu.
time - lastTime);
888 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %4.1lfms", dtMs);
890 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %.3lfs, dt:%6.3f", imu.
time, imu.
dt);
895 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
", theta1[%6.3f,%6.3f,%6.3f], vel1[%6.3f,%6.3f,%6.3f]",
900 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
", theta2[%6.3f,%6.3f,%6.3f], vel2[%6.3f,%6.3f,%6.3f]",
908 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n\tIMU1 theta1\t");
913 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tIMU2 theta2\t");
918 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tIMU1 vel1\t");
923 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tIMU2 vel2\t");
941 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_MAGNETOMETER_%d:", i + 1);
943 #if DISPLAY_DELTA_TIME==1 944 static double lastTime[2] = { 0 };
945 double dtMs = 1000.0*(mag.
time - lastTime[i]);
946 lastTime[i] = mag.
time;
947 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %4.1lfms", dtMs);
949 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %.3lfs", mag.
time);
954 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
", mag[%6.2f,%6.2f,%6.2f]",
961 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n\tmag\t");
977 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_MAG_CAL:");
981 default: ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" recalCmd %3d, ", mag.
recalCmd);
break;
988 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" progress: %3.0f %%, declination: %4.1f",
995 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n");
1007 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_BAROMETER:");
1009 #if DISPLAY_DELTA_TIME==1 1010 static double lastTime = 0;
1011 double dtMs = 1000.0*(baro.
time - lastTime);
1012 lastTime = baro.
time;
1013 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %4.1lfms", dtMs);
1015 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %.3lfs", baro.
time);
1018 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
", %.2fkPa", baro.
bar);
1025 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n");
1038 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"%s:", didName.c_str());
1040 #if DISPLAY_DELTA_TIME==1 1041 static int lastTimeMs = 0;
1044 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %3dms", dtMs);
1051 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
", LLA[%12.7f,%12.7f,%7.1f], %d sats, %4.1f cno, %4.3f hAcc, %4.3f vAcc, %4.3f pDop",
1058 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n\tSats: %2d, ",
1060 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"Status: 0x%08x (", gps.
status);
1071 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"),\thAcc: %.3f m cno: %3.1f dBHz\n", gps.
hAcc, gps.
cnoMean);
1072 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tLLA: ");
1081 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"Compassing, ");
1103 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"%s:", didName.c_str());
1105 #if DISPLAY_DELTA_TIME==1 1106 static int lastTimeMs = 0;
1109 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %3dms", dtMs);
1116 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
", V2B[%10.3f,%10.3f,%9.2f], %4.1f age, %4.1f arRatio, %4.3f dist, %4.2f bear",
1122 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tvectorToRover: ");
1127 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\tRTK:\tdiffAge:%5.1fs arRatio: %4.1f dist:%7.2fm bear:%6.1f\n",
1141 ptr +=
SNPRINTF(buf, ptrEnd - ptr,
"%s: T=%d, lla[%4.7f,%4.7f,%7.3f], A[%3.3f,%3.3f,%3.3f], AR:%3.3f, dop(g,h,v)[%3.3f,%3.3f,%3.3f] %s",
1151 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n");
1164 ptr +=
SNPRINTF(buf, ptrEnd - ptr,
"RAW GPS: receiverIndex=%d, type=%d, count=%d %s",
1169 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n");
1181 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_SURVEY_IN:");
1183 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" state: %d ", survey.
state);
1184 switch (survey.
state)
1195 int elapsedTimeSec = survey.
elapsedTimeSec - (elapsedTimeMin * 60);
1197 int maxDurationSec = survey.
maxDurationSec - (maxDurationMin * 60);
1199 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
", elapsed: %d:%02d of %2d:%02d",
1200 elapsedTimeMin, elapsedTimeSec, maxDurationMin, maxDurationSec );
1212 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" lla[%12.7f,%12.7f,%7.1f]",
1226 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_SYS_PARAMS:");
1228 #if DISPLAY_DELTA_TIME==1 1229 static int lastTimeMs = 0;
1232 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %3dms", dtMs);
1254 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_SYS_SENSORS:");
1256 #if DISPLAY_DELTA_TIME==1 1257 static double lastTime = 0;
1258 double dtMs = 1000.0*(sensors.
time - lastTime);
1259 lastTime = sensors.
time;
1260 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %4.1lfms", dtMs);
1262 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %.3lfs", sensors.
time);
1266 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
", %4.1fC, pqr[%5.1f,%5.1f,%5.1f], acc[%5.1f,%5.1f,%5.1f], mag[%6.2f,%6.2f,%6.2f]",
1271 sensors.
acc[0], sensors.
acc[1], sensors.
acc[2],
1272 sensors.
mag[0], sensors.
mag[1], sensors.
mag[2]
1275 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
", baro[%5.2fkPa, %4.1fC, %7.2fm, %3.1f%% humidity], adc[%3.1fV, %3.1fV, %3.1fV, %3.1fV]",
1282 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"\n");
1294 return string(
"RTOS: ") + csvString + terminator;
1303 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
"DID_DEV_INFO:");
1306 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" SN%d, Fw %d.%d.%d.%d %c%d, %04d-%02d-%02d",
1321 ptr +=
SNPRINTF(ptr, ptrEnd - ptr,
" %02d:%02d:%02d, Proto %d.%d.%d.%d\n",
1339 ss <<
"DID_SENSORS_ADC:";
1341 ss <<
"time " << setprecision(3) << sensorsADC.
time <<
", ";
1342 ss <<
"bar " << setprecision(2) << sensorsADC.
bar <<
", ";
1343 ss <<
"barTemp " << setprecision(2) << sensorsADC.
barTemp <<
", ";
1344 ss <<
"humidity " << setprecision(2) << sensorsADC.
humidity <<
", ";
1357 #define SADC_WIDTH 5 1360 auto &mpu = sensorsADC.
mpu[i];
1361 ss <<
"\tmpu[" << i <<
"]: " << setprecision(0);
1365 ss <<
"temp " << setprecision(3) << mpu.temp <<
",";
1373 auto &mpu = sensorsADC.
mpu[i];
1374 ss <<
"mpu[" << i <<
"]: " << setprecision(0);
1375 ss <<
"pqr[" << mpu.pqr[0] <<
"," << mpu.pqr[1] <<
"," << mpu.pqr[2] <<
"], ";
1376 ss <<
"acc[" << mpu.acc[0] <<
"," << mpu.acc[1] <<
"," << mpu.acc[2] <<
"], ";
1377 ss <<
"mag[" << mpu.mag[0] <<
"," << mpu.mag[1] <<
"," << mpu.mag[2] <<
"], ";
1378 ss <<
"temp " << setprecision(3) << mpu.temp <<
",";
1389 #if PLATFORM_IS_WINDOWS 1395 return os <<
"\033[1m";
1404 #if PLATFORM_IS_WINDOWS 1410 return os <<
"\033[0m";
1420 #if PLATFORM_IS_WINDOWS 1426 return os << endl <<
boldOn;
1436 #if PLATFORM_IS_WINDOWS
static const char * GetDataSetName(uint32_t dataId)
float baseToRoverVector[3]
string DataToStringINS1(const ins_1_t &ins1, const p_data_hdr_t &hdr)
static void signalFunction(int sig)
ostream & boldOn(ostream &os)
void GoToColumnAndRow(int x, int y)
void ProcessData(p_data_t *data, bool enableReplay=false, double replaySpeedX=1.0)
string DataToStringRawGPS(const gps_raw_t &raw, const p_data_hdr_t &hdr)
string DataToStringSysSensors(const sys_sensors_t &sensors, const p_data_hdr_t &hdr)
string DataToStringSysParams(const sys_params_t &sys, const p_data_hdr_t &hdr)
#define DID_GPS2_RTK_CMP_REL
void DataToStats(const p_data_t *data)
ostream & endlbOff(ostream &os)
string DataToStringSensorsADC(const sys_sensors_adc_t &sensorsADC, const p_data_hdr_t &hdr)
string DataToStringMag(const magnetometer_t &mag, const p_data_hdr_t &hdr)
char * InsStatusToSolStatusString(char *ptr, char *ptrEnd, const uint32_t insStatus)
char * StatusToString(char *ptr, char *ptrEnd, const uint32_t insStatus, const uint32_t hdwStatus)
char copyDataPToStructP(void *sptr, const p_data_t *data, const unsigned int maxsize)
#define DID_PREINTEGRATED_IMU
bool DataToStringCSV(const p_data_hdr_t &hdr, const uint8_t *buf, string &csv)
string DataToStringPreintegratedImu(const preintegrated_imu_t &imu, const p_data_hdr_t &hdr)
ostream & endlbOn(ostream &os)
string DataToString(const p_data_t *data)
gps_rtk_misc_t gpsRtkMisc
#define DID_MAGNETOMETER_2
float baseToRoverDistance
string DataToStringDualIMU(const dual_imu_t &imu, const p_data_hdr_t &hdr)
string DataToStringINS2(const ins_2_t &ins2, const p_data_hdr_t &hdr)
bool ControlCWasPressed()
ostream & boldOff(ostream &os)
string DataToStringBaro(const barometer_t &baro, const p_data_hdr_t &hdr)
string DataToStringINS3(const ins_3_t &ins3, const p_data_hdr_t &hdr)
#define DID_GPS2_RTK_CMP_MISC
vector< string > m_didMsgs
static bool s_controlCWasPressed
string DataToStringMagCal(const mag_cal_t &mag, const p_data_hdr_t &hdr)
#define DID_MAGNETOMETER_1
#define INS_STATUS_SOLUTION(insStatus)
USBInterfaceDescriptor data
void qe2b2EulerNedEcef(Vector3 eul, const Vector4 qe2b, const Vector3d ecef)
string DataToStringRtkMisc(const gps_rtk_misc_t &sol, const p_data_hdr_t &hdr, const string didName)
sensors_mpu_w_temp_t mpu[NUM_IMU_DEVICES]
void ShowCursor(bool visible)
string DataToStringGpsPos(const gps_pos_t &gps, const p_data_hdr_t &hdr, const string didName)
string DataToStringINS4(const ins_4_t &ins4, const p_data_hdr_t &hdr)
void DataToVector(const p_data_t *data)
eDisplayMode m_displayMode
string DataToStringRTOS(const rtos_info_t &info, const p_data_hdr_t &hdr)
#define DID_GPS1_RTK_POS_REL
sys_sensors_adc_t sensorsAdc
#define HDW_STATUS_COM_PARSE_ERROR_COUNT(hdwStatus)
vector< sDidStats > m_didStats
string DataToStringSurveyIn(const survey_in_t &survey, const p_data_hdr_t &hdr)
string DataToStringDevInfo(const dev_info_t &info, const p_data_hdr_t &hdr)
string Replay(double speed=1.0)
#define DID_GPS1_RTK_POS_MISC
string DataToStringRtkRel(const gps_rtk_rel_t &gps, const p_data_hdr_t &hdr, const string didName)