From 3b6065f55eabf7c306e9cb544da3c72ec650f55d Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Tue, 19 Aug 2008 19:34:13 +0000 Subject: [PATCH] Fixes for Cygwin build. --- src/dev/softDev/devGeneralTime.c | 45 ++++++++++++++++++++++++++----- src/libCom/osi/epicsGeneralTime.c | 27 +++++-------------- src/libCom/osi/epicsGeneralTime.h | 9 +++---- 3 files changed, 48 insertions(+), 33 deletions(-) diff --git a/src/dev/softDev/devGeneralTime.c b/src/dev/softDev/devGeneralTime.c index 8c3a7db99..9ac096aad 100644 --- a/src/dev/softDev/devGeneralTime.c +++ b/src/dev/softDev/devGeneralTime.c @@ -33,11 +33,22 @@ /********* ai record **********/ +static int getCurrentTime(double * pseconds) +{ + epicsTimeStamp ts; + + if (epicsTimeERROR != epicsTimeGetCurrent(&ts)) { + *pseconds = ts.secPastEpoch + ((double)(ts.nsec)) * 1e-9; + return 0; + } + return -1; +} + static struct ai_channel { char *name; int (*get)(double *); } ai_channels[] = { - {"TIME", generalTimeGetCurrentDouble}, + {"TIME", getCurrentTime}, }; static long init_ai(aiRecord *prec) @@ -92,11 +103,16 @@ epicsExportAddress(dset, devAiGeneralTime); /********* bo record **********/ +static void resetErrors(void) +{ + generalTimeResetErrorCounts(); +} + static struct bo_channel { char *name; - void (*put)(); + void (*put)(void); } bo_channels[] = { - {"RSTERRCNT", generalTimeResetErrorCounts}, + {"RSTERRCNT", resetErrors}, }; static long init_bo(boRecord *prec) @@ -132,7 +148,7 @@ static long write_bo(boRecord *prec) if (!pchan) return -1; - pchan->put(prec->val); + pchan->put(); return 0; } @@ -146,11 +162,16 @@ epicsExportAddress(dset, devBoGeneralTime); /******* longin record *************/ +static int errorCount(void) +{ + return generalTimeGetErrorCounts(); +} + static struct li_channel { char *name; int (*get)(void); } li_channels[] = { - {"GETERRCNT", generalTimeGetErrorCounts}, + {"GETERRCNT", errorCount}, }; static long init_li(longinRecord *prec) @@ -199,12 +220,22 @@ epicsExportAddress(dset, devLiGeneralTime); /********** stringin record **********/ +static void timeProvider(char *buf) +{ + generalTimeGetBestTcp(buf); +} + +static void eventProvider(char *buf) +{ + generalTimeGetBestTep(buf); +} + static struct si_channel { char *name; void (*get)(char *buf); } si_channels[] = { - {"BESTTCP", generalTimeGetBestTcp}, - {"BESTTEP", generalTimeGetBestTep}, + {"BESTTCP", timeProvider}, + {"BESTTEP", eventProvider}, }; static long init_si(stringinRecord *prec) diff --git a/src/libCom/osi/epicsGeneralTime.c b/src/libCom/osi/epicsGeneralTime.c index 842d20814..4f9e53f5b 100644 --- a/src/libCom/osi/epicsGeneralTime.c +++ b/src/libCom/osi/epicsGeneralTime.c @@ -452,37 +452,22 @@ long generalTimeReport(int level) } /* - * The following functions are accessors for various internal values, so that - * they can be made available to device support. They are used by the - * devGeneralTime.c file in /src/dev/softDev which implements the - * 'generalTime' DTYP for ai, bo, longin and stringin records + * Accessor routines for internal status values. */ -epicsShareFunc int generalTimeGetCurrentDouble(double * pseconds) /* for ai record, seconds from 01/01/1990 */ -{ - epicsTimeStamp ts; - if(epicsTimeERROR!=epicsTimeGetCurrent(&ts)) - { - *pseconds=ts.secPastEpoch+((double)(ts.nsec))*1e-9; - return epicsTimeOK; - } - else - return epicsTimeERROR; -} - -epicsShareFunc void generalTimeResetErrorCounts() /* for bo record */ +epicsShareFunc void generalTimeResetErrorCounts() { generalTime_Init(); - pgeneralTimePvt->ErrorCounts=0; + pgeneralTimePvt->ErrorCounts = 0; } -int generalTimeGetErrorCounts() /* for longin record */ +epicsShareFunc int generalTimeGetErrorCounts() { generalTime_Init(); return pgeneralTimePvt->ErrorCounts; } -epicsShareFunc void generalTimeGetBestTcp(char * desc) /* for stringin record */ +epicsShareFunc void generalTimeGetBestTcp(char * desc) {/* the assignment to pLastKnownBestTcp is atomic and desc is never changed after registeration */ generalTime_Init(); if(pgeneralTimePvt->pLastKnownBestTcp) @@ -497,7 +482,7 @@ epicsShareFunc void generalTimeGetBestTcp(char * desc) /* for stringin recor } } -epicsShareFunc void generalTimeGetBestTep(char * desc) /* for stringin record */ +epicsShareFunc void generalTimeGetBestTep(char * desc) {/* the assignment to pLastKnownBestTep is atomic and desc is never changed after registeration */ generalTime_Init(); if(pgeneralTimePvt->pLastKnownBestTep) diff --git a/src/libCom/osi/epicsGeneralTime.h b/src/libCom/osi/epicsGeneralTime.h index b08f669f0..52dd65e74 100644 --- a/src/libCom/osi/epicsGeneralTime.h +++ b/src/libCom/osi/epicsGeneralTime.h @@ -30,11 +30,10 @@ extern "C" { epicsShareFunc void generalTime_Init(void); /* this is the init routine you can call explicitly in st.cmd */ epicsShareFunc int lastResortEventProviderInstall(void); -epicsShareFunc int generalTimeGetCurrentDouble(double * pseconds); /* for ai record, seconds from 01/01/1990 */ -epicsShareFunc void generalTimeResetErrorCounts(); /* for bo record */ -epicsShareFunc int generalTimeGetErrorCounts(); /* for longin record */ -epicsShareFunc void generalTimeGetBestTcp(char * desc); /* for stringin record */ -epicsShareFunc void generalTimeGetBestTep(char * desc); /* for stringin record */ +epicsShareFunc void generalTimeResetErrorCounts(); +epicsShareFunc int generalTimeGetErrorCounts(); +epicsShareFunc void generalTimeGetBestTcp(char *desc); +epicsShareFunc void generalTimeGetBestTep(char *desc); epicsShareFunc long generalTimeReport(int interest);