/*-------------------------------------------------------------------------------*/ /* MessageCommand.h 7-Oct-99 28-Oct-99 Coor Command Parsing split onto separate files */ #ifndef __MessageCommand__ #define __MessageCommand__ /*-------------------------------------------------------------------------------*/ #include "TemplateList.h" //maximum length of Msg payloads to and from Coor #define KiMaxLengthReplyTextToCoor 256 // does not include Id & status; just optional reply text //maximum length of a Keyword in COOR messages #define KiMaxLengthKeywordInMessageCommand 32 //Maximum Specific Trigger Prescaler Ratio #define KiMaxIndexInCoorCmd_Prescale 64 * ((1<<24)-1) -1 // max 1/64 with 24 bit AfterBurner = 1073741760 //maximum item index for various entities in COOR message #define KiMaxIndexInCoorCmd_SpecTrig 127 #define KiMaxIndexInCoorCmd_GeoSect 127 #define KiMaxIndexInCoorCmd_ExpGroup 7 #define KiMaxIndexInCoorCmd_L1Qualif 15 #define KiMaxIndexInCoorCmd_CorrDis 3 #define KiMaxIndexInCoorCmd_DeCorrDis 3 #define KiMaxIndexInCoorCmd_IndivDis 1 #define KiMaxIndexInCoorCmd_ExpGroup 7 #define KiMaxIndexInCoorCmd_AndorTerm 255 // largest of the group // or update KiMaxItemIndexInMessageCommand #define KiMaxIndexInCoorCmd_TTRefSet 3 #define KiMaxIndexInCoorCmd_LTRefSet 7 #define KiMaxIndexInCoorCmd_CompCount 3 #define KiMaxIndexInCoorCmd_CompEnergy 3 #define KiMaxIndexInCoorCmd_CompMomentum 7 #define KiMax_TT_Eta_Sign 2 // pos, neg #define KiMax_TT_Eta_Magn 20 // 1..20 #define KiMax_TT_Phi 32 // 1..32 #define KiMax_LT_Eta_Width 4 // +/- 1..4, 5..8, 9..12, 13..16, 17..20 #define KiMax_LT_Phi_Width 8 // 1..8, 9..16, 17..24, 25..32 //maximum item index in COOR message is for Andor Terms #define KiMaxItemIndexInMessageCommand KiMaxIndexInCoorCmd_AndorTerm // define Return values for Coor Message Handling enum ECoorMessageStatus { Reply_Ok, /* Reply_Ok = 0 */ Reply_Bad, /* Reply_Bad = 1 */ Reply_None /* Reply_None = 2 */ }; // define allowed "polarity" options for Parsed Command Items // Not specified, Asserted (e.g. 34) and Negated (e.g. -45) #if !defined (CUSTOM_TYPES_DEFINED) // these definitions are from CustomDataTypes.h enum ESignalState { Negated = 0, Asserted = 1, Unknown = 2 } ; enum EAoTermProg { Require_False = Negated, Require_True = Asserted, Dont_Care = Unknown } ; enum ETT_Eta_Sign { eTT_Eta_Neg = 0, eTT_Eta_Pos = 1 } ; # endif enum EItemPolarity { ItemNegated = Require_False, /* ItemNegated = 0 */ ItemAsserted = Require_True, /* ItemAsserted = 1 */ ItemNotPresent = Dont_Care /* ItemNotPresent = 2 */ } ; // define Token Type Code during low level parsing = 1st pass = Tokenize enum ETokenType { TokenIsNotDefined, /* TokenIsNotDefined = 0 */ TokenIsKeyword, /* TokenIsKeyword = 1 */ TokenIsValueAsserted, /* TokenIsValueAsserted = 2 */ TokenIsValueNegated, /* TokenIsValueNegated = 3 */ TokenIsValueLower, /* TokenIsValueLower = 4 */ TokenIsValueUpper, /* TokenIsValueUpper = 5 */ TokenIsValueLowerNeg, /* TokenIsValueLowerNeg = 6 */ TokenIsValueUpperNeg, /* TokenIsValueUpperNeg = 7 */ TokenIsOpenParenthesis, /* TokenIsOpenParenthesis = 8 */ TokenIsCloseParenthesis,/* TokenIsCloseParenthesis = 9 */ TokenIsValueDecimal /* TokenIsValueDecimal = 10 */ } ; // simple struct to hold both the Token Type Code and the token location in the string. struct TokenLocAndType { unsigned int uiCharNum ; ETokenType eTokenType ; } ; // structure definition for arrays of booleans of Trigger Tower Eta and Phi // this is used to convey which Trigger Towers a particulat command applies to struct TAllTriggerTowers { bool aalTT_Eta [KiMax_TT_Eta_Sign] [KiMax_TT_Eta_Magn+1] ; bool alTT_Phi [KiMax_TT_Phi+1] ; } ; /*-------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------*/ class CMessageCommand { ///////////////////////////// // Constructor/Destructor public: CMessageCommand () ; ~CMessageCommand () ; ///////////////////////////// // Member Variables public: unsigned int m_uiCoorCmdCode ; unsigned int m_uiCoorSubCmdCode ; unsigned int m_uiObjectIndex ; EItemPolarity m_eObjectPolarity ; unsigned int m_uiValue ; EItemPolarity m_eValuePolarity ; EItemPolarity m_aubItemPolarity[KiMaxItemIndexInMessageCommand+1] ; TAllTriggerTowers m_xTT ; unsigned int m_uiRefSetNum ; double m_fdThreshold ; private: ///////////////////////////// // Member Functions public: private: void ResetCommand ( ) ; } ; /*-------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------*/ class CMessageCommandLine { ///////////////////////////// // Constructor/Destructor public: CMessageCommandLine () ; ~CMessageCommandLine () ; ///////////////////////////// // Member Variables public: // Tokenized TList < TokenLocAndType, unsigned int > m_lTokenList ; // Interpreted TList < CMessageCommand, unsigned int > m_lCommandList ; private: const char* m_psRawCommand ; const char* m_pcCurrentCommandCharNum ; const char* m_pcCurrentTokenCharNum ; char* m_psReplyText ; unsigned int m_uiCurrentReplyLength ; ///////////////////////////// // Member Functions public: void NewRawCommand ( const char* _psMessageCommand, char* _psReplyText ) ; char* GetNextToken ( char* _psToken ) ; void CopyReplyText ( const char* _psPreplyText ) ; void AppendReplyText ( const char* _psPreplyText ) ; unsigned int CurTokenCharNum ( ) { // return current parsed Token ending position return (unsigned int) m_pcCurrentTokenCharNum - (unsigned int) m_psRawCommand ; } ; const char* GetAtChar ( unsigned int _uiCharNum ) { return &m_psRawCommand[_uiCharNum] ; }; private: void ResetCommand ( ) ; void ClearReplyText ( ) ; } ; /*-------------------------------------------------------------------------------*/ #endif // __MessageCommand__