diff --git a/vendor/ess/lib/sis8300drvbcm.c b/vendor/ess/lib/sis8300drvbcm.c index 6764e2321cfc3b7beed2c69189c458af7de7c844..36cb001a40758626b2cc3140709c1b56a1a0de95 100644 --- a/vendor/ess/lib/sis8300drvbcm.c +++ b/vendor/ess/lib/sis8300drvbcm.c @@ -35,6 +35,8 @@ #include <assert.h> #include <math.h> +#include <epicsTime.h> + #include <sis8300drv.h> #include <sis8300drv_utils.h> #include <sis8300_reg.h> @@ -1868,7 +1870,9 @@ int sis8300drvbcm_set_timestamp(sis8300drv_usr *sisuser, unsigned int sec, unsig if (ret) { return ret; } - ret = sis8300drv_reg_write(sisuser, SIS8300BCM_TIMESTAMP_HIGH_REG, sec); + // EPICS and POSIX Epoch differs in 20 year (631152000 seconds) + unsigned int value = sec + POSIX_TIME_AT_EPICS_EPOCH; + ret = sis8300drv_reg_write(sisuser, SIS8300BCM_TIMESTAMP_HIGH_REG, value); if (ret) { return ret; } @@ -1881,10 +1885,13 @@ int sis8300drvbcm_get_timestamp(sis8300drv_usr *sisuser, unsigned int *sec, unsi if (ret) { return ret; } - ret = sis8300drv_reg_read(sisuser, SIS8300BCM_TIMESTAMP_HIGH_REG, sec); + unsigned int value; + ret = sis8300drv_reg_read(sisuser, SIS8300BCM_TIMESTAMP_HIGH_REG, &value); if (ret) { return ret; } + // EPICS and POSIX Epoch differs in 20 year (631152000 seconds) + *sec = value - POSIX_TIME_AT_EPICS_EPOCH; return ret; }