summaryrefslogtreecommitdiff
path: root/zodiac.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2005-05-29 14:17:55 +0000
committerEric S. Raymond <esr@thyrsus.com>2005-05-29 14:17:55 +0000
commit891543b03af7be23e3d9a35788312cc1d77fc270 (patch)
tree87fb2b7ba36a9d5251fd7758857c48087d7e2c16 /zodiac.c
parent7a66fedfc562ff9c2ce745d038dcd8725f00cb37 (diff)
downloadgpsd-891543b03af7be23e3d9a35788312cc1d77fc270.tar.gz
560 splint errors.
Diffstat (limited to 'zodiac.c')
-rw-r--r--zodiac.c228
1 files changed, 117 insertions, 111 deletions
diff --git a/zodiac.c b/zodiac.c
index 75c86cfd..35b6fc0c 100644
--- a/zodiac.c
+++ b/zodiac.c
@@ -78,7 +78,7 @@ static void zodiac_spew(struct gps_device_t *session, int type, unsigned short *
gpsd_report(5, "Sent Zodiac packet: %s\n",buf);
}
-static bool zodiac_speed_switch(struct gps_device_t *session, speed_t speed)
+static bool zodiac_speed_switch(struct gps_device_t *session, unsigned int speed)
{
unsigned short data[15];
@@ -92,7 +92,7 @@ static bool zodiac_speed_switch(struct gps_device_t *session, speed_t speed)
data[2] = 1; /* port 1 character width (8 bits) */
data[3] = 0; /* port 1 stop bits (1 stopbit) */
data[4] = 0; /* port 1 parity (none) */
- data[5] = (short)(round(log(speed/300)/M_LN2))+1; /* port 1 speed */
+ data[5] = (unsigned short)(round(log((double)speed/300)/M_LN2)+1); /* port 1 speed */
data[14] = zodiac_checksum(data, 14);
zodiac_spew(session, 1330, data, 15);
@@ -104,7 +104,7 @@ static void send_rtcm(struct gps_device_t *session,
char *rtcmbuf, size_t rtcmbytes)
{
unsigned short data[34];
- int n = 1 + (rtcmbytes/2 + rtcmbytes%2);
+ int n = 1 + (int)(rtcmbytes/2 + rtcmbytes%2);
if (session->sn++ > 32767)
session->sn = 0;
@@ -120,10 +120,10 @@ static void send_rtcm(struct gps_device_t *session,
static size_t zodiac_send_rtcm(struct gps_device_t *session,
char *rtcmbuf, size_t rtcmbytes)
{
- int len;
+ size_t len;
while (rtcmbytes > 0) {
- len = rtcmbytes>64?64:rtcmbytes;
+ len = (size_t)(rtcmbytes>64?64:rtcmbytes);
send_rtcm(session, rtcmbuf, len);
rtcmbytes -= len;
rtcmbuf += len;
@@ -132,82 +132,86 @@ static size_t zodiac_send_rtcm(struct gps_device_t *session,
}
/* Zodiac protocol description uses 1-origin indexing by little-endian word */
-#define getw(n) ( (session->outbuffer[2*(n)-2]) \
+#define getword(n) ( (session->outbuffer[2*(n)-2]) \
| (session->outbuffer[2*(n)-1] << 8))
-#define getl(n) ( (session->outbuffer[2*(n)-2]) \
+#define getlong(n) ( (session->outbuffer[2*(n)-2]) \
| (session->outbuffer[2*(n)-1] << 8) \
| (session->outbuffer[2*(n)+0] << 16) \
| (session->outbuffer[2*(n)+1] << 24))
static int handle1000(struct gps_device_t *session)
{
- /* ticks = getl(6); */
- /* sequence = getw(8); */
- /* measurement_sequence = getw(9); */
- session->gpsdata.status = (getw(10) & 0x1c) ? 0 : 1;
+ /* ticks = getlong(6); */
+ /* sequence = getword(8); */
+ /* measurement_sequence = getword(9); */
+ /*@ -boolops -predboolothers @*/
+ session->gpsdata.status = (getword(10) & 0x1c) ? 0 : 1;
if (session->gpsdata.status != 0)
- session->gpsdata.fix.mode = (getw(10) & 1) ? MODE_2D : MODE_3D;
+ session->gpsdata.fix.mode = (getword(10) & 1) ? MODE_2D : MODE_3D;
else
session->gpsdata.fix.mode = MODE_NO_FIX;
-
- /* solution_type = getw(11); */
- session->gpsdata.satellites_used = (int)getw(12);
- /* polar_navigation = getw(13); */
- /* gps_week = getw(14); */
- /* gps_seconds = getl(15); */
- /* gps_nanoseconds = getl(17); */
- session->gpsdata.nmea_date.tm_mday = (int)getw(19);
- session->gpsdata.nmea_date.tm_mon = (int)getw(20) - 1;
- session->gpsdata.nmea_date.tm_year = (int)getw(21) - 1900;
- session->gpsdata.nmea_date.tm_hour = (int)getw(22);
- session->gpsdata.nmea_date.tm_min = (int)getw(23);
- session->gpsdata.nmea_date.tm_sec = (int)getw(24);
- session->gpsdata.subseconds = getl(25) / 1e9;
+ /*@ +boolops -predboolothers @*/
+
+ /* solution_type = getword(11); */
+ session->gpsdata.satellites_used = (int)getword(12);
+ /* polar_navigation = getword(13); */
+ /* gps_week = getword(14); */
+ /* gps_seconds = getlong(15); */
+ /* gps_nanoseconds = getlong(17); */
+ session->gpsdata.nmea_date.tm_mday = (int)getword(19);
+ session->gpsdata.nmea_date.tm_mon = (int)getword(20) - 1;
+ session->gpsdata.nmea_date.tm_year = (int)getword(21) - 1900;
+ session->gpsdata.nmea_date.tm_hour = (int)getword(22);
+ session->gpsdata.nmea_date.tm_min = (int)getword(23);
+ session->gpsdata.nmea_date.tm_sec = (int)getword(24);
+ session->gpsdata.subseconds = (int)getlong(25) / 1e9;
session->gpsdata.fix.time = session->gpsdata.sentence_time =
(double)mkgmtime(&session->gpsdata.nmea_date) + session->gpsdata.subseconds;
#ifdef NTPSHM_ENABLE
if (session->gpsdata.fix.mode > MODE_NO_FIX)
(void)ntpshm_put(session, session->gpsdata.fix.time + 1.1);
#endif
- session->gpsdata.fix.latitude = ((long)getl(27)) * RAD_2_DEG * 1e-8;
- session->gpsdata.fix.longitude = ((long)getl(29)) * RAD_2_DEG * 1e-8;
- session->gpsdata.fix.altitude = ((long)getl(31)) * 1e-2;
- session->gpsdata.fix.separation = ((short)getw(33)) * 1e-2;
- session->gpsdata.fix.speed = getl(34) * 1e-2;
- session->gpsdata.fix.track = getw(36) * RAD_2_DEG * 1e-3;
- session->mag_var = ((short)getw(37)) * RAD_2_DEG * 1e-4;
- session->gpsdata.fix.climb = ((short)getw(38)) * 1e-2;
- /* map_datum = getw(39); */
- session->gpsdata.fix.eph = getl(40) * 1e-2;
- session->gpsdata.fix.epv = getl(42) * 1e-2;
- session->gpsdata.fix.ept = getl(44) * 1e-2;
- session->gpsdata.fix.eps = getw(46) * 1e-2;
- /* clock_bias = getl(47) * 1e-2; */
- /* clock_bias_sd = getl(49) * 1e-2; */
- /* clock_drift = getl(51) * 1e-2; */
- /* clock_drift_sd = getl(53) * 1e-2; */
+ /*@ -type @*/
+ session->gpsdata.fix.latitude = ((long)getlong(27)) * RAD_2_DEG * 1e-8;
+ session->gpsdata.fix.longitude = ((long)getlong(29)) * RAD_2_DEG * 1e-8;
+ session->gpsdata.fix.altitude = ((long)getlong(31)) * 1e-2;
+ /*@ +type @*/
+ session->gpsdata.fix.separation = ((short)getword(33)) * 1e-2;
+ session->gpsdata.fix.speed = (int)getlong(34) * 1e-2;
+ session->gpsdata.fix.track = (int)getword(36) * RAD_2_DEG * 1e-3;
+ session->mag_var = ((short)getword(37)) * RAD_2_DEG * 1e-4;
+ session->gpsdata.fix.climb = ((short)getword(38)) * 1e-2;
+ /* map_datum = getword(39); */
+ session->gpsdata.fix.eph = (int)getlong(40) * 1e-2;
+ session->gpsdata.fix.epv = (int)getlong(42) * 1e-2;
+ session->gpsdata.fix.ept = (int)getlong(44) * 1e-2;
+ session->gpsdata.fix.eps = (int)getword(46) * 1e-2;
+ /* clock_bias = (int)getlong(47) * 1e-2; */
+ /* clock_bias_sd = (int)getlong(49) * 1e-2; */
+ /* clock_drift = (int)getlong(51) * 1e-2; */
+ /* clock_drift_sd = (int)getlong(53) * 1e-2; */
#if 0
gpsd_report(1, "date: %lf\n", session->gpsdata.fix.time);
gpsd_report(1, " solution invalid:\n");
- gpsd_report(1, " altitude: %d\n", (getw(10) & 1) ? 1 : 0);
- gpsd_report(1, " no diff gps: %d\n", (getw(10) & 2) ? 1 : 0);
- gpsd_report(1, " not enough satellites: %d\n", (getw(10) & 4) ? 1 : 0);
- gpsd_report(1, " exceed max EHPE: %d\n", (getw(10) & 8) ? 1 : 0);
- gpsd_report(1, " exceed max EVPE: %d\n", (getw(10) & 16) ? 1 : 0);
+ gpsd_report(1, " altitude: %d\n", (getword(10) & 1) ? 1 : 0);
+ gpsd_report(1, " no diff gps: %d\n", (getword(10) & 2) ? 1 : 0);
+ gpsd_report(1, " not enough satellites: %d\n", (getword(10) & 4) ? 1 : 0);
+ gpsd_report(1, " exceed max EHPE: %d\n", (getword(10) & 8) ? 1 : 0);
+ gpsd_report(1, " exceed max EVPE: %d\n", (getword(10) & 16) ? 1 : 0);
gpsd_report(1, " solution type:\n");
- gpsd_report(1, " propagated: %d\n", (getw(11) & 1) ? 1 : 0);
- gpsd_report(1, " altitude: %d\n", (getw(11) & 2) ? 1 : 0);
- gpsd_report(1, " differential: %d\n", (getw(11) & 4) ? 1 : 0);
- gpsd_report(1, "Number of measurements in solution: %d\n", getw(12));
- gpsd_report(1, "Lat: %f\n", getl(27) * RAD_2_DEG * 1e-8);
- gpsd_report(1, "Lon: %f\n", getl(29) * RAD_2_DEG * 1e-8);
- gpsd_report(1, "Alt: %f\n", (double) getl(31) * 1e-2);
- gpsd_report(1, "Speed: %f\n", (double) getl(34) * 1e-2 * MPS_TO_KNOTS);
- gpsd_report(1, "Map datum: %d\n", getw(39));
- gpsd_report(1, "Magnetic variation: %f\n", getw(37) * RAD_2_DEG * 1e-4);
- gpsd_report(1, "Course: %f\n", getw(36) * RAD_2_DEG * 1e-4);
- gpsd_report(1, "Separation: %f\n", getw(33) * 1e-2);
+ gpsd_report(1, " propagated: %d\n", (getword(11) & 1) ? 1 : 0);
+ gpsd_report(1, " altitude: %d\n", (getword(11) & 2) ? 1 : 0);
+ gpsd_report(1, " differential: %d\n", (getword(11) & 4) ? 1 : 0);
+ gpsd_report(1, "Number of measurements in solution: %d\n", getword(12));
+ gpsd_report(1, "Lat: %f\n", getlong(27) * RAD_2_DEG * 1e-8);
+ gpsd_report(1, "Lon: %f\n", getlong(29) * RAD_2_DEG * 1e-8);
+ gpsd_report(1, "Alt: %f\n", (double) getlong(31) * 1e-2);
+ gpsd_report(1, "Speed: %f\n", (double) getlong(34) * 1e-2 * MPS_TO_KNOTS);
+ gpsd_report(1, "Map datum: %d\n", getword(39));
+ gpsd_report(1, "Magnetic variation: %f\n", getword(37) * RAD_2_DEG * 1e-4);
+ gpsd_report(1, "Course: %f\n", getword(36) * RAD_2_DEG * 1e-4);
+ gpsd_report(1, "Separation: %f\n", getword(33) * 1e-2);
#endif
session->gpsdata.sentence_length = 55;
@@ -220,15 +224,17 @@ static int handle1002(struct gps_device_t *session)
session->gpsdata.satellites_used = 0;
memset(session->gpsdata.used,0,sizeof(session->gpsdata.used));
- /* ticks = getl(6); */
- /* sequence = getw(8); */
- /* measurement_sequence = getw(9); */
- /* gps_week = getw(10); */
- /* gps_seconds = getl(11); */
- /* gps_nanoseconds = getl(13); */
+ /* ticks = getlong(6); */
+ /* sequence = getword(8); */
+ /* measurement_sequence = getword(9); */
+ /* gps_week = getword(10); */
+ /* gps_seconds = getlong(11); */
+ /* gps_nanoseconds = getlong(13); */
for (i = 0; i < MAXCHANNELS; i++) {
- session->Zv[i] = status = getw(15 + (3 * i));
- session->Zs[i] = prn = getw(16 + (3 * i));
+ /*@ -type @*/
+ session->Zv[i] = status = (int)getword(15 + (3 * i));
+ session->Zs[i] = prn = (int)getword(16 + (3 * i));
+ /*@ +type @*/
#if 0
gpsd_report(1, "Sat%02d:\n", i);
gpsd_report(1, " used:%d\n", (status & 1) ? 1 : 0);
@@ -236,14 +242,14 @@ static int handle1002(struct gps_device_t *session)
gpsd_report(1, " val:%d\n", (status & 4) ? 1 : 0);
gpsd_report(1, " dgps:%d\n", (status & 8) ? 1 : 0);
gpsd_report(1, " PRN:%d\n", prn);
- gpsd_report(1, " C/No:%d\n", getw(17 + (3 * i)));
+ gpsd_report(1, " C/No:%d\n", getword(17 + (3 * i)));
#endif
if (status & 1)
session->gpsdata.used[session->gpsdata.satellites_used++] = prn;
for (j = 0; j < MAXCHANNELS; j++) {
if (session->gpsdata.PRN[j] != prn)
continue;
- session->gpsdata.ss[j] = getw(17 + (3 * i));
+ session->gpsdata.ss[j] = (int)getword(17 + (3 * i));
break;
}
}
@@ -254,25 +260,25 @@ static int handle1003(struct gps_device_t *session)
{
int i;
- /* ticks = getl(6); */
- /* sequence = getw(8); */
- session->gpsdata.gdop = getw(9) * 1e-2;
- session->gpsdata.pdop = getw(10) * 1e-2;
- session->gpsdata.hdop = getw(11) * 1e-2;
- session->gpsdata.vdop = getw(12) * 1e-2;
- session->gpsdata.tdop = getw(13) * 1e-2;
- session->gpsdata.satellites = getw(14);
+ /* ticks = getlong(6); */
+ /* sequence = getword(8); */
+ session->gpsdata.gdop = (unsigned int)getword(9) * 1e-2;
+ session->gpsdata.pdop = (unsigned int)getword(10) * 1e-2;
+ session->gpsdata.hdop = (unsigned int)getword(11) * 1e-2;
+ session->gpsdata.vdop = (unsigned int)getword(12) * 1e-2;
+ session->gpsdata.tdop = (unsigned int)getword(13) * 1e-2;
+ session->gpsdata.satellites = (int)getword(14);
for (i = 0; i < MAXCHANNELS; i++) {
if (i < session->gpsdata.satellites) {
- session->gpsdata.PRN[i] = getw(15 + (3 * i));
- session->gpsdata.azimuth[i] = ((short)getw(16 + (3 * i))) * RAD_2_DEG * 1e-4;
+ session->gpsdata.PRN[i] = (int)getword(15 + (3 * i));
+ session->gpsdata.azimuth[i] = (int)(((short)getword(16 + (3 * i))) * RAD_2_DEG * 1e-4);
if (session->gpsdata.azimuth[i] < 0)
session->gpsdata.azimuth[i] += 360;
- session->gpsdata.elevation[i] = ((short)getw(17 + (3 * i))) * RAD_2_DEG * 1e-4;
+ session->gpsdata.elevation[i] = (int)(((short)getword(17 + (3 * i))) * RAD_2_DEG * 1e-4);
#if 0
gpsd_report(1, "Sat%02d: PRN:%d az:%d el:%d\n",
- i, getw(15+(3 * i)),getw(16+(3 * i)),getw(17+(3 * i)));
+ i, getword(15+(3 * i)),getword(16+(3 * i)),getword(17+(3 * i)));
#endif
} else {
session->gpsdata.PRN[i] = 0;
@@ -285,41 +291,41 @@ static int handle1003(struct gps_device_t *session)
static void handle1005(struct gps_device_t *session UNUSED)
{
- /* ticks = getl(6); */
- /* sequence = getw(8); */
+ /* ticks = getlong(6); */
+ /* sequence = getword(8); */
#if 0
- int i, numcorrections = getw(12);
+ int i, numcorrections = getword(12);
gpsd_report(1, "Packet: %d\n", session->sn);
- gpsd_report(1, "Station bad: %d\n", (getw(9) & 1) ? 1 : 0);
- gpsd_report(1, "User disabled: %d\n", (getw(9) & 2) ? 1 : 0);
- gpsd_report(1, "Station ID: %d\n", getw(10));
- gpsd_report(1, "Age of last correction in seconds: %d\n", getw(11));
- gpsd_report(1, "Number of corrections: %d\n", getw(12));
+ gpsd_report(1, "Station bad: %d\n", (getword(9) & 1) ? 1 : 0);
+ gpsd_report(1, "User disabled: %d\n", (getword(9) & 2) ? 1 : 0);
+ gpsd_report(1, "Station ID: %d\n", getword(10));
+ gpsd_report(1, "Age of last correction in seconds: %d\n", getword(11));
+ gpsd_report(1, "Number of corrections: %d\n", getword(12));
for (i = 0; i < numcorrections; i++) {
- gpsd_report(1, "Sat%02d:\n", getw(13+i) & 0x3f);
- gpsd_report(1, "ephemeris:%d\n", (getw(13+i) & 64) ? 1 : 0);
- gpsd_report(1, "rtcm corrections:%d\n", (getw(13+i) & 128) ? 1 : 0);
- gpsd_report(1, "rtcm udre:%d\n", (getw(13+i) & 256) ? 1 : 0);
- gpsd_report(1, "sat health:%d\n", (getw(13+i) & 512) ? 1 : 0);
- gpsd_report(1, "rtcm sat health:%d\n", (getw(13+i) & 1024) ? 1 : 0);
- gpsd_report(1, "corrections state:%d\n", (getw(13+i) & 2048) ? 1 : 0);
- gpsd_report(1, "iode mismatch:%d\n", (getw(13+i) & 4096) ? 1 : 0);
+ gpsd_report(1, "Sat%02d:\n", getword(13+i) & 0x3f);
+ gpsd_report(1, "ephemeris:%d\n", (getword(13+i) & 64) ? 1 : 0);
+ gpsd_report(1, "rtcm corrections:%d\n", (getword(13+i) & 128) ? 1 : 0);
+ gpsd_report(1, "rtcm udre:%d\n", (getword(13+i) & 256) ? 1 : 0);
+ gpsd_report(1, "sat health:%d\n", (getword(13+i) & 512) ? 1 : 0);
+ gpsd_report(1, "rtcm sat health:%d\n", (getword(13+i) & 1024) ? 1 : 0);
+ gpsd_report(1, "corrections state:%d\n", (getword(13+i) & 2048) ? 1 : 0);
+ gpsd_report(1, "iode mismatch:%d\n", (getword(13+i) & 4096) ? 1 : 0);
}
#endif
}
static void handle1108(struct gps_device_t *session)
{
- /* ticks = getl(6); */
- /* sequence = getw(8); */
- /* utc_week_seconds = getl(14); */
- /* leap_nanoseconds = getl(17); */
- if ((getw(19) & 3) == 3)
- session->context->leap_seconds = getw(16);
+ /* ticks = getlong(6); */
+ /* sequence = getword(8); */
+ /* utc_week_seconds = getlong(14); */
+ /* leap_nanoseconds = getlong(17); */
+ if ((int)(getword(19) & 3) == 3)
+ session->context->leap_seconds = (int)getword(16);
#if 0
- gpsd_report(1, "Leap seconds: %d.%09d\n", getw(16), getl(17));
- gpsd_report(1, "UTC validity: %d\n", getw(19) & 3);
+ gpsd_report(1, "Leap seconds: %d.%09d\n", getword(16), getlong(17));
+ gpsd_report(1, "UTC validity: %d\n", getword(19) & 3);
#endif
}
@@ -327,7 +333,7 @@ static int zodiac_analyze(struct gps_device_t *session)
{
char buf[BUFSIZ];
int i, mask = 0;
- unsigned int id = (session->outbuffer[3] << 8) | session->outbuffer[2];
+ unsigned int id = (unsigned int)((session->outbuffer[3]<<8) | session->outbuffer[2]);
if (session->packet_type != ZODIAC_PACKET) {
gpsd_report(2, "zodiac_analyze packet type %d\n",session->packet_type);
@@ -335,9 +341,9 @@ static int zodiac_analyze(struct gps_device_t *session)
}
buf[0] = '\0';
- for (i = 0; i < session->outbuflen; i++)
+ for (i = 0; i < (int)session->outbuflen; i++)
(void)snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf),
- "%02x", session->outbuffer[i]);
+ "%02x", (unsigned int)session->outbuffer[i]);
(void)strcat(buf, "\n");
gpsd_report(5, "Raw Zodiac packet type %d length %d: %s\n",id,session->outbuflen,buf);
@@ -356,7 +362,7 @@ static int zodiac_analyze(struct gps_device_t *session)
mask = handle1002(session);
strcpy(buf, "$PRWIZCH");
for (i = 0; i < MAXCHANNELS; i++) {
- (void)snprintf(buf+strlen(buf), (int)(sizeof(buf)-strlen(buf)),
+ (void)snprintf(buf+strlen(buf), (size_t)(sizeof(buf)-strlen(buf)),
",%02u,%X", session->Zs[i], session->Zv[i] & 0x0f);
}
(void)strcat(buf, "*");
@@ -369,7 +375,7 @@ static int zodiac_analyze(struct gps_device_t *session)
break;
case 1003:
mask = handle1003(session);
- gpsd_binary_satellite_dump(session, buf, sizeof(buf));
+ gpsd_binary_satellite_dump(session, buf, (int)sizeof(buf));
gpsd_report(3, "<= GPS: %s", buf);
break;
case 1005: