Lines Matching +full:firmware +full:- +full:initialized

4  * - NeoClock4X driver for DCF77 or FIA Timecode
6 * Date: 2009-12-04 v1.16
57 * NTP version 4.20 change the pp->msec field to pp->nsec.
71 * firmware you NeoClock4X device uses.
74 * line to "#if 1" and make sure that the defined firmware
75 * matches the firmware off your NeoClock4X receiver!
83 /* at this time only firmware version A is known */
105 #define NEOCLOCK4X_DRIVER_VERSION "1.16 (2009-12-04)"
116 char firmware[80]; member
176 (void) snprintf(dev, sizeof(dev)-1, "/dev/neoclock4x-%d", unit); in neoclock4x_start()
181 fd = refclock_open(&peer->srcadr, dev, B2400, LDISC_STD); in neoclock4x_start()
262 if(ioctl(fd, TIOCMGET, (caddr_t)&sl232) == -1) in neoclock4x_start()
273 if(ioctl(fd, TIOCMSET, (caddr_t)&sl232) == -1) in neoclock4x_start()
295 pp = peer->procptr; in neoclock4x_start()
296 pp->clockdesc = "NeoClock4X"; in neoclock4x_start()
297 pp->unitptr = up; in neoclock4x_start()
298 pp->io.clock_recv = neoclock4x_receive; in neoclock4x_start()
299 pp->io.srcclock = peer; in neoclock4x_start()
300 pp->io.datalen = 0; in neoclock4x_start()
301 pp->io.fd = fd; in neoclock4x_start()
309 pp->fudgetime1 = (NEOCLOCK4X_TIMECODELEN * 11) / 2400.0; in neoclock4x_start()
314 peer->precision = -10; in neoclock4x_start()
315 memcpy((char *)&pp->refid, "neol", 4); in neoclock4x_start()
317 up->leap_status = 0; in neoclock4x_start()
318 up->unit = unit; in neoclock4x_start()
319 strlcpy(up->firmware, "?", sizeof(up->firmware)); in neoclock4x_start()
320 up->firmwaretag = '?'; in neoclock4x_start()
321 strlcpy(up->serial, "?", sizeof(up->serial)); in neoclock4x_start()
322 strlcpy(up->radiosignal, "?", sizeof(up->radiosignal)); in neoclock4x_start()
323 up->timesource = '?'; in neoclock4x_start()
324 up->dststatus = '?'; in neoclock4x_start()
325 up->quarzstatus = '?'; in neoclock4x_start()
326 up->antenna1 = -1; in neoclock4x_start()
327 up->antenna2 = -1; in neoclock4x_start()
328 up->utc_year = 0; in neoclock4x_start()
329 up->utc_month = 0; in neoclock4x_start()
330 up->utc_day = 0; in neoclock4x_start()
331 up->utc_hour = 0; in neoclock4x_start()
332 up->utc_minute = 0; in neoclock4x_start()
333 up->utc_second = 0; in neoclock4x_start()
334 up->utc_msec = 0; in neoclock4x_start()
338 strlcpy(up->firmware, "(c) 2002 NEOL S.A. FRANCE / L0.01 NDF:A:* (compile time)", in neoclock4x_start()
339 sizeof(up->firmware)); in neoclock4x_start()
340 up->firmwaretag = 'A'; in neoclock4x_start()
342 msyslog(LOG_EMERG, "NeoClock4X(%d): unknown firmware defined at compile time for NeoClock4X", in neoclock4x_start()
345 pp->io.fd = -1; in neoclock4x_start()
346 free(pp->unitptr); in neoclock4x_start()
347 pp->unitptr = NULL; in neoclock4x_start()
354 msyslog(LOG_INFO, "NeoClock4X(%d): checking NeoClock4X firmware version (%d/5)", unit, tries); in neoclock4x_start()
357 if(neol_query_firmware(pp->io.fd, up->unit, up->firmware, sizeof(up->firmware))) in neoclock4x_start()
363 /* can I handle this firmware version? */ in neoclock4x_start()
364 if(!neol_check_firmware(up->unit, up->firmware, &up->firmwaretag)) in neoclock4x_start()
367 pp->io.fd = -1; in neoclock4x_start()
368 free(pp->unitptr); in neoclock4x_start()
369 pp->unitptr = NULL; in neoclock4x_start()
374 if(!io_addclock(&pp->io)) in neoclock4x_start()
378 pp->io.fd = -1; in neoclock4x_start()
379 free(pp->unitptr); in neoclock4x_start()
380 pp->unitptr = NULL; in neoclock4x_start()
400 pp = peer->procptr; in neoclock4x_shutdown()
403 up = pp->unitptr; in neoclock4x_shutdown()
406 if(-1 != pp->io.fd) in neoclock4x_shutdown()
411 if(ioctl(pp->io.fd, TIOCMGET, (caddr_t)&sl232) == -1) in neoclock4x_shutdown()
423 if(ioctl(pp->io.fd, TIOCMSET, (caddr_t)&sl232) == -1) in neoclock4x_shutdown()
429 io_closeclock(&pp->io); in neoclock4x_shutdown()
432 pp->unitptr = NULL; in neoclock4x_shutdown()
457 peer = rbufp->recv_peer; in neoclock4x_receive()
458 pp = peer->procptr; in neoclock4x_receive()
459 up = pp->unitptr; in neoclock4x_receive()
462 if(0 == up->recvnow) in neoclock4x_receive()
466 up->recvnow = 0; in neoclock4x_receive()
469 pp->lencode = refclock_gtlin(rbufp, pp->a_lastcode, BMAX, &pp->lastrec); in neoclock4x_receive()
470 pp->leap = LEAP_NOWARNING; in neoclock4x_receive()
472 if(NEOCLOCK4X_TIMECODELEN != pp->lencode) in neoclock4x_receive()
476 up->unit, NEOCLOCK4X_TIMECODELEN, pp->lencode, pp->a_lastcode); in neoclock4x_receive()
481 neol_hexatoi_len(&pp->a_lastcode[NEOCLOCK4X_OFFSET_CRC], &recv_chksum, 2); in neoclock4x_receive()
487 calc_chksum += pp->a_lastcode[c]; in neoclock4x_receive()
493 up->unit, pp->a_lastcode); in neoclock4x_receive()
499 * never initialized. in neoclock4x_receive()
502 up->quarzstatus = pp->a_lastcode[NEOCLOCK4X_OFFSET_QUARZSTATUS]; in neoclock4x_receive()
503 if(0==(pp->sloppyclockflag & CLK_FLAG2)) in neoclock4x_receive()
505 if('I' != up->quarzstatus) in neoclock4x_receive()
508 msyslog(LOG_NOTICE, "NeoClock4X(%d): quartz clock is not initialized: %s", in neoclock4x_receive()
509 up->unit, pp->a_lastcode); in neoclock4x_receive()
510 pp->leap = LEAP_NOTINSYNC; in neoclock4x_receive()
515 if('I' != up->quarzstatus) in neoclock4x_receive()
519 up->unit, pp->a_lastcode); in neoclock4x_receive()
527 up->timesource = pp->a_lastcode[NEOCLOCK4X_OFFSET_TIMESOURCE]; in neoclock4x_receive()
528 if(0==(pp->sloppyclockflag & CLK_FLAG2)) in neoclock4x_receive()
530 if('A' != up->timesource) in neoclock4x_receive()
533 if(0==(pp->sloppyclockflag & CLK_FLAG1)) in neoclock4x_receive()
536 pp->leap = LEAP_NOTINSYNC; in neoclock4x_receive()
543 if(pp->sloppyclockflag & CLK_FLAG4) in neoclock4x_receive()
546 up->unit, pp->a_lastcode); in neoclock4x_receive()
552 neol_atoi_len(&pp->a_lastcode[NEOCLOCK4X_OFFSET_YEAR], &pp->year, 2); in neoclock4x_receive()
553 neol_atoi_len(&pp->a_lastcode[NEOCLOCK4X_OFFSET_MONTH], &month, 2); in neoclock4x_receive()
554 neol_atoi_len(&pp->a_lastcode[NEOCLOCK4X_OFFSET_DAY], &day, 2); in neoclock4x_receive()
555 neol_atoi_len(&pp->a_lastcode[NEOCLOCK4X_OFFSET_HOUR], &pp->hour, 2); in neoclock4x_receive()
556 neol_atoi_len(&pp->a_lastcode[NEOCLOCK4X_OFFSET_MINUTE], &pp->minute, 2); in neoclock4x_receive()
557 neol_atoi_len(&pp->a_lastcode[NEOCLOCK4X_OFFSET_SECOND], &pp->second, 2); in neoclock4x_receive()
558 neol_atoi_len(&pp->a_lastcode[NEOCLOCK4X_OFFSET_HSEC], &dsec, 2); in neoclock4x_receive()
560 pp->msec = dsec * 10; /* convert 1/100s from neoclock to real miliseconds */ in neoclock4x_receive()
562 pp->nsec = dsec * 10 * NSEC_TO_MILLI; /* convert 1/100s from neoclock to nanoseconds */ in neoclock4x_receive()
565 memcpy(up->radiosignal, &pp->a_lastcode[NEOCLOCK4X_OFFSET_RADIOSIGNAL], 3); in neoclock4x_receive()
566 up->radiosignal[3] = 0; in neoclock4x_receive()
567 memcpy(up->serial, &pp->a_lastcode[NEOCLOCK4X_OFFSET_SERIAL], 6); in neoclock4x_receive()
568 up->serial[6] = 0; in neoclock4x_receive()
569 up->dststatus = pp->a_lastcode[NEOCLOCK4X_OFFSET_DSTSTATUS]; in neoclock4x_receive()
570 neol_hexatoi_len(&pp->a_lastcode[NEOCLOCK4X_OFFSET_ANTENNA1], &up->antenna1, 2); in neoclock4x_receive()
571 neol_hexatoi_len(&pp->a_lastcode[NEOCLOCK4X_OFFSET_ANTENNA2], &up->antenna2, 2); in neoclock4x_receive()
575 array-bounds problems, etc. in neoclock4x_receive()
577 if((pp->hour < 0) || (pp->hour > 23) || in neoclock4x_receive()
578 (pp->minute < 0) || (pp->minute > 59) || in neoclock4x_receive()
579 (pp->second < 0) || (pp->second > 60) /*Allow for leap seconds.*/ || in neoclock4x_receive()
582 (pp->year < 0) || (pp->year > 99)) { in neoclock4x_receive()
586 up->unit, pp->a_lastcode); in neoclock4x_receive()
591 /* Year-2000 check not needed anymore. Same problem in neoclock4x_receive()
594 * wrap 2-digit date into 4-digit in neoclock4x_receive()
596 * if(pp->year < YEAR_PIVOT) in neoclock4x_receive()
598 * pp->year += 100; in neoclock4x_receive()
601 pp->year += 2000; in neoclock4x_receive()
604 calc_utc = neol_mktime(pp->year, month, day, pp->hour, pp->minute, pp->second); in neoclock4x_receive()
605 calc_utc -= 3600; in neoclock4x_receive()
607 if('S' == up->dststatus) in neoclock4x_receive()
608 calc_utc -= 3600; in neoclock4x_receive()
609 neol_localtime(calc_utc, &pp->year, &month, &day, &pp->hour, &pp->minute, &pp->second); in neoclock4x_receive()
614 pp->day = ymd2yd(pp->year, month, day); in neoclock4x_receive()
615 pp->leap = 0; in neoclock4x_receive()
617 if(pp->sloppyclockflag & CLK_FLAG4) in neoclock4x_receive()
619 …msyslog(LOG_DEBUG, "NeoClock4X(%d): calculated UTC date/time: %04d-%02d-%02d %02d:%02d:%02d.%03ld", in neoclock4x_receive()
620 up->unit, in neoclock4x_receive()
621 pp->year, month, day, in neoclock4x_receive()
622 pp->hour, pp->minute, pp->second, in neoclock4x_receive()
624 pp->msec in neoclock4x_receive()
626 pp->nsec/NSEC_TO_MILLI in neoclock4x_receive()
631 up->utc_year = pp->year; in neoclock4x_receive()
632 up->utc_month = month; in neoclock4x_receive()
633 up->utc_day = day; in neoclock4x_receive()
634 up->utc_hour = pp->hour; in neoclock4x_receive()
635 up->utc_minute = pp->minute; in neoclock4x_receive()
636 up->utc_second = pp->second; in neoclock4x_receive()
638 up->utc_msec = pp->msec; in neoclock4x_receive()
640 up->utc_msec = pp->nsec/NSEC_TO_MILLI; in neoclock4x_receive()
646 msyslog(LOG_WARNING, "NeoClock4X(%d): refclock_process failed!", up->unit); in neoclock4x_receive()
655 record_clock_stats(&peer->srcadr, pp->a_lastcode); in neoclock4x_receive()
665 pp = peer->procptr; in neoclock4x_poll()
666 up = pp->unitptr; in neoclock4x_poll()
668 pp->polls++; in neoclock4x_poll()
669 up->recvnow = 1; in neoclock4x_poll()
687 pp = peer->procptr; in neoclock4x_control()
694 up = pp->unitptr; in neoclock4x_control()
704 if(in->haveflags & CLK_HAVETIME1) in neoclock4x_control()
706 pp->fudgetime1 = in->fudgetime1; in neoclock4x_control()
709 unit, pp->fudgetime1); in neoclock4x_control()
713 if(pp->sloppyclockflag & CLK_FLAG1) in neoclock4x_control()
730 out->kv_list = (struct ctl_var *)0; in neoclock4x_control()
731 out->type = REFCLK_NEOCLOCK4X; in neoclock4x_control()
733 snprintf(tmpbuf, sizeof(tmpbuf)-1, in neoclock4x_control()
734 "%04d-%02d-%02d %02d:%02d:%02d.%03d", in neoclock4x_control()
735 up->utc_year, up->utc_month, up->utc_day, in neoclock4x_control()
736 up->utc_hour, up->utc_minute, up->utc_second, in neoclock4x_control()
737 up->utc_msec); in neoclock4x_control()
738 tt = add_var(&out->kv_list, sizeof(tmpbuf)-1, RO|DEF); in neoclock4x_control()
739 snprintf(tt, sizeof(tmpbuf)-1, "calc_utc=\"%s\"", tmpbuf); in neoclock4x_control()
741 tt = add_var(&out->kv_list, 40, RO|DEF); in neoclock4x_control()
742 snprintf(tt, 39, "radiosignal=\"%s\"", up->radiosignal); in neoclock4x_control()
743 tt = add_var(&out->kv_list, 40, RO|DEF); in neoclock4x_control()
744 snprintf(tt, 39, "antenna1=\"%d\"", up->antenna1); in neoclock4x_control()
745 tt = add_var(&out->kv_list, 40, RO|DEF); in neoclock4x_control()
746 snprintf(tt, 39, "antenna2=\"%d\"", up->antenna2); in neoclock4x_control()
747 tt = add_var(&out->kv_list, 40, RO|DEF); in neoclock4x_control()
748 if('A' == up->timesource) in neoclock4x_control()
750 else if('C' == up->timesource) in neoclock4x_control()
754 tt = add_var(&out->kv_list, 40, RO|DEF); in neoclock4x_control()
755 if('I' == up->quarzstatus) in neoclock4x_control()
757 else if('X' == up->quarzstatus) in neoclock4x_control()
761 tt = add_var(&out->kv_list, 40, RO|DEF); in neoclock4x_control()
762 if('S' == up->dststatus) in neoclock4x_control()
764 else if('W' == up->dststatus) in neoclock4x_control()
768 tt = add_var(&out->kv_list, 80, RO|DEF); in neoclock4x_control()
769 snprintf(tt, 79, "firmware=\"%s\"", up->firmware); in neoclock4x_control()
770 tt = add_var(&out->kv_list, 40, RO|DEF); in neoclock4x_control()
771 snprintf(tt, 39, "firmwaretag=\"%c\"", up->firmwaretag); in neoclock4x_control()
772 tt = add_var(&out->kv_list, 80, RO|DEF); in neoclock4x_control()
774 tt = add_var(&out->kv_list, 80, RO|DEF); in neoclock4x_control()
775 snprintf(tt, 79, "serialnumber=\"%s\"", up->serial); in neoclock4x_control()
790 …(unsigned char)str[i]) ? toupper((unsigned char)str[i]) - '0' : toupper((unsigned char)str[i]) - '… in neol_hexatoi_len()
808 digit = str[i] - '0'; in neol_atoi_len()
815 /* Converts Gregorian date to seconds since 1970-01-01 00:00:00.
816 * Assumes input in normal date format, i.e. 1980-12-31 23:59:59
822 * -year/100+year/400 terms, and add 10.]
826 * WARNING: this function will overflow on 2106-02-07 06:28:16 on
827 * machines were long is 32-bit! (However, as time_t is signed, we
828 * will already get problems at other places on 2038-01-19 03:14:08)
838 if (0 >= (int) (mon -= 2)) { /* 1..12 . 11,12,1..10 */ in neol_mktime()
840 year -= 1; in neol_mktime()
843 (unsigned long)(year/4 - year/100 + year/400 + 367*mon/12 + day) + in neol_mktime()
844 year*365 - 719499 in neol_mktime()
882 x = x - (daysPer400Years * z + 3UL) / 4UL; in neol_jdn_to_ymd()
884 x = x - 1461UL * y / 4UL + 31UL; in neol_jdn_to_ymd()
886 d = x - 2447UL * m / 80UL; in neol_jdn_to_ymd()
888 m = m + 2UL - 12UL * x; in neol_jdn_to_ymd()
889 y = 100UL * (z - 49UL) + y + x; in neol_jdn_to_ymd()
900 char *firmware, in neol_query_firmware() argument
916 if(-1 != write(fd, "V", 1)) in neol_query_firmware()
933 msyslog(LOG_ERR, "NeoClock4X(%d): can't read firmware version (timeout)", unit); in neol_query_firmware()
939 msyslog(LOG_ERR, "NeoClock4X(%d): can't read firmware version (garbage)", unit); in neol_query_firmware()
943 if(-1 == read(fd, &c, 1)) in neol_query_firmware()
973 msyslog(LOG_NOTICE, "NeoClock4X(%d): firmware %c = %02Xh", unit, c, c); in neol_query_firmware()
1004 if (len > sizeof(tmpbuf)-5) in neol_query_firmware()
1010 msyslog(LOG_ERR, "NeoClock4X(%d): can't query firmware version", unit); in neol_query_firmware()
1013 if (strlcpy(firmware, tmpbuf, maxlen) >= maxlen) in neol_query_firmware()
1014 strlcpy(firmware, "buffer too small", maxlen); in neol_query_firmware()
1019 msyslog(LOG_INFO, "NeoClock4X(%d): firmware version: %s", unit, firmware); in neol_query_firmware()
1021 if(strstr(firmware, "/R2")) in neol_query_firmware()
1023 …msyslog(LOG_INFO, "NeoClock4X(%d): Your NeoClock4X uses the new R2 firmware release. Please note t… in neol_query_firmware()
1033 const char *firmware, in neol_check_firmware() argument
1039 ptr = strstr(firmware, "NDF:"); in neol_check_firmware()
1042 if((strlen(firmware) - strlen(ptr)) >= 7) in neol_check_firmware()
1051 …msyslog(LOG_CRIT, "NeoClock4X(%d): firmware version \"%c\" not supported with this driver version!… in neol_check_firmware()
1075 * - don't assume sprintf returns an int anymore
1076 * - change the way the firmware version is read
1077 * - some customers would like to put a device called
1079 * the write line. We need to now the firmware
1086 * - changing xprinf to xnprinf to avoid buffer overflows
1087 * - change some logic
1088 * - fixed memory leaks if drivers can't initialize
1092 * - replaced ldiv
1093 * - add code to support FreeBSD
1097 * - fix reporting of clock status
1103 * - open serial port in a way
1109 * - remove some unsued #ifdefs
1110 * - fix nsec calculation, closes #499
1114 * - change license to ntp COPYRIGHT notice. This should allow Debian
1116 * - detect R2 hardware