diff options
author | Gary E. Miller <gem@rellim.com> | 2019-01-24 16:01:38 -0800 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2019-01-24 16:01:38 -0800 |
commit | 77b3d4f09d7f51d6a22868a87ce5774fea5fccb4 (patch) | |
tree | da58bcb5bf69b92633507a38e4257a4f895e49fb /driver_sirf.c | |
parent | 6223bc07e38e5fec5a9889a9fe42a0205e2c905f (diff) | |
download | gpsd-77b3d4f09d7f51d6a22868a87ce5774fea5fccb4.tar.gz |
driver_sirf: convert nasty 'if's into nice switch.
Which showed several unhandled cases...
Diffstat (limited to 'driver_sirf.c')
-rw-r--r-- | driver_sirf.c | 58 |
1 files changed, 37 insertions, 21 deletions
diff --git a/driver_sirf.c b/driver_sirf.c index d9b9072e..7d343bed 100644 --- a/driver_sirf.c +++ b/driver_sirf.c @@ -2187,10 +2187,30 @@ static void sirfbin_init_query(struct gps_device_t *session) static void sirfbin_event_hook(struct gps_device_t *session, event_t event) { + int step; /* configure step */ + static unsigned char moderevert[] = { + 0xa0, 0xa2, 0x00, 0x0e, + 0x88, + 0x00, 0x00, /* pad bytes */ + 0x00, /* degraded mode */ + 0x00, 0x00, /* pad bytes */ + 0x00, 0x00, /* altitude source */ + 0x00, /* altitude hold mode */ + 0x00, /* use last computed alt */ + 0x00, /* reserved */ + 0x00, /* degraded mode timeout */ + 0x00, /* dead reckoning timeout */ + 0x00, /* track smoothing */ + 0x00, 0x00, 0xb0, 0xb3 + }; + if (session->context->readonly) return; - if (event == event_identified || event == event_reactivate) { + switch (event) { + case event_identified: + /* FALLTHROUGH */ + case event_reactivate: if (session->lexer.type == NMEA_PACKET) { gpsd_log(&session->context->errout, LOG_PROG, "SiRF: Switching chip mode to binary.\n"); @@ -2198,9 +2218,9 @@ static void sirfbin_event_hook(struct gps_device_t *session, event_t event) "$PSRF100,0,%d,8,1,0", session->gpsdata.dev.baudrate); } - } + break; - if (event == event_configure) { + case event_configure: /* This wakes up on every received packet. * Use this hook to step, slowly, through the init messages. * We try, but not always succeed, to wait for the ACK/NACK. @@ -2211,7 +2231,6 @@ static void sirfbin_event_hook(struct gps_device_t *session, event_t event) * it much easier to identify which messages get a NACK */ - int step; if (UINT_MAX == session->driver.sirf.cfg_stage) { /* init done */ @@ -2342,24 +2361,10 @@ static void sirfbin_event_hook(struct gps_device_t *session, event_t event) session->driver.sirf.cfg_stage = UINT_MAX; return; } - } + break; + + case event_deactivate: - if (event == event_deactivate) { - - static unsigned char moderevert[] = { 0xa0, 0xa2, 0x00, 0x0e, - 0x88, - 0x00, 0x00, /* pad bytes */ - 0x00, /* degraded mode */ - 0x00, 0x00, /* pad bytes */ - 0x00, 0x00, /* altitude source */ - 0x00, /* altitude hold mode */ - 0x00, /* use last computed alt */ - 0x00, /* reserved */ - 0x00, /* degraded mode timeout */ - 0x00, /* dead reckoning timeout */ - 0x00, /* track smoothing */ - 0x00, 0x00, 0xb0, 0xb3 - }; putbyte(moderevert, 7, session->driver.sirf.degraded_mode); putbe16(moderevert, 10, session->driver.sirf.altitude_source_input); putbyte(moderevert, 12, session->driver.sirf.altitude_hold_mode); @@ -2370,6 +2375,17 @@ static void sirfbin_event_hook(struct gps_device_t *session, event_t event) gpsd_log(&session->context->errout, LOG_PROG, "SiRF: Reverting navigation parameters...\n"); (void)sirf_write(session, moderevert); + break; + + case event_driver_switch: + /* do what here? */ + break; + case event_triggermatch: + /* do what here? */ + break; + case event_wakeup: + /* do what here? */ + break; } } |