Я использую старое устройство (2006 год - чрезвычайно урезанный встроенный Linux), чтобы получить широту и долготу GPS от внешнего приемника.Координаты GPS отображаются на ЖК-дисплее устройства.Раньше он работал нормально, пока оригинальный GPS-приемник не вышел из строя.Они заменили его на новый приемник, но теперь он больше не работает, все, что я вижу на ЖК-дисплее: Широта: - / Долгота: -.
Я попытался проверить, работает ли новый приемник GPS.И кажется, что пакеты GPGGA есть.Старое устройство ожидает пакеты GPGGA для анализа / обработки.
char GPSLatBuf[12], GPSLonBuf[12];
int parseGPSData(char * gpsBuffer)
{
char * p;
char gpsQuality = '0';
if((p = strstr(gpsBuffer, "$GPGGA")) == NULL)
return -1;
memset(GPSLatBuf, 0, sizeof(GPSLatBuf));
memset(GPSLonBuf, 0, sizeof(GPSLonBuf));
p += 7; // UTC time
if(*p != ',')
{
p += 10; // Latitude
if(*p != ',')
{
memcpy(&GPSLatBuf[1], p, 9);
p += 10; // N/S Hemisphere
if(*p != ',')
{
GPSLatBuf[0] = (*p == 'N') ? '+' : '-';
p += 2; // Longitude
if(*p != ',')
{
memcpy(&GPSLonBuf[1], p, 10);
p += 11; // E/W Hemisphere
if(*p != ',')
{
GPSLonBuf[0] = (*p == 'E') ? '+' : '-';
p += 2; // GPS quality
if(*p != ',')
gpsQuality = *p;
}
}
}
}
}
if(gpsQuality == '0')
return -1;
return 0;
}
Ожидается, что будут отображаться не пустые поля, как раньше: +4916.4600 / -12311.1200 (просто пример, поскольку я сейчас ничего не вижу на дисплее).