From 10b024c9bf1b2363043fe39acae4b5985e4287c2 Mon Sep 17 00:00:00 2001 From: James Batch <james.batch@ligo.org> Date: Fri, 17 Jun 2016 20:21:41 +0000 Subject: [PATCH] Fix Bugzilla 1022 to allow dataviewer to display trend data for double precision float channels git-svn-id: https://redoubt.ligo-wa.caltech.edu/svn/advLigoRTS/trunk@4230 6dcd42c9-f523-4c6d-aada-af552506706e --- NEWS | 1 + src/dv/Makefile | 2 +- src/dv/Th/datasrv.c | 43 ++++++++++++------------------------------- 3 files changed, 14 insertions(+), 32 deletions(-) diff --git a/NEWS b/NEWS index bd73fb398..0924e66a2 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,7 @@ Changes for X.X - Bug Fix (1010): Prevent divide-by-zero error in daqd filesys.hh - Bug Fix (513): Cleanup debug schemes. Also created separate udp_rcvr files, fixed mx_rcvr header - Bug Fix (1015): Update daqd,nds build for ldas-tools 2.5 +- Bug Fix (1022): Allow dataviewer to display trends of double precision channels. ================================================================================================== Changes for 3.0.3 ================================================================================================== diff --git a/src/dv/Makefile b/src/dv/Makefile index 6f2e234fe..d96317a3e 100644 --- a/src/dv/Makefile +++ b/src/dv/Makefile @@ -1,7 +1,7 @@ # Dataviewer Makefile # Dataviewer 'version' -VERSION=3.0 +VERSION=3.0.4 # Installation Location INSTALL_PREFIX=/ligo/apps diff --git a/src/dv/Th/datasrv.c b/src/dv/Th/datasrv.c index 76b16b72b..dabb7493d 100644 --- a/src/dv/Th/datasrv.c +++ b/src/dv/Th/datasrv.c @@ -41,7 +41,10 @@ short Fast = 1; /* 1 or 16 */ /* Debug fprintf(). */ void dfprintf(FILE *file, ...) {} -double bsdouble(double in) { +#if __BYTE_ORDER == __LITTLE_ENDIAN + +inline +double ntohd(double in) { double retVal; char* p = (char*)&retVal; char* i = (char*)∈ @@ -57,6 +60,9 @@ double bsdouble(double in) { return retVal; } +#else +#define ntohd(a) a +#endif /* int DataConnect(char* serverName, int serverPort, int lPort, void* read_data()) */ /* JCB */ @@ -687,8 +693,7 @@ int seconds; break; case 5: /* 64 bit-double */ for ( j=0; j<channelAll[index].rate/Fast; j++ ) { - data[j] = *((double *)(DataDaq.tb->data+pos+j*sizeof(double))); - data[j] = bsdouble(data[j]); + data[j] = ntohd(*((double *)(DataDaq.tb->data+pos+j*sizeof(double)))); } break; case 2: /* 32 bit-integer */ @@ -762,8 +767,7 @@ int seconds; case 5: /* 64 bit-double */ for ( j=0; j<chanList[index].rate/Fast; j++ ) { if (DataDaq.tb_size >= pos+j*sizeof(double)) { - data[j] = *((double *)(DataDaq.tb->data+pos+j*sizeof(double))); - data[j] = bsdouble(data[j]); + data[j] = ntohd(*((double *)(DataDaq.tb->data+pos+j*sizeof(double)))); } } break; @@ -791,29 +795,6 @@ int seconds; } } -#if __BYTE_ORDER == __LITTLE_ENDIAN - -inline -double ntohd(double in) { - double retVal; - char* p = (char*)&retVal; - char* i = (char*)∈ - p[0] = i[7]; - p[1] = i[6]; - p[2] = i[5]; - p[3] = i[4]; - - p[4] = i[3]; - p[5] = i[2]; - p[6] = i[1]; - p[7] = i[0]; - - return retVal; -} -#else -#define ntohd(a) a -#endif - int DataTrendGetCh(const char* chName, struct DTrend *trend) { int j, index, pos, typesize; @@ -917,9 +898,9 @@ int seconds, secrate; break; case 5: /* 64 bit-double */ for ( j=0; j<secrate; j++ ) { - (trend+j)->min = *((double *)( DataDaq.tb->data + pos +j*sizeof(double) )); - (trend+j)->max = *((double *)( DataDaq.tb->data + pos + sizeof(double)*secrate + j*sizeof(double) )); - (trend+j)->mean = *((double *)( DataDaq.tb->data + pos + 2*sizeof(double)*secrate + j*2*sizeof(double) )); + (trend+j)->min = ntohd(*((double *)( DataDaq.tb->data + pos +j*sizeof(double) ))); + (trend+j)->max = ntohd(*((double *)( DataDaq.tb->data + pos + sizeof(double)*secrate + j*sizeof(double) ))); + (trend+j)->mean = ntohd(*((double *)( DataDaq.tb->data + pos + 2*sizeof(double)*secrate + j*2*sizeof(double) ))); (trend+j)->mean = 0; } break; -- GitLab