Hi all,
My understanding is that we cannot verify the PPS signal lock status using the adjtimex() function:
int main( int c, char **v ) {
struct timex t = {0};
adjtimex(&t);
printf( "%d\n", t.status & STA_PPSSIGNAL);
}
That works for ntpd, not for chronyd.
Mirsoslav recommended looking at the chrony sources (e.g., client.c, candm.h).. That was helpful. It looks like we'd need to do the following:
* Declare a structure of type CMD_Reply.
* Open the PPS device (e.g., /dev/pps1).
* Read the device data into the CMD_Reply structure.
* Check CMD_Reply.data.source_data.state to RPY_SD_ST_SELECTED.
Is there a simpler way to retrieve the lock status without using the CMD_Reply structure? That is, something more like:
* Open PPS device
* Read device data into byte buffer (e.g., 4096 bytes)
* Check nth byte == RPY_SD_ST_SELECTED
Ideally, some direction to look at that'd work for both ntpd and chronyd would be much appreciated. If that's simply not possible, then tips on creating a simpler solution would also be helpful.
Thank you.