#
# /src/NTP/REPOSITORY/v3/kernel/README.dcf77,v 3.7 1993/07/06 10:01:38 kardel Exp
#
# README.dcf77,v
# Revision 3.7  1993/07/06  10:01:38  kardel
# DCF77 driver goes generic...
#
# Revision 3.6  1993/06/16  13:14:36  kardel
# README.dcf77
#
# Revision 3.5  1992/12/10  12:57:55  kardel
# Prerelease NTP V3 / DCF
#
# Revision 3.4  1992/11/12  14:41:06  kardel
# typoes fixed
#
# Revision 3.3  1992/09/03  13:17:02  kardel
# Updated documentation
#
#
MINI INFO:

#ifdef ENGLISH
Installation of a Stream module requires knowledge in kernel generation
and possession of "superuser" rights.

This directory contains the STREAMS module code for the supported DCF/GPS
receivers of the "parse" driver.
The dataformat should be easy to adept for other clocks.

A suitable kernel module can be generated in two ways:
	1) loadable driver
	2) linking into the kernel

Solution 1 has the advantage that the kernel module is present right at system startup,
while solution 2 avoids reconfigurating the kernel (except for VDDRV).

Loadable Driver: (Kernel must be configured with VDDRV option like e.g. GENERIC)
	make -f Makefile.dcf77

#	make one module for each kernel architecture you intend to use this module for

	make -f Makefile.dcf77 mparsestreams.o
# use the above command for a version with increased time stamp precision
# (available only for sun4c and sun4m architectures (thanks Craig Leres)

Integration into kernel (refer to the Manual for complete instructions)
	Still possible, but not recommended (you need dcf77sync.o AND dcf77parse.o
	from libntp.a)

if you run into trouble: time@informatik.uni-erlangen.de

Porting to different clock formats:
The streams module is designed to be able to parse different time code
packets. The parser is very simple and expects at least a start or end of packet
character. In order to be able to distinguish time code packets a list
of several start/end pairs and conversion routines can be defined in the
clockformats structure. Whenever a packet delimited by any start/end pair is 
detected the conversion routines are called in a RR fashion for converting the 
time code into a clocktime structure. A return code of CVT_OK indicates a 
correct conversion.
(This routine will be called first on the next conversion attempt). CVT_FAIL
indicates the the packet format was detected, but the actual conversion failed 
(e.g.  illegal time codes). A CVT_NONE indicates that this conversion routine
did not recognize the packet format.
See the simpleformat conversion routines for Meinberg clocks for examples.
It might be possible to parse other periodically sent time codes with a fixed
format with these simple conversion routines.
The parser can be found in lib/parse*.c

The actual STREAMS module is parsestreams.c. It contains some fudge factors.
These are needed if a PPS hardware signal is sampled via the serial CD input.
There are some emperically determined valued for sun4c type machine in there.
Measurements have shown, that for full precision these values have to be
determined in the actual environment, as line lengths and capacities DO matter.
So for absolute precision you need a good oscilloscope and the license for
hardware work.
WARNING: DO NOT ATTEMPT TO MEASURE IF YOU ARE NOT ABSOLUTELY CERTAIN WHAT YOU 
ARE DOING.

This instructions are distributed in the hope that they will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

I will not be in any case responsible for any damage cause by this 
Software/Instruction.

USE AT YOUR OWN RISK.

#else

Installation eines STREAMS Moduls setzt Kenntnisse in der Kerngenerierung
und "Superuser"-Rechte vorraus.

Dieses Inhaltsverzeichnis enthaelt das aktuelle Streams Modul fuer Sun.

Man kann dieses Modul auf zwei Weisen in den Kern integrieren:
	1) direkt durch Einbinden (neuer Kern)
	2) als ladbarer Treiber

Loesung 1 hat den Vorteil, dass das Modul gleich nach Systemstart zur 
Verfuegung steht.
Loesung 2 besticht dadurch, das man das Modul nachtraeglich laden und 
auch debuggen kann, ohne einen neuen Kern zu booten.

Fuer ein ladbares Modul muss der Kern mit der VDDRV option konfiguriert sein und das
parsestreams.c muss mit -DVDDRV uebersetzt werden.

Uebersetzung fuer ladbaren Treiber (Kern muss mit VDDRV konfiguriert sein):
	make -f Makefile.dcf77
	bitte einmal fuer jede Kernelarchitektur, fuer die dieses Modul
	benoetigt wird durchfuehren.

	make -f Makefile.dcf77 mparsestreams.o
	Das obige make erstellt eine Version, die die Rechneruhr besser
	als SunOS abliest. Nur fur sun4c und sun4m Architekturen verfuegbar

Uebersetzung als .o Modul oder vorherige Einbindung in die Kernbauumgebung:
	Immer noch moeglich, wird aber nicht mehr empfohlen.

Anpassung an andere Datenformate:
Das Streamsmodul ist in der Lage verschiedene Datenformate zu erkennen und
umzusetzen. Der Parser ist einfach gehalten und kann Datenpakete anhand von
Start und Endekennzeichen unterscheiden. Jedes so erkannte Paket wird einer 
Liste von Konvertierroutinen vorgelegt (clockformats Struktur). Die 
Konvertierroutinen koennen mit drei verschiedenen Rueckgabewerten angeben,
wie die Konvertierung verlaufen ist. CVT_OK heisst, dass die Konvertierung 
in die clocktime Struktur erfolgreich verlaufen ist. Beim naechsten 
Umsetzungsversuch wird diese Routine als erstes wieder befragt werden 
(Optimierung). CVT_FAIL bedeutet, dass zwar das Format erkannt wurde, aber 
die eigentliche Konvertierung fehlgeschlagen ist (z. B.  illegale Feldwerte). 
CVT_NONE heisst, dass das Format dieser Konvertierroutine nicht erkannt wurde.
Die simpleformat Routinen fuer Meinberg Uhren koennen als Vorlage fuer eigene
Anpassungen an Uhren mit periodischem Zeittelegramm und festem Format genommen werden.
Der Parser ist in lib/parse*.c zu finden.

Das eigentliche STREAMSmodul ist parsestreams.c. Es enthaelt einige 
Korrekturfaktoren, die beim Einsatz von Hardware-PPS Signalen benoetigt werden.
Einige empirische Werte fuer sun4c Maschinen sind schon vorgegeben. Bei exterm 
hohen Genauigkeitsanforderungen muessen diese Werte aber in der aktuellen 
Installation NEU ermittelt werden, weil die Zeiten unter anderem von 
Leitunglaengen der PPS Leitung abhaengen.  Wenn Sie diese Abstimmung 
durchfuehren, benoetigen Sie ein gutes Oszilloskop und die Lizenz fuer 
Hardwarearbeiten.

ACHTUNG: VERSUCHEN SIE NICHT DIESE MESSUNGEN ZU MACHEN, WENN IHNEN DIE
VORAUSSETZUNGEN DAFUER FEHLEN !

WIR GEBEN KEINE GARANTIEN

Bei Schwierigkeiten email an: time@informatik.uni-erlangen.de

#endif
