10 #ifndef FUNCTION_PARAMETERS_H
12 #define FUNCTION_PARAMETERS_H
18 #define STRINGMAXLEN_FPS_LOGMSG 1000
19 #define STRINGMAXLEN_FPS_CMDLINE 1000
23 #define NB_FPS_MAX 100
25 #define MAXNBLEVELS 20
27 #define FPSCONNECT_SIMPLE 0
28 #define FPSCONNECT_CONF 1
29 #define FPSCONNECT_RUN 2
33 #define FPSCMDCODE_CONFSTART 0x00000001 // start configuration process
34 #define FPSCMDCODE_CONFSTOP 0x00000002 // stop configuration process
35 #define FPSCMDCODE_FPSINIT 0x00000004 // initialize FPS if does not exist
36 #define FPSCMDCODE_FPSINITCREATE 0x00000008 // (re-)create FPS even if it exists
37 #define FPSCMDCODE_RUNSTART 0x00000010 // start run process
38 #define FPSCMDCODE_RUNSTOP 0x00000020 // stop run process
39 #define FPSCMDCODE_TMUXSTART 0x00000100 // start tmux sessions
40 #define FPSCMDCODE_TMUXSTOP 0x00000200 // stop tmux sessions
46 #define FUNCTION_PARAMETER_KEYWORD_STRMAXLEN 64
47 #define FUNCTION_PARAMETER_KEYWORD_MAXLEVEL 20
53 #define FPTYPE_UNDEF 0x00000001
54 #define FPTYPE_INT32 0x00000002
55 #define FPTYPE_UINT32 0x00000004
56 #define FPTYPE_INT64 0x00000008
57 #define FPTYPE_UINT64 0x00000010
58 #define FPTYPE_FLOAT32 0x00000020
59 #define FPTYPE_FLOAT64 0x00000040
61 #define FPTYPE_PID 0x00000080
62 #define FPTYPE_TIMESPEC 0x00000100
64 #define FPTYPE_FILENAME 0x00000200 // generic filename
65 #define FPTYPE_FITSFILENAME 0x00000400 // FITS file
66 #define FPTYPE_EXECFILENAME 0x00000800 // executable file
68 #define FPTYPE_DIRNAME 0x00001000 // directory name
69 #define FPTYPE_STREAMNAME 0x00002000 // stream name -> process may load from shm if required. See loading stream section below and associated flags
70 #define FPTYPE_STRING 0x00004000 // generic string
71 #define FPTYPE_ONOFF 0x00008000 // uses ONOFF bit flag, string[0] and string[1] for OFF and ON descriptions respectively. setval saves ONOFF as integer
72 #define FPTYPE_PROCESS 0x00010000
75 #define FPTYPE_FPSNAME 0x00020000 // connection to another FPS
79 #define FUNCTION_PARAMETER_DESCR_STRMAXLEN 64
80 #define FUNCTION_PARAMETER_STRMAXLEN 64
87 #define FPFLAG_ACTIVE 0x0000000000000001 // is this entry registered ?
88 #define FPFLAG_USED 0x0000000000000002 // is this entry used ? if not, skip all checks
89 #define FPFLAG_VISIBLE 0x0000000000000004 // is this entry visible (=displayed) ?
92 #define FPFLAG_WRITE 0x0000000000000010 // is value writable when neither CONF and RUN are active
93 #define FPFLAG_WRITECONF 0x0000000000000020 // can user change value at configuration time ?
94 #define FPFLAG_WRITERUN 0x0000000000000040 // can user change value at run time ?
95 #define FPFLAG_WRITESTATUS 0x0000000000000080 // current write status (computed from above flags)
98 #define FPFLAG_LOG 0x0000000000000100 // log on change
99 #define FPFLAG_SAVEONCHANGE 0x0000000000000200 // save to disk on change
100 #define FPFLAG_SAVEONCLOSE 0x0000000000000400 // save to disk on close
103 #define FPFLAG_IMPORTED 0x0000000000001000 // is this entry imported from another parameter ?
104 #define FPFLAG_FEEDBACK 0x0000000000002000 // is there a separate current value feedback ?
105 #define FPFLAG_ONOFF 0x0000000000004000 // bit controlled under TYPE_ONOFF
108 #define FPFLAG_CHECKINIT 0x0000000000010000 // should parameter be initialized prior to function start ?
109 #define FPFLAG_MINLIMIT 0x0000000000020000 // enforce min limit
110 #define FPFLAG_MAXLIMIT 0x0000000000040000 // enforce max limit
111 #define FPFLAG_ERROR 0x0000000000080000 // is current parameter value OK ?
128 #define STREAM_LOAD_SOURCE_NOTFOUND 0
129 #define STREAM_LOAD_SOURCE_NOTFOUND_STRING "STREAM_LOAD_SOURCE_NOTFOUND"
131 #define STREAM_LOAD_SOURCE_LOCALMEM 1
132 #define STREAM_LOAD_SOURCE_LOCALMEM_STRING "STREAM_LOAD_SOURCE_LOCALMEM"
134 #define STREAM_LOAD_SOURCE_SHAREMEM 2
135 #define STREAM_LOAD_SOURCE_SHAREMEM_STRING "STREAM_LOAD_SOURCE_SHAREMEM"
137 #define STREAM_LOAD_SOURCE_CONFFITS 3
138 #define STREAM_LOAD_SOURCE_CONFFITS_STRING "STREAM_LOAD_SOURCE_CONFFITS"
140 #define STREAM_LOAD_SOURCE_CONFNAME 4
141 #define STREAM_LOAD_SOURCE_CONFNAME_STRING "STREAM_LOAD_SOURCE_CONFNAME"
143 #define STREAM_LOAD_SOURCE_NULL 5
144 #define STREAM_LOAD_SOURCE_NULL_STRING "STREAM_LOAD_SOURCE_NULL"
146 #define STREAM_LOAD_SOURCE_EXITFAILURE -1
147 #define STREAM_LOAD_SOURCE_EXITFAILURE_STRING "STREAM_LOAD_SOURCE_EXITFAILURE"
171 #define FPFLAG_STREAM_LOAD_FORCE_LOCALMEM 0x0000000000100000
172 #define FPFLAG_STREAM_LOAD_FORCE_SHAREMEM 0x0000000000200000
173 #define FPFLAG_STREAM_LOAD_FORCE_CONFFITS 0x0000000000400000
174 #define FPFLAG_STREAM_LOAD_FORCE_CONFNAME 0x0000000000800000
182 #define FPFLAG_STREAM_LOAD_SKIPSEARCH_LOCALMEM 0x0000000001000000
183 #define FPFLAG_STREAM_LOAD_SKIPSEARCH_SHAREMEM 0x0000000002000000
184 #define FPFLAG_STREAM_LOAD_SKIPSEARCH_CONFFITS 0x0000000004000000
185 #define FPFLAG_STREAM_LOAD_SKIPSEARCH_CONFNAME 0x0000000008000000
188 #define FPFLAG_STREAM_LOAD_UPDATE_SHAREMEM 0x0000000010000000
189 #define FPFLAG_STREAM_LOAD_UPDATE_CONFFITS 0x0000000020000000
198 #define FPFLAG_FILE_CONF_REQUIRED 0x0000000040000000 // file must exist for CONF process to proceed
199 #define FPFLAG_FILE_RUN_REQUIRED 0x0000000080000000 // file must exist for RUN process to proceed
202 #define FPFLAG_FPS_CONF_REQUIRED 0x0000000040000000 // file must exist for CONF process to proceed
203 #define FPFLAG_FPS_RUN_REQUIRED 0x0000000080000000 // file must exist for RUN process to proceed
205 #define FPFLAG_STREAM_CONF_REQUIRED 0x0000000040000000 // stream has to be in MEM for CONF process to proceed
206 #define FPFLAG_STREAM_RUN_REQUIRED 0x0000000080000000 // stream has to be in MEM for RUN process to proceed
224 #define FPFLAG_STREAM_ENFORCE_DATATYPE 0x0000000100000000 // enforce stream datatype
227 #define FPFLAG_STREAM_TEST_DATATYPE_UINT8 0x0000000200000000 // test if stream of type UINT8 (OR test)
228 #define FPFLAG_STREAM_TEST_DATATYPE_INT8 0x0000000400000000 // test if stream of type INT8 (OR test)
229 #define FPFLAG_STREAM_TEST_DATATYPE_UINT16 0x0000000800000000 // test if stream of type UINT16 (OR test)
230 #define FPFLAG_STREAM_TEST_DATATYPE_INT16 0x0000001000000000 // test if stream of type INT16 (OR test)
231 #define FPFLAG_STREAM_TEST_DATATYPE_UINT32 0x0000002000000000 // test if stream of type UINT32 (OR test)
232 #define FPFLAG_STREAM_TEST_DATATYPE_INT32 0x0000004000000000 // test if stream of type INT32 (OR test)
233 #define FPFLAG_STREAM_TEST_DATATYPE_UINT64 0x0000008000000000 // test if stream of type UINT64 (OR test)
234 #define FPFLAG_STREAM_TEST_DATATYPE_INT64 0x0000010000000000 // test if stream of type INT64 (OR test)
235 #define FPFLAG_STREAM_TEST_DATATYPE_HALF 0x0000020000000000 // test if stream of type HALF (OR test)
236 #define FPFLAG_STREAM_TEST_DATATYPE_FLOAT 0x0000040000000000 // test if stream of type FLOAT (OR test)
237 #define FPFLAG_STREAM_TEST_DATATYPE_DOUBLE 0x0000080000000000 // test if stream of type DOUBLE (OR test)
239 #define FPFLAG_STREAM_ENFORCE_1D 0x0000100000000000 // enforce 1D image
240 #define FPFLAG_STREAM_ENFORCE_2D 0x0000200000000000 // enforce 2D image
241 #define FPFLAG_STREAM_ENFORCE_3D 0x0000400000000000 // enforce 3D image
242 #define FPFLAG_STREAM_ENFORCE_XSIZE 0x0008000000000000 // enforce X size
243 #define FPFLAG_STREAM_ENFORCE_YSIZE 0x0010000000000000 // enforce Y size
244 #define FPFLAG_STREAM_ENFORCE_ZSIZE 0x0020000000000000 // enforce Z size
246 #define FPFLAG_CHECKSTREAM 0x0040000000000000 // check and display stream status in GUI
247 #define FPFLAG_STREAM_MEMLOADREPORT 0x0080000000000000 // Write stream load report (for debugging)
259 #define FPFLAG_DEFAULT_INPUT FPFLAG_ACTIVE|FPFLAG_USED|FPFLAG_VISIBLE|FPFLAG_WRITE|FPFLAG_WRITECONF|FPFLAG_SAVEONCHANGE|FPFLAG_FEEDBACK
260 #define FPFLAG_DEFAULT_OUTPUT FPFLAG_ACTIVE|FPFLAG_USED|FPFLAG_VISIBLE
261 #define FPFLAG_DEFAULT_INPUT_STREAM FPFLAG_DEFAULT_INPUT|FPFLAG_STREAM_RUN_REQUIRED|FPFLAG_CHECKSTREAM
262 #define FPFLAG_DEFAULT_OUTPUT_STREAM FPFLAG_DEFAULT_INPUT|FPFLAG_CHECKSTREAM
266 #define FPFLAG_DEFAULT_STATUS FPFLAG_ACTIVE|FPFLAG_USED|FPFLAG_VISIBLE
272 #define FUNCTION_PARAMETER_NBPARAM_DEFAULT 100 // size of dynamically allocated array of parameters
279 uint8_t stream_atype;
283 uint32_t stream_naxis[2];
284 uint32_t stream_xsize[2];
285 uint32_t stream_ysize[2];
286 uint32_t stream_zsize[2];
287 uint8_t stream_sourceLocation;
295 long FPSNBparamActive;
306 char keywordfull[FUNCTION_PARAMETER_KEYWORD_STRMAXLEN*FUNCTION_PARAMETER_KEYWORD_MAXLEVEL];
307 char keyword[FUNCTION_PARAMETER_KEYWORD_MAXLEVEL][FUNCTION_PARAMETER_KEYWORD_STRMAXLEN];
311 char keywordfrom[FUNCTION_PARAMETER_KEYWORD_STRMAXLEN*FUNCTION_PARAMETER_KEYWORD_MAXLEVEL];
313 char description[FUNCTION_PARAMETER_DESCR_STRMAXLEN];
331 struct timespec ts[2];
334 char string[2][FUNCTION_PARAMETER_STRMAXLEN];
354 #define STRINGMAXLEN_FPS_NAME 100
356 #define FUNCTION_PARAMETER_STRUCT_MSG_SIZE 500
360 #define FUNCTION_PARAMETER_STRUCT_STATUS_CONF 0x0001 // is configuration running ?
361 #define FUNCTION_PARAMETER_STRUCT_STATUS_RUN 0x0002 // is process running ?
363 #define FUNCTION_PARAMETER_STRUCT_STATUS_CMDCONF 0x0010 // should configuration be running ?
364 #define FUNCTION_PARAMETER_STRUCT_STATUS_CMDRUN 0x0020 // should process be running ?
366 #define FUNCTION_PARAMETER_STRUCT_STATUS_RUNLOOP 0x0100 // is process loop running ?
367 #define FUNCTION_PARAMETER_STRUCT_STATUS_CHECKOK 0x0200 // Are parameter values OK to run loop process ? (1=OK, 0=not OK)
370 #define FUNCTION_PARAMETER_STRUCT_STATUS_TMUXCONF 0x1000
371 #define FUNCTION_PARAMETER_STRUCT_STATUS_TMUXRUN 0x2000
372 #define FUNCTION_PARAMETER_STRUCT_STATUS_TMUXCTRL 0x4000
378 #define FUNCTION_PARAMETER_STRUCT_SIGNAL_CONFRUN 0x0001 // configuration process
380 #define FUNCTION_PARAMETER_STRUCT_SIGNAL_UPDATE 0x0004 // re-run check of parameter
382 #define FUNCTION_PARAMETER_STRUCT_SIGNAL_CHECKED 0x0008 // CheckParametersAll been completed.
392 #define FPS_NB_MSG 100 // max number of messages
393 #define FUNCTION_PARAMETER_STRUCT_MSG_LEN 500
396 #define FPS_MSG_FLAG_NOTINITIALIZED 0x0001
397 #define FPS_MSG_FLAG_BELOWMIN 0x0002
398 #define FPS_MSG_FLAG_ABOVEMAX 0x0004
401 #define FPS_MSG_FLAG_ERROR 0x0008 // if ERROR, then cannot start function
402 #define FPS_MSG_FLAG_INFO 0x0010
406 #define FPS_CWD_STRLENMAX 200
407 #define FPS_DIR_STRLENMAX 200
408 #define FPS_SRCDIR_STRLENMAX 200
409 #define FPS_PNAME_STRMAXLEN 100
410 #define FPS_CALLPROGNAME_STRMAXLEN 80
411 #define FPS_CALLFUNCNAME_STRMAXLEN 100
412 #define FPS_DESCR_STRMAXLEN 200
413 #define STRINGMAXLEN_FPS_DIRNAME 200
420 char name[STRINGMAXLEN_FPS_NAME];
422 char description[FPS_DESCR_STRMAXLEN];
426 char workdir[FPS_CWD_STRLENMAX];
429 char datadir[FPS_DIR_STRLENMAX];
431 char confdir[FPS_DIR_STRLENMAX];
434 char sourcefname[FPS_SRCDIR_STRLENMAX];
441 char pname[FPS_PNAME_STRMAXLEN];
442 char callprogname[FPS_CALLPROGNAME_STRMAXLEN];
443 char callfuncname[FPS_CALLFUNCNAME_STRMAXLEN];
444 char nameindexW[16][10];
452 struct timespec confpidstarttime;
456 struct timespec runpidstarttime;
478 message[FPS_NB_MSG][FUNCTION_PARAMETER_STRUCT_MSG_LEN];
481 int msgpindex[FPS_NB_MSG];
484 uint32_t msgcode[FPS_NB_MSG];
498 #define FPS_LOCALSTATUS_CONFLOOP 0x0001
509 uint16_t localstatus;
531 #define NB_FPSCTRL_TASK_MAX 500
532 #define NB_FPSCTRL_TASK_PURGESIZE 50
535 #define FPSTASK_STATUS_ACTIVE 0x0000000000000001 // is the task entry in the array used ?
536 #define FPSTASK_STATUS_SHOW 0x0000000000000002
537 #define FPSTASK_STATUS_RUNNING 0x0000000000000004
538 #define FPSTASK_STATUS_COMPLETED 0x0000000000000008
541 #define FPSTASK_STATUS_WAITING 0x0000000000000010
542 #define FPSTASK_STATUS_RECEIVED 0x0000000000000020
543 #define FPSTASK_STATUS_CMDNOTFOUND 0x0000000000000040
544 #define FPSTASK_STATUS_CMDFAIL 0x0000000000000080
545 #define FPSTASK_STATUS_CMDOK 0x0000000000000100
548 #define FPSTASK_FLAG_WAITONRUN 0x0000000000000001
549 #define FPSTASK_FLAG_WAITONCONF 0x0000000000000002
552 #define FPSTASK_FLAG_WAIT_FOR_FPS_NORUN 0x0000000000000004
554 #define NB_FPSCTRL_TASKQUEUE_MAX 100 // max number of queues
569 char cmdstring[STRINGMAXLEN_FPS_CMDLINE];
584 struct timespec creationtime;
585 struct timespec activationtime;
586 struct timespec completiontime;
600 int fpsCTRL_DisplayMode;
605 char fpsnamemask[100];
608 int fpsindexSelected;
609 int GUIlineSelected[100];
611 int directorynodeSelected;
613 char fpsCTRLfifoname[200];
630 #define NB_KEYWNODE_MAX 10000
631 #define MAX_NB_CHILD 500
635 char keywordfull[FUNCTION_PARAMETER_KEYWORD_STRMAXLEN *
636 FUNCTION_PARAMETER_KEYWORD_MAXLEVEL];
637 char keyword[FUNCTION_PARAMETER_KEYWORD_MAXLEVEL][FUNCTION_PARAMETER_KEYWORD_STRMAXLEN];
643 int child[MAX_NB_CHILD];
659 #include "fps_checkparameter.h"
672 #include "fps_processinfo_entries.h"
703 #define FPS_SETUP_INIT(VARfpsname,VARCMDmode) FUNCTION_PARAMETER_STRUCT fps; do { \
705 fps = function_parameter_FPCONFsetup((VARfpsname), (VARCMDmode)); \
706 strncpy(fps.md->sourcefname, __FILE__, FPS_SRCDIR_STRLENMAX);\
707 fps.md->sourceline = __LINE__; \
709 char msgstring[STRINGMAXLEN_FPS_LOGMSG]; \
710 SNPRINTF_CHECK(msgstring, STRINGMAXLEN_FPS_LOGMSG, "LOGSTART %s %d %s %d", (VARfpsname), (VARCMDmode), fps.md->sourcefname, fps.md->sourceline); \
711 functionparameter_outlog("FPSINIT", msgstring); \
712 functionparameter_outlog_namelink(); \
722 #define FPS_CONNECT( VARfpsname, VARCMDmode ) FUNCTION_PARAMETER_STRUCT fps; do { \
724 if(function_parameter_struct_connect( (VARfpsname) , &fps, (VARCMDmode) ) == -1) { \
725 printf("ERROR: fps \"%s\" does not exist -> running without FPS interface\n", VARfpsname); \
726 return RETURN_FAILURE; \
734 #define FPS_CONFLOOP_START if( ! fps.localstatus & FPS_LOCALSTATUS_CONFLOOP ) { \
735 return RETURN_SUCCESS; \
737 while(fps.localstatus & FPS_LOCALSTATUS_CONFLOOP) { \
739 struct timespec treq, trem; \
741 treq.tv_nsec = 50000; \
742 nanosleep(&treq, &trem); \
743 if(data.signal_INT == 1){fps.localstatus &= ~FPS_LOCALSTATUS_CONFLOOP;} \
745 if(function_parameter_FPCONFloopstep(&fps) == 1) {
749 #define FPS_CONFLOOP_END functionparameter_CheckParametersAll(&fps);} \
751 function_parameter_FPCONFexit(&fps);
764 #define FPS_ADDPARAM_FLT32_IN(key, pname, pdescr, dflt) \
767 fp_##key = function_parameter_add_entry(&fps, (pname), (pdescr), FPTYPE_FLOAT32, FPFLAG_DEFAULT_INPUT, (dflt));\
774 #define FPS_ADDPARAM_FLT64_IN(key, pname, pdescr, dflt) \
777 fp_##key = function_parameter_add_entry(&fps, (pname), (pdescr), FPTYPE_FLOAT64, FPFLAG_DEFAULT_INPUT, (dflt));\
785 #define FPS_ADDPARAM_INT64_IN(key, pname, pdescr, dflt) \
788 fp_##key = function_parameter_add_entry(&fps, (pname), (pdescr), FPTYPE_INT64, FPFLAG_DEFAULT_INPUT, (dflt));\
795 #define FPS_ADDPARAM_FILENAME_IN(key, pname, pdescr, dflt) \
798 fp_##key = function_parameter_add_entry(&fps, (pname), (pdescr), FPTYPE_FILENAME, FPFLAG_DEFAULT_INPUT_STREAM, (dflt));\
805 #define FPS_ADDPARAM_STREAM_IN(key, pname, pdescr, dflt) \
808 fp_##key = function_parameter_add_entry(&fps, (pname), (pdescr), FPTYPE_STREAMNAME, FPFLAG_DEFAULT_INPUT_STREAM, (dflt));\
815 #define FPS_ADDPARAM_ONOFF(key, pname, pdescr, dflt) \
818 fp_##key = function_parameter_add_entry(&fps, (pname), (pdescr), FPTYPE_ONOFF, FPFLAG_DEFAULT_INPUT, (dflt));\
827 #define FPS_ADDPARAM_FLT32_OUT(key, pname, pdescr) \
830 fp_##key = function_parameter_add_entry(&fps, (pname), (pdescr), FPTYPE_FLOAT32, FPFLAG_DEFAULT_OUTPUT, NULL);\
837 #define FPS_ADDPARAM_FLT64_OUT(key, pname, pdescr) \
840 fp_##key = function_parameter_add_entry(&fps, (pname), (pdescr), FPTYPE_FLOAT64, FPFLAG_DEFAULT_OUTPUT, NULL);\
847 #define FPS_ADDPARAM_INT64_OUT(key, pname, pdescr) \
850 fp_##key = function_parameter_add_entry(&fps, (pname), (pdescr), FPTYPE_INT64, FPFLAG_DEFAULT_OUTPUT, NULL);\
857 #define FPS_ADDPARAM_STREAM_OUT(key, pname, pdescr) \
860 fp_##key = function_parameter_add_entry(&fps, (pname), (pdescr), FPTYPE_STREAMNAME, FPFLAG_DEFAULT_OUTPUT_STREAM, NULL);\
878 #endif // FUNCTION_PARAMETERS_H