File indexing completed on 2025-08-03 08:20:32
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114 #include <stdio.h> /* DEBUG */
0115
0116 #ifndef _FRAMES_
0117 #define _FRAMES_
0118
0119 #ifdef __cplusplus
0120 extern "C" {
0121 #endif
0122
0123 #include "phenixOnline.h"
0124 #include "framePublic.h"
0125 #include "formatError.h"
0126 #include "frameHdr.h"
0127
0128
0129
0130 INLINE_P VALUE_ret getFrameHdrLength (FRAME_ptr);
0131 INLINE_P VALUE_ret getFrameHdrVersion (FRAME_ptr);
0132 INLINE_P VALUE_ret getFrameLength (FRAME_ptr);
0133 INLINE_P VALUE_ret getFrameMark (FRAME_ptr);
0134
0135 INLINE_P LOGIC_ret setFrameHdrLength(FRAME_ptr, UINT);
0136 INLINE_P LOGIC_ret setFrameHdrVersion(FRAME_ptr, UINT);
0137 INLINE_P LOGIC_ret setFrameLength(FRAME_ptr, UINT);
0138 INLINE_P LOGIC_ret setFrameMark(FRAME_ptr, UINT);
0139
0140 VALUE_ret checkFrameHdrVersion (FRAME_ptr);
0141
0142 INLINE_P LOGIC_ret validFrameHdr (FRAME_ptr);
0143 INLINE_P LOGIC_ret currentFrameHdr (FRAME_ptr);
0144 INLINE_P LOGIC_ret validFrameMark (FRAME_ptr);
0145 INLINE_P LOGIC_ret emptyFrame(FRAME_ptr);
0146
0147 VALUE_ret checkFrameEndianism(FRAME_ptr frame_ptr);
0148 INLINE_P void byteSwapFrame (FRAME_ptr frame_ptr);
0149
0150 PTR_ret findFrameEnd (FRAME_ptr);
0151 PTR_ret findFrameDataStart (FRAME_ptr);
0152 PTR_ret findFrameDataEnd (FRAME_ptr);
0153
0154 VALUE_ret adjustFrameLength (FRAME_ptr, UINT, UINT, LOGIC_ret);
0155 VALUE_ret removeFramePadding (FRAME_ptr);
0156
0157
0158
0159 #ifdef DCM
0160
0161 #define makeFrameHdr makeFrameHdrV1
0162 #define getFrameDataLength getFrameDataLengthV1
0163 #define getFrameHistoryLength getFrameHistoryLengthV1
0164 #define getFrameErrorLength getFrameErrorLengthV1
0165 #define getFrameAlignLength getFrameAlignLengthV1
0166 #define getFrameSourceId getFrameSourceIdV1
0167 #define getFrameDataType getFrameDataTypeV1
0168 #define getFrameType getFrameTypeV1
0169 #define getFrameStatus getFrameStatusV1
0170 #define getFramePadding getFramePaddingV1
0171 #define setFramePadding setFramePaddingV1
0172 #define adjustFrameDataLength adjustFrameDataLengthV1
0173 #define adjustFrameHistoryLength adjustFrameHistoryLengthV1
0174 #define adjustframeErrorLength adjustFrameErrorlengthV1
0175 #define orFrameStatus orFrameStatusV1
0176 #define setDataType setDataTypeV1
0177 #define setFrameType setFrameTypeV1
0178 #define setSourceId setSourceIdV1
0179 #define setFrameHistoryLength setFrameHistoryLengthV1
0180 #define setFrameErrorLength setFrameErrorLengthV1
0181 #define setFrameAlignLength setFrameAlignLengthV1
0182 #define setFrameStatus setFrameStatusV1
0183 #define findFrameAlignBlock findFrameAlignBlockV1
0184 #define findFrameHistoryStart findFrameHistoryStartV1
0185 #define findFrameErrorStart findFrameErrorStartV1
0186 #define getAlignBlock getAlignBlockV1
0187 #define setAlignBlock setAlignBlockV1
0188 #define getHistoryEntry getHistoryEntryV1
0189 #define getHistoryStage getHistoryStageV1
0190 #define getHistorySourceIndex getHistorySourceIndexV1
0191 #define getHistoryStatus getHistoryStatusV1
0192 #define findNextError findNextErrorV1
0193
0194 #else
0195 VALUE_ret makeFrameHdr (FRAME_ptr, UINT, UINT, UINT, UINT);
0196 VALUE_ret getFrameDataLength (FRAME_ptr);
0197 VALUE_ret getFrameHistoryLength (FRAME_ptr);
0198 VALUE_ret getFrameErrorLength (FRAME_ptr);
0199 VALUE_ret getFrameAlignLength (FRAME_ptr);
0200
0201 VALUE_ret getFrameSourceId (FRAME_ptr);
0202 VALUE_ret getFrameDataType (FRAME_ptr);
0203 VALUE_ret getFrameType (FRAME_ptr);
0204 VALUE_ret getFrameStatus (FRAME_ptr);
0205 VALUE_ret getFramePadding (FRAME_ptr);
0206
0207 VALUE_ret setFramePadding (FRAME_ptr, UINT);
0208 VALUE_ret adjustFrameDataLength (FRAME_ptr, UINT);
0209 VALUE_ret adjustFrameHistoryLength (FRAME_ptr, UINT);
0210 VALUE_ret adjustFrameErrorLength (FRAME_ptr, UINT);
0211 VALUE_ret orFrameStatus (FRAME_ptr, UINT);
0212
0213 LOGIC_ret setDataType(FRAME_ptr, UINT);
0214 LOGIC_ret setFrameType(FRAME_ptr, UINT);
0215 LOGIC_ret setSourceId(FRAME_ptr, UINT);
0216 LOGIC_ret setFrameHistoryLength(FRAME_ptr, UINT);
0217 LOGIC_ret setFrameErrorLength(FRAME_ptr, UINT);
0218 LOGIC_ret setFrameAlignLength(FRAME_ptr, UINT);
0219 LOGIC_ret setFrameStatus(FRAME_ptr, UINT);
0220
0221 PTR_ret findFrameAlignBlock (FRAME_ptr);
0222 PTR_ret findFrameErrorStart (FRAME_ptr);
0223 PTR_ret findFrameHistoryStart (FRAME_ptr);
0224
0225 VALUE_ret getAlignBlock (FRAME_ptr, PHDWORD*, UINT);
0226 LOGIC_ret setAlignBlock (FRAME_ptr, PHDWORD*, UINT);
0227
0228 VALUE_ret getHistoryEntry(FRAME_ptr, UINT);
0229 VALUE_ret getHistoryStage(FRAME_ptr, UINT);
0230 VALUE_ret getHistorySourceIndex(FRAME_ptr, UINT);
0231 VALUE_ret getHistoryStatus(FRAME_ptr, UINT);
0232 PTR_ret findNextError(FRAME_ptr, FRAME_ptr);
0233
0234 #endif
0235 #ifdef __cplusplus
0236 }
0237
0238 #endif
0239
0240
0241
0242
0243
0244
0245
0246 INLINE_D VALUE_ret getFrameHdrLength (FRAME_ptr frame_ptr)
0247 {
0248 UINT hdrLength = getBitsMACRO(frame_ptr,
0249 FRAME_HDR_LENGTH_OFFSET_OF_DWORD,
0250 FRAME_HDR_LENGTH_OFFSET_IN_DWORD,
0251 FRAME_HDR_LENGTH_MASK );
0252 #ifdef STRONGCHECK
0253 if (hdrLength == 0 || hdrLength > getFrameLength(frame_ptr)) {
0254 setFrameError(FORMAT_ERR_INVALID_HDRLENGTH, frame_ptr, length);
0255 return valueFailure;
0256 }
0257 #endif
0258 return hdrLength;
0259 }
0260
0261
0262
0263
0264 INLINE_D VALUE_ret getFrameHdrVersion (FRAME_ptr frame_ptr)
0265 {
0266 UINT version = getBitsMACRO(frame_ptr,
0267 FRAME_HDR_VERSION_OFFSET_OF_DWORD,
0268 FRAME_HDR_VERSION_OFFSET_IN_DWORD,
0269 FRAME_HDR_VERSION_MASK );
0270
0271 if ((version >= numFrameVersions)||(version==0))
0272 {
0273 setFrameError(FORMAT_ERR_INVALID_HDRVERSION, frame_ptr, version);
0274 return valueFailure;
0275 }
0276
0277 return version;
0278 }
0279
0280
0281
0282
0283 INLINE_D VALUE_ret getFrameLength (FRAME_ptr frame_ptr)
0284 {
0285 PHDWORD length = getWordMACRO(frame_ptr, FRAME_LENGTH_OFFSET_OF_DWORD);
0286
0287 #ifdef STRONGCHECK
0288 if ((length&(1<<32))!=0) {
0289 setFrameError(FORMAT_ERR_LENGTH_OVERFLOW, frame_ptr, length);
0290 return valueFailure;
0291 }
0292 #endif
0293 return length;
0294 }
0295
0296
0297
0298 INLINE_D VALUE_ret getFrameMark (FRAME_ptr frame_ptr)
0299 {
0300 PHDWORD frameMark = getWordMACRO(frame_ptr, FRAME_MARK_OFFSET_OF_DWORD);
0301 return frameMark;
0302 }
0303
0304
0305
0306 INLINE_D LOGIC_ret setFrameHdrLength (FRAME_ptr frame_ptr, UINT hdrLength)
0307 {
0308 setBitsMACRO(frame_ptr, FRAME_HDR_LENGTH_OFFSET_OF_DWORD,
0309 FRAME_HDR_LENGTH_OFFSET_IN_DWORD, FRAME_HDR_LENGTH_MASK,
0310 hdrLength);
0311 return TRUE;
0312 }
0313
0314
0315
0316 INLINE_D LOGIC_ret setFrameHdrVersion (FRAME_ptr frame_ptr, UINT hdrVersion)
0317 {
0318 setBitsMACRO(frame_ptr, FRAME_HDR_VERSION_OFFSET_OF_DWORD,
0319 FRAME_HDR_VERSION_OFFSET_IN_DWORD, FRAME_HDR_VERSION_MASK,
0320 hdrVersion);
0321 return TRUE;
0322 }
0323
0324
0325
0326 INLINE_D LOGIC_ret setFrameLength (FRAME_ptr frame_ptr, UINT length) {
0327 setWordMACRO(frame_ptr,
0328 FRAME_LENGTH_OFFSET_OF_DWORD,
0329 length);
0330 return TRUE;
0331 }
0332
0333
0334
0335 INLINE_D LOGIC_ret setFrameMark (FRAME_ptr frame_ptr, UINT frameMark)
0336 {
0337 setWordMACRO(frame_ptr,
0338 FRAME_MARK_OFFSET_OF_DWORD,
0339 frameMark);
0340 return TRUE;
0341 }
0342
0343
0344
0345
0346 INLINE_D LOGIC_ret validFrameHdr (FRAME_ptr frame_ptr)
0347 {
0348 return (checkFrameHdrVersion(frame_ptr) != valueFailure);
0349 }
0350
0351
0352
0353 INLINE_D LOGIC_ret currentFrameHdr (FRAME_ptr frame_ptr)
0354 {
0355 UINT version = getFrameHdrVersion (frame_ptr);
0356 return (version == currentFrameHdrVersion);
0357 }
0358
0359
0360
0361 INLINE_D LOGIC_ret validFrameMark (FRAME_ptr frame_ptr) {
0362 UINT version = getFrameHdrVersion(frame_ptr);
0363 if (version != valueFailure)
0364 return (getFrameMark(frame_ptr) == frameMarkV[version]);
0365 else return FALSE;
0366 }
0367
0368
0369
0370
0371
0372 INLINE_D LOGIC_ret emptyFrame (FRAME_ptr frame_ptr) {
0373 return (getFrameHdrLength(frame_ptr) == getFrameLength(frame_ptr));
0374 }
0375
0376
0377
0378
0379
0380
0381
0382 INLINE_D void byteSwapFrame (FRAME_ptr frame_ptr)
0383 {
0384 PHDWORD correctLength = singleDwordByteSwap(*frame_ptr);
0385 dwordByteSwap(frame_ptr, frame_ptr, correctLength);
0386 }
0387
0388
0389
0390
0391
0392 #endif
0393