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

HBAT working

parent f6f8f0ce
No related branches found
No related tags found
No related merge requests found
...@@ -96,7 +96,7 @@ class i2c_array(i2c_dev): ...@@ -96,7 +96,7 @@ class i2c_array(i2c_dev):
if (len(mask)==self.N): if (len(mask)==self.N):
mask=[m for m in mask for x in range(Step)] mask=[m for m in mask for x in range(Step)]
if not(len(mask)==Step*self.N): if not(len(mask)==Step*self.N):
print("Check mask length!"); print("Check mask length!",len(mask),Step,self.N);
return; return;
# if (len(value1)==V1.nVars) and (self.N>1): value1=(value1*self.N); # if (len(value1)==V1.nVars) and (self.N>1): value1=(value1*self.N);
i2c=self.conf['parentcls']; i2c=self.conf['parentcls'];
...@@ -133,6 +133,9 @@ class i2c_array(i2c_dev): ...@@ -133,6 +133,9 @@ class i2c_array(i2c_dev):
def Setdevreg(self,devreg,value,mask=[]): def Setdevreg(self,devreg,value,mask=[]):
# if devreg.get('store'): logging.debug("Stored") # if devreg.get('store'): logging.debug("Stored")
# print(devreg['store']) # print(devreg['store'])
if len(mask)==0:
mask=[True]*self.N;
self.RCUi=0;
self.SetSwitchMask(mask) self.SetSwitchMask(mask)
if not(self.SetVarValue(devreg,8,0,value)): return False; if not(self.SetVarValue(devreg,8,0,value)): return False;
if devreg.get('store'): if devreg.get('store'):
...@@ -174,8 +177,9 @@ class i2c_array(i2c_dev): ...@@ -174,8 +177,9 @@ class i2c_array(i2c_dev):
if devreg['store']: if devreg['store']:
storearray=self.getstorearray(devreg); storearray=self.getstorearray(devreg);
previous=storearray[self.RCUi]; previous=storearray[self.RCUi];
# print(value,previous)
for x in range(len(value)): for x in range(len(value)):
value[x]=ApplyMask(value[x],width,bitoffset,previous); value[x]=ApplyMask(value[x],width,bitoffset,(previous[x] if isinstance(previous,list) else previous));
storearray[self.RCUi]=(value[0] if len(value)==1 else value[:]) storearray[self.RCUi]=(value[0] if len(value)==1 else value[:])
logging.debug("Stored value:"+str(storearray[self.RCUi])) logging.debug("Stored value:"+str(storearray[self.RCUi]))
# devreg['drivercls'].i2csetget # devreg['drivercls'].i2csetget
......
...@@ -8,21 +8,24 @@ class i2c_switch(i2c): ...@@ -8,21 +8,24 @@ class i2c_switch(i2c):
i2c.__init__(self,config) i2c.__init__(self,config)
self.SWaddr=config['devreg'][0]['addr'] self.SWaddr=config['devreg'][0]['addr']
self.CurrentChannel=0 self.CurrentChannel=0
self.NoSwitch=True;
logging.info("i2c switch at address "+str(self.SWaddr)) logging.info("i2c switch at address "+str(self.SWaddr))
if self.NoSwitch:
logging.warn("i2c switch disabled!")
def SetSW1(self,channelbit): def SetSW1(self,channelbit):
channel=(0 if (channelbit>5) else 1<<(channelbit)) #LTS channel=(0 if (channelbit>5) else 1<<(channelbit)) #LTS
if (channel)==self.CurrentChannel: return True; if (channel)==self.CurrentChannel: return True;
logging.debug("SetChannelbit=%i" % channelbit) logging.debug("SetChannelbit=%i" % channelbit)
self.CurrentChannel=channel self.CurrentChannel=channel
return self.i2csetget(self.SWaddr,[channel]) return (True if self.NoSwitch else self.i2csetget(self.SWaddr,[channel]))
def SetChannel(self,channel): def SetChannel(self,channel):
channel&=0x3F;#LTS channel&=0x3F;#LTS
if (channel)==self.CurrentChannel: return True; if (channel)==self.CurrentChannel: return True;
logging.debug("SetChannel=%i" % channel) logging.debug("SetChannel=%i" % channel)
self.CurrentChannel=channel self.CurrentChannel=channel
return self.i2csetget(self.SWaddr,[channel]) return (True if self.NoSwitch else self.i2csetget(self.SWaddr,[channel]))
# def I2Ccallback(self,RCU,addr,data,reg=None,read=0): # def I2Ccallback(self,RCU,addr,data,reg=None,read=0):
# self.callback1(addr,data,reg,read) # self.callback1(addr,data,reg,read)
...@@ -83,10 +83,11 @@ def setvar(conf,Qout,varid,data,mask): ...@@ -83,10 +83,11 @@ def setvar(conf,Qout,varid,data,mask):
if not(drv): if not(drv):
logging.warn(var1['name']+" driver not found!") logging.warn(var1['name']+" driver not found!")
return; return;
for data in drv.OPCUASetVariable(varid,var1,data,mask): for data2 in drv.OPCUASetVariable(varid,var1,data,mask):
if len(mask)==len(data.mask): mask[:]=data.mask[:]; if len(mask)==len(data2.mask): mask[:]=data2.mask[:];
elif len(mask)==0: mask=data.mask.copy(); elif len(mask)==0: mask=data2.mask.copy();
Qout.put(data) # print(data2.data[:64]);
Qout.put(data2)
return mask; return mask;
def getvar(conf,Qout,varid,mask): def getvar(conf,Qout,varid,mask):
......
...@@ -98,11 +98,12 @@ class yamlreader(yamlconfig): ...@@ -98,11 +98,12 @@ class yamlreader(yamlconfig):
if not(v): if not(v):
logging.warn(self.yamlfile+"_Init method not found for initialisation!") logging.warn(self.yamlfile+"_Init method not found for initialisation!")
return; return;
self.server.callmethod(v['id'],[]) self.callMethod(v['id'])
def setvar(self,id1,data=[]): def setvar(self,id1,data=[]):
v=self.conf['variables'][id1]; v=self.conf['variables'][id1];
if v['rw']=='variable': return; if v['rw']=='variable': return;
endian=v.get('endian','>');
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 [];
# print("M2:",mask) # print("M2:",mask)
...@@ -118,14 +119,14 @@ class yamlreader(yamlconfig): ...@@ -118,14 +119,14 @@ class yamlreader(yamlconfig):
if width<=1: if width<=1:
data2=bytearray(data) data2=bytearray(data)
elif width==2: elif width==2:
data2 = struct.pack('>%sH' % len(data), *data) data2 = struct.pack(endian+'%sH' % len(data), *data)
elif width==3: elif width==3:
data2=bytearray() data2=bytearray()
for a in data: data2.extend(struct.pack('>L',a)[1:]) for a in data: data2.extend(struct.pack('>L',a)[1:])
elif width==4: elif width==4:
data2 = struct.pack('>%sL' % len(data), *data) data2 = struct.pack(endian+'%sL' % len(data), *data)
elif width==8: elif width==8:
data2 = struct.pack('>%sQ' % len(data), *data) data2 = struct.pack(endian+'%sQ' % len(data), *data)
else: else:
logging.warn("setvar"+v['name']+" unsupported width!"+str(width)) logging.warn("setvar"+v['name']+" unsupported width!"+str(width))
return; return;
...@@ -201,7 +202,7 @@ class yamlreader(yamlconfig): ...@@ -201,7 +202,7 @@ class yamlreader(yamlconfig):
return; return;
data3=var1.get_value(); data3=var1.get_value();
if not(isinstance(data3,list)): data3=[data3]; if not(isinstance(data3,list)): data3=[data3];
# print("OPCset",v['name'],data3,mask) # print("OPCset",v['name'],data2[:64],mask)
if mask: #Only update masked values if mask: #Only update masked values
step=len(data2)//len(mask) step=len(data2)//len(mask)
#print("mask step=",step) #print("mask step=",step)
...@@ -209,8 +210,9 @@ class yamlreader(yamlconfig): ...@@ -209,8 +210,9 @@ class yamlreader(yamlconfig):
if mask[i//step]: data3[i]=data2[i] if mask[i//step]: data3[i]=data2[i]
else: else:
data3=data2; data3=data2;
# print("OPCset",v['name'],data3[:64],mask)
logging.info(str(("OPCset",v['name'],data3[:64])))
if len(data3)==1: data3=data3[0]; if len(data3)==1: data3=data3[0];
logging.info(str(("OPCset",v['name'],data3)))
var1.set_value(data3); var1.set_value(data3);
def Monitor(self): def Monitor(self):
......
RCU=0
#HBAT=1 #HBAT on RCU 0..2
#HBA=5; #HBA Element in HBAT
#BFX=11 #delay in 0.5ns
#BFY=BFX+1
name="HBA_element_beamformer_delays"
AntMask=[True,True,True]
NewVal=[2]*64
from test_common import *
import numpy as np
setAntmask([RCU],AntMask)
i=(RCU*3)*32
val=get_value(name+"_R")
print("old:",val[i:i+64])
val[i:i+64]=NewVal
set_value(name+"_RW",val)
print("set:",val[i:i+64])
time.sleep(2)
val=get_value(name+"_R")
print("new:",val[i:i+64])
#time.sleep(5)
#val[i:i+64]=[0]*64
#set_value(name+"_RW",val)
#print("set:",val[i:i+64])
#time.sleep(1)
#val=get_value(name+"_R")
#print("new:",val[i:i+64])
disconnect()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment