Has the behavior of tsLib changed in 3.14.4?
I have a hardware system for distributing time, part of the
SNS timing system. The driver for the hardware has implemented the “ER”
functions that TSinit looks for. The ErHaveReciever functions returns 2
if it is called after the hardware is configured to receive time. I have
a printf in the function so I know when it gets called. Before, I thought,
TSinit() would get called during iocInit and after that subsequent calls would
do nothing, I am looking at the code. Now, it never seems to be
called. The strange thing is that syncNTP is started and if I call TSinit
after iocInit then it leaves syncNTP running. Before I could not figure
out how to have syncNTP running as a backup to the hardware time. Once
TSinit is called then the IOC does not start using the hardware time but the
output of TSreport changes to make it look like it does. ( I know this because the
GPS receiver that it comes from is set on GPS time which is a few seconds
fast.) The date function seems to return the NTP time.
dht-ioc1>
dht-ioc1> date
2004/01/16 11:24:33.657598
value = 27 = 0x1b
The date function returned UTC-5 Hours
dht-ioc1> TSreport
Soft timing slave
Master timing IOC dead
No clock synchronization
Clock Rate in Hertz = 1000
Sync Rate in Seconds = 10
Master communications port = 18323
Slave communications port = 18322
Total events supported = 1
Request Time Out = 250 milliseconds
Broadcast address: 0.0.0.0:0
Master address: 0.0.0.0:0
value = 0 = 0x0
See if syncNtp is running:
dht-ioc1> i
NAME
ENTRY TID PRI
STATUS PC
SP ERRNO DELAY
---------- ------------ -------- ---
---------- -------- -------- ------- -----
tExcTask
excTask 1dfe740 0
PEND 1c649c
1dfe650 0 0
tLogTask logTask
1dfbdb8 0 PEND
1c649c 1dfbcd8
0 0
tShell
shell 1b51ff8 1
READY 195c38 1b51c70
1c0001 0
tTelnetd
telnetd 1b58960 2
PEND 1907bc
1b587e0 0 0
tNetTask
netTask 1b89fc8 50
PEND 1907bc
1b89f08 0 0
snsUtilEven198793c
193e198 99 PEND+T 1c649c
193e0b8 0 300
tPortmapd portmapd
1b573c0 100 PEND 1907bc
1b57240 16 0
syncNTP
19d6128 1945e38 109
DELAY 1951c8 1945d50
320001 220
cbHigh
19d6128 194b700 128
PEND 1907bc
194b630 0 0
……
value = 0 = 0x0
Now, call TSinit.
dht-ioc1> TSinit
iocClockRegister: iocClock already
initialized
ErHaveReceiver() returns 2
value = 0 = 0x0
That called ErHaveReceiver in the driver.
dht-ioc1> TSreport
Direct timing slave
Master timing IOC dead
NTP sync with unix server
Clock Rate in Hertz = 1000
Sync Rate in Seconds = 10
Master communications port = 18323
Slave communications port = 18322
Total events supported = 2
Request Time Out = 250 milliseconds
Broadcast address:
160.91.227.255:18323
Master address: 0.0.0.0:0
Event system has time directly
available
value = 0 = 0x0
Date still returns UTC
dht-ioc1> date
2004/01/16 11:37:33.400696
If I call tsInit before iocInit then date returns GPS time.
(13 seconds fast. )
## This drvTS initializer is needed
if the IOC has a hardware event system
TSinit
ErHaveReceiver() returns 2
value = 0 = 0x0
#v124sConfig 0, 0x9000, 0x3a, 7, 0.0
cd startup
value = 0 = 0x0
iocInit()
############################################################################
### EPICS IOC CORE built on Nov 21 2003
### EPICS R3.14.4
$$Name: $$ $$Date: 2003/10/18 17:42:28 $$
############################################################################
Starting iocInit
value = 0 = 0x0
dht-ioc1> iocInit: All
initialization complete
dht-ioc1> date
2004/01/16 12:10:14.312417
value = 27 = 0x1b
As you would expect:
ht-ioc1> TSreport
Direct timing slave
Master timing IOC dead
NTP sync with unix server
Clock Rate in Hertz = 1000
Sync Rate in Seconds = 10
Master communications port = 18323
Slave communications port = 18322
Total events supported = 2
Request Time Out = 250 milliseconds
Broadcast address:
160.91.227.255:18323
Master address: 0.0.0.0:0
Event system has time directly
available
and syncNTP is NOT running.
The question is: Do I have to call TSinit to use the
hardware time? Should the driver do that? It looks for all in the world,
looking at the code, that TSinit should get called somewhere from iocInit, at
the very least when the first time stamp is required, but it does not seem to.
I thought that TSinit started syncNTP.
Am I missing something?