Skip to content
Snippets Groups Projects
Commit 19737ee4 authored by Paulus Kruger's avatar Paulus Kruger
Browse files

I2C error counter added

parent ba5b73c2
Branches
Tags
No related merge requests found
......@@ -9,7 +9,7 @@ drivers:
- name: I2C_RCU
type: i2c_array #An array of similar devices connected to an I2C switch
parent: I2C1
parameters: [0,31] #start,number of RCUs
parameters: [0,31,5] #start,number of RCUs, error count to disable I2C
status: RCU_I2C_STATUS
- name: I2C_HBAT
type: hba1 #Special driver to manage HBAT1s.
......
......@@ -24,8 +24,9 @@ class i2c_array(i2c_dev):
self.RCU_Switch1=range(pars[0],pars[1]+1);
self.N=len(self.RCU_Switch1);
self.I2Cmask=[0]*self.N
self.disableI2ConError=True;
self.I2Ccut=pars[2];
print("I2Ccut=",pars[2])
self.disableI2ConError=pars[2]>0;
# self.devregs,RCU_storeReg=DevRegList(yaml)
# print("Init",config['name'],'len=',len(self.RCU_Switch1),' stored reg=',RCU_storeReg)
# self.previous =np.zeros([self.N,RCU_storeReg],dtype='int')
......@@ -40,7 +41,7 @@ class i2c_array(i2c_dev):
def SetSwitchMask(self,mask):
m=0;
for RCUi in range(self.N):
if (mask[RCUi]) and (self.I2Cmask[RCUi]==0):
if (mask[RCUi]) and (self.I2Cmask[RCUi]<=self.I2Ccut):
m|=1<<self.RCU_Switch1[RCUi];
self.conf['parentcls'].SetChannel(m);
......@@ -63,7 +64,7 @@ class i2c_array(i2c_dev):
for RCUi in range(self.N):
for Vari in range(Step):
if not(mask[RCUi*Step+Vari]): continue
if not(self.I2Cmask[RCUi]==0):
if not(self.I2Cmask[RCUi]<=self.I2Ccut):
mask[RCUi*Step+Vari]=False;
continue;
i0=(RCUi*Step+ Vari)*Step2
......@@ -75,17 +76,19 @@ class i2c_array(i2c_dev):
self.RCUi=RCUi;
res=self.SetVarValue(devreg,width,bitoffset,data[i0:i1])
if not(res):
if self.disableI2ConError: self.I2Cmask[RCUi]=1;
mask[RCUi*Step+Vari]=False;
if self.disableI2ConError: self.I2Cmask[RCUi]+=1;
if self.I2Cmask[RCUi]>self.I2Ccut: mask[RCUi*Step+Vari]=False;
continue;
self.I2Cmask[RCUi]=0;
if getalso:
value2=value1[i0:i1]
res=self.GetVarValue(devreg,width,bitoffset,value2)
if not(res):
if self.disableI2ConError: self.I2Cmask[RCUi]=1;
mask[RCUi*Step+Vari]=False;
if self.disableI2ConError: self.I2Cmask[RCUi]+=1;
if self.I2Cmask[RCUi]>self.I2Ccut: mask[RCUi*Step+Vari]=False;
continue;
value1[i0:i1]=value2
self.I2Cmask[RCUi]=0;
return value1,mask
......@@ -104,7 +107,7 @@ class i2c_array(i2c_dev):
for RCUi in range(self.N):
for Vari in range(Step):
if not(mask[RCUi*Step+Vari]): continue
if not(self.I2Cmask[RCUi]==0):
if not(self.I2Cmask[RCUi]<=self.I2Ccut):
mask[RCUi*Step+Vari]=False;
continue;
i0=(RCUi*Step+ Vari)*Step2
......@@ -117,9 +120,10 @@ class i2c_array(i2c_dev):
self.RCUi=RCUi;
res=self.GetVarValue(devreg,width,bitoffset,value2)
if not(res):
if self.disableI2ConError: self.I2Cmask[RCUi]=1;
mask[RCUi*Step+Vari]=False;
if self.disableI2ConError: self.I2Cmask[RCUi]+=1;
if self.I2Cmask[RCUi]>self.I2Ccut: mask[RCUi*Step+Vari]=False;
continue;
self.I2Cmask[RCUi]=0;
value1[i0:i1]=value2
return value1,mask
......@@ -141,7 +145,7 @@ class i2c_array(i2c_dev):
if devreg.get('store'):
storearray=self.getstorearray(devreg);
for RCUi in range(self.N):
if (mask[RCUi]) and (self.I2Cmask[RCUi]==0):
if (mask[RCUi]) and (self.I2Cmask[RCUi]<=self.I2Ccut):
storearray[RCUi]=value[0]
self.RCUi=RCUi;
logging.debug(str(("Stored values:",self.getstorearray(devreg))))
......@@ -156,13 +160,14 @@ class i2c_array(i2c_dev):
i2c=self.conf['parentcls'];
for RCUi in range(self.N):
if not(mask[RCUi]): continue
if not(self.I2Cmask[RCUi]==0): continue
if not(self.I2Cmask[RCUi]<=self.I2Ccut): continue
self.SetSwitch(RCUi);
value2=[value1[RCUi]]
self.RCUi=RCUi;
res=self.GetVarValue(devreg,8,0,value2)
if not(res):
if self.disableI2ConError: self.I2Cmask[RCUi]=1;
if self.disableI2ConError: self.I2Cmask[RCUi]+=1;
self.I2Cmask[RCUi]=0;
value1[RCUi]=value2[0]
if devreg.get('store'):
if mask[RCUi]:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment