summaryrefslogtreecommitdiff
path: root/driver_navcom.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2010-12-26 18:00:58 -0500
committerEric S. Raymond <esr@thyrsus.com>2010-12-26 18:00:58 -0500
commitcafb272f98f0b66481675743dfd42d6ac30baa47 (patch)
tree4d50a2f8dbae7f62c96320259e791f73a422e78d /driver_navcom.c
parent5062f7c420c55c8f2c3d51a75539b050536fc103 (diff)
downloadgpsd-cafb272f98f0b66481675743dfd42d6ac30baa47.tar.gz
Rename the bits.h macros to be explicit about operand length.
With most machines being 64-bit now, the assumption that "word" = 16 bits and "long" = 32 bits is increasingly archaic. This commit removes it from our naming conventions.
Diffstat (limited to 'driver_navcom.c')
-rw-r--r--driver_navcom.c172
1 files changed, 86 insertions, 86 deletions
diff --git a/driver_navcom.c b/driver_navcom.c
index ed502e79..eb73ce45 100644
--- a/driver_navcom.c
+++ b/driver_navcom.c
@@ -39,24 +39,24 @@
#include "bits.h"
/* Have data which is 24 bits long */
-#define getlesl24(buf,off) (int32_t)(((uint32_t)getub((buf), (off)+2)<<24 | (uint32_t)getub((buf), (off)+1)<<16 | (uint32_t)getub((buf), (off))<<8)>>8)
-#define getleul24(buf,off) (uint32_t)(((uint32_t)getub((buf), (off)+2)<<24 | (uint32_t)getub((buf), (off)+1)<<16 | (uint32_t)getub((buf), (off))<<8)>>8)
+#define getles3224(buf,off) (int32_t)(((uint32_t)getub((buf), (off)+2)<<24 | (uint32_t)getub((buf), (off)+1)<<16 | (uint32_t)getub((buf), (off))<<8)>>8)
+#define getleu3224(buf,off) (uint32_t)(((uint32_t)getub((buf), (off)+2)<<24 | (uint32_t)getub((buf), (off)+1)<<16 | (uint32_t)getub((buf), (off))<<8)>>8)
/* And just to be difficult, Navcom is little endian but the GPS data stream
is big endian. Some messages contain raw GPS data */
-#define getlesw_be(buf, off) (int16_t)((((uint16_t)getub(buf, (off)) << 8) \
+#define getles16_be(buf, off) (int16_t)((((uint16_t)getub(buf, (off)) << 8) \
| (uint16_t)getub(buf, (off)+1)))
-#define getleuw_be(buf, off) (uint16_t)((((uint16_t)getub(buf, (off)) << 8) \
+#define getleu16_be(buf, off) (uint16_t)((((uint16_t)getub(buf, (off)) << 8) \
| (uint16_t)getub(buf, (off)+1)))
-#define getlesl_be(buf, off) (int32_t)((((uint16_t)getleuw_be(buf, (off)) << 16) \
- | getleuw_be(buf, (off)+2)))
-#define getleul_be(buf, off) (uint32_t)((((uint16_t)getleuw_be(buf, (off)) << 16) \
- | getleuw_be(buf, (off)+2)))
-#define getlesL_be(buf, off) (int64_t)((((uint64_t)getleul_be(buf, (off)) << 32) \
- | getleul_be(buf, (off)+4)))
-#define getleuL_be(buf, off) (uint64_t)((((uint64_t)getleul_be(buf, (off)) << 32) \
- | getleul_be(buf, (off)+4)))
-#define getlesl24_be(buf,off) (int32_t)(((uint32_t)getub((buf), (off))<<24 \
+#define getles32_be(buf, off) (int32_t)((((uint16_t)getleu16_be(buf, (off)) << 16) \
+ | getleu16_be(buf, (off)+2)))
+#define getleu32_be(buf, off) (uint32_t)((((uint16_t)getleu16_be(buf, (off)) << 16) \
+ | getleu16_be(buf, (off)+2)))
+#define getles64_be(buf, off) (int64_t)((((uint64_t)getleu32_be(buf, (off)) << 32) \
+ | getleu32_be(buf, (off)+4)))
+#define getleu64_be(buf, off) (uint64_t)((((uint64_t)getleu32_be(buf, (off)) << 32) \
+ | getleu32_be(buf, (off)+4)))
+#define getles3224_be(buf,off) (int32_t)(((uint32_t)getub((buf), (off))<<24 \
| (uint32_t)getub((buf), (off)+1)<<16 \
| (uint32_t)getub((buf), (off)+2)<<8)>>8)
@@ -88,15 +88,15 @@ static void navcom_cmd_0x20(struct gps_device_t *session, uint8_t block_id,
putbyte(msg, 1, 0x99);
putbyte(msg, 2, 0x66);
putbyte(msg, 3, 0x20); /* Cmd ID */
- putleword(msg, 4, 0x000e); /* Length */
+ putle16(msg, 4, 0x000e); /* Length */
putbyte(msg, 6, 0x00); /* Action */
putbyte(msg, 7, 0x01); /* Count of blocks */
putbyte(msg, 8, block_id); /* Data Block ID */
putbyte(msg, 9, 0x02); /* Logical Ports */
- putleword(msg, 10, rate); /* Data rate */
+ putle16(msg, 10, rate); /* Data rate */
putbyte(msg, 12, 0x71);
putbyte(msg, 13, 0x00);
- putleword(msg, 14, 0x0000);
+ putle16(msg, 14, 0x0000);
putbyte(msg, 16, checksum(msg + 3, 13));
putbyte(msg, 17, 0x03);
(void)navcom_send_cmd(session, msg, 18);
@@ -114,7 +114,7 @@ static void UNUSED navcom_cmd_0x3f(struct gps_device_t *session)
putbyte(msg, 1, 0x99);
putbyte(msg, 2, 0x66);
putbyte(msg, 3, 0x3f); /* Cmd ID */
- putleword(msg, 4, 0x0008);
+ putle16(msg, 4, 0x0008);
putbyte(msg, 6, 0x01); /* Action */
putbyte(msg, 7, 0x00); /* Reserved */
putbyte(msg, 8, 0x02); /* Link LED setting */
@@ -135,7 +135,7 @@ static void navcom_cmd_0x1c(struct gps_device_t *session, uint8_t mode,
putbyte(msg, 1, 0x99);
putbyte(msg, 2, 0x66);
putbyte(msg, 3, 0x1c); /* Cmd ID */
- putleword(msg, 4, 0x0008);
+ putle16(msg, 4, 0x0008);
putbyte(msg, 6, 0x04); /* Use ACK/NAK */
putbyte(msg, 7, mode); /* 0x01 or 0x02 */
putbyte(msg, 8, length); /* Only if mode == 0x01 */
@@ -161,7 +161,7 @@ static void navcom_cmd_0x11(struct gps_device_t *session,
putbyte(msg, 1, 0x99);
putbyte(msg, 2, 0x66);
putbyte(msg, 3, 0x11); /* Cmd ID */
- putleword(msg, 4, 0x0008); /* Length */
+ putle16(msg, 4, 0x0008); /* Length */
putbyte(msg, 6, 0x04); /* Action - Use ACK/NAK) */
putbyte(msg, 7, port_selection);
putbyte(msg, 8, 0x00); /* Reserved */
@@ -245,8 +245,8 @@ static gps_mask_t handle_0x83(struct gps_device_t *session)
/* 2^16 */
#define SF_BETA3 (65536)
unsigned char *buf = session->packet.outbuffer + 3;
- uint16_t week = getleuw(buf, 3);
- uint32_t tow = getleul(buf, 5);
+ uint16_t week = getleu16(buf, 3);
+ uint32_t tow = getleu32(buf, 5);
int8_t alpha0 = getsb(buf, 9);
int8_t alpha1 = getsb(buf, 10);
int8_t alpha2 = getsb(buf, 11);
@@ -255,8 +255,8 @@ static gps_mask_t handle_0x83(struct gps_device_t *session)
int8_t beta1 = getsb(buf, 14);
int8_t beta2 = getsb(buf, 15);
int8_t beta3 = getsb(buf, 16);
- int32_t a1 = getlesl(buf, 17);
- int32_t a0 = getlesl(buf, 21);
+ int32_t a1 = getles32(buf, 17);
+ int32_t a0 = getles32(buf, 21);
uint8_t tot = getub(buf, 25);
uint8_t wnt = getub(buf, 26);
int8_t dtls = getsb(buf, 27);
@@ -337,7 +337,7 @@ static gps_mask_t handle_0x15(struct gps_device_t *session)
{
size_t n;
unsigned char *buf = session->packet.outbuffer + 3;
- size_t msg_len = (size_t) getleuw(buf, 1);
+ size_t msg_len = (size_t) getleu16(buf, 1);
/*@ -type @*/
uint8_t port, cmd_id = getub(buf, 3);
gpsd_report(LOG_PROG,
@@ -404,9 +404,9 @@ static gps_mask_t handle_0xb1(struct gps_device_t *session)
#endif /* __UNUSED__ */
/* Timestamp */
- week = (uint16_t) getleuw(buf, 3);
+ week = (uint16_t) getleu16(buf, 3);
session->context->gps_week = week;
- tow = (uint32_t) getleul(buf, 5);
+ tow = (uint32_t) getleu32(buf, 5);
session->context->gps_tow = tow / 1000.0;
session->newdata.time =
gpstime_to_unix((int)week, session->context->gps_tow)
@@ -414,7 +414,7 @@ static gps_mask_t handle_0xb1(struct gps_device_t *session)
gpsd_rollover_check(session, session->newdata.time);
/* Satellites used */
- sats_used = (uint32_t) getleul(buf, 9);
+ sats_used = (uint32_t) getleu32(buf, 9);
session->gpsdata.satellites_used = 0;
for (n = 0; n < 31; n++) {
if ((sats_used & (0x01 << n)) != 0)
@@ -423,8 +423,8 @@ static gps_mask_t handle_0xb1(struct gps_device_t *session)
}
/* Get latitude, longitude */
- lat = getlesl(buf, 13);
- lon = getlesl(buf, 17);
+ lat = getles32(buf, 13);
+ lon = getles32(buf, 17);
lat_fraction = (uint8_t) (getub(buf, 21) >> 4);
lon_fraction = (uint8_t) (getub(buf, 21) & 0x0f);
@@ -445,11 +445,11 @@ static gps_mask_t handle_0xb1(struct gps_device_t *session)
}
/* Height Data */
- ellips_height = getlesl(buf, 23);
- altitude = getlesl(buf, 27);
+ ellips_height = getles32(buf, 23);
+ altitude = getles32(buf, 27);
- ant_height_adj = getlesw(buf, 51);
- set_delta_up = getlesl(buf, 79);
+ ant_height_adj = getles16(buf, 51);
+ set_delta_up = getles32(buf, 79);
session->newdata.altitude = (double)(altitude * EL_RES)
+ (ant_height_adj * D_RES) + (set_delta_up * D_RES);
@@ -457,10 +457,10 @@ static gps_mask_t handle_0xb1(struct gps_device_t *session)
+ (ant_height_adj * D_RES) + (set_delta_up * D_RES);
/* Speed Data */
- vel_north = (double)getlesl24(buf, 31);
- vel_east = (double)getlesl24(buf, 34);
- /* vel_up = getlesl24(buf, 37); */
- vel_up = (double)getlesl24(buf, 37);
+ vel_north = (double)getles3224(buf, 31);
+ vel_east = (double)getles3224(buf, 34);
+ /* vel_up = getles3224(buf, 37); */
+ vel_up = (double)getles3224(buf, 37);
track = atan2(vel_east, vel_north);
if (track < 0)
@@ -597,13 +597,13 @@ static gps_mask_t handle_0x81(struct gps_device_t *session)
unsigned char *buf = session->packet.outbuffer + 3;
uint8_t prn = getub(buf, 3);
- uint16_t week = getleuw(buf, 4);
- uint32_t tow = getleul(buf, 6);
- uint16_t iodc = getleuw(buf, 10);
+ uint16_t week = getleu16(buf, 4);
+ uint32_t tow = getleu32(buf, 6);
+ uint16_t iodc = getleu16(buf, 10);
/* And now the fun starts... everything that follows is
* raw GPS data minus parity */
/* Subframe 1, words 3 to 10 minus parity */
- uint16_t wn = (getleuw_be(buf, 12) & 0xffc0) >> 6;
+ uint16_t wn = (getleu16_be(buf, 12) & 0xffc0) >> 6;
uint8_t cl2 = (getub(buf, 13) & 0x30) >> 4;
uint8_t ura = getub(buf, 13) & 0x0f;
uint8_t svh = (getub(buf, 14) & 0xfc) >> 2;
@@ -613,36 +613,36 @@ static gps_mask_t handle_0x81(struct gps_device_t *session)
uint8_t l2pd = (getub(buf, 15) & 0x80) >> 7;
int8_t tgd = getsb(buf, 26);
/* iodc |= getub(buf, 27);*/
- uint16_t toc = getleuw_be(buf, 28);
+ uint16_t toc = getleu16_be(buf, 28);
int8_t af2 = getsb(buf, 30);
- int16_t af1 = getlesw_be(buf, 31);
+ int16_t af1 = getles16_be(buf, 31);
/*@ -shiftimplementation @*/
- int32_t af0 = getlesl24_be(buf, 33) >> 2;
+ int32_t af0 = getles3224_be(buf, 33) >> 2;
/*@ +shiftimplementation @*/
/* Subframe 2, words 3 to 10 minus parity */
uint8_t iode = getub(buf, 36);
- int16_t crs = getlesw_be(buf, 37);
- int16_t delta_n = getlesw_be(buf, 39);
- int32_t m0 = getlesl_be(buf, 41);
- int16_t cuc = getlesw_be(buf, 45);
- uint32_t e = getleul_be(buf, 47);
- int16_t cus = getlesw_be(buf, 51);
- uint32_t sqrt_a = getleul_be(buf, 53);
- uint16_t toe = getleuw_be(buf, 57);
+ int16_t crs = getles16_be(buf, 37);
+ int16_t delta_n = getles16_be(buf, 39);
+ int32_t m0 = getles32_be(buf, 41);
+ int16_t cuc = getles16_be(buf, 45);
+ uint32_t e = getleu32_be(buf, 47);
+ int16_t cus = getles16_be(buf, 51);
+ uint32_t sqrt_a = getleu32_be(buf, 53);
+ uint16_t toe = getleu16_be(buf, 57);
/* NOTE - Fit interval & AODO not collected */
/* Subframe 3, words 3 to 10 minus parity */
- int16_t cic = getlesw_be(buf, 60);
- int32_t Omega0 = getlesl_be(buf, 62);
- int16_t cis = getlesw_be(buf, 66);
- int32_t i0 = getlesl_be(buf, 68);
- int16_t crc = getlesw_be(buf, 72);
- int32_t omega = getlesl_be(buf, 74);
- int32_t Omegadot = getlesl24_be(buf, 78);
+ int16_t cic = getles16_be(buf, 60);
+ int32_t Omega0 = getles32_be(buf, 62);
+ int16_t cis = getles16_be(buf, 66);
+ int32_t i0 = getles32_be(buf, 68);
+ int16_t crc = getles16_be(buf, 72);
+ int32_t omega = getles32_be(buf, 74);
+ int32_t Omegadot = getles3224_be(buf, 78);
/*@ -predboolothers @*/
/* Question: What is the proper way of shifting a signed int 2 bits to
* the right, preserving sign? Answer: integer division by 4. */
int16_t idot =
- (int16_t) (((getlesw_be(buf, 82) & 0xfffc) /
+ (int16_t) (((getles16_be(buf, 82) & 0xfffc) /
4) | (getub(buf, 82) & 80 ? 0xc000 : 0x0000));
/*@ +predboolothers @*/
char time_str[24];
@@ -718,11 +718,11 @@ static gps_mask_t handle_0x86(struct gps_device_t *session)
hw_channel, s;
uint16_t azm, dgps_age;
unsigned char *buf = session->packet.outbuffer + 3;
- size_t msg_len = (size_t) getleuw(buf, 1);
- uint16_t week = getleuw(buf, 3);
- uint32_t tow = getleul(buf, 5);
+ size_t msg_len = (size_t) getleu16(buf, 1);
+ uint16_t week = getleu16(buf, 3);
+ uint32_t tow = getleu32(buf, 5);
uint8_t eng_status = getub(buf, 9);
- uint16_t sol_status = getleuw(buf, 10);
+ uint16_t sol_status = getleu16(buf, 10);
uint8_t sats_visible = getub(buf, 12);
//uint8_t sats_tracked = getub(buf, 13);
uint8_t sats_used = getub(buf, 14);
@@ -776,10 +776,10 @@ static gps_mask_t handle_0x86(struct gps_device_t *session)
tracking_status = getub(buf, n + 1);
log_channel = getub(buf, n + 2);
ele = getub(buf, n + 5);
- azm = getleuw(buf, n + 6);
+ azm = getleu16(buf, n + 6);
ca_snr = getub(buf, n + 8);
p2_snr = getub(buf, n + 10);
- dgps_age = getleuw(buf, n + 11);
+ dgps_age = getleu16(buf, n + 11);
hw_channel = getub(buf, n + 13);
s = (unsigned char)0;
/*@ -predboolothers +charint @*/
@@ -826,9 +826,9 @@ static gps_mask_t handle_0xb0(struct gps_device_t *session)
#define LAMBDA_L1 (.190293672798364880476317426464)
size_t n;
unsigned char *buf = session->packet.outbuffer + 3;
- size_t msg_len = (size_t) getleuw(buf, 1);
- uint16_t week = getleuw(buf, 3);
- uint32_t tow = getleul(buf, 5);
+ size_t msg_len = (size_t) getleu16(buf, 1);
+ uint16_t week = getleu16(buf, 3);
+ uint32_t tow = getleu32(buf, 5);
uint8_t tm_slew_acc = getub(buf, 9);
uint8_t status = getub(buf, 10);
@@ -853,14 +853,14 @@ static gps_mask_t handle_0xb0(struct gps_device_t *session)
for (n = 11; n < msg_len - 1; n += 16) {
uint8_t sv_status = getub(buf, n);
uint8_t ch_status = getub(buf, n + 1);
- uint32_t ca_pseudorange = getleul(buf, n + 2);
+ uint32_t ca_pseudorange = getleu32(buf, n + 2);
/* integer division by 16 is a sign-preserving right shift of 4 bits */
- int32_t l1_phase = getlesl24(buf, n + 6) / 16;
- uint8_t l1_slips = (uint8_t) (getlesl24(buf, n + 6) & 0x0f);
- int16_t p1_ca_pseudorange = getlesw(buf, n + 9);
- int16_t p2_ca_pseudorange = getlesw(buf, n + 11);
- int32_t l2_phase = getlesl24(buf, n + 13) / 16;
- uint8_t l2_slips = (uint8_t) (getlesl24(buf, n + 13) & 0x0f);
+ int32_t l1_phase = getles3224(buf, n + 6) / 16;
+ uint8_t l1_slips = (uint8_t) (getles3224(buf, n + 6) & 0x0f);
+ int16_t p1_ca_pseudorange = getles16(buf, n + 9);
+ int16_t p2_ca_pseudorange = getles16(buf, n + 11);
+ int32_t l2_phase = getles3224(buf, n + 13) / 16;
+ uint8_t l2_slips = (uint8_t) (getles3224(buf, n + 13) & 0x0f);
/*@ -predboolothers +charint @*/
double c1 =
(sv_status & 0x80 ? (double)ca_pseudorange / 16.0 *
@@ -905,8 +905,8 @@ static gps_mask_t handle_0xb5(struct gps_device_t *session)
gps_mask_t mask = TIME_IS;
union long_double l_d;
unsigned char *buf = session->packet.outbuffer + 3;
- uint16_t week = getleuw(buf, 3);
- uint32_t tow = getleul(buf, 5);
+ uint16_t week = getleu16(buf, 3);
+ uint32_t tow = getleu32(buf, 5);
double rms = getled(buf, 9);
#ifdef __UNUSED__
/* Reason why it's unused is these figures do not agree
@@ -970,14 +970,14 @@ static gps_mask_t handle_0xae(struct gps_device_t *session)
/*@-modobserver@*/
char *engconfstr, *asicstr;
unsigned char *buf = session->packet.outbuffer + 3;
- size_t msg_len = (size_t) getleuw(buf, 1);
+ size_t msg_len = (size_t) getleu16(buf, 1);
uint8_t engconf = getub(buf, 3);
uint8_t asic = getub(buf, 4);
uint8_t swvermaj = getub(buf, 5);
uint8_t swvermin = getub(buf, 6);
- uint16_t dcser = getleuw(buf, 7);
+ uint16_t dcser = getleu16(buf, 7);
uint8_t dcclass = getub(buf, 9);
- uint16_t rfcser = getleuw(buf, 10);
+ uint16_t rfcser = getleu16(buf, 10);
uint8_t rfcclass = getub(buf, 12);
/*@ -stringliteralnoroomfinalnull -type @*/
uint8_t softtm[17] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
@@ -1098,8 +1098,8 @@ static gps_mask_t handle_0xae(struct gps_device_t *session)
static gps_mask_t handle_0xef(struct gps_device_t *session)
{
unsigned char *buf = session->packet.outbuffer + 3;
- //uint16_t week = getleuw(buf, 3);
- //uint32_t tow = getleul(buf, 5);
+ //uint16_t week = getleu16(buf, 3);
+ //uint32_t tow = getleu32(buf, 5);
int8_t osc_temp = getsb(buf, 9);
uint8_t nav_status = getub(buf, 10);
union long_double l_d;
@@ -1107,7 +1107,7 @@ static gps_mask_t handle_0xef(struct gps_device_t *session)
union int_float i_f;
float nav_clock_drift;
float osc_filter_drift_est;
- int32_t time_slew = (int32_t) getlesl(buf, 27);
+ int32_t time_slew = (int32_t) getles32(buf, 27);
if (sizeof(double) == 8) {
nav_clock_offset = getled(buf, 11);
} else {
@@ -1148,7 +1148,7 @@ gps_mask_t navcom_parse(struct gps_device_t * session, unsigned char *buf,
cmd_id = (unsigned char)getub(buf, 3);
payload = &buf[6];
- msg_len = (uint) getleuw(buf, 4);
+ msg_len = (uint) getleu16(buf, 4);
/*@ -usedef -compdef @*/
gpsd_report(LOG_RAW, "Navcom: packet type 0x%02x, length %d: %s\n",
@@ -1221,7 +1221,7 @@ static ssize_t navcom_control_send(struct gps_device_t *session,
putbyte(session->msgbuf, 1, 0x99);
putbyte(session->msgbuf, 2, 0x66);
putbyte(session->msgbuf, 3, buf[0]); /* Cmd ID */
- putleword(session->msgbuf, 4, len + 4); /* Length */
+ putle16(session->msgbuf, 4, len + 4); /* Length */
memcpy(session->msgbuf, buf + 6, len - 1);
putbyte(session->msgbuf, 6 + len,
checksum((unsigned char *)session->msgbuf + 3, len + 5));