00001 /************************************************************************* 00002 * E.S.O. - VLT project 00003 * 00004 * "@(#) $Id: ccdWsInternal.h,v 4.1 2003/10/30 15:32:47 vltsccm Exp $" 00005 * 00006 * who when what 00007 * -------- -------- ---------------------------------------------- 00008 * alongino 12/08/94 created 00009 * alongino 24/07/95 commands moved to ccd.h 00010 * removed IMREADY. Obsolete 00011 * alongino 14/08/95 added definition of ccdPARAM 00012 * alongino 17/08/95 changed structure of ccdENVVAR to include ccdCAMERA 00013 * alongino 29/01/96 ccdPARAM replaced with cmdPARAM_LIST 00014 * alongino 15/11/96 added ccdMidasCmd and ccdObjGetMidasProc prototypes 00015 * pduhoux 31/01/97 added param <revision> to ccdLog functions 00016 * pduhoux 31/01/97 fixed DB/dataType mismatch in ccdFITSHIERARCH_WS 00017 * pduhoux 01/07/97 <id> set to vltBYTES32 in ccdFITSHIERARCH_WS to match DIC 00018 */ 00019 00020 /************************************************************************* 00021 * This file contains the definitions for the WS part of the CCD sw. 00022 * Common file Used by all WS CCD modules 00023 *************************************************************************/ 00024 00025 #ifndef CCDWSINTERNAL_H 00026 #define CCDWSINTERNAL_H 00027 00028 #ifdef __cplusplus 00029 extern "C" { 00030 #endif 00031 00032 /* 00033 * System header files 00034 */ 00035 #include <stdlib.h> 00036 #include <unistd.h> 00037 00038 /* 00039 * CCD include files 00040 */ 00041 #include "ccdInternal.h" /* common definitions for WS and LCU */ 00042 00043 /* 00044 * Constants 00045 */ 00046 #define ccdTIMEOUT_DEFAULT 25000 /* default timeout for replies 25 sec */ 00047 /* AL941214 10 sec not enough for wipe */ 00048 #define ccdSETUP_VERS_PAR "VERSION" /* keyword in setup file for version */ 00049 #define ccdMAX_LINE 80 /* maximum size of a setup line */ 00050 #define ccdMAX_PARAM 10 /* maximum number of command parameters*/ 00051 00052 #define ccdMAX_UTC_DELTA 5.0 /* Max UTC difference WS vs LCU */ 00053 00054 /* commands */ 00055 /* command ccdCMD_VERS */ 00056 #define ccdPAR_START_MODE "imageSave" /* image save parameter name */ 00057 00058 /* 00059 * database paths for common attributes 00060 */ 00061 00062 /* 00063 * New types definitions 00064 */ 00065 /* 00066 * operational states of CCD WS part 00067 */ 00068 typedef enum { /* possible states of CCD DCS WS part */ 00069 ccdWsOFF = ccdOFF, /* terminating */ 00070 ccdWsLOADED = ccdLOADED, /* need to be initialised */ 00071 ccdWsSTANDBY = ccdSTANDBY, /* stand-by */ 00072 ccdWsONLINE = ccdONLINE /* ready for commands */ 00073 } ccdWsSTATE; 00074 00075 /* 00076 * FITS for CCD WS part 00077 */ 00078 typedef struct { /* basic FITS info */ 00079 ccdFITSBASIC lcu; /* basic info from LCU */ 00080 vltBYTES16 dateFile; /* date the file has been written */ 00081 } ccdFITSBASIC_WS; 00082 00083 typedef struct { /* cryostat FITS info */ 00084 vltBYTES16 description; /* type */ 00085 vltUINT8 esoNumber; /* eso sequencial number */ 00086 } ccdFITSCRYO_WS; 00087 00088 typedef struct { /* FITS info on camera shutter */ 00089 vltBYTES16 type; /* shutter type */ 00090 vltBYTES16 description; /* unique identifier */ 00091 } ccdFITSSHUT_WS; 00092 00093 typedef struct { /* FITS info on tempepature sources */ 00094 vltBYTES16 id; /* id as from manufacturer */ 00095 vltBYTES16 description; /* unique identifier */ 00096 } ccdFITSTEMP_WS; 00097 00098 typedef struct { /* FITS info on telemetry sensors */ 00099 vltBYTES16 id; /* id as from manufacturer */ 00100 vltBYTES16 description; /* unique identifier */ 00101 } ccdFITSTELE_WS; 00102 00103 typedef struct { /* FITS info on chips in the mosaic */ 00104 vltBYTES16 id; /* chip description */ 00105 vltBYTES16 description; /* chip identifier */ 00106 vltBYTES16 date; /* chip installation date */ 00107 vltDOUBLE xGap; /* right gap to next chip [um] */ 00108 vltDOUBLE yGap; /* top gap to next chip [um] */ 00109 } ccdFITSCHIP_WS; 00110 00111 typedef struct { /* FITS info on outputs */ 00112 vltBYTES16 id; /* id as from manufacturer */ 00113 vltBYTES16 description; /* name of the output */ 00114 } ccdFITSOUTP_WS; 00115 00116 typedef struct { /* FITS info on chip mosaic */ 00117 vltBYTES16 description; /* chip type */ 00118 } ccdFITSMOSAIC_WS; 00119 00120 typedef struct { /* hierarchical FITS info */ 00121 ccdFITSHIERARCH lcu; /* info from LCU */ 00122 vltBYTES32 id; /* software version identifier */ 00123 vltBYTES32 name; /* name of detector system */ 00124 vltBYTES16 date; /* detector commissioning date */ 00125 vltBYTES32 installed; /* software installation date */ 00126 vltBYTES32 did; /* dictionary identifier */ 00127 vltDOUBLE tranTime; /* transfer time [s] */ 00128 vltDOUBLE xPixSize; /* pixel size in X [um] */ 00129 vltDOUBLE yPixSize; /* pixel size in Y [um] */ 00130 vltINT32 dumdit; /* # dummy rdt / exposure */ 00131 ccdFITSCRYO_WS cryo; /* cryostat info */ 00132 ccdFITSSHUT_WS shut; /* shutter info */ 00133 ccdFITSTEMP_WS temp[ccdMAXTMPSRC]; /* temp. sensor info */ 00134 ccdFITSTELE_WS tele[ccdMAXTELSRC]; /* telemetry info */ 00135 ccdFITSCHIP_WS chip[ccdMAXCHIPS]; /* chip info */ 00136 ccdFITSOUTP_WS outp[ccdMAXOUTPUT]; /* output info */ 00137 ccdFITSMOSAIC_WS mosaic; /* mosaic info */ 00138 } ccdFITSHIERARCH_WS; 00139 00140 typedef struct { /* complete DCS FITS info */ 00141 ccdFITSBASIC_WS basic; /* basic info */ 00142 ccdFITSHIERARCH_WS hierarch; /* hierarchical info */ 00143 } ccdFITS_WS; 00144 00145 typedef struct { /* Environment information */ 00146 ccdCAMERA camera; /* camera info */ 00147 ccsPROCNUM myProcId; /* my process ID */ 00148 ccsPROCNAME myProcName; /* my process name */ 00149 ccsPROCNAME destProcName; /* destination process name */ 00150 ccsENVNAME destEnv; /* destination CCS enviroment*/ 00151 dbSYMADDRESS myRootPoint; /* name of my DB root point */ 00152 dbSYMADDRESS destRootPoint; /* name of dest. DB root point */ 00153 ccdCONFIG config; /* configuration information */ 00154 slxDICTIONARY dictionary; /* dictionary name */ 00155 logMASK logMask; /* FITS log mask */ 00156 } ccdENVVAR; 00157 00158 typedef struct { /* information associated to any message */ 00159 vltUINT8 type; /* type of message */ 00160 msgCMD name; /* name */ 00161 msgCMDID id; /* ID */ 00162 msgPROCESSID orgId; /* originator of message */ 00163 ccsPROCNAME proc; /* destination process name */ 00164 ccsENVNAME env; /* destination CCS enviroment*/ 00165 char body[msgMAXLEN]; /* body of message */ 00166 msgLENGTH length; /* length of message body */ 00167 cmdPARAM_LIST param; /* parameters structure */ 00168 msgTIMEOUT timeout; /* timeout to wait for reply */ 00169 msgCHECKFLAG check; /* check flag */ 00170 vltLOGICAL sendReply; /* reply must be sent */ 00171 vltLOGICAL lastReply; /* flag for last reply */ 00172 ccsERROR error; /* error returned in reply */ 00173 } ccdMSG; 00174 00175 typedef struct ccdMsgLst *ccdMSGLSTPTR; /* pointer to ccdMSGLST */ 00176 /* 00177 Note: better to define variables as (ccdMSGLST *) rather than ccdMSGLSTPTR 00178 because some debugger, e.g. gdb, shows the contents of the structure only 00179 in the former case 00180 */ 00181 00182 typedef struct ccdMsgLst{ /* list of msg whose execution must be completed */ 00183 ccdMSG msg; /* message info */ 00184 ccdMSGLSTPTR orgCmd; /* entry of original command */ 00185 ccdMSGLSTPTR prev; /* previous entry in the list*/ 00186 ccdMSGLSTPTR next; /* next entry in the list */ 00187 } ccdMSGLST; 00188 00189 /* 00190 * Macros 00191 */ 00192 00193 /* 00194 * function prototypes 00195 */ 00196 00197 /* log that a CCD program started */ 00198 void ccdLogStart( 00199 IN ccsPROCNAME procName, /* process name */ 00200 IN const char *revision); /* RCS code revision string */ 00201 00202 /* log that a CCD program terminated */ 00203 void ccdLogTerminate( 00204 IN ccsPROCNAME procName, /* process name */ 00205 IN const char *revision); /* RCS code revision string */ 00206 00207 /* log that a CCD program runs in a certain operational mode */ 00208 void ccdLogOpMode( 00209 IN const char *opModeDescr); /* operational mode description */ 00210 00211 /* add error to stack, print error info on stdout and close stack */ 00212 void ccdPrintErr( 00213 IN ccsPROCNAME procName, /* process name */ 00214 IN char *reason, /* reason for error */ 00215 IN ccsERROR *error); /* error structure */ 00216 00217 /* do startup actions for any WS CCD program */ 00218 ccsCOMPL_STAT ccdProcStart( 00219 IN int argc, /* number of runtime parameters */ 00220 IN char *argv[], /* runtime parameters */ 00221 IN const ccsPROCNAME destProc, /* name of commands destination */ 00222 IN const char *revision, /* RCS code revision string */ 00223 OUT ccdENVVAR *envInfo); /* pointer to env. var. values */ 00224 00225 /* terminate CCD process */ 00226 void ccdProcTerminate( 00227 IN ccsPROCNAME procName, /* process name */ 00228 IN const char *revision, /* RCS code revision string */ 00229 IN vltLOGICAL ccsRegistered, /* registered already to CCS */ 00230 IN const char *reason, /* reason for error */ 00231 IN ccsERROR *error); /* error structure */ 00232 00233 /* check operational mode */ 00234 ccsCOMPL_STAT ccdCheckOpMode( 00235 IN ccdOPMODE opMode, /* operational mode */ 00236 OUT ccsERROR *error); /* error structure */ 00237 00238 /* receive and parse next message */ 00239 ccsCOMPL_STAT ccdRecvMsg( 00240 INOUT ccdMSGLST **msg, /* pointer to message entry */ 00241 OUT vltLOGICAL *logErr, /* log the error */ 00242 INOUT ccsERROR *error); /* error structure */ 00243 00244 /* Send command to other process and add expected reply to message list */ 00245 ccsCOMPL_STAT ccdSendCmd( 00246 INOUT ccdMSGLST **msg, /* entry to list */ 00247 IN ccdMSG *cmd, /* command info */ 00248 IN vltLOGICAL link, /* link to associated command */ 00249 OUT ccsERROR *error); /* error structure */ 00250 00251 /* send all pending replies in the pending messages list */ 00252 ccsCOMPL_STAT ccdSendReply( 00253 INOUT ccdMSGLST **msg, /* pointer to message entry */ 00254 OUT vltLOGICAL *exit, /* last reply to EXIT sent */ 00255 INOUT ccsERROR *error); /* error structure */ 00256 00257 /* add suffux to file name */ 00258 void ccdFileNameAddSuffix( 00259 IN char *header, /* header of original pathname */ 00260 IN char *suffix, /* suffix of original pathname */ 00261 IN int index, /* index to be added as suffix */ 00262 OUT char *path); /* new pathname */ 00263 00264 /* separate suffix from header in a file name */ 00265 void ccdFileNameSepSuffix( 00266 IN char *path, /* original pathname */ 00267 OUT char *header, /* file name header */ 00268 OUT char *suffix); /* file name suffix */ 00269 00270 /* get env. information needed by any CCD WS program */ 00271 ccsCOMPL_STAT ccdGetEnv( 00272 INOUT ccdENVVAR *envInfo, /* pointer to env. var. values */ 00273 OUT ccdOPMODE *opMode, /* operational mode */ 00274 OUT ccsERROR *error); /* error structure */ 00275 00276 /* get CCD sw operational mode */ 00277 ccsCOMPL_STAT ccdGetOpMode ( 00278 OUT ccdOPMODE *opMode, /* operational mode */ 00279 OUT ccsERROR *error); /* error structure */ 00280 00281 /* convert operational mode from code to string */ 00282 char *ccdOpModeEnumToStr( 00283 IN ccdOPMODE opMode); /* operational mode */ 00284 00285 void ccdHandleBreak( 00286 IN int sigNum); /* signal Number */ 00287 00288 /* add new entry in the list of pending messages for any CCD WS program */ 00289 ccsCOMPL_STAT ccdMsgLstAdd( 00290 INOUT ccdMSGLST **msg, /* pointer to new entry in list */ 00291 OUT ccsERROR *error); /* error structure */ 00292 00293 /* fill in a command entry in the list of pending messages */ 00294 ccsCOMPL_STAT ccdMsgLstCmdAdd( 00295 INOUT ccdMSGLST **msg, /* pointer to entry in list */ 00296 IN msgCMD *cmdName, /* command name */ 00297 IN msgCMDID cmdId, /* command ID */ 00298 IN msgPROCESSID *orgId, /* originator ID */ 00299 IN const char *body, /* command body */ 00300 IN msgLENGTH length, /* command body length */ 00301 OUT ccsERROR *error); /* error structure */ 00302 00303 /* fill in a command entry in the list of pending messages */ 00304 ccsCOMPL_STAT ccdMsgLstRplyAdd( 00305 INOUT ccdMSGLST **msg, /* entry to list */ 00306 IN vltLOGICAL link, /* link to associated command */ 00307 IN ccdMSG *cmd, /* command info */ 00308 OUT ccsERROR *error); /* error structure */ 00309 00310 /* fill in a reply entry in the list of pending messages */ 00311 ccsCOMPL_STAT ccdMsgLstRplyFill( 00312 IN ccdMSGLST *rply, /* reply entry in list */ 00313 IN vltUINT8 type, /* reply type */ 00314 IN const char *command, /* associated command */ 00315 IN msgPROCESSID *orgId, /* reply originator ID */ 00316 IN const char *body, /* pointer to reply body */ 00317 IN msgLENGTH length, /* command length */ 00318 IN vltLOGICAL last, /* last reply */ 00319 IN ccsERROR *error); /* reply error */ 00320 00321 /* delete one entry in the list of pending messages for CCD WS program*/ 00322 ccsCOMPL_STAT ccdMsgLstDel( 00323 INOUT ccdMSGLST **msg, /* pointer to next entry in list*/ 00324 OUT ccsERROR *error); /* error structure */ 00325 00326 /* query list of pending messages for CCD WS program */ 00327 ccsCOMPL_STAT ccdMsgLstSearch( 00328 INOUT ccdMSGLST **msg, /* pointer to new entry in list */ 00329 IN vltUINT8 type, /* message type */ 00330 IN msgCMD *cmdName, /* command name */ 00331 IN msgCMDID cmdId, /* command ID */ 00332 IN msgPROCESSID *orgId, /* originator ID */ 00333 OUT vltLOGICAL *logErr, /* if TRUE, log error */ 00334 OUT ccsERROR *error); /* error structure */ 00335 00336 /* add reply information for pending command */ 00337 void ccdMsgLstRplyBuild( 00338 IN ccdMSGLST *cmd, /* entry to command associated */ 00339 IN const char *reply, /* reply body */ 00340 IN msgLENGTH length, /* reply length */ 00341 IN vltLOGICAL last, /* last reply */ 00342 IN ccsERROR *error); /* error reply */ 00343 00344 /* Delete all links to a command in the pending messages list */ 00345 void ccdMsgLstCmdLinkDel( 00346 IN ccdMSGLST *cmd); /* entry to command associated */ 00347 00348 /* Check if there are links to a command in the pending messages list */ 00349 vltLOGICAL ccdMsgLstCmdLinkCheck( 00350 IN ccdMSGLST *cmd); /* entry to command associated */ 00351 00352 /* Check if there are pending commands ready for reply */ 00353 vltLOGICAL ccdMsgLstCmdReady( 00354 INOUT ccdMSGLST **cmd); /* pointer to entry to command */ 00355 00356 /* Return timeout value for next message receive and associated message */ 00357 void ccdMsgLstTimeout( 00358 OUT msgTIMEOUT *timeout, /* timeout value */ 00359 INOUT ccdMSGLST **msg); /* pointer to message entry */ 00360 00361 /* Initialise message structure */ 00362 void ccdMsgInit( 00363 INOUT ccdMSG *msg); /* message structure to init */ 00364 00365 /* Add one value to the message body */ 00366 void ccdMsgAddValue( 00367 INOUT ccdMSG *msg, /* message structure */ 00368 IN cmdPARAM_TYPE type, /* parameter type */ 00369 IN const void *value, /* parameter value */ 00370 IN vltLOGICAL newPar); /* first value of new parameter */ 00371 00372 /* Get the status of an exposure */ 00373 ccsCOMPL_STAT ccdGetExpStatus( 00374 INOUT vltINT32 *expId, /* ID of exposure */ 00375 OUT vltINT32 *expStatus, /* status of exposure */ 00376 OUT ccsERROR *error); /* error structure */ 00377 00378 /* Set the status of an exposure */ 00379 ccsCOMPL_STAT ccdSetExpStatus( 00380 INOUT vltINT32 *expId, /* ID of exposure */ 00381 IN vltINT32 *expStatus, /* status of exposure */ 00382 OUT ccsERROR *error); /* error structure */ 00383 00384 /* Write in database new operational state for CCD WS sw */ 00385 ccsCOMPL_STAT ccdSetOpState( 00386 IN ccdWsSTATE opState, /* operational state code */ 00387 OUT ccsERROR *error); /* error structure */ 00388 00389 /* Get ID of last exposure started */ 00390 ccsCOMPL_STAT ccdGetLastExpId( 00391 OUT vltINT32 *expId, /* exposure ID */ 00392 OUT ccsERROR *error); /* error structure */ 00393 00394 /* get name of this program */ 00395 void ccdGetProgName( 00396 IN const char *argv0, /* runtime parameters */ 00397 OUT ccsPROCNAME progName); /* pointer program name */ 00398 00399 /* get name of CCD process */ 00400 void ccdGetProcName( 00401 IN const ccdCAMERANAME cameraName, /* name of the camera used */ 00402 IN const ccsPROCNAME progName, /* name of the program */ 00403 OUT ccsPROCNAME procName); /* pointer to process name */ 00404 00405 /* Send a command to Midas and return its reply */ 00406 ccsCOMPL_STAT ccdMidasCmd( 00407 IN char *midasId, /* midas Unit ID string */ 00408 IN char *midasHost, /* host where Midas is running */ 00409 IN char *midasCmd, /* Command for Midas */ 00410 OUT msgLENGTH *rplyLen, /* length of last reply from Midas */ 00411 OUT char **rplyBody, /* pointer to Midas reply body */ 00412 OUT ccsERROR *error); /* error structure */ 00413 00414 /* Get path for midas procedure usable from within Midas and image directory */ 00415 ccsCOMPL_STAT ccdObjGetMidasProc( 00416 IN char *imgPath, /* image file full path */ 00417 IN char *procName, /* name of Midas procedure */ 00418 OUT char **imgDir, /* image directory name */ 00419 OUT char **imgFile, /* image file name */ 00420 OUT char *procPath, /* path of procedure found */ 00421 OUT ccsERROR *error); /* error structure */ 00422 00423 /* execute command DEBUG */ 00424 ccsCOMPL_STAT ccdDebug( 00425 IN const ccdMSG *inpCmd, /* received command structure */ 00426 OUT ccdMSG *destMsg, /* destination message structure */ 00427 OUT ccsERROR *error); /* error structure */ 00428 00429 #ifdef __cplusplus 00430 } 00431 #endif 00432 00433 #endif /* ! CCDWSINTERNAL_H */