File indexing completed on 2025-08-03 08:20:44
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 #ifndef _CPACKETV1_
0027 #define _CPACKETV1_
0028
0029
0030
0031 #ifdef __cplusplus
0032 extern "C" {
0033 #endif
0034
0035 #include "phenixOnline.h"
0036 #include "packetPublic.h"
0037 #include "packetV1Public.h"
0038 #include "packetHdrV1.h"
0039 #include "formatError.h"
0040 #include "dataBlock.h"
0041
0042 VALUE_ret makePacketV1Hdr (PACKET_ptr, UINT);
0043
0044 PTR_ret findPacketV1DataStart (PACKET_ptr);
0045 PTR_ret findPacketV1DataEnd (PACKET_ptr);
0046 PTR_ret findPacketV1DebugStart (PACKET_ptr);
0047 PTR_ret findPacketV1ErrorStart (PACKET_ptr);
0048
0049 INLINE_P PTR_ret findPacketV1DataDescr (PACKET_ptr);
0050
0051 INLINE_P VALUE_ret getPacketV1DataLength (PACKET_ptr);
0052 INLINE_P VALUE_ret getPacketV1DebugLength (PACKET_ptr);
0053 INLINE_P VALUE_ret getPacketV1ErrorLength (PACKET_ptr);
0054 INLINE_P VALUE_ret getPacketV1Padding (PACKET_ptr);
0055 INLINE_P VALUE_ret getPacketV1NumErrors (PACKET_ptr);
0056 INLINE_P VALUE_ret getPacketV1Id (PACKET_ptr);
0057 INLINE_P VALUE_ret getPacketV1Structure (PACKET_ptr);
0058 INLINE_P VALUE_ret getPacketV1Endianism (PACKET_ptr);
0059 INLINE_P VALUE_ret getPacketV1Status (PACKET_ptr);
0060 INLINE_P VALUE_ret getPacketV1DataDescrLength (PACKET_ptr);
0061
0062 INLINE_P VALUE_ret orPacketV1Status (PACKET_ptr, UINT);
0063 INLINE_P VALUE_ret adjustPacketV1DataLength (PACKET_ptr, int);
0064 INLINE_P VALUE_ret adjustPacketV1DebugLength (PACKET_ptr, int);
0065 INLINE_P VALUE_ret adjustPacketV1ErrorLength (PACKET_ptr, int);
0066
0067 LOGIC_ret validPacketV1Hdr (PACKET_ptr);
0068
0069 INLINE_P LOGIC_ret emptyPacketV1 (PACKET_ptr);
0070 INLINE_P LOGIC_ret setPacketV1Id (PACKET_ptr, UINT);
0071 INLINE_P LOGIC_ret setPacketV1Endianism (PACKET_ptr, UINT);
0072 INLINE_P LOGIC_ret setPacketV1Structure (PACKET_ptr, UINT);
0073 INLINE_P LOGIC_ret setPacketV1Padding (PACKET_ptr, UINT);
0074 INLINE_P LOGIC_ret setPacketV1Status (PACKET_ptr, UINT);
0075 INLINE_P LOGIC_ret setPacketV1ErrorLength (PACKET_ptr, UINT);
0076 INLINE_P LOGIC_ret setPacketV1DebugLength (PACKET_ptr, UINT);
0077 INLINE_P LOGIC_ret setPacketV1NumErrors (PACKET_ptr, UINT);
0078 INLINE_P LOGIC_ret setPacketV1DataDescrLength (PACKET_ptr, UINT);
0079
0080
0081
0082
0083 INLINE_D LOGIC_ret emptyPacketV1 (PACKET_ptr packet_ptr)
0084 {
0085 return getPacketHdrLength(packet_ptr) == getPacketLength (packet_ptr);
0086 }
0087
0088 INLINE_D VALUE_ret getPacketV1DataLength (PACKET_ptr packet_ptr)
0089 {
0090
0091 PHDWORD dataLength;
0092 if (getPacketStructure(packet_ptr) == Unstructured)
0093 {
0094
0095 int factor = 4 / getUnstructPacketWordSize(packet_ptr);
0096
0097 dataLength = factor * ( getPacketLength(packet_ptr)
0098 - getPacketHdrLength(packet_ptr)
0099 - getPacketErrorLength(packet_ptr)
0100 - getPacketDebugLength(packet_ptr) )
0101 - getPacketPadding(packet_ptr);
0102
0103 return dataLength;
0104
0105 }
0106
0107 dataLength = getPacketLength(packet_ptr) - getPacketHdrLength(packet_ptr) -
0108 getPacketErrorLength(packet_ptr) - getPacketDebugLength(packet_ptr) -
0109 getPacketPadding(packet_ptr);
0110 return dataLength;
0111 }
0112
0113 INLINE_D VALUE_ret getPacketV1DebugLength (PACKET_ptr packet_ptr)
0114 {
0115 return getBitsMACRO(packet_ptr, DEBUG_LENGTH_OFFSET_OF_DWORD,
0116 DEBUG_LENGTH_OFFSET_IN_DWORD, DEBUG_LENGTH_MASK);
0117 }
0118
0119 INLINE_D VALUE_ret getPacketV1ErrorLength (PACKET_ptr packet_ptr)
0120 {
0121 return getBitsMACRO(packet_ptr, PACKET_ERROR_LENGTH_OFFSET_OF_DWORD,
0122 PACKET_ERROR_LENGTH_OFFSET_IN_DWORD,
0123 PACKET_ERROR_LENGTH_MASK);
0124 }
0125
0126 INLINE_D VALUE_ret getPacketV1Padding (PACKET_ptr packet_ptr)
0127 {
0128 return getBitsMACRO(packet_ptr, PACKET_PADDING_OFFSET_OF_DWORD,
0129 PACKET_PADDING_OFFSET_IN_DWORD, PACKET_PADDING_MASK);
0130 }
0131
0132 INLINE_D VALUE_ret getPacketV1NumErrors (PACKET_ptr packet_ptr)
0133 {
0134 UINT errorBlockLength = getPacketV1ErrorLength(packet_ptr);
0135 return calcNumErrorsV1 (errorBlockLength);
0136 }
0137
0138 INLINE_D VALUE_ret getPacketV1Id (PACKET_ptr packet_ptr)
0139 {
0140 return getWordMACRO(packet_ptr, ID_OFFSET_OF_DWORD);
0141 }
0142
0143 INLINE_D VALUE_ret getPacketV1Structure (PACKET_ptr packet_ptr)
0144 {
0145 return getBitsMACRO(packet_ptr, STRUCTURE_OFFSET_OF_DWORD,
0146 STRUCTURE_OFFSET_IN_DWORD, STRUCTURE_MASK);
0147 }
0148
0149 INLINE_D VALUE_ret getPacketV1Status (PACKET_ptr packet_ptr)
0150 {
0151 return getBitsMACRO(packet_ptr, PACKET_STATUS_OFFSET_OF_DWORD,
0152 PACKET_STATUS_OFFSET_IN_DWORD, PACKET_STATUS_MASK);
0153 }
0154
0155 INLINE_D VALUE_ret getPacketV1DataDescrLength (PACKET_ptr packet_ptr)
0156 {
0157 return getBitsMACRO(packet_ptr, DESCR_LENGTH_OFFSET_OF_DWORD,
0158 DESCR_LENGTH_OFFSET_IN_DWORD, DESCR_LENGTH_MASK);
0159 }
0160
0161 INLINE_D VALUE_ret getPacketV1Endianism (PACKET_ptr packet_ptr)
0162 {
0163 return getBitsMACRO(packet_ptr, ENDIANISM_OFFSET_OF_DWORD,
0164 ENDIANISM_OFFSET_IN_DWORD, ENDIANISM_MASK);
0165 }
0166
0167 INLINE_D VALUE_ret orPacketV1Status (PACKET_ptr packet_ptr, UINT inBits)
0168 {
0169 UINT status;
0170 if ((inBits & ((1<<PACKET_STATUS_NUM_BITS)-1)) == inBits) {
0171 status = getBitsMACRO(packet_ptr, PACKET_STATUS_OFFSET_OF_DWORD,
0172 PACKET_STATUS_OFFSET_IN_DWORD, PACKET_STATUS_MASK);
0173 status|=inBits;
0174 setBitsMACRO(packet_ptr, PACKET_STATUS_OFFSET_OF_DWORD,
0175 PACKET_STATUS_OFFSET_IN_DWORD,
0176 PACKET_STATUS_MASK, status);
0177 return status;
0178 }
0179 else {
0180 setUserError (FORMAT_ERR_INVALID_DATA, inBits);
0181 return valueFailure;
0182 }
0183 }
0184
0185
0186
0187
0188 INLINE_D VALUE_ret adjustPacketV1DataLength( PACKET_ptr packet_ptr, int addDwords)
0189 {
0190 return getPacketV1DataLength(packet_ptr);
0191 }
0192
0193 INLINE_D VALUE_ret adjustPacketV1DebugLength(PACKET_ptr packet_ptr, int addLength)
0194 {
0195 UINT debugLength = getPacketV1DebugLength (packet_ptr);
0196 if (debugLength == valueFailure)
0197 return valueFailure;
0198 else {
0199 UINT newLength = debugLength + addLength;
0200 setPacketV1DebugLength(packet_ptr, debugLength);
0201 return newLength;
0202 }
0203 }
0204
0205 INLINE_D VALUE_ret adjustPacketV1ErrorLength(PACKET_ptr packet_ptr, int addLength)
0206 {
0207 UINT errorLength = getPacketV1ErrorLength (packet_ptr);
0208 if (errorLength == valueFailure)
0209 return valueFailure;
0210 else {
0211 UINT newLength = errorLength + addLength;
0212 setPacketV1ErrorLength(packet_ptr, newLength);
0213 return newLength;
0214 }
0215 }
0216
0217 INLINE_D LOGIC_ret setPacketV1Id (PACKET_ptr packet_ptr, UINT inId)
0218 {
0219 setWordMACRO(packet_ptr, ID_OFFSET_OF_DWORD, inId);
0220 return TRUE;
0221 }
0222
0223 INLINE_D LOGIC_ret setPacketV1Endianism (PACKET_ptr packet_ptr, UINT inEndianism)
0224 {
0225 setBitsMACRO(packet_ptr, ENDIANISM_OFFSET_OF_DWORD,
0226 ENDIANISM_OFFSET_IN_DWORD, ENDIANISM_MASK,
0227 inEndianism);
0228 return TRUE;
0229 }
0230
0231 INLINE_D LOGIC_ret setPacketV1Structure (PACKET_ptr packet_ptr, UINT inStruct)
0232 {
0233 setBitsMACRO(packet_ptr, STRUCTURE_OFFSET_OF_DWORD,
0234 STRUCTURE_OFFSET_IN_DWORD, STRUCTURE_MASK, inStruct);
0235 return TRUE;
0236 }
0237
0238 INLINE_D LOGIC_ret setPacketV1Padding (PACKET_ptr packet_ptr, UINT inPadding)
0239 {
0240 setBitsMACRO(packet_ptr, PACKET_PADDING_OFFSET_OF_DWORD,
0241 PACKET_PADDING_OFFSET_IN_DWORD, PACKET_PADDING_MASK, inPadding);
0242 return TRUE;
0243 }
0244
0245 INLINE_D LOGIC_ret setPacketV1Status (PACKET_ptr packet_ptr, UINT inStatus)
0246 {
0247 setBitsMACRO(packet_ptr, PACKET_STATUS_OFFSET_OF_DWORD,
0248 PACKET_STATUS_OFFSET_IN_DWORD, PACKET_STATUS_MASK, inStatus);
0249 return TRUE;
0250 }
0251
0252 INLINE_D LOGIC_ret setPacketV1ErrorLength (PACKET_ptr packet_ptr, UINT inLength)
0253 {
0254 setBitsMACRO(packet_ptr, PACKET_ERROR_LENGTH_OFFSET_OF_DWORD,
0255 PACKET_ERROR_LENGTH_OFFSET_IN_DWORD, PACKET_ERROR_LENGTH_MASK, inLength);
0256 return TRUE;
0257 }
0258
0259 INLINE_D LOGIC_ret setPacketV1DebugLength (PACKET_ptr packet_ptr, UINT inLength)
0260 {
0261 setBitsMACRO(packet_ptr, DEBUG_LENGTH_OFFSET_OF_DWORD,
0262 DEBUG_LENGTH_OFFSET_IN_DWORD, DEBUG_LENGTH_MASK, inLength);
0263 return TRUE;
0264 }
0265
0266 INLINE_D LOGIC_ret setPacketV1DataDescrLength (PACKET_ptr packet_ptr, UINT inLength)
0267 {
0268 setBitsMACRO(packet_ptr, DESCR_LENGTH_OFFSET_OF_DWORD,
0269 DESCR_LENGTH_OFFSET_IN_DWORD, DESCR_LENGTH_MASK, inLength);
0270 return TRUE;
0271 }
0272
0273
0274
0275
0276
0277 INLINE_D PTR_ret findPacketV1DataDescr (PACKET_ptr packet_ptr)
0278 {
0279 return packet_ptr + DATADESCR_OFFSET_OF_DWORD;
0280 }
0281
0282
0283 #ifdef __cplusplus
0284 }
0285
0286 #endif
0287
0288 #endif
0289