diff --git a/pypcc/config/RECVTR_HB.yaml b/pypcc/config/RECVTR_HB.yaml index f74c19da8e85f58ef88db99ae2bd875e2168e93f..3fb4e84a694a652c9061b95e845494715bdd2e62 100644 --- a/pypcc/config/RECVTR_HB.yaml +++ b/pypcc/config/RECVTR_HB.yaml @@ -834,6 +834,11 @@ methods: - IO4.CONF2: 0xF8 #Configure registers on RCU microcontroller - HB_UC.waitPPS: 1 #wait for PPS + - HBAT1.XY : [0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80] + - HBAT2.XY : [0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80] + - HBAT3.XY : [0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80] + - HBAT_PWR_LNA_on : Update + - HBAT_PWR_on : Update # - HB_UC.VREF: 0x0C # - HB_UC.VREF: 8 #lower for DANTE # - HB_UC.TXdelay : 32 #delay for broken DANTE frontend @@ -866,17 +871,6 @@ methods: - RCU_ADC_sync: Update #disabled for testing # - RCU_ADC_testsignal: Update #disabled for testing - - name: RCU_on_test - description: Initialize RCU and it in the ON state - driver: I2C_RCU - mask: RCU_mask - instructions: - - HBAT1.XY : [0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80] - - HBAT2.XY : [0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80] - - HBAT3.XY : [0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80] - - HBAT_PWR_LNA_on : Update - - HBAT_PWR_on : Update - - name: RCU_update driver: I2C_RCU mask: RCU_mask diff --git a/pypcc/i2cserv/hba1.py b/pypcc/i2cserv/hba1.py index 85ceb9560326160b78e952fa1bfaa140f76658d3..22be0356ef9b0c8034b0992dbfe4d45099f5513b 100644 --- a/pypcc/i2cserv/hba1.py +++ b/pypcc/i2cserv/hba1.py @@ -54,6 +54,14 @@ class hba1(hwdev): Data=OPCUAset(varid,InstType.varSet,data.copy(),mask2.copy()) return [Data] + def OPCUAReadVariable(self,varid,var1,mask): + #Only read from stored register + #logging.warn(self.conf['name']+" OPCUAReadVariable Not implemented!") + data=self.conf['parentcls'].GetStoredValue(var1) + Data=OPCUAset(varid,InstType.varSet,data,mask) + return [Data] + + def i2csetget(self,addr,data,reg=None,read=0): if read==0: return self.sethba(addr,reg,data) elif read==1: return self.gethba(addr,reg,data) diff --git a/pypcc/i2cserv/i2c_array.py b/pypcc/i2cserv/i2c_array.py index dd26f65269ca66a9595bd84adb09075589548417..a8da9d0e7156d7129afe1337edc541e3b2c6672e 100644 --- a/pypcc/i2cserv/i2c_array.py +++ b/pypcc/i2cserv/i2c_array.py @@ -234,6 +234,39 @@ class i2c_array(i2c_dev): logging.warn(str(("Identify RCUs:",check_val,self.enablemask))) return value1,mask + def GetStoredValue(self,var1): + Step,Step2=GetSteps(var1); + value1=[0]*Step*Step2; + Step2//=self.N + for Vari in range(Step): + devreg=var1['devreg'][Vari]; + width=var1.get('width',8) + bitoffset=GetField(var1,'bitoffset',Vari,0) + if not(devreg.get('store')): continue + storearray=self.getstorearray(devreg); + for RCUi in self.RCUorder: + i0=(RCUi*Step+ Vari)*Step2 + i1=(RCUi*Step+(Vari+1))*Step2 + value2=value1[i0:i1] +# res=self.GetVarValue(devreg,width,bitoffset,value2,mode=mode) + try: + value2[:]=storearray[RCUi] + except: + logging.warning("RCU%iWrong size (no data?) in stored array %i-%i"%(RCUi,len(value2),len(storearray[RCUi]))) +# of len(storearray[RCUi]==0) +# storearray[self.RCUi]=(value[0] if len(value)==1 else value[:]) + l1=int(np.floor((width+bitoffset+7)/8)) + if (width!=l1*8) or (bitoffset>0): + if (width<8): + for i in range(len(value2)): + value2[i]=UnMask(value2[i],width,bitoffset) + else: + value2[0]=UnMask(value2[0],width-(l1-1)*8,bitoffset) +# else: value[0]=value2[0] + value1[i0:i1]=value2 + return value1 + + def getstorearray(self,devreg,N=1): storearray=devreg.get('storearray') if not(storearray): @@ -256,9 +289,9 @@ class i2c_array(i2c_dev): storearray=self.getstorearray(devreg); for RCUi in range(self.N): if (mask[RCUi]) and (self.I2Cmask[RCUi]<=self.I2Ccut) and (self.enablemask[RCUi]) and not(value[0] is None): - storearray[RCUi]=value[0] + storearray[RCUi]=value[0] if len(value)==1 else value[:] self.RCUi=RCUi; - logging.debug(str(("Stored values:",self.getstorearray(devreg)))) + logging.info(str(("Stored values:",self.getstorearray(devreg)))) return True; diff --git a/pypcc/i2cserv/i2c_switch.py b/pypcc/i2cserv/i2c_switch.py index 4180f2ce17243c32ad4b9f4b2dae3a3e2d99ac42..7934f2b6652c57bb2ce8c1f03e27e9c1dd0d5e22 100644 --- a/pypcc/i2cserv/i2c_switch.py +++ b/pypcc/i2cserv/i2c_switch.py @@ -25,18 +25,20 @@ class i2c_switch(i2c): if self.NoSwitch: return True; SWn=channelbit>>3; channel=1<<(channelbit & 0x07) + result=True for x in range(self.SWcnt): if x==SWn: if (channel)!=self.CurrentChannel[x]: self.CurrentChannel[x]=channel logging.debug("SetChannel addr %i = val %i" % (SWn,channel)); - if not(self.i2csetget(self.SWaddrs[x],[channel])): return False; + if not(self.i2csetget(self.SWaddrs[x],[channel])): result=False else: if self.CurrentChannel[x]!=0: logging.debug("SetChannel addr %i = val %i" % (x,0)); self.CurrentChannel[x]=0 - if not(self.i2csetget(self.SWaddrs[x],[0])): return False; - return True + if not(self.i2csetget(self.SWaddrs[x],[0])): result=False + if not(result): logging.info("Switch set error!") + return result def ClearNewChannel(self): self.newChannel=[0 for x in self.SWaddrs]+[0];#last one is a dummy diff --git a/scripts/get_all_debug.py b/scripts/get_all_debug.py new file mode 100644 index 0000000000000000000000000000000000000000..f43ab74a07511334a280d977e29930bd2e4eb038 --- /dev/null +++ b/scripts/get_all_debug.py @@ -0,0 +1,11 @@ +from test_common import * +from time import sleep +connect("opc.tcp://localhost:4841/") + + +names=get_all_debug_variables() +for name in names: + att=get_debug_value(name) + print(name,'=',att) + +disconnect(); diff --git a/scripts/test_common.py b/scripts/test_common.py index 2492c63d18f7ac995dd5e42b8ab2e2b69656941b..df859d7c3044b7358475706ee8570f34d883cdb4 100644 --- a/scripts/test_common.py +++ b/scripts/test_common.py @@ -43,9 +43,12 @@ def set_value(name,value,tp=None): else: var1.set_value(value,tp) -def get_all_variables(): +def get_all_debug_variables(): + return get_all_variables(parent_object=["0:Objects","2:DEBUG"]) + +def get_all_variables(parent_object=["0:Objects"]): vars0=[] - obj0=root.get_child(["0:Objects"]) + obj0=root.get_child(parent_object) for nodeid in obj0.get_children(): # print(nodeid) ch = client.get_node(nodeid.nodeid)