Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:20:44

0001 /* 
0002 ** CpacketV1.h
0003 ** 
0004 ** Author: $Author: phnxbld $  
0005 **   Date: $Date: 2009/09/19 14:34:09 $ 
0006 ** 
0007 ** $Log: CpacketV1.h,v $
0008 ** Revision 1.2  2009/09/19 14:34:09  phnxbld
0009 ** add parenthesis to take care of operator precedence
0010 **
0011 ** Revision 1.1.1.1  2000/07/21 01:51:10  purschke
0012 ** mlp -- adding the new automakified "basic" module to CVS.
0013 **
0014 **
0015 ** Revision 1.5  1998/12/11 22:01:13  markacs
0016 ** (stephen markacs) adding log into cvs tags
0017 ** 
0018 */
0019 /*
0020 **  CpacketV1.h
0021 **
0022 **  These are the version one routines for accessing and modifying
0023 **  the version dependent data in the packet header.  
0024 */
0025 
0026 #ifndef _CPACKETV1_
0027 #define _CPACKETV1_
0028 /*
0029 **  Use C linkage
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 **  Check to see if this is an empty packet.
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 **  Update the length of the data block in the header. In V1 packets, this is a NOOP
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 ** Return a pointer to the data descriptor
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 /* end of extern "C" */
0286 #endif
0287 
0288 #endif 
0289 /* end of ifndef _CPACKET_ */