64
64
session->context->gps_week = gps_week;
65
65
tow = (uint) getleul(buf, 7 + 84);
66
66
session->context->gps_tow = tow / 1000.0;
67
t = gpstime_to_unix((int)gps_week,session->context->gps_tow)
68
- session->context->leap_seconds;
67
t = gpstime_to_unix((int)gps_week, session->context->gps_tow)
68
- session->context->leap_seconds;
69
69
session->newdata.time = t;
136
135
gpsd_report(LOG_PROG, "ITALK: runt PRN_STATUS (len=%zu)\n", len);
139
138
gps_week = (ushort) getleuw(buf, 7 + 4);
140
139
session->context->gps_week = gps_week;
141
140
tow = (uint) getleul(buf, 7 + 6);
142
141
session->context->gps_tow = tow / 1000.0;
143
t = gpstime_to_unix((int)gps_week,session->context->gps_tow)
144
- session->context->leap_seconds;
142
t = gpstime_to_unix((int)gps_week, session->context->gps_tow)
143
- session->context->leap_seconds;
145
144
session->gpsdata.skyview_time = t;
147
146
gpsd_zero_satellites(&session->gpsdata);
205
204
session->context->gps_week = gps_week;
206
205
tow = (uint) getleul(buf, 7 + 38);
207
206
session->context->gps_tow = tow / 1000.0;
208
t = gpstime_to_unix((int)gps_week,session->context->gps_tow)
209
- session->context->leap_seconds;
207
t = gpstime_to_unix((int)gps_week, session->context->gps_tow)
208
- session->context->leap_seconds;
210
209
session->newdata.time = t;
212
211
gpsd_report(LOG_DATA,
235
234
flags & SUBFRAME_WORD_FLAG_MASK ? "error" : "ok",
236
235
flags & SUBFRAME_GPS_PREAMBLE_INVERTED ? "(inverted)" : "");
237
236
if (flags & SUBFRAME_WORD_FLAG_MASK)
238
return ONLINE_IS | ERROR_IS; // don't try decode an erroneous packet
237
return 0; // don't try decode an erroneous packet
241
240
* Timo says "SUBRAME message contains decoded navigation message subframe
242
241
* words with parity checking done but parity bits still present."
244
243
for (i = 0; i < 10; i++)
245
words[i] = (unsigned int)(getleul(buf, 7 + 14 + 4*i) >> 6) & 0xffffff;
245
(unsigned int)(getleul(buf, 7 + 14 + 4 * i) >> 6) & 0xffffff;
247
247
gpsd_interpret_subframe(session, words);
248
248
return ONLINE_IS;
251
static gps_mask_t decode_itk_pseudo(struct gps_device_t *session,
252
unsigned char *buf, size_t len)
254
unsigned short gps_week, flags, n, i;
256
union long_double l_d;
259
n = (ushort) getleuw(buf, 7 + 4);
260
if ((n < 1) || (n > MAXCHANNELS)){
261
gpsd_report(LOG_INF, "ITALK: bad PSEUDO channel count\n");
265
if (len != (size_t)((n+1)*36)) {
266
gpsd_report(LOG_PROG,
267
"ITALK: bad PSEUDO len %zu\n", len);
270
gpsd_report(LOG_PROG, "iTalk PSEUDO [%u]\n", n);
271
flags = (unsigned short)getleuw(buf, 7 + 6);
272
if ((flags & 0x3) != 0x3)
273
return 0; // bail if measurement time not valid.
275
gps_week = (ushort) getleuw(buf, 7 + 8);
276
tow = (uint) getleul(buf, 7 + 38);
277
session->context->gps_week = gps_week;
278
session->context->gps_tow = tow / 1000.0;
279
t = gpstime_to_unix((int)gps_week, session->context->gps_tow)
280
- session->context->leap_seconds;
283
for (i = 0; i < n; i++){
284
session->gpsdata.PRN[i] = getleuw(buf, 7 + 26 + (i*36)) & 0xff;
285
session->gpsdata.ss[i] = getleuw(buf, 7 + 26 + (i*36 + 2)) & 0x3f;
286
session->gpsdata.raw.satstat[i] = getleul(buf, 7 + 26 + (i*36 + 4));
287
session->gpsdata.raw.pseudorange[i] = getled(buf, 7 + 26 + (i*36 + 8));
288
session->gpsdata.raw.doppler[i] = getled(buf, 7 + 26 + (i*36 + 16));
289
session->gpsdata.raw.carrierphase[i] = getleuw(buf, 7 + 26 + (i*36 + 28));
291
session->gpsdata.raw.mtime[i] = t;
292
session->gpsdata.raw.codephase[i] = NAN;
293
session->gpsdata.raw.deltarange[i] = NAN;
252
300
static gps_mask_t italk_parse(struct gps_device_t *session,
253
301
unsigned char *buf, size_t len)