00001 #ifndef I2OEVFMSGS_H 00002 #define I2OEVFMSGS_H 00003 00004 00005 #include "i2o/i2o.h" 00006 #include <string.h> 00007 00008 00009 //#include "IOPool/Streamer/interface/MsgTools.h" 00010 00011 /* 00012 Description: 00013 ------------ 00014 define communication protocoll between FUResourceBroker ('FU') and 00015 StorageManager ('SM'). 00016 00017 $Id: i2oEvfMsgs.h,v 1.5 2012/05/02 15:13:23 smorovic Exp $ 00018 */ 00019 00020 // I2O function codes: *_SM_* / *_FU_* according to who *receives* the message 00021 #define I2O_SM_PREAMBLE 0x001a 00022 #define I2O_SM_DATA 0x001b 00023 #define I2O_SM_ERROR 0x001c 00024 #define I2O_SM_OTHER 0x001d 00025 #define I2O_SM_DQM 0x001e 00026 #define I2O_FU_DATA_DISCARD 0x001f 00027 #define I2O_FU_DQM_DISCARD 0x0020 00028 00029 // 00030 // RunNumber_t and EventNumber_t are unsigned long variables 00031 // We will use U32 instead for 64-bit compatibility 00032 // 00033 // source (FU/HLT) id could be compressed into fewer bytes! 00034 // 00035 // max I2O frame is (2**16 - 1) * 4 = 65535 * 4 = 262140 00036 // but this size should also be a multiple of 64 bits (8 bytes) 00037 #define I2O_ABSOLUTE_MAX_SIZE 262136 00038 00039 // Illustrate calculation of max data I2O frame for given KB: 00040 // If 32KB (e.g. for MTCC-I) max = (2**13 - 1) * 4 = 32764 00041 // but to be a multiple of 8 bytes it needs to be = 32760 00042 // 00043 // Actual value can be defined to any multiple of 8 bytes 00044 // and less than I2O_ABSOLUTE_MAX_SIZE 00045 // set the default if no value is given in the output module 00046 #define I2O_MAX_SIZE 64000 00047 00048 // max data I2O frame needs to be calculated as e.g. 00049 // I2O_MAX_SIZE - headers = I2O_MAX_SIZE - 28 -136 00050 // now done dynamically in e.g. FUStreamerI2OWriter.cc 00051 // 00052 // maximum characters for the source class name and url 00053 #define MAX_I2O_SM_URLCHARS 50 00054 00055 00060 struct _I2O_SM_MULTIPART_MESSAGE_FRAME 00061 { 00062 I2O_PRIVATE_MESSAGE_FRAME PvtMessageFrame; 00063 U32 dataSize; 00064 char hltURL[MAX_I2O_SM_URLCHARS]; 00065 char hltClassName[MAX_I2O_SM_URLCHARS]; 00066 U32 hltLocalId; 00067 U32 hltInstance; 00068 U32 hltTid; 00069 U32 numFrames; 00070 U32 frameCount; 00071 U32 originalSize; 00072 }; 00073 00074 typedef struct _I2O_SM_MULTIPART_MESSAGE_FRAME 00075 I2O_SM_MULTIPART_MESSAGE_FRAME, *PI2O_SM_MULTIPART_MESSAGE_FRAME; 00076 00077 00082 typedef struct _I2O_SM_PREAMBLE_MESSAGE_FRAME : _I2O_SM_MULTIPART_MESSAGE_FRAME 00083 { 00084 U32 rbBufferID; 00085 U32 outModID; 00086 U32 fuProcID; 00087 U32 fuGUID; 00088 U32 nExpectedEPs; 00089 char* dataPtr() const 00090 { 00091 return (char*)this+sizeof(_I2O_SM_PREAMBLE_MESSAGE_FRAME); 00092 } 00093 } 00094 I2O_SM_PREAMBLE_MESSAGE_FRAME, *PI2O_SM_PREAMBLE_MESSAGE_FRAME; 00095 00096 00100 typedef struct _I2O_SM_DATA_MESSAGE_FRAME : _I2O_SM_MULTIPART_MESSAGE_FRAME 00101 { 00102 U32 rbBufferID; 00103 U32 runID; 00104 U32 eventID; 00105 U32 outModID; 00106 U32 fuProcID; 00107 U32 fuGUID; 00108 char* dataPtr() const { 00109 return (char*)this+sizeof(_I2O_SM_DATA_MESSAGE_FRAME); 00110 } 00111 } 00112 I2O_SM_DATA_MESSAGE_FRAME, *PI2O_SM_DATA_MESSAGE_FRAME; 00113 00114 00118 typedef struct _I2O_FU_DATA_DISCARD_MESSAGE_FRAME 00119 { 00120 I2O_PRIVATE_MESSAGE_FRAME PvtMessageFrame; 00121 U32 rbBufferID; 00122 } 00123 I2O_FU_DATA_DISCARD_MESSAGE_FRAME, *PI2O_FU_DATA_DISCARD_MESSAGE_FRAME; 00124 00125 00129 typedef struct _I2O_SM_DQM_MESSAGE_FRAME : _I2O_SM_MULTIPART_MESSAGE_FRAME 00130 { 00131 U32 rbBufferID; 00132 U32 runID; 00133 U32 eventAtUpdateID; 00134 U32 folderID; 00135 U32 fuProcID; 00136 U32 fuGUID; 00137 char* dataPtr() const 00138 { 00139 return (char*)this+sizeof(_I2O_SM_DQM_MESSAGE_FRAME); 00140 } 00141 } 00142 I2O_SM_DQM_MESSAGE_FRAME, *PI2O_SM_DQM_MESSAGE_FRAME; 00143 00144 00148 typedef struct _I2O_FU_DQM_DISCARD_MESSAGE_FRAME 00149 { 00150 I2O_PRIVATE_MESSAGE_FRAME PvtMessageFrame; 00151 U32 rbBufferID; 00152 } 00153 I2O_FU_DQM_DISCARD_MESSAGE_FRAME, *PI2O_FU_DQM_DISCARD_MESSAGE_FRAME; 00154 00155 00159 typedef struct _I2O_SM_OTHER_MESSAGE_FRAME : _I2O_SM_MULTIPART_MESSAGE_FRAME 00160 { 00161 U32 otherData; 00162 char* dataPtr() const 00163 { 00164 return (char*)this+sizeof(_I2O_SM_OTHER_MESSAGE_FRAME); 00165 } 00166 } 00167 I2O_SM_OTHER_MESSAGE_FRAME, *PI2O_SM_OTHER_MESSAGE_FRAME; 00168 00169 00170 #endif