mirror of
https://github.com/eddyem/tsys01.git
synced 2026-02-01 04:45:05 +03:00
change mean filtering to median, add request for mean T
This commit is contained in:
parent
1ac6ca48f6
commit
bc1d8a2571
@ -4,6 +4,7 @@ BTA mirror temperature network daemon
|
|||||||
Gather information from temperature sensors and send it over ethernet by network request like
|
Gather information from temperature sensors and send it over ethernet by network request like
|
||||||
hostname:4444/Tx
|
hostname:4444/Tx
|
||||||
where x is 0 for upper sensors, 1 for lower and 2 for T measured by main controller.
|
where x is 0 for upper sensors, 1 for lower and 2 for T measured by main controller.
|
||||||
|
hostname:4444/Tmean returns mean temperature
|
||||||
|
|
||||||
Answer format: "X Y T t", where
|
Answer format: "X Y T t", where
|
||||||
|
|
||||||
|
|||||||
@ -346,6 +346,8 @@ EL2HLT
|
|||||||
EL2NSYNCÌ65536Ö0
|
EL2NSYNCÌ65536Ö0
|
||||||
EL3HLTÌ65536Ö0
|
EL3HLTÌ65536Ö0
|
||||||
EL3RSTÌ65536Ö0
|
EL3RSTÌ65536Ö0
|
||||||
|
ELEM_SWAPÌ65536Ö0
|
||||||
|
ELEM_SWAPÌ131072Í(a,b)Ö0
|
||||||
ELIBACCÌ65536Ö0
|
ELIBACCÌ65536Ö0
|
||||||
ELIBBADÌ65536Ö0
|
ELIBBADÌ65536Ö0
|
||||||
ELIBEXECÌ65536Ö0
|
ELIBEXECÌ65536Ö0
|
||||||
@ -836,6 +838,7 @@ IUTF8
|
|||||||
IXANYÌ65536Ö0
|
IXANYÌ65536Ö0
|
||||||
IXOFFÌ65536Ö0
|
IXOFFÌ65536Ö0
|
||||||
IXONÌ65536Ö0
|
IXONÌ65536Ö0
|
||||||
|
ItemÌ4096Ö0Ïdouble
|
||||||
LC_ADDRESSÌ65536Ö0
|
LC_ADDRESSÌ65536Ö0
|
||||||
LC_ADDRESS_MASKÌ65536Ö0
|
LC_ADDRESS_MASKÌ65536Ö0
|
||||||
LC_ALLÌ65536Ö0
|
LC_ALLÌ65536Ö0
|
||||||
@ -1236,6 +1239,8 @@ PF_VSOCK
|
|||||||
PF_WANPIPEÌ65536Ö0
|
PF_WANPIPEÌ65536Ö0
|
||||||
PF_X25Ì65536Ö0
|
PF_X25Ì65536Ö0
|
||||||
PIPE_BUFÌ65536Ö0
|
PIPE_BUFÌ65536Ö0
|
||||||
|
PIX_SORTÌ65536Ö0
|
||||||
|
PIX_SORTÌ131072Í(a,b)Ö0
|
||||||
PKEY_DISABLE_ACCESSÌ65536Ö0
|
PKEY_DISABLE_ACCESSÌ65536Ö0
|
||||||
PKEY_DISABLE_WRITEÌ65536Ö0
|
PKEY_DISABLE_WRITEÌ65536Ö0
|
||||||
POLLING_TMOUTÌ65536Ö0
|
POLLING_TMOUTÌ65536Ö0
|
||||||
@ -4540,8 +4545,8 @@ __kernel_caddr_t
|
|||||||
__kernel_clock_tÌ4096Ö0Ï__kernel_long_t
|
__kernel_clock_tÌ4096Ö0Ï__kernel_long_t
|
||||||
__kernel_clockid_tÌ4096Ö0Ïint
|
__kernel_clockid_tÌ4096Ö0Ïint
|
||||||
__kernel_daddr_tÌ4096Ö0Ïint
|
__kernel_daddr_tÌ4096Ö0Ïint
|
||||||
__kernel_fd_setÌ4096Ö0Ïanon_struct_8
|
__kernel_fd_setÌ4096Ö0Ïanon_struct_21
|
||||||
__kernel_fsid_tÌ4096Ö0Ïanon_struct_9
|
__kernel_fsid_tÌ4096Ö0Ïanon_struct_22
|
||||||
__kernel_gid16_tÌ4096Ö0Ïunsigned short
|
__kernel_gid16_tÌ4096Ö0Ïunsigned short
|
||||||
__kernel_gid32_tÌ4096Ö0Ïunsigned int
|
__kernel_gid32_tÌ4096Ö0Ïunsigned int
|
||||||
__kernel_gid_tÌ4096Ö0Ïunsigned int
|
__kernel_gid_tÌ4096Ö0Ïunsigned int
|
||||||
@ -4618,6 +4623,7 @@ __sigevent_t_defined
|
|||||||
__siginfo_t_definedÌ65536Ö0
|
__siginfo_t_definedÌ65536Ö0
|
||||||
__sigset_t_definedÌ65536Ö0
|
__sigset_t_definedÌ65536Ö0
|
||||||
__sigstack_definedÌ65536Ö0
|
__sigstack_definedÌ65536Ö0
|
||||||
|
__sigval_tÌ4096Ö0Ïsigval
|
||||||
__sigval_t_definedÌ65536Ö0
|
__sigval_t_definedÌ65536Ö0
|
||||||
__size_tÌ65536Ö0
|
__size_tÌ65536Ö0
|
||||||
__size_t__Ì65536Ö0
|
__size_t__Ì65536Ö0
|
||||||
@ -4689,7 +4695,13 @@ __wsum
|
|||||||
__wurÌ65536Ö0
|
__wurÌ65536Ö0
|
||||||
__x86_64Ì65536Ö0
|
__x86_64Ì65536Ö0
|
||||||
__x86_64__Ì65536Ö0
|
__x86_64__Ì65536Ö0
|
||||||
|
_attributeÌ64Îsigevent::anon_union_8::anon_struct_9Ö0Ïpthread_attr_t *
|
||||||
|
_functionÌ1024Í(__sigval_t)Îsigevent::anon_union_8::anon_struct_9Ö0Ïvoid
|
||||||
|
_padÌ64Îsigevent::anon_union_8Ö0Ïint
|
||||||
_pthread_cleanup_bufferÌ2048Ö0
|
_pthread_cleanup_bufferÌ2048Ö0
|
||||||
|
_sigev_threadÌ64Îsigevent::anon_union_8Ö0Ïanon_struct_9
|
||||||
|
_sigev_unÌ64ÎsigeventÖ0Ïanon_union_8
|
||||||
|
_tidÌ64Îsigevent::anon_union_8Ö0Ï__pid_t
|
||||||
abortÌ64ÎstdÖ0Ïusing
|
abortÌ64ÎstdÖ0Ïusing
|
||||||
abortÌ65536Ö0
|
abortÌ65536Ö0
|
||||||
absÌ64ÎstdÖ0Ïusing
|
absÌ64ÎstdÖ0Ïusing
|
||||||
@ -4718,11 +4730,13 @@ anon_enum_6
|
|||||||
anon_struct_0Ì2048Ö0
|
anon_struct_0Ì2048Ö0
|
||||||
anon_struct_1Ì2048Ö0
|
anon_struct_1Ì2048Ö0
|
||||||
anon_struct_10Ì2048Ö0
|
anon_struct_10Ì2048Ö0
|
||||||
|
anon_struct_21Ì2048Ö0
|
||||||
|
anon_struct_22Ì2048Ö0
|
||||||
anon_struct_4Ì2048Ö0
|
anon_struct_4Ì2048Ö0
|
||||||
anon_struct_5Ì2048Ö0
|
anon_struct_5Ì2048Ö0
|
||||||
anon_struct_7Ì2048Ö0
|
anon_struct_7Ì2048Ö0
|
||||||
anon_struct_8Ì2048Ö0
|
anon_struct_9Ì2048Îsigevent::anon_union_8Ö0
|
||||||
anon_struct_9Ì2048Ö0
|
anon_union_8Ì8192ÎsigeventÖ0
|
||||||
arg_doubleÌ4Îanon_enum_2Ö0
|
arg_doubleÌ4Îanon_enum_2Ö0
|
||||||
arg_endÌ64Îprctl_mm_mapÖ0Ï__u64
|
arg_endÌ64Îprctl_mm_mapÖ0Ï__u64
|
||||||
arg_floatÌ4Îanon_enum_2Ö0
|
arg_floatÌ4Îanon_enum_2Ö0
|
||||||
@ -4851,7 +4865,7 @@ fdim
|
|||||||
fdimÌ65536Ö0
|
fdimÌ65536Ö0
|
||||||
fdimfÌ65536Ö0
|
fdimfÌ65536Ö0
|
||||||
fdimlÌ65536Ö0
|
fdimlÌ65536Ö0
|
||||||
fds_bitsÌ64Îanon_struct_8Ö0Ïunsigned long
|
fds_bitsÌ64Îanon_struct_21Ö0Ïunsigned long
|
||||||
flagÌ64Îanon_struct_4Ö0Ïint *
|
flagÌ64Îanon_struct_4Ö0Ïint *
|
||||||
floorÌ64ÎstdÖ0Ïusing
|
floorÌ64ÎstdÖ0Ïusing
|
||||||
floorÌ65536Ö0
|
floorÌ65536Ö0
|
||||||
@ -5028,6 +5042,7 @@ mbstowcs
|
|||||||
mbstowcsÌ65536Ö0
|
mbstowcsÌ65536Ö0
|
||||||
mbtowcÌ64ÎstdÖ0Ïusing
|
mbtowcÌ64ÎstdÖ0Ïusing
|
||||||
mbtowcÌ65536Ö0
|
mbtowcÌ65536Ö0
|
||||||
|
meanTÌ16384Ö0Ïdouble
|
||||||
minÌ65536Ö0
|
minÌ65536Ö0
|
||||||
mmapbufÌ4096Ö0Ïanon_struct_1
|
mmapbufÌ4096Ö0Ïanon_struct_1
|
||||||
mode_tÌ4096Ö0Ï__mode_t
|
mode_tÌ4096Ö0Ï__mode_t
|
||||||
@ -5090,6 +5105,7 @@ pow
|
|||||||
ppsfreqÌ64ÎtimexÖ0Ï__syscall_slong_t
|
ppsfreqÌ64ÎtimexÖ0Ï__syscall_slong_t
|
||||||
prctl_mm_mapÌ2048Ö0
|
prctl_mm_mapÌ2048Ö0
|
||||||
precisionÌ64ÎtimexÖ0Ï__syscall_slong_t
|
precisionÌ64ÎtimexÖ0Ï__syscall_slong_t
|
||||||
|
process_TÌ16Í()Ö0Ïvoid
|
||||||
pthread_cleanup_popÌ131072Í(execute)Ö0
|
pthread_cleanup_popÌ131072Í(execute)Ö0
|
||||||
pthread_cleanup_pop_restore_npÌ131072Í(execute)Ö0
|
pthread_cleanup_pop_restore_npÌ131072Í(execute)Ö0
|
||||||
pthread_cleanup_pushÌ131072Í(routine,arg)Ö0
|
pthread_cleanup_pushÌ131072Í(routine,arg)Ö0
|
||||||
@ -5101,6 +5117,7 @@ qsort
|
|||||||
qsortÌ65536Ö0
|
qsortÌ65536Ö0
|
||||||
quick_exitÌ64ÎstdÖ0Ïusing
|
quick_exitÌ64ÎstdÖ0Ïusing
|
||||||
quick_exitÌ65536Ö0
|
quick_exitÌ65536Ö0
|
||||||
|
quick_selectÌ16Í(Item *idata, int n)Ö0ÏItem
|
||||||
r_WARNÌ16Í(const char *fmt, ...)Ö0Ïint
|
r_WARNÌ16Í(const char *fmt, ...)Ö0Ïint
|
||||||
r_pr_Ì16Í(const char *fmt, ...)Ö0Ïint
|
r_pr_Ì16Í(const char *fmt, ...)Ö0Ïint
|
||||||
r_pr_nottyÌ16Í(const char *fmt, ...)Ö0Ïint
|
r_pr_nottyÌ16Í(const char *fmt, ...)Ö0Ïint
|
||||||
@ -5184,19 +5201,27 @@ si_uid
|
|||||||
si_upperÌ65536Ö0
|
si_upperÌ65536Ö0
|
||||||
si_utimeÌ65536Ö0
|
si_utimeÌ65536Ö0
|
||||||
si_valueÌ65536Ö0
|
si_valueÌ65536Ö0
|
||||||
|
sigev_notifyÌ64ÎsigeventÖ0Ïint
|
||||||
sigev_notify_attributesÌ65536Ö0
|
sigev_notify_attributesÌ65536Ö0
|
||||||
sigev_notify_functionÌ65536Ö0
|
sigev_notify_functionÌ65536Ö0
|
||||||
|
sigev_signoÌ64ÎsigeventÖ0Ïint
|
||||||
|
sigev_valueÌ64ÎsigeventÖ0Ï__sigval_t
|
||||||
|
sigeventÌ2048Ö0
|
||||||
sigeventÌ32768Ö0
|
sigeventÌ32768Ö0
|
||||||
|
sigevent_tÌ4096Ö0Ïsigevent
|
||||||
sigmaskÌ131072Í(sig)Ö0
|
sigmaskÌ131072Í(sig)Ö0
|
||||||
signalsÌ16Í(int signo)Ö0Ïvoid
|
signalsÌ16Í(int signo)Ö0Ïvoid
|
||||||
signalsÌ1024Í(int sig)Ö0Ïvoid
|
signalsÌ1024Í(int sig)Ö0Ïvoid
|
||||||
signbitÌ64ÎstdÖ0Ïusing
|
signbitÌ64ÎstdÖ0Ïusing
|
||||||
signbitÌ65536Ö0
|
signbitÌ65536Ö0
|
||||||
signbitÌ131072Í(x)Ö0
|
signbitÌ131072Í(x)Ö0
|
||||||
|
sigvalÌ8192Ö0
|
||||||
sinÌ64ÎstdÖ0Ïusing
|
sinÌ64ÎstdÖ0Ïusing
|
||||||
sinÌ65536Ö0
|
sinÌ65536Ö0
|
||||||
sinhÌ64ÎstdÖ0Ïusing
|
sinhÌ64ÎstdÖ0Ïusing
|
||||||
sinhÌ65536Ö0
|
sinhÌ65536Ö0
|
||||||
|
sival_intÌ64ÎsigvalÖ0Ïint
|
||||||
|
sival_ptrÌ64ÎsigvalÖ0Ïvoid *
|
||||||
sqrtÌ64ÎstdÖ0Ïusing
|
sqrtÌ64ÎstdÖ0Ïusing
|
||||||
sqrtÌ65536Ö0
|
sqrtÌ65536Ö0
|
||||||
srandÌ64ÎstdÖ0Ïusing
|
srandÌ64ÎstdÖ0Ïusing
|
||||||
@ -5304,8 +5329,8 @@ va_arg
|
|||||||
va_copyÌ131072Í(d,s)Ö0
|
va_copyÌ131072Í(d,s)Ö0
|
||||||
va_endÌ131072Í(v)Ö0
|
va_endÌ131072Í(v)Ö0
|
||||||
va_startÌ131072Í(v,l)Ö0
|
va_startÌ131072Í(v,l)Ö0
|
||||||
|
valÌ64Îanon_struct_22Ö0Ïint
|
||||||
valÌ64Îanon_struct_4Ö0Ïint
|
valÌ64Îanon_struct_4Ö0Ïint
|
||||||
valÌ64Îanon_struct_9Ö0Ïint
|
|
||||||
waittoreadÌ16Í(int sock)Ö0Ïint
|
waittoreadÌ16Í(int sock)Ö0Ïint
|
||||||
wcstombsÌ64ÎstdÖ0Ïusing
|
wcstombsÌ64ÎstdÖ0Ïusing
|
||||||
wcstombsÌ65536Ö0
|
wcstombsÌ65536Ö0
|
||||||
|
|||||||
@ -20,13 +20,24 @@ indent_mode=3
|
|||||||
[project]
|
[project]
|
||||||
name=netdaemon
|
name=netdaemon
|
||||||
base_path=/home/eddy/Docs/SAO/BTA/MIRROR_CONTROL_termo/Project/netdaemon
|
base_path=/home/eddy/Docs/SAO/BTA/MIRROR_CONTROL_termo/Project/netdaemon
|
||||||
|
description=
|
||||||
|
|
||||||
[long line marker]
|
[long line marker]
|
||||||
long_line_behaviour=1
|
long_line_behaviour=1
|
||||||
long_line_column=100
|
long_line_column=100
|
||||||
|
|
||||||
[files]
|
[files]
|
||||||
current_page=-1
|
current_page=3
|
||||||
|
FILE_NAME_0=0;C;0;EKOI8-R;0;1;0;%2Fhome%2Feddy%2FDocs%2FSAO%2FBTA%2FMIRROR_CONTROL_termo%2FProject%2Fnetdaemon%2Fcmdlnopts.c;0;4
|
||||||
|
FILE_NAME_1=0;C;0;EKOI8-R;0;1;0;%2Fhome%2Feddy%2FDocs%2FSAO%2FBTA%2FMIRROR_CONTROL_termo%2FProject%2Fnetdaemon%2Fcmdlnopts.h;0;4
|
||||||
|
FILE_NAME_2=0;C;0;EKOI8-R;0;1;0;%2Fhome%2Feddy%2FDocs%2FSAO%2FBTA%2FMIRROR_CONTROL_termo%2FProject%2Fnetdaemon%2Fmain.c;0;4
|
||||||
|
FILE_NAME_3=9982;C;0;EKOI8-R;0;1;0;%2Fhome%2Feddy%2FDocs%2FSAO%2FBTA%2FMIRROR_CONTROL_termo%2FProject%2Fnetdaemon%2Fsocket.c;0;4
|
||||||
|
FILE_NAME_4=0;C;0;EKOI8-R;0;1;0;%2Fhome%2Feddy%2FDocs%2FSAO%2FBTA%2FMIRROR_CONTROL_termo%2FProject%2Fnetdaemon%2Fsocket.h;0;4
|
||||||
|
FILE_NAME_5=4650;C;0;EKOI8-R;0;1;0;%2Fhome%2Feddy%2FDocs%2FSAO%2FBTA%2FMIRROR_CONTROL_termo%2FProject%2Fnetdaemon%2Fterm.c;0;4
|
||||||
|
FILE_NAME_6=0;C;0;EKOI8-R;0;1;0;%2Fhome%2Feddy%2FDocs%2FSAO%2FBTA%2FMIRROR_CONTROL_termo%2FProject%2Fnetdaemon%2Fterm.h;0;4
|
||||||
|
FILE_NAME_7=3250;C;0;EKOI8-R;0;1;0;%2Fhome%2Feddy%2FDocs%2FSAO%2FBTA%2FMIRROR_CONTROL_termo%2FProject%2Fnetdaemon%2Fdatapoints.xy;0;4
|
||||||
|
FILE_NAME_8=7594;C;0;EUTF-8;0;1;0;%2Fhome%2Feddy%2FDropbox%2FProjects%2Ffits_filter%2Fmedian.c;0;4
|
||||||
|
FILE_NAME_9=0;C;0;EUTF-8;0;1;0;%2Fhome%2Feddy%2FDropbox%2FProjects%2Ffits_filter%2Fmedian.h;0;4
|
||||||
|
|
||||||
[VTE]
|
[VTE]
|
||||||
last_dir=/home/eddy
|
last_dir=/home/eddy
|
||||||
|
|||||||
@ -39,6 +39,8 @@
|
|||||||
|
|
||||||
// temperatures: T0, T1, N2
|
// temperatures: T0, T1, N2
|
||||||
static char strT[3][BUFLEN];
|
static char strT[3][BUFLEN];
|
||||||
|
// mean temperature
|
||||||
|
static double meanT;
|
||||||
|
|
||||||
/**************** COMMON FUNCTIONS ****************/
|
/**************** COMMON FUNCTIONS ****************/
|
||||||
/**
|
/**
|
||||||
@ -171,8 +173,13 @@ static void *handle_socket(void *asock){
|
|||||||
putlog("can't send data, some error occured");
|
putlog("can't send data, some error occured");
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&mutex);
|
pthread_mutex_unlock(&mutex);
|
||||||
break;
|
}else if(strncmp("Tmean", found, 5) == 0){ // send user meanT
|
||||||
}else break; // here can be more parsers
|
char tbuf[10];
|
||||||
|
ssize_t L = snprintf(tbuf, 10, "%.2f", meanT);
|
||||||
|
if(L != write(sock, tbuf, L)) WARN("write()");
|
||||||
|
//DBG("Ask Tmean = %g", meanT);
|
||||||
|
} // here can be more parsers
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
close(sock);
|
close(sock);
|
||||||
//DBG("closed");
|
//DBG("closed");
|
||||||
@ -219,7 +226,98 @@ static void *server(void *asock){
|
|||||||
putlog("server(): UNREACHABLE CODE REACHED!");
|
putlog("server(): UNREACHABLE CODE REACHED!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// data gathering & socket parsing
|
typedef double Item;
|
||||||
|
#define ELEM_SWAP(a, b) {register Item t = a; a = b; b = t;}
|
||||||
|
#define PIX_SORT(a, b) {if (a > b) ELEM_SWAP(a, b);}
|
||||||
|
/**
|
||||||
|
* quick select - algo for approximate median calculation for array idata of size n
|
||||||
|
*/
|
||||||
|
Item quick_select(Item *idata, int n){
|
||||||
|
int low, high;
|
||||||
|
int median;
|
||||||
|
int middle, ll, hh;
|
||||||
|
Item *arr = MALLOC(Item, n);
|
||||||
|
memcpy(arr, idata, n*sizeof(Item));
|
||||||
|
low = 0 ; high = n-1 ; median = (low + high) / 2;
|
||||||
|
for(;;){
|
||||||
|
if(high <= low) // One element only
|
||||||
|
break;
|
||||||
|
if(high == low + 1){ // Two elements only
|
||||||
|
PIX_SORT(arr[low], arr[high]) ;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Find median of low, middle and high items; swap into position low
|
||||||
|
middle = (low + high) / 2;
|
||||||
|
PIX_SORT(arr[middle], arr[high]) ;
|
||||||
|
PIX_SORT(arr[low], arr[high]) ;
|
||||||
|
PIX_SORT(arr[middle], arr[low]) ;
|
||||||
|
// Swap low item (now in position middle) into position (low+1)
|
||||||
|
ELEM_SWAP(arr[middle], arr[low+1]) ;
|
||||||
|
// Nibble from each end towards middle, swapping items when stuck
|
||||||
|
ll = low + 1;
|
||||||
|
hh = high;
|
||||||
|
for(;;){
|
||||||
|
do ll++; while (arr[low] > arr[ll]);
|
||||||
|
do hh--; while (arr[hh] > arr[low]);
|
||||||
|
if(hh < ll) break;
|
||||||
|
ELEM_SWAP(arr[ll], arr[hh]) ;
|
||||||
|
}
|
||||||
|
// Swap middle item (in position low) back into correct position
|
||||||
|
ELEM_SWAP(arr[low], arr[hh]) ;
|
||||||
|
// Re-set active partition
|
||||||
|
if (hh <= median) low = ll;
|
||||||
|
if (hh >= median) high = hh - 1;
|
||||||
|
}
|
||||||
|
Item ret = arr[median];
|
||||||
|
FREE(arr);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#undef PIX_SORT
|
||||||
|
#undef ELEM_SWAP
|
||||||
|
|
||||||
|
static void process_T(){
|
||||||
|
int i, Num = 0;
|
||||||
|
time_t tmeasmax = 0;
|
||||||
|
double arr[128];
|
||||||
|
// get statistics
|
||||||
|
poll_sensors(0); // poll N2
|
||||||
|
// scan over controllers on mirror & calculate median
|
||||||
|
for(i = 1; i < 8; ++i){
|
||||||
|
if(poll_sensors(i)){
|
||||||
|
int N, p;
|
||||||
|
for(p = 0; p < 2; ++p) for(N = 0; N < 8; ++ N){
|
||||||
|
double T = t_last[p][N][i];
|
||||||
|
time_t t = tmeasured[p][N][i];
|
||||||
|
if(T > -100. && T < 100.){
|
||||||
|
arr[Num++] = T;
|
||||||
|
if(t > tmeasmax) tmeasmax = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// calculate mean
|
||||||
|
double Tmed = quick_select(arr, Num);
|
||||||
|
double Tbot = Tmed - 3., Ttop = Tmed + 3.;
|
||||||
|
DBG("Got %d values, Tmed=%g", Num, Tmed);
|
||||||
|
// throw out all more than +-3degrC and calculate meanT
|
||||||
|
Num = 0;
|
||||||
|
double Tsum = 0.;
|
||||||
|
for(i = 1; i < 8; ++i){
|
||||||
|
int N, p;
|
||||||
|
for(p = 0; p < 2; ++p) for(N = 0; N < 8; ++ N){
|
||||||
|
double T = t_last[p][N][i];
|
||||||
|
if(T > Ttop || T < Tbot || tmeasmax - tmeasured[p][N][i] > 1800){
|
||||||
|
t_last[p][N][i] = -300.;
|
||||||
|
}else{
|
||||||
|
++Num; Tsum += T;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
meanT = Tsum / Num;
|
||||||
|
DBG("got %d, mean: %g\n\n", Num, meanT);
|
||||||
|
}
|
||||||
|
|
||||||
|
// data gathering & socket management
|
||||||
static void daemon_(int sock){
|
static void daemon_(int sock){
|
||||||
if(sock < 0) return;
|
if(sock < 0) return;
|
||||||
pthread_t sock_thread;
|
pthread_t sock_thread;
|
||||||
@ -245,34 +343,33 @@ static void daemon_(int sock){
|
|||||||
char bufs[3][BUFLEN]; // temporary buffers
|
char bufs[3][BUFLEN]; // temporary buffers
|
||||||
char *ptrs[3] = {bufs[0], bufs[1], bufs[2]};
|
char *ptrs[3] = {bufs[0], bufs[1], bufs[2]};
|
||||||
size_t lens[3] = {BUFLEN, BUFLEN, BUFLEN}; // free space
|
size_t lens[3] = {BUFLEN, BUFLEN, BUFLEN}; // free space
|
||||||
|
process_T(); // get new temperatures & throw out bad results
|
||||||
for(i = 0; i < 8; ++i){ // scan over controllers
|
for(i = 0; i < 8; ++i){ // scan over controllers
|
||||||
if(poll_sensors(i)){
|
int N, p;
|
||||||
int N, p;
|
for(p = 0; p < 2; ++p) for(N = 0; N < 8; ++ N){
|
||||||
for(p = 0; p < 2; ++p) for(N = 0; N < 8; ++ N){
|
double T = t_last[p][N][i];
|
||||||
double T = t_last[p][N][i];
|
char **buf;
|
||||||
char **buf;
|
size_t *len;
|
||||||
size_t *len;
|
//DBG("T%d [%d][%d] = %g",i, p,N,T);
|
||||||
//DBG("T%d [%d][%d] = %g",i, p,N,T);
|
if(T > -100. && T < 100.){ // fill buffer
|
||||||
if(T > -100. && T < 100.){ // fill buffer
|
size_t l;
|
||||||
size_t l;
|
if(i == 0){
|
||||||
if(i == 0){
|
buf = &ptrs[2]; len = &lens[2];
|
||||||
buf = &ptrs[2]; len = &lens[2];
|
// Nsens Npair T time
|
||||||
// Nsens Npair T time
|
l = snprintf(*buf, *len, "%d\t%d\t%.2f\t%ld\n", N, p, T,
|
||||||
l = snprintf(*buf, *len, "%d\t%d\t%.2f\t%ld\n", N, p, T,
|
tmeasured[p][N][i]);
|
||||||
tmeasured[p][N][i]);
|
}else{
|
||||||
}else{
|
buf = &ptrs[p]; len = &lens[p];
|
||||||
buf = &ptrs[p]; len = &lens[p];
|
// x y T time
|
||||||
// x y T time
|
l = snprintf(*buf, *len, "%d\t%d\t%.2f\t%ld\n", SensCoords[N][i][0],
|
||||||
l = snprintf(*buf, *len, "%d\t%d\t%.2f\t%ld\n", SensCoords[N][i][0],
|
SensCoords[N][i][1], T, tmeasured[p][N][i]);
|
||||||
SensCoords[N][i][1], T, tmeasured[p][N][i]);
|
|
||||||
}
|
|
||||||
*len -= l;
|
|
||||||
*buf += l;
|
|
||||||
}
|
}
|
||||||
|
*len -= l;
|
||||||
|
*buf += l;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DBG("BUF0:\n%s\nBUF1:\n%s\nBUF2:\n%s", bufs[0],bufs[1],bufs[2]);
|
//DBG("BUF0:\n%s\nBUF1:\n%s\nBUF2:\n%s", bufs[0],bufs[1],bufs[2]);
|
||||||
tgot = dtime();
|
tgot = dtime();
|
||||||
// copy temporary buffers to main
|
// copy temporary buffers to main
|
||||||
pthread_mutex_lock(&mutex);
|
pthread_mutex_lock(&mutex);
|
||||||
|
|||||||
@ -159,6 +159,8 @@ static int send_cmd(int N, char cmd){
|
|||||||
if(N < 0 || N > 7) return 1;
|
if(N < 0 || N > 7) return 1;
|
||||||
char buf[4] = {(char)N + '0', cmd, '\n', 0};
|
char buf[4] = {(char)N + '0', cmd, '\n', 0};
|
||||||
char *rtn;
|
char *rtn;
|
||||||
|
// clear all incomint data
|
||||||
|
while(read_string());
|
||||||
//DBG("send cmd %s", buf);
|
//DBG("send cmd %s", buf);
|
||||||
if(write_tty(buf, 3)) return 1;
|
if(write_tty(buf, 3)) return 1;
|
||||||
if((rtn = read_string())){
|
if((rtn = read_string())){
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user