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

Fast return when I2C switch fails

parent 257648c3
No related branches found
No related tags found
No related merge requests found
Pipeline #102690 passed
...@@ -33,7 +33,7 @@ class i2c_array(i2c_dev): ...@@ -33,7 +33,7 @@ class i2c_array(i2c_dev):
return i2c_dev.OPCUAReadVariable(self,varid,var1,mask) return i2c_dev.OPCUAReadVariable(self,varid,var1,mask)
def SetSwitch(self,RCUi): def SetSwitch(self,RCUi):
self.conf['parentcls'].SetSW1(self.RCU_Switch1[RCUi]); return self.conf['parentcls'].SetSW1(self.RCU_Switch1[RCUi]);
def SetSwitchMask(self,mask): def SetSwitchMask(self,mask):
m=0; m=0;
...@@ -90,7 +90,10 @@ class i2c_array(i2c_dev): ...@@ -90,7 +90,10 @@ class i2c_array(i2c_dev):
for RCUi in self.RCUorder: for RCUi in self.RCUorder:
if not(mask[RCUi*Step+Vari]): continue if not(mask[RCUi*Step+Vari]): continue
self.mask=[RCUi]; self.mask=[RCUi];
self.SetSwitch(RCUi); if not(self.SetSwitch(RCUi)):
#self.I2Cmask[RCUi]+=1;
return
# continue;
self.RCUi=RCUi; self.RCUi=RCUi;
i0=(RCUi*Step+ Vari)*Step2 i0=(RCUi*Step+ Vari)*Step2
i1=(RCUi*Step+(Vari+1))*Step2 i1=(RCUi*Step+(Vari+1))*Step2
...@@ -114,7 +117,11 @@ class i2c_array(i2c_dev): ...@@ -114,7 +117,11 @@ class i2c_array(i2c_dev):
devreg=var1['devreg'][Vari]; devreg=var1['devreg'][Vari];
width=var1.get('width',8) width=var1.get('width',8)
bitoffset=GetField(var1,'bitoffset',Vari,0) bitoffset=GetField(var1,'bitoffset',Vari,0)
self.SetSwitch(RCUi); if not(self.SetSwitch(RCUi)):
#self.I2Cmask[RCUi]+=1;
#mask[RCUi*Step+Vari]=False;
return
# continue;
self.RCUi=RCUi; self.RCUi=RCUi;
res=self.SetVarValue(devreg,width,bitoffset,data[i0:i1]) res=self.SetVarValue(devreg,width,bitoffset,data[i0:i1])
if getalso and (var1.get('wait',0)>0): sleep(var1['wait']/1000) if getalso and (var1.get('wait',0)>0): sleep(var1['wait']/1000)
...@@ -167,7 +174,7 @@ class i2c_array(i2c_dev): ...@@ -167,7 +174,7 @@ class i2c_array(i2c_dev):
width=var1.get('width',8) width=var1.get('width',8)
bitoffset=GetField(var1,'bitoffset',Vari,0) bitoffset=GetField(var1,'bitoffset',Vari,0)
mask2=[mask[RCUi*Step+Vari] & (self.I2Cmask[RCUi]<=self.I2Ccut) for RCUi in range(self.N)] mask2=[mask[RCUi*Step+Vari] & (self.I2Cmask[RCUi]<=self.I2Ccut) for RCUi in range(self.N)]
self.SetSwitchMask(mask2); self.SetSwitchMask(mask2)
# self.mask=mask2; # self.mask=mask2;
value2=[0]*self.N*Step2; value2=[0]*self.N*Step2;
res=self.GetVarValue(devreg,width,bitoffset,value2,0) res=self.GetVarValue(devreg,width,bitoffset,value2,0)
...@@ -203,7 +210,7 @@ class i2c_array(i2c_dev): ...@@ -203,7 +210,7 @@ class i2c_array(i2c_dev):
devreg=var1['devreg'][Vari]; devreg=var1['devreg'][Vari];
width=var1.get('width',8) width=var1.get('width',8)
bitoffset=GetField(var1,'bitoffset',Vari,0) bitoffset=GetField(var1,'bitoffset',Vari,0)
self.SetSwitch(RCUi); if not(self.SetSwitch(RCUi)): return value1,[False for x in mask]
value2=value1[i0:i1] value2=value1[i0:i1]
self.RCUi=RCUi; self.RCUi=RCUi;
res=self.GetVarValue(devreg,width,bitoffset,value2,mode=mode) res=self.GetVarValue(devreg,width,bitoffset,value2,mode=mode)
...@@ -307,7 +314,7 @@ class i2c_array(i2c_dev): ...@@ -307,7 +314,7 @@ class i2c_array(i2c_dev):
for RCUi in self.RCUorder: for RCUi in self.RCUorder:
if not(mask[RCUi]): continue if not(mask[RCUi]): continue
if not(self.I2Cmask[RCUi]<=self.I2Ccut): continue if not(self.I2Cmask[RCUi]<=self.I2Ccut): continue
self.SetSwitch(RCUi); if not(self.SetSwitch(RCUi)): return False;
value2=[value1[RCUi]] value2=[value1[RCUi]]
self.RCUi=RCUi; self.RCUi=RCUi;
res=self.GetVarValue(devreg,8,0,value2) res=self.GetVarValue(devreg,8,0,value2)
...@@ -411,7 +418,7 @@ class i2c_array(i2c_dev): ...@@ -411,7 +418,7 @@ class i2c_array(i2c_dev):
callback(devreg['addr'],int2bytes(reg),read=2) callback(devreg['addr'],int2bytes(reg),read=2)
for x in self.mask: for x in self.mask:
value3=value2[x*step2:(x+1)*step2] value3=value2[x*step2:(x+1)*step2]
self.SetSwitch(x); if not(self.SetSwitch(x)): return value2
callback(devreg['addr'],value3,read=1) callback(devreg['addr'],value3,read=1)
if devreg.get('store')==True: if devreg.get('store')==True:
storearray=self.getstorearray(devreg,step2); storearray=self.getstorearray(devreg,step2);
......
...@@ -35,20 +35,23 @@ class i2c_array2(i2c_array): ...@@ -35,20 +35,23 @@ class i2c_array2(i2c_array):
def SetSwitch(self,RCUi): def SetSwitch(self,RCUi):
#print("Set switch element",RCUi,'=',self.sw1[RCUi],self.sw2[RCUi],(self.sw3[RCUi] if len(self.sw3)<0 else 'x')) #print("Set switch element",RCUi,'=',self.sw1[RCUi],self.sw2[RCUi],(self.sw3[RCUi] if len(self.sw3)<0 else 'x'))
self.conf['parentcls'].SetSW1(self.sw1[RCUi]); if not(self.conf['parentcls'].SetSW1(self.sw1[RCUi])): return False;
self.conf['parentcls'].SetSW2(self.sw2[RCUi]); if not(self.conf['parentcls'].SetSW2(self.sw2[RCUi])): return False;
if len(self.sw3)>0: if len(self.sw3)>0:
self.conf['parentcls'].SetSW3(self.sw3[RCUi]); if not(self.conf['parentcls'].SetSW3(self.sw3[RCUi])): return False;
return True
def SetSwitchMask(self,mask): def SetSwitchMask(self,mask):
sw1=[];sw2=[];sw3=[]; sw1=[];sw2=[];sw3=[];
m=0; m=0;
self.RCUi=0
for RCUi in range(self.N): for RCUi in range(self.N):
if mask[RCUi]: if mask[RCUi]:
if self.sw1[RCUi] not in sw1: sw1.append(self.sw1[RCUi]) if self.sw1[RCUi] not in sw1: sw1.append(self.sw1[RCUi])
if self.sw2[RCUi] not in sw2: sw2.append(self.sw2[RCUi]) if self.sw2[RCUi] not in sw2: sw2.append(self.sw2[RCUi])
if len(self.sw3)>0: if len(self.sw3)>0:
if self.sw3[RCUi] not in sw3: sw3.append(self.sw3[RCUi]) if self.sw3[RCUi] not in sw3: sw3.append(self.sw3[RCUi])
self.RCUi=RCUi
logging.info(str(("SetSwitchMask",sw1,sw2,sw3))) logging.info(str(("SetSwitchMask",sw1,sw2,sw3)))
self.conf['parentcls'].SetSWx(sw1,sw2,sw3) self.conf['parentcls'].SetSWx(sw1,sw2,sw3)
# self.conf['parentcls'].SetSW1(self.sw1[RCUi]); # self.conf['parentcls'].SetSW1(self.sw1[RCUi]);
......
...@@ -38,7 +38,7 @@ class i2c_switch(i2c): ...@@ -38,7 +38,7 @@ class i2c_switch(i2c):
logging.debug("SetChannel addr %i = val %i" % (x,0)); logging.debug("SetChannel addr %i = val %i" % (x,0));
self.CurrentChannel[x]=0 self.CurrentChannel[x]=0
if not(self.i2csetget(self.SWaddrs[x],[0])): result=False if not(self.i2csetget(self.SWaddrs[x],[0])): result=False
if not(result): logging.info("Switch set error!") if not(result): logging.warning("Switch set error!")
return result return result
def ClearNewChannel(self): def ClearNewChannel(self):
......
...@@ -16,7 +16,7 @@ class i2c_switch2(i2c): ...@@ -16,7 +16,7 @@ class i2c_switch2(i2c):
def setI2Cswitch(self,addr,state): def setI2Cswitch(self,addr,state):
res=self.i2csetget(addr,[state]); res=self.i2csetget(addr,[state]);
if not(res): if not(res):
logging.info("Error setting switch, switch reset not implemented!"); logging.warning("Error setting switch, switch reset not implemented!");
return res; return res;
def SetSW1(self,channelbit): def SetSW1(self,channelbit):
......
...@@ -225,7 +225,7 @@ class yamlreader(yamlconfig): ...@@ -225,7 +225,7 @@ class yamlreader(yamlconfig):
def callMethod(self,id1): def callMethod(self,id1):
v=self.conf['methods'][id1]; v=self.conf['methods'][id1];
logging.debug("Method called!"+v['name']) logging.warning("Method called:"+v['name'])
mask=v.get('maskOPC',None); mask=v.get('maskOPC',None);
mask=mask.get_value() if (mask!=None) else []; mask=mask.get_value() if (mask!=None) else [];
if not(self.GetBusy()): self.lastRecv=time.time() if not(self.GetBusy()): self.lastRecv=time.time()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment