osiClock: Register ClockTime_Init with iocsh

ClockTime_Init and ClockTime_Shutdown are only on VxWorks & RTEMS.
Adjust help text to match.
ClockTime_Init can be re-run later to start or stop the sync thread.
This commit is contained in:
Andrew Johnson
2022-06-15 14:16:37 -05:00
committed by Michael Davidsaver
parent 1df973b234
commit 9efebb6d3d

View File

@@ -53,36 +53,46 @@ int osdTimeGetCurrent(epicsTimeStamp *pDest);
#if defined(vxWorks) || defined(__rtems__)
static void ClockTimeSync(void *dummy);
/* ClockTime_Init iocsh command */
static const iocshArg InitArg0 = { "enable_sync", iocshArgArgv};
static const iocshArg * const InitArgs[1] = { &InitArg0 };
static const iocshFuncDef InitFuncDef = {
"ClockTime_Init", 1, InitArgs,
"Starts or stops periodic synchronization of the OS clock\n"
"with the higest priority working time provider.\n"};
static void InitCallFunc(const iocshArgBuf *args)
{
ClockTime_Init(args[0].ival);
}
/* ClockTime_Shutdown iocsh command */
static const iocshFuncDef ShutdownFuncDef = {
"ClockTime_Shutdown", 0, NULL,
"Stops the OS clock synchronization thread.\n"};
static void ShutdownCallFunc(const iocshArgBuf *args)
{
ClockTime_Shutdown(NULL);
}
#endif
/* ClockTime_Report iocsh command */
static const iocshArg ReportArg0 = { "interest_level", iocshArgArgv};
static const iocshArg * const ReportArgs[1] = { &ReportArg0 };
static const iocshFuncDef ReportFuncDef = {"ClockTime_Report", 1, ReportArgs,
"Reports clock synchronization status:\n"
" - On vxWorks and RTEMS:\n"
" * synchronization state\n"
" * last synchronization time with provider\n"
" * synchronization interval\n"
" - On workstation (WIN,*NIX):\n"
" * minimal report\n"};
static const iocshFuncDef ReportFuncDef = {
"ClockTime_Report", 1, ReportArgs,
"Reports the OS clock synchronization status:\n"
" - On VxWorks and RTEMS:\n"
" * synchronization state\n"
" * last synchronization time with provider\n"
" * synchronization interval\n"
" - On workstations (Posix):\n"
" * minimal report\n"};
static void ReportCallFunc(const iocshArgBuf *args)
{
ClockTime_Report(args[0].ival);
}
/* ClockTime_Shutdown iocsh command */
static const iocshFuncDef ShutdownFuncDef = {"ClockTime_Shutdown", 0, NULL,
"Stops the OS synchronization thread\n"
" - On vxWorks and RTEMS:\n"
" * OS clock will free run\n"
" - On workstation (WIN,*NIX):\n"
" * no change\n"};
static void ShutdownCallFunc(const iocshArgBuf *args)
{
ClockTime_Shutdown(NULL);
}
/* Initialization */
@@ -97,8 +107,11 @@ static void ClockTime_InitOnce(void *pfirst)
epicsAtExit(ClockTime_Shutdown, NULL);
/* Register the iocsh commands */
iocshRegister(&ReportFuncDef, ReportCallFunc);
#if defined(vxWorks) || defined(__rtems__)
iocshRegister(&InitFuncDef, InitCallFunc);
iocshRegister(&ShutdownFuncDef, ShutdownCallFunc);
#endif
iocshRegister(&ReportFuncDef, ReportCallFunc);
/* Register as a time provider */
generalTimeRegisterCurrentProvider("OS Clock", LAST_RESORT_PRIORITY,
@@ -111,12 +124,12 @@ void ClockTime_Init(int synchronize)
epicsThreadOnce(&onceId, ClockTime_InitOnce, &firstTime);
if (synchronize == CLOCKTIME_SYNC) {
if (synchronize) {
if (ClockTimePvt.synchronize == CLOCKTIME_NOSYNC) {
#if defined(vxWorks) || defined(__rtems__)
/* Start synchronizing */
ClockTimePvt.synchronize = synchronize;
ClockTimePvt.synchronize = CLOCKTIME_SYNC;
epicsThreadCreate("ClockTimeSync", epicsThreadPriorityHigh,
epicsThreadGetStackSize(epicsThreadStackSmall),