Go to the documentation of this file.00001 #include "roc/AbbBoard.h"
00002
00003 #include "dabc/Manager.h"
00004 #include "dabc/logging.h"
00005
00006 #include "roc/Commands.h"
00007 #include "roc/ReadoutModule.h"
00008 #include "roc/AbbDevice.h"
00009
00010
00011 roc::AbbBoard::AbbBoard(AbbDevice* dev, uint32_t path, base::ClientRole role) :
00012 roc::OpticBoard(),
00013 fDev(dev),
00014 fReadout(0),
00015 fOpticPath(path)
00016 {
00017 if (role==base::roleNone) role = base::roleDAQ;
00018 setRole(role);
00019
00020
00021
00022 DOUT3(("Use path code 0x%x to ROC", path));
00023 }
00024
00025 roc::AbbBoard::~AbbBoard()
00026 {
00027
00028
00029
00030 fReadout = 0;
00031 }
00032
00033 bool roc::AbbBoard::initAbbBoard()
00034 {
00035 uint32_t roc_hw_ver = initBoard("ROC", 0x2000000);
00036
00037 uint32_t optic_hw_ver(0);
00038 get(ROC_OPTICS_HWV, optic_hw_ver);
00039
00040 DOUT0(("ROC%u Opt HW version: %s; Path 0x%x", boardNumber(), versionToString(optic_hw_ver), fOpticPath));
00041
00042 if ((optic_hw_ver & 0xFFFF0000) != (roc_hw_ver & 0xFFFF0000))
00043 EOUT(("Mismatch of major number of hardware versions"));
00044
00045 return (roc_hw_ver!=0) && (optic_hw_ver!=0);
00046 }
00047
00048
00049 int roc::AbbBoard::operGen(base::OperList& lst, double tmout)
00050 {
00051 int res = kHostError;
00052
00053 if (tmout <= 0.) tmout = getDefaultTimeout();
00054
00055 CmdNOper cmd(&lst, tmout);
00056 cmd.SetUInt(roc::OpticPathPar, fOpticPath);
00057
00058 if (fDev->Execute(cmd, tmout + .1))
00059 res = cmd.GetInt(ErrNoPar, kHostError);
00060
00061 traceOper(lst, res);
00062
00063 return res;
00064 }
00065
00066 uint32_t roc::AbbBoard::getRocBackendVersion()
00067 {
00068 uint32_t val = 0;
00069 get(ROC_OPTICS_HWV, val);
00070 return val;
00071 }
00072
00073
00074 int roc::AbbBoard::invokeDLM(unsigned num, double tmout)
00075 {
00076 int res = kHostError;
00077
00078 if (tmout <= 0.) tmout = getDefaultTimeout();
00079
00080 CmdDLM cmd(num, tmout);
00081
00082 if (fDev->Execute(cmd, tmout + .1))
00083 res = cmd.GetInt(ErrNoPar, kHostError);
00084
00085 return res;
00086 }
00087
00088
00089 bool roc::AbbBoard::startDaq()
00090 {
00091 DOUT2(("Starting DAQ !!!!"));
00092
00093 if (fReadout==0) return false;
00094
00095 fReadout->Start();
00096
00097 return true;
00098 }
00099
00100 bool roc::AbbBoard::suspendDaq()
00101 {
00102 DOUT2(("Suspend DAQ !!!!"));
00103
00104
00105
00106 dabc::Command cmd("SuspendBoardDaq");
00107 cmd.SetUInt(roc::OpticPathPar, fOpticPath);
00108 return fDev->Execute(cmd, 5);
00109 }
00110
00111 bool roc::AbbBoard::stopDaq()
00112 {
00113 if (fReadout==0) return false;
00114
00115 DOUT2(("Stop DAQ !!!!"));
00116
00117 fReadout->Stop();
00118
00119 return true;
00120 }
00121
00122 bool roc::AbbBoard::getNextBuffer(void* &buf, unsigned& len, double tmout)
00123 {
00124 return fReadout ? fReadout->getNextBuffer(buf, len, tmout) : false;
00125 }
00126
00127 void roc::AbbBoard::setFlushTimeout(double tmout)
00128 {
00129 dabc::Command cmd("SetFlushTimeout");
00130 cmd.SetDouble("Timeout", tmout);
00131 fDev->Execute(cmd);
00132 }