gps: fix global position
authorOlivier Matz <zer0@droids-corp.org>
Tue, 9 Sep 2014 17:07:54 +0000 (19:07 +0200)
committerOlivier Matz <zer0@droids-corp.org>
Tue, 9 Sep 2014 17:49:31 +0000 (19:49 +0200)
imuboard/gps_venus.c

index 82f6525..860a0b9 100644 (file)
@@ -426,27 +426,28 @@ static int decode_gps_pos(uint8_t *buf, uint16_t len)
        if (len != sizeof(*pos))
                return -1;
 
-       if (pos->msg_id != 0xA8) /* XXX not tested */
+       if (pos->msg_id != 0xA8)
                return -1;
 
-       gps_pos.gps_week = ntohs(pos->gps_week);
-       gps_pos.tow = ntohl(pos->tow);
+       /* fix endianness inside the frame */
+       pos->gps_week = ntohs(pos->gps_week);
+       pos->tow = ntohl(pos->tow);
 
-       gps_pos.latitude = ntohl(pos->latitude);
-       gps_pos.longitude = ntohl(pos->longitude);
-       gps_pos.altitude = ntohl(pos->altitude);
+       pos->latitude = ntohl(pos->latitude);
+       pos->longitude = ntohl(pos->longitude);
+       pos->altitude = ntohl(pos->altitude);
 
-       gps_pos.sea_altitude = ntohl(pos->sea_altitude);
+       pos->sea_altitude = ntohl(pos->sea_altitude);
 
-       gps_pos.gdop = ntohs(pos->gdop);
-       gps_pos.pdop = ntohs(pos->pdop);
-       gps_pos.hdop = ntohs(pos->hdop);
-       gps_pos.vdop = ntohs(pos->vdop);
-       gps_pos.tdop = ntohs(pos->tdop);
+       pos->gdop = ntohs(pos->gdop);
+       pos->pdop = ntohs(pos->pdop);
+       pos->hdop = ntohs(pos->hdop);
+       pos->vdop = ntohs(pos->vdop);
+       pos->tdop = ntohs(pos->tdop);
 
-       gps_pos.ecef_vx = ntohl(pos->ecef_vx);
-       gps_pos.ecef_vy = ntohl(pos->ecef_vy);
-       gps_pos.ecef_vz = ntohl(pos->ecef_vz);
+       pos->ecef_vx = ntohl(pos->ecef_vx);
+       pos->ecef_vy = ntohl(pos->ecef_vy);
+       pos->ecef_vz = ntohl(pos->ecef_vz);
 
        /* update global structure */
        IRQ_LOCK(irq_flags);