• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

abbplugin/src/AbbBoard.cxx (r4864/r4162)

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    // dabc::lgr()->SetLogLimit(1000000000);
00021 
00022    DOUT3(("Use path code 0x%x to ROC", path));
00023 }
00024 
00025 roc::AbbBoard::~AbbBoard()
00026 {
00027 //   module will be cleanup together with pool on the top
00028 //   if (fReadout!=0) dabc::mgr()->DeleteModule(fReadout->GetName());
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    // we only send stop daq command, do not do anything else
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 }

Generated on Tue Dec 10 2013 04:52:16 for ROCsoft by  doxygen 1.7.1