5WIBBase::WIBBase(std::string
const & address, std::string
const & WIBAddressTable, std::string
const & FEMBAddressTable):
6 wib(NULL), FEMBReadSleepTime(0.01), FEMBWriteSleepTime(0.01) {
9 for(
size_t iFEMB = 0; iFEMB <
FEMB_COUNT;iFEMB++){
15 for(
size_t iFEMB = 0; iFEMB <
FEMB_COUNT;iFEMB++){
25 for(
size_t iFEMB = 0; iFEMB <
FEMB_COUNT;iFEMB++){
26 if(
FEMB[iFEMB] != NULL){
35 return wib->GetRemoteAddress();
39uint32_t
WIBBase::ReadI2C(std::string
const & base_address ,uint16_t address, uint8_t byte_count){
50 while(
ReadWithRetry(base_address+
".DONE") == 0x0){usleep(1000);}
54 while(
ReadWithRetry(base_address+
".DONE") == 0x0){usleep(1000);}
56 printf(
"%s 0x%08X\n",(base_address+
".ERROR").c_str(),
ReadWithRetry(base_address+
".ERROR"));
59 char trans_info[] =
"rd @ 0xFFFF";
60 sprintf(trans_info,
"rd @ 0x%04X",address&0xFFFF);
61 BUException::WIB_ERROR e;
62 e.Append(
"I2C Error on ");
63 e.Append(base_address.c_str());
69void WIBBase::WriteI2C(std::string
const & base_address,uint16_t address, uint32_t data, uint8_t byte_count,
bool ignore_error){
82 while(
ReadWithRetry(base_address+
".DONE") == 0x0){usleep(1000);}
87 while(
ReadWithRetry(base_address+
".DONE") == 0x0){usleep(1000);}
92 char trans_info[] =
"wr 0xFFFFFFFF @ 0xFFFF";
93 sprintf(trans_info,
"wr 0x%08X @ 0x%04X",data,address&0xFFFF);
94 BUException::WIB_ERROR e;
95 e.Append(
"I2C Error on ");
96 e.Append(base_address.c_str());
104 return wib->GetItem(str);
108 if((iFEMB > 4) || (iFEMB <1)){
109 BUException::WIB_INDEX_OUT_OF_RANGE e;
110 e.Append(
"In WIBBase::ReadFEMB\n");
117 return wib->ReadWithRetry(address);
120 return wib->Read(address);
123 return wib->ReadWithRetry(address);
126 return wib->Read(address);
130 wib->WriteWithRetry(address,value);
133 wib->Write(address,value);
136 wib->WriteWithRetry(address,value);
139 wib->Write(address,value);
142 wib->Write(address,values);
144void WIBBase::Write(std::string
const & address,std::vector<uint32_t>
const & values){
145 wib->Write(address,values);
148 wib->Write(address,values,word_count);
150void WIBBase::Write(std::string
const & address,uint32_t
const * values,
size_t word_count){
151 wib->Write(address,values,word_count);
156 if((iFEMB > 4) || (iFEMB <1)){
157 BUException::WIB_INDEX_OUT_OF_RANGE e;
158 e.Append(
"In WIBBase::ReadFEMB\n");
161 return FEMB[iFEMB-1]->
Read(address);
165 if((iFEMB > 4) || (iFEMB <1)){
166 BUException::WIB_INDEX_OUT_OF_RANGE e;
167 e.Append(
"In WIBBase::ReadFEMB\n");
170 return FEMB[iFEMB-1]->
Read(address);
175 if((iFEMB > 4) || (iFEMB <1)){
176 BUException::WIB_INDEX_OUT_OF_RANGE e;
177 e.Append(
"In WIBBase::WriteFEMB\n");
184 if((iFEMB > 4) || (iFEMB <1)){
185 BUException::WIB_INDEX_OUT_OF_RANGE e;
186 e.Append(
"In WIBBase::WriteFEMB\n");
194 if((iFEMB > 4) || (iFEMB <1)){
195 BUException::WIB_INDEX_OUT_OF_RANGE e;
196 e.Append(
"In WIBBase::WriteFEMB\n");
200 uint32_t shiftVal = value & mask;
201 uint32_t regMask = (mask << pos);
202 uint32_t initVal =
FEMB[iFEMB -1]->
Read(address);
203 uint32_t newVal = ( (initVal & ~(regMask)) | (shiftVal << pos) );
210 if(iFEMB > 4 || iFEMB < 1){
211 BUException::WIB_INDEX_OUT_OF_RANGE e;
212 e.Append(
"In WIBBase::Enable_ADC");
void Write(uint16_t, uint32_t)
Item const * GetItem(std::string const &)
void WriteWithRetry(uint16_t, uint32_t)
AddressTable * FEMB[FEMB_COUNT]
void WriteWithRetry(uint16_t address, uint32_t value)
void WriteFEMBBits(int iFEMB, uint16_t address, uint32_t pos, uint32_t mask, uint32_t value)
uint32_t ReadWithRetry(uint16_t address)
Item const * GetItem(std::string const &)
void WriteI2C(std::string const &base_address, uint16_t I2C_address, uint32_t data, uint8_t byte_count=4, bool ignore_error=false)
const float FEMBWriteSleepTime
void WriteFEMB(int iFEMB, uint16_t address, uint32_t value)
Item const * GetFEMBItem(int iFEMB, std::string const &)
uint32_t Read(uint16_t address)
uint32_t ReadI2C(std::string const &base_address, uint16_t I2C_aaddress, uint8_t byte_count=4)
void Write(uint16_t address, uint32_t value)
uint32_t ReadFEMB(int iFEMB, uint16_t address)
void EnableADC(uint64_t iFEMB, uint64_t enable)
const float FEMBReadSleepTime