#include "spadic/Message.h" //#ifdef __SPADIC_WITHOUT_DABC__ #include #define SUS_ERR_OUT( args... ) \ printf( args ); //#else //#include "dabc/logging.h" //#define SUS_ERR_OUT( args... ) \ //EOUT(( args )); //#endif const char* spadic::typeSusiboInput = "spadic::SusiboInput"; const char* spadic::nameReadoutAppClass = "spadic::Readout"; const char* spadic::xmlNumSusibo = "NumSusibo"; const char* spadic::xmlSusiboDevID = "SusiboID-"; const char* spadic::xmlHitDelay = "HitDelay"; const char* spadic::xmlEventsPerBuffer = "EventsInBuffer"; const char* spadic::xmlFormatMbs = "SusiboMbsFormat"; const char* spadic::xmlTimeout = "PollingTimeout"; const char* spadic::xmlUseInternalTrigger = "EnableTestTrigger"; const char* spadic::xmlInternalTriggerFreq = "TriggersPerSecond"; const char* spadic::xmlModuleName = "SusiboModuleName"; // Name of readout module instance const char* spadic::xmlModuleThread = "SusiboModuleThread"; // Name of thread for readout module spadic::Message::Message(std::vector * package): fPackage(package), fField(0), fKind(packageVector) { } spadic::Message::Message(uint8_t* field): fPackage(0), fField(field), fKind(packageStruct) { } spadic::Message::~Message() { } uint32_t spadic::Message::GetEventIDNumber() { if(!CheckMessage()) return 0; uint32_t fullid = Data(360) << 16 | Data(361) << 8 | Data(362) ; return fullid; } uint16_t spadic::Message::GetStatusNumber() { if(!CheckMessage()) return 0; uint16_t stat = Data(366) << 8 | Data(367) ; return stat; } uint32_t spadic::Message::GetTimeStamp() { if(!CheckMessage()) return 0; uint32_t time = Data(363) << 16 | Data(364) << 8 | Data(365) ; return time; } bool spadic::Message::CheckMessage() { switch (fKind) { case packageVector: if (fPackage == 0) { SUS_ERR_OUT("Zero package pointer - No package referred!"); return false; } if (fPackage->size() != SUSIBO_PACKAGE_LENGTH) { SUS_ERR_OUT("Wrong package length %u != %u !", (unsigned) fPackage->size(), SUSIBO_PACKAGE_LENGTH); return false; } if(Data(366) % 2 == 1) { SUS_ERR_OUT("Buffer overflow flag in last package detected"); //note: most buffer overflow markers will be ignored here... return true; } if(Data(367) != 0) { SUS_ERR_OUT("synch signal corrupted"); return false; } return true; case packageStruct: if (fField == 0) { SUS_ERR_OUT("Zero package pointer - No package referred!"); return false; } // TODO: should we check status number here? return true; }; return false; }