Используя libgps.so.25.0.0, созданный из gpsd-3.19.tar.gz для цели aarch64- linux -gnu Linux target, почему все, кроме статуса (DGPS_FIX), может быть распаковано в (gps_data_t) m_gps_data во время gps_read?
int gps_bytes = gps_read( &m_gps_data, gpsd_msg, MAX_MSG_SIZE );
Статус, режим, флаги и т. д. c. отображаются в выводе отладки libgps
STATUS: status: 2 (DGPS_FIX)
MODE: mode: 3 (MODE_3D)
libgps: final flags: (0x5377c)
{TIME|TIMERR|LATLON|ALTITUDE|SPEED|CLIMB|STATUS|MODE|HERR|VERR|SPEEDERR|CLIMBERR}
libgps: gps_read() -> 270
и в сообщении (gpsd_msg), которое печатается моим клиентом
{"class":"TPV","device":"/dev/ttyACM0","status":2,"mode":3,"time":"2020-04-27T13:56:5
9.000Z","ept":0.005,"lat":26.343147000,"lon":-80.631992833,"alt":16.300,"epx":2.302,"
epy":2.153,"epv":7.878,"speed":0.004,"climb":0.000,"eps":4.60,"epc":15.76,"eph":3.990
,"sep":7.648}
, но m_gps_data.status (struct gps_data_t), по-видимому, единственное, что не было распаковано.
PRINTF_2("gps_bytes %d status %d mode %d lat %g lon %g alt %g\n",
gps_bytes, m_gps_data.status, m_gps_data.fix.mode, m_gps_data.fix.latitude,
m_gps_data.fix.longitude, m_gps_data.fix.altitude);
(PRINTF_2 добавляет FILE, LINE и fun c в printf)
nav_thread.cpp:277 (_thread_proc) - gps_bytes 270 status 0 mode 3 lat 26.3431 lon -80.632 alt 16.3
Сборка так:
scons minimal=yes shared=True gpsd=False gpsdclients=False socket_export=yes clientdebug=yes
target='aarch64-linux-gnu'
Обновление: я могу обойти проблему, проанализировав статус из сообщения и используя его для установки поля состояния gps_data_t, подобного этому
if (STATUS_SET == (m_gps_data.set & STATUS_SET))
{
if (NULL != strstr(gpsd_msg, "\"status\":1"))
{
PRINTF_("STATUS_FIX\n");
m_gps_data.status = STATUS_FIX;
}
else if (NULL != strstr(gpsd_msg, "\"status\":2"))
{
PRINTF_("STATUS_DGPS_FIX\n");
m_gps_data.status = STATUS_DGPS_FIX;
}
, но это не исправляет root причина