diff -urN tridas.orig/daq/benchmark/include/TestFRB.h tridas/daq/benchmark/include/TestFRB.h --- tridas.orig/daq/benchmark/include/TestFRB.h Wed Dec 31 18:00:00 1969 +++ tridas/daq/benchmark/include/TestFRB.h Wed Nov 20 17:30:41 2002 @@ -0,0 +1,44 @@ +#ifndef __TEST_FRB_H__ +#define __TEST_FRB_H__ + +#include +#include +#include + +#include "i2oTestFRBListener.h" +#include "xdaqApplication.h" +#include "BufRef.h" + +class TestFRB: public i2oTestFRBListener, public xdaqApplication +{ +public: + TestFRB(); + void plugin(); + void token(BufRef *ref); + + void ParameterSet(list ¶mNames); + void ParameterGet(list ¶mNames); + + void Configure() throw (exception); + void Enable() throw (exception); + void Suspend() throw (exception); + void Resume() throw (exception); + void Halt() throw (exception); + void Disable() throw (exception); + +protected: + unsigned long destination_; + unsigned long counter_; + + // exported parameters + unsigned long samples_; + unsigned long size_; + float rate_; + +private: + void EnableSender_() throw (exception); + void EnableReceiver_() throw (exception); + void Send_() throw (exception); +}; + +#endif // ifndef __TEST_FRB_H__ diff -urN tridas.orig/daq/benchmark/include/TestFRBSO.h tridas/daq/benchmark/include/TestFRBSO.h --- tridas.orig/daq/benchmark/include/TestFRBSO.h Wed Dec 31 18:00:00 1969 +++ tridas/daq/benchmark/include/TestFRBSO.h Wed Nov 20 17:30:41 2002 @@ -0,0 +1,16 @@ +#ifndef __TEST_FRB_SO_H__ +#define __TEST_FRB_SO_H__ + +#include "xdaq.h" +#include "TestFRB.h" + +class TestFRBSO: public xdaqSO { +public: + void init(); + void shutdown(); + +protected: + TestFRB *testFRB_; +}; + +#endif // ifndef __TEST_FRB_SO_H__ diff -urN tridas.orig/daq/benchmark/include/i2oTestFRBListener.h tridas/daq/benchmark/include/i2oTestFRBListener.h --- tridas.orig/daq/benchmark/include/i2oTestFRBListener.h Wed Dec 31 18:00:00 1969 +++ tridas/daq/benchmark/include/i2oTestFRBListener.h Wed Nov 20 17:30:41 2002 @@ -0,0 +1,21 @@ +#ifndef __I2O_TEST_FRB_LISTENER_H__ +#define __I2O_TEST_FRB_LISTENER_H__ + +#include "i2oListener.h" +#include "i2oTestFRBMsg.h" +#include "BufRef.h" + +class i2oTestFRBListener : public i2oListener +{ +public: + i2oTestFRBListener() + { + i2oBindMethod(this, &i2oTestFRBListener::token, + I2O_TOKEN_CODE, XDAQ_ORGANIZATION_ID, 0); + } + + virtual void token(BufRef *ref) = 0; +}; + +#endif // ifndef __I2O_TEST_FRB_LISTENER_H__ + diff -urN tridas.orig/daq/benchmark/include/i2oTestFRBMsg.h tridas/daq/benchmark/include/i2oTestFRBMsg.h --- tridas.orig/daq/benchmark/include/i2oTestFRBMsg.h Wed Dec 31 18:00:00 1969 +++ tridas/daq/benchmark/include/i2oTestFRBMsg.h Wed Nov 20 17:30:41 2002 @@ -0,0 +1,16 @@ +#ifndef __I2O_TEST_FRB_MSG_H__ +#define __I2O_TEST_FRB_MSG_H__ + +#include "i2o.h" + +//interface code (user defined) +#define I2O_TEST_FRB_CLASSID 0x5 + +// callback binding (user defined) +#define I2O_TOKEN_CODE 0x0001 + +typedef struct _I2O_TOKEN_MESSAGE_FRAME { + I2O_PRIVATE_MESSAGE_FRAME PvtMessageFrame; +} I2O_TOKEN_MESSAGE_FRAME, *PI2O_TOKEN_MESSAGE_FRAME; + +#endif // ifndef __I2O_TEST_FRB_MSG_H__ diff -urN tridas.orig/daq/benchmark/src/common/TestFRB.cc tridas/daq/benchmark/src/common/TestFRB.cc --- tridas.orig/daq/benchmark/src/common/TestFRB.cc Wed Dec 31 18:00:00 1969 +++ tridas/daq/benchmark/src/common/TestFRB.cc Wed Nov 20 17:30:41 2002 @@ -0,0 +1,161 @@ +// +// TestFRB.cc + +#include "TestFRB.h" + +#include +#include + +#include "xdaq.h" + +TestFRB::TestFRB() +{ + exportParam("samples", samples_); + exportParam("size", size_); + exportParam("rate", rate_); +} + +void TestFRB::plugin() +{ + XDAQ_NOTE(("TestFRB::plugin : the executive has assigned me the tid:%d and instance: %d",tid(), instance())); +} + +void TestFRB::token(BufRef *ref) +{ + XDAQ_DEBUG (("TestFRB::token: instance %d counter %d",instance_, counter_)); + + if (instance_ != 0) { // Receiver + PI2O_TOKEN_MESSAGE_FRAME frame = (PI2O_TOKEN_MESSAGE_FRAME)ref->buf_; + ++counter_; + + if (counter_ % 1000 == 0) { + XDAQ_NOTE (("Received packet %d", counter_)); + } + } + + return; +} + +void TestFRB::ParameterSet(list ¶mNames) { return; } +void TestFRB::ParameterGet(list ¶mNames) { return; } + +void TestFRB::Configure() throw (exception) +{ + XDAQ_NOTE (("Configure, from state: %d", state())); + + counter_ = 0; + + XDAQ_NOTE (("TestFRB::Configure: Parameter samples: %d", samples_)); + XDAQ_NOTE (("TestFRB::Configure: Parameter size: %d", size_)); + XDAQ_NOTE (("TestFRB::Configure: Parameter rate: %f", rate_)); +} + +void TestFRB::Enable() throw (exception) +{ + XDAQ_NOTE (("Enable, from state: %d", state())); + + // Sender sends out tokens times + // Receiver does nothing but changing the state + // + (instance_ == 0) ? EnableSender_() : EnableReceiver_(); + + return; +} + +void TestFRB::EnableSender_() throw (exception) +{ + XDAQ_NOTE (("TestFRB::EnableSender_")); + + int check_interval = static_cast(ceil(rate_ * 10.)); + int sent_after_sleep = 0; + timeval prev; + gettimeofday(&prev, NULL); + + for (int i=0; i < samples_; ++i) { + Send_(); + ++sent_after_sleep; + + // Rate limitter + if ((i + 1) % check_interval == 0) { + timeval now; + gettimeofday(&now, NULL); + + double dt = (now.tv_sec - prev.tv_sec) * 1000. + + (now.tv_usec - prev.tv_usec) / 1000.; + int nap = static_cast(sent_after_sleep / rate_ - dt); + + if (nap > 4) { + usleep(nap * 1000); + gettimeofday(&prev, NULL); + sent_after_sleep = 0; + } + } + + // Log message + if (i % (samples_ / 10) == 0) { + XDAQ_NOTE (("Packet %d is sent out.", i)); + } + } + + return; +} + +void TestFRB::EnableReceiver_() throw (exception) +{ + XDAQ_NOTE (("TestFRB::EnableReceiver_")); + + return; +} + +void TestFRB::Send_() throw (exception) +{ + XDAQ_DEBUG (("TestFRB::Send_")); + + int packet_size = size_ + sizeof(I2O_TOKEN_MESSAGE_FRAME); + + // allocate frame + BufRef *ref = xdaq::frameAlloc(packet_size); + + // prepare frame and send + PI2O_TOKEN_MESSAGE_FRAME frame = + (PI2O_TOKEN_MESSAGE_FRAME)ref->buf_; + + frame->PvtMessageFrame.StdMessageFrame.MsgFlags = XDAQ_MULTICAST; + frame->PvtMessageFrame.StdMessageFrame.VersionOffset = 0; + frame->PvtMessageFrame.StdMessageFrame.TargetAddress = classId(); + frame->PvtMessageFrame.StdMessageFrame.InitiatorAddress = tid_; + frame->PvtMessageFrame.StdMessageFrame.MessageSize = size_ >> 2; + frame->PvtMessageFrame.StdMessageFrame.Function = I2O_PRIVATE_MESSAGE; + frame->PvtMessageFrame.XFunctionCode = I2O_TOKEN_CODE; + frame->PvtMessageFrame.OrganizationID = XDAQ_ORGANIZATION_ID; + for (int j=0; j < size_; ++j) { + ref->buf_[j + sizeof(I2O_TOKEN_MESSAGE_FRAME)] = 0; + } + + xdaq::frameSend(ref); + + return; +} + +void TestFRB::Suspend() throw (exception) +{ + XDAQ_NOTE (("Suspend, from state: %d", state())); +} + +void TestFRB::Resume() throw (exception) +{ + XDAQ_NOTE (("Resume, from state: %d", state())); +} + +void TestFRB::Halt() throw (exception) +{ + XDAQ_NOTE (("Halt, from state: %d", state())); +} + +void TestFRB::Disable() throw (exception) +{ + XDAQ_NOTE (("Disable, from state: %d", state())); +} + + +// End of file diff -urN tridas.orig/daq/benchmark/src/common/TestFRBSO.cc tridas/daq/benchmark/src/common/TestFRBSO.cc --- tridas.orig/daq/benchmark/src/common/TestFRBSO.cc Wed Dec 31 18:00:00 1969 +++ tridas/daq/benchmark/src/common/TestFRBSO.cc Wed Nov 20 17:30:41 2002 @@ -0,0 +1,24 @@ +// +// TestFRBSO.cc + +#include "TestFRBSO.h" + +#include "xdaqExecutive.h" // extern xdaqExecutive *executive + +void TestFRBSO::init() +{ + testFRB_ = new TestFRB(); + executive->load(testFRB_); +} + +void TestFRBSO::shutdown() +{ + delete testFRB_; +} + +extern "C" void *init_TestFRB() +{ + return ((void *)new TestFRBSO()); +} + +// End of file diff -urN tridas.orig/daq/benchmark/src/linux/x86/Makefile.testfrb tridas/daq/benchmark/src/linux/x86/Makefile.testfrb --- tridas.orig/daq/benchmark/src/linux/x86/Makefile.testfrb Wed Dec 31 18:00:00 1969 +++ tridas/daq/benchmark/src/linux/x86/Makefile.testfrb Wed Nov 20 17:32:56 2002 @@ -0,0 +1,151 @@ +# Makefile - makefile skeleton for C++ vxWorks PPC +# +ARCHITECTURE=linux +BSP=x86 + +################################################################## +DOMAINDIR=daq +PACKAGEDIR=benchmark +include ${PROJECTDIR}/config/mfHeader.$(ARCHITECTURE) +################################################################## +# Default Parametrization +# It can be overwritten by using gmake option +################################################################## +# +# yes or no (default yes) +# +DO_SOAP=yes +# +# stub or dimprobe (default stub) +# +DNS=dimprobe +DO_DNS=no +# +# yes or no(default yes) +# +DEBUG=yes +# +# big or little (no default is mandatory) +# +ENDIANESS=little +# +# gnu or native (default gnu) +# + +################################################################## +# DNS support +# +ifeq ($(DO_DNS), yes) +ifeq ($(DNS), stub) + DNS_C++FLAGS = -DDNS__ + DNS_INCLUDE = -I${PROJECTDIR}/Auxiliary/dns/include/ + DNS_LDDFLAGS = -L${PROJECTDIR}/Auxiliary/dns/lib/${ARCHITECTURE}/${BSP} + DNS_LIB = -ldnsstub +endif +ifeq ($(DNS), dimprobe) + DNS_C++FLAGS = -DDNS__ + DNS_INCLUDE = -I${PROJECTDIR}/Auxiliary/dim${ARCHITECTURE}${BSP} -I${PROJECTDIR}/Auxiliary/dns/include/ + DNS_LDDFLAGS = -L${PROJECTDIR}/Auxiliary/dns/lib/${ARCHITECTURE}/${BSP} -L${PROJECTDIR}/Auxiliary/dim${ARCHITECTURE}${BSP}/${ARCHITECTURE} + DNS_LIB = -ldnsprobe -ldim +endif +endif + +ifeq ($(DO_DNS), no) + DNS_C++FLAGS = + DNS_INCLUDE = + DNS_LDDFLAGS = + DNS_LIB = +endif +################################################################## +# SOAP Support +# +ifeq ($(DO_SOAP), yes) + SOAP_C++FLAGS = -DSOAP__ + SOAP_DIR = ${PROJECTDIR}/Auxiliary/xerces${ARCHITECTURE}${BSP} + SOAP_INCLUDE = -I${SOAP_DIR}/include + XOAP_INCLUDE = -I${PROJECTDIR}/daq/xoap/include +else + SOAP_C++FLAGS = + SOAP_INCLUDE = + XOAP_INCLUDE = +endif +################################################################## +# DEBUG +# +ifeq ($(DEBUG), yes) + DEBUG_C++FLAGS = -g + DEBUG_LDDFLAGS = -g +else + DEBUG_C++FLAGS = + DEBUG_LDDFLAGS = +endif +################################################################## +# ENDIANESS +# +ifeq ($(ENDIANESS), little) + ENDIANESS_C++FLAGS = -DLITTLE_ENDIAN__ +endif +ifeq ($(ENDIANESS), big) + ENDIANESS_C++FLAGS = -DBIG_ENDIAN__ +endif +################################################################## +# Final Definitions +################################################################## + +################################################################## +# Local Definitions +################################################################## + +ADDED_CFLAGS = -fno-inline -g +ADDED_C++FLAGS = \ + ${COMPILER_C++FLAGS} \ + ${DEBUG_C++FLAGS} \ + $(ENDIANESS_C++FLAGS) \ + $(SOAP_C++FLAGS) \ + $(DNS_C++FLAGS) \ + -Dtoolbox + +ADDED_LDXXFLAGS= ${COMPILER_LDDFLAGS} $(DEBUG_LDDFLAGS) \ +-L./ -L${PROJECTDIR}/lib/${ARCHITECTURE}/${BSP} \ +${DNS_LDDFLAGS} \ +${DEBUG_LDDFLAGS} + +C++SOURCES= TestFRB.cc TestFRBSO.cc + +CSOURCES= +SOURCEPATH=./:../common/:../../common/ + +DLIBRARY= libTestFRB.so +LIBRARIES= + +EXECUTABLES= + +APPDIR= +APPINCLUDE = -DINLINE -I./ -I${PROJECTDIR}/${DOMAINDIR}/${PACKAGEDIR}/include/ \ +-I${PROJECTDIR}/${DOMAINDIR}/${PACKAGEDIR}/include/${ARCHITECTURE} \ +-I${PROJECTDIR}/${DOMAINDIR}/toolbox/include \ +-I${PROJECTDIR}/${DOMAINDIR}/toolbox/include/${ARCHITECTURE} \ +-I${PROJECTDIR}/${DOMAINDIR}/toolbox/include/solaris \ +-I${PROJECTDIR}/${DOMAINDIR}/xdaq/include \ +-I${PROJECTDIR}/${DOMAINDIR}/xdaq/include/${ARCHITECTURE} \ +-I${PROJECTDIR}/${DOMAINDIR}/xdaq/include/solaris \ +-I${PROJECTDIR}/Auxiliary/i2o/include \ +-I${PROJECTDIR}/Auxiliary/i2o/include/i2o/ \ +-I${PROJECTDIR}/Auxiliary/i2o/include/i2o/shared \ +${DNS_INCLUDE} \ +${SOAP_INCLUDE} \ +${XOAP_INCLUDE} \ + + +################################################################## +# Standard Rules +################################################################## +include ${PROJECTDIR}/config/mfRules.$(ARCHITECTURE) +help: + @echo "The following variables should cane be set" + @echo "DO_SOAP={yes|no} (default yes)" + @echo "DO_DNS={yes|no} (default no)" +# @echo "DNS={stub|dimprobe} (default stub)" +# +################################################################## +#EOF diff -urN tridas.orig/daq/benchmark/xml/TestFRB.xml tridas/daq/benchmark/xml/TestFRB.xml --- tridas.orig/daq/benchmark/xml/TestFRB.xml Wed Dec 31 18:00:00 1969 +++ tridas/daq/benchmark/xml/TestFRB.xml Wed Nov 20 17:30:41 2002 @@ -0,0 +1,69 @@ + + + + ptUDP + ptFRB + TestFRB + + + + + + + +
+ + + + + + + + 80 + 10 + 1 + + + + /home/ichiro/work/tridas/lib/linux/x86/libTestFRB.so + + + /home/ichiro/work/tridas/lib/linux/x86/libptFRB.so + + + +
+ + + + /home/ichiro/work/tridas/lib/linux/x86/libTestFRB.so + + + + false + + + + /home/ichiro/work/tridas/lib/linux/x86/libptFRB.so + + + +
+ + + + /home/ichiro/work/tridas/lib/linux/x86/libTestFRB.so + + + + false + + + + /home/ichiro/work/tridas/lib/linux/x86/libptFRB.so + +