Go to the documentation of this file.00001
00006
00007
00008 #include "nxyter/NxChip.h"
00009 #include "nxyter/RocNx.h"
00010 #include "nxyter/defines_nxyter.h"
00011
00025
00027
00035 nxyter::NxChip::NxChip(base::Board* board, int port, int addr, int nxnum) :
00036 base::Peripheral(board),
00037 fI2c(board, port, addr),
00038 fNxNumber(nxnum)
00039
00040 {
00041 }
00042
00043
00044
00045 nxyter::NxChip::~NxChip()
00046 {
00047 }
00048
00049
00051
00058 void nxyter::NxChip::setNxNumber(int nxnum)
00059 {
00060 fNxNumber = nxnum & 0x3;
00061 if ((nxnum<0) || (nxnum>3))
00062 board().Debug(-1, "Not a valid Nx-Number %d, trimmed", nxnum);
00063 }
00064
00065
00067
00076 int nxyter::NxChip::activate()
00077 {
00078 nxyter::RocNx rocnx(getBoard());
00079 uint32_t mask;
00080 int rc = rocnx.getNxActive(mask);
00081 if (rc) return rc;
00082 mask = mask | (1<<fNxNumber);
00083 rc = rocnx.setNxActive(mask);
00084 if (rc) return base::Board::operErrBuildInc(rc,1);
00085 return 0;
00086 }
00087
00088
00090
00099 int nxyter::NxChip::deactivate()
00100 {
00101 nxyter::RocNx rocnx(getBoard());
00102 uint32_t mask;
00103 int rc = rocnx.getNxActive(mask);
00104 if (rc) return rc;
00105 mask = mask & (~(1<<fNxNumber));
00106 rc = rocnx.setNxActive(mask);
00107 if (rc) return base::Board::operErrBuildInc(rc,1);
00108 return 0;
00109 }
00110
00111
00113 bool nxyter::NxChip::isactive()
00114 {
00115 nxyter::RocNx rocnx(getBoard());
00116 uint32_t mask;
00117 int rc = rocnx.getNxActive(mask);
00118 if (rc) return false;
00119 return mask & (1<<fNxNumber);
00120 }
00121
00122
00124
00125 int nxyter::NxChip::setChannelDelay(uint32_t val)
00126 {
00127 int rc = -1;
00128 if (fNxNumber==0) rc = board().put(ROC_NX_DELAY_NX0, val);
00129 if (fNxNumber==1) rc = board().put(ROC_NX_DELAY_NX1, val);
00130 if (fNxNumber==2) rc = board().put(ROC_NX_DELAY_NX2, val);
00131 if (fNxNumber==3) rc = board().put(ROC_NX_DELAY_NX3, val);
00132 return rc;
00133 }
00134
00135
00137
00138 int nxyter::NxChip::getChannelDelay(uint32_t& val)
00139 {
00140 int rc = -1;
00141 if (fNxNumber==0) rc = board().get(ROC_NX_DELAY_NX0, val);
00142 if (fNxNumber==1) rc = board().get(ROC_NX_DELAY_NX1, val);
00143 if (fNxNumber==2) rc = board().get(ROC_NX_DELAY_NX2, val);
00144 if (fNxNumber==3) rc = board().get(ROC_NX_DELAY_NX3, val);
00145 return rc;
00146 }
00147
00148