Lines Matching refs:np
101 struct nmea *np; in nmeaopen() local
108 np = malloc(sizeof(struct nmea), M_DEVBUF, M_WAITOK | M_ZERO); in nmeaopen()
109 snprintf(np->timedev.xname, sizeof(np->timedev.xname), "nmea%d", in nmeaopen()
112 np->time.status = SENSOR_S_UNKNOWN; in nmeaopen()
113 np->time.type = SENSOR_TIMEDELTA; in nmeaopen()
114 np->time.flags = SENSOR_FINVALID; in nmeaopen()
115 sensor_attach(&np->timedev, &np->time); in nmeaopen()
117 np->signal.type = SENSOR_INDICATOR; in nmeaopen()
118 np->signal.status = SENSOR_S_UNKNOWN; in nmeaopen()
119 np->signal.value = 0; in nmeaopen()
120 strlcpy(np->signal.desc, "Signal", sizeof(np->signal.desc)); in nmeaopen()
121 sensor_attach(&np->timedev, &np->signal); in nmeaopen()
123 np->latitude.type = SENSOR_ANGLE; in nmeaopen()
124 np->latitude.status = SENSOR_S_UNKNOWN; in nmeaopen()
125 np->latitude.flags = SENSOR_FINVALID; in nmeaopen()
126 np->latitude.value = 0; in nmeaopen()
127 strlcpy(np->latitude.desc, "Latitude", sizeof(np->latitude.desc)); in nmeaopen()
128 sensor_attach(&np->timedev, &np->latitude); in nmeaopen()
130 np->longitude.type = SENSOR_ANGLE; in nmeaopen()
131 np->longitude.status = SENSOR_S_UNKNOWN; in nmeaopen()
132 np->longitude.flags = SENSOR_FINVALID; in nmeaopen()
133 np->longitude.value = 0; in nmeaopen()
134 strlcpy(np->longitude.desc, "Longitude", sizeof(np->longitude.desc)); in nmeaopen()
135 sensor_attach(&np->timedev, &np->longitude); in nmeaopen()
137 np->altitude.type = SENSOR_DISTANCE; in nmeaopen()
138 np->altitude.status = SENSOR_S_UNKNOWN; in nmeaopen()
139 np->altitude.flags = SENSOR_FINVALID; in nmeaopen()
140 np->altitude.value = 0; in nmeaopen()
141 strlcpy(np->altitude.desc, "Altitude", sizeof(np->altitude.desc)); in nmeaopen()
142 sensor_attach(&np->timedev, &np->altitude); in nmeaopen()
144 np->speed.type = SENSOR_VELOCITY; in nmeaopen()
145 np->speed.status = SENSOR_S_UNKNOWN; in nmeaopen()
146 np->speed.flags = SENSOR_FINVALID; in nmeaopen()
147 np->speed.value = 0; in nmeaopen()
148 strlcpy(np->speed.desc, "Ground speed", sizeof(np->speed.desc)); in nmeaopen()
149 sensor_attach(&np->timedev, &np->speed); in nmeaopen()
151 np->sync = 1; in nmeaopen()
152 tp->t_sc = (caddr_t)np; in nmeaopen()
156 free(np, M_DEVBUF, sizeof(*np)); in nmeaopen()
159 sensordev_install(&np->timedev); in nmeaopen()
160 timeout_set(&np->nmea_tout, nmea_timeout, np); in nmeaopen()
168 struct nmea *np = (struct nmea *)tp->t_sc; in nmeaclose() local
171 timeout_del(&np->nmea_tout); in nmeaclose()
172 sensordev_deinstall(&np->timedev); in nmeaclose()
173 free(np, M_DEVBUF, sizeof(*np)); in nmeaclose()
185 struct nmea *np = (struct nmea *)tp->t_sc; in nmeainput() local
193 np->pos = np->sync = 0; in nmeainput()
195 (np->lts.tv_sec * 1000000000LL + np->lts.tv_nsec); in nmeainput()
197 np->lts.tv_sec = ts.tv_sec; in nmeainput()
198 np->lts.tv_nsec = ts.tv_nsec; in nmeainput()
200 if (gap <= np->gap) in nmeainput()
203 np->ts.tv_sec = ts.tv_sec; in nmeainput()
204 np->ts.tv_nsec = ts.tv_nsec; in nmeainput()
209 linesw[TTYDISC].l_rint('0' + np->gapno++, tp); in nmeainput()
213 np->gap = gap; in nmeainput()
225 tmax = lmax(np->ts.tv_sec, tp->t_tv.tv_sec); in nmeainput()
226 tmin = lmin(np->ts.tv_sec, tp->t_tv.tv_sec); in nmeainput()
228 np->no_pps = 1; in nmeainput()
230 np->ts.tv_sec = tp->t_tv.tv_sec; in nmeainput()
231 np->ts.tv_nsec = tp->t_tv.tv_usec * in nmeainput()
233 np->no_pps = 0; in nmeainput()
239 if (!np->sync) { in nmeainput()
240 np->cbuf[np->pos] = '\0'; in nmeainput()
241 nmea_scan(np, tp); in nmeainput()
242 np->sync = 1; in nmeainput()
246 if (!np->sync && np->pos < (NMEAMAX - 1)) in nmeainput()
247 np->cbuf[np->pos++] = c; in nmeainput()
256 nmea_scan(struct nmea *np, struct tty *tp) in nmea_scan() argument
262 fld[fldcnt++] = &np->cbuf[0]; /* message type */ in nmea_scan()
263 for (cs = NULL, n = 0; n < np->pos && cs == NULL; n++) { in nmea_scan()
264 switch (np->cbuf[n]) { in nmea_scan()
266 np->cbuf[n] = '\0'; in nmea_scan()
267 cs = &np->cbuf[n + 1]; in nmea_scan()
271 cksum ^= np->cbuf[n]; in nmea_scan()
272 np->cbuf[n] = '\0'; in nmea_scan()
273 fld[fldcnt++] = &np->cbuf[n + 1]; in nmea_scan()
281 cksum ^= np->cbuf[n]; in nmea_scan()
330 nmea_gprmc(np, tp, fld, fldcnt); in nmea_scan()
332 nmea_decode_gga(np, tp, fld, fldcnt); in nmea_scan()
337 nmea_gprmc(struct nmea *np, struct tty *tp, char *fld[], int fldcnt) in nmea_gprmc() argument
355 if (nmea_now <= np->last) { in nmea_gprmc()
359 np->last = nmea_now; in nmea_gprmc()
360 np->gap = 0LL; in nmea_gprmc()
362 if (np->time.status == SENSOR_S_UNKNOWN) { in nmea_gprmc()
363 np->time.status = SENSOR_S_OK; in nmea_gprmc()
364 timeout_add_sec(&np->nmea_tout, TRUSTTIME); in nmea_gprmc()
366 np->gapno = 0; in nmea_gprmc()
374 np->time.value = np->ts.tv_sec * 1000000000LL + in nmea_gprmc()
375 np->ts.tv_nsec - nmea_now; in nmea_gprmc()
376 np->time.tv.tv_sec = np->ts.tv_sec; in nmea_gprmc()
377 np->time.tv.tv_usec = np->ts.tv_nsec / 1000L; in nmea_gprmc()
380 strlcpy(np->time.desc, "GPS", sizeof(np->time.desc)); in nmea_gprmc()
381 else if (*fld[12] != np->mode) { in nmea_gprmc()
382 np->mode = *fld[12]; in nmea_gprmc()
383 switch (np->mode) { in nmea_gprmc()
385 strlcpy(np->time.desc, "GPS simulated", in nmea_gprmc()
386 sizeof(np->time.desc)); in nmea_gprmc()
389 strlcpy(np->time.desc, "GPS estimated", in nmea_gprmc()
390 sizeof(np->time.desc)); in nmea_gprmc()
393 strlcpy(np->time.desc, "GPS autonomous", in nmea_gprmc()
394 sizeof(np->time.desc)); in nmea_gprmc()
397 strlcpy(np->time.desc, "GPS differential", in nmea_gprmc()
398 sizeof(np->time.desc)); in nmea_gprmc()
401 strlcpy(np->time.desc, "GPS invalid", in nmea_gprmc()
402 sizeof(np->time.desc)); in nmea_gprmc()
405 strlcpy(np->time.desc, "GPS unknown", in nmea_gprmc()
406 sizeof(np->time.desc)); in nmea_gprmc()
407 DPRINTF(("gprmc: unknown mode '%c'\n", np->mode)); in nmea_gprmc()
413 np->time.status = SENSOR_S_OK; in nmea_gprmc()
414 np->signal.value = 1; in nmea_gprmc()
415 np->signal.status = SENSOR_S_OK; in nmea_gprmc()
416 np->latitude.status = SENSOR_S_OK; in nmea_gprmc()
417 np->longitude.status = SENSOR_S_OK; in nmea_gprmc()
418 np->speed.status = SENSOR_S_OK; in nmea_gprmc()
419 np->time.flags &= ~SENSOR_FINVALID; in nmea_gprmc()
420 np->latitude.flags &= ~SENSOR_FINVALID; in nmea_gprmc()
421 np->longitude.flags &= ~SENSOR_FINVALID; in nmea_gprmc()
422 np->speed.flags &= ~SENSOR_FINVALID; in nmea_gprmc()
430 np->signal.value = 0; in nmea_gprmc()
431 np->signal.status = SENSOR_S_CRIT; in nmea_gprmc()
432 np->latitude.status = SENSOR_S_WARN; in nmea_gprmc()
433 np->longitude.status = SENSOR_S_WARN; in nmea_gprmc()
434 np->speed.status = SENSOR_S_WARN; in nmea_gprmc()
437 if (nmea_degrees(&np->latitude.value, fld[3], *fld[4] == 'S' ? 1 : 0)) in nmea_gprmc()
438 np->latitude.status = SENSOR_S_WARN; in nmea_gprmc()
439 if (nmea_degrees(&np->longitude.value,fld[5], *fld[6] == 'W' ? 1 : 0)) in nmea_gprmc()
440 np->longitude.status = SENSOR_S_WARN; in nmea_gprmc()
442 if (nmea_atoi(&np->speed.value, fld[7])) in nmea_gprmc()
443 np->speed.status = SENSOR_S_WARN; in nmea_gprmc()
445 np->speed.value *= KNOTTOMS; in nmea_gprmc()
448 np->time.status = SENSOR_S_WARN; in nmea_gprmc()
449 if (np->time.status == SENSOR_S_OK) in nmea_gprmc()
450 timeout_add_sec(&np->nmea_tout, TRUSTTIME); in nmea_gprmc()
455 if (np->no_pps) in nmea_gprmc()
456 np->time.status = SENSOR_S_CRIT; in nmea_gprmc()
464 nmea_decode_gga(struct nmea *np, struct tty *tp, char *fld[], int fldcnt) in nmea_decode_gga() argument
478 np->altitude.status = SENSOR_S_OK; in nmea_decode_gga()
479 if (nmea_atoi(&np->altitude.value, fld[9])) in nmea_decode_gga()
480 np->altitude.status = SENSOR_S_WARN; in nmea_decode_gga()
483 np->altitude.value *= 1000; in nmea_decode_gga()
484 np->altitude.flags &= ~SENSOR_FINVALID; in nmea_decode_gga()
648 struct nmea *np = xnp; in nmea_timeout() local
650 np->signal.value = 0; in nmea_timeout()
651 np->signal.status = SENSOR_S_CRIT; in nmea_timeout()
652 if (np->time.status == SENSOR_S_OK) { in nmea_timeout()
653 np->time.status = SENSOR_S_WARN; in nmea_timeout()
654 np->latitude.status = SENSOR_S_WARN; in nmea_timeout()
655 np->longitude.status = SENSOR_S_WARN; in nmea_timeout()
656 np->altitude.status = SENSOR_S_WARN; in nmea_timeout()
657 np->speed.status = SENSOR_S_WARN; in nmea_timeout()
662 timeout_add_sec(&np->nmea_tout, TRUSTTIME); in nmea_timeout()
664 np->time.status = SENSOR_S_CRIT; in nmea_timeout()
665 np->latitude.status = SENSOR_S_CRIT; in nmea_timeout()
666 np->longitude.status = SENSOR_S_CRIT; in nmea_timeout()
667 np->altitude.status = SENSOR_S_CRIT; in nmea_timeout()
668 np->speed.status = SENSOR_S_CRIT; in nmea_timeout()