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):
if (len(mask)==self.N):
mask=[m for m in mask for x in range(Step)]
if not(len(mask)==Step*self.N):
print("Check mask length!");
print("Check mask length!",len(mask),Step,self.N);
return;
# if (len(value1)==V1.nVars) and (self.N>1): value1=(value1*self.N);
i2c=self.conf['parentcls'];
......@@ -133,6 +133,9 @@ class i2c_array(i2c_dev):
def Setdevreg(self,devreg,value,mask=[]):
# if devreg.get('store'): logging.debug("Stored")
# print(devreg['store'])
if len(mask)==0:
mask=[True]*self.N;
self.RCUi=0;
self.SetSwitchMask(mask)
if not(self.SetVarValue(devreg,8,0,value)): return False;
if devreg.get('store'):
......@@ -174,8 +177,9 @@ class i2c_array(i2c_dev):
if devreg['store']:
storearray=self.getstorearray(devreg);
previous=storearray[self.RCUi];
# print(value,previous)
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[:])
logging.debug("Stored value:"+str(storearray[self.RCUi]))
# devreg['drivercls'].i2csetget
......
......@@ -8,21 +8,24 @@ class i2c_switch(i2c):
i2c.__init__(self,config)
self.SWaddr=config['devreg'][0]['addr']
self.CurrentChannel=0
self.NoSwitch=True;
logging.info("i2c switch at address "+str(self.SWaddr))
if self.NoSwitch:
logging.warn("i2c switch disabled!")
def SetSW1(self,channelbit):
channel=(0 if (channelbit>5) else 1<<(channelbit)) #LTS
if (channel)==self.CurrentChannel: return True;
logging.debug("SetChannelbit=%i" % channelbit)
self.CurrentChannel=channel
return self.i2csetget(self.SWaddr,[channel])
return (True if self.NoSwitch else self.i2csetget(self.SWaddr,[channel]))
def SetChannel(self,channel):
channel&=0x3F;#LTS
if (channel)==self.CurrentChannel: return True;
logging.debug("SetChannel=%i" % 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):
# self.callback1(addr,data,reg,read)
......@@ -83,10 +83,11 @@ def setvar(conf,Qout,varid,data,mask):
if not(drv):
logging.warn(var1['name']+" driver not found!")
return;
for data in drv.OPCUASetVariable(varid,var1,data,mask):
if len(mask)==len(data.mask): mask[:]=data.mask[:];
elif len(mask)==0: mask=data.mask.copy();
Qout.put(data)
for data2 in drv.OPCUASetVariable(varid,var1,data,mask):
if len(mask)==len(data2.mask): mask[:]=data2.mask[:];
elif len(mask)==0: mask=data2.mask.copy();
# print(data2.data[:64]);
Qout.put(data2)
return mask;
def getvar(conf,Qout,varid,mask):
......
......@@ -98,11 +98,12 @@ class yamlreader(yamlconfig):
if not(v):
logging.warn(self.yamlfile+"_Init method not found for initialisation!")
return;
self.server.callmethod(v['id'],[])
self.callMethod(v['id'])
def setvar(self,id1,data=[]):
v=self.conf['variables'][id1];
if v['rw']=='variable': return;
endian=v.get('endian','>');
mask=v.get('maskOPC',None);
mask=mask.get_value() if (mask!=None) else [];
# print("M2:",mask)
......@@ -118,14 +119,14 @@ class yamlreader(yamlconfig):
if width<=1:
data2=bytearray(data)
elif width==2:
data2 = struct.pack('>%sH' % len(data), *data)
data2 = struct.pack(endian+'%sH' % len(data), *data)
elif width==3:
data2=bytearray()
for a in data: data2.extend(struct.pack('>L',a)[1:])
elif width==4:
data2 = struct.pack('>%sL' % len(data), *data)
data2 = struct.pack(endian+'%sL' % len(data), *data)
elif width==8:
data2 = struct.pack('>%sQ' % len(data), *data)
data2 = struct.pack(endian+'%sQ' % len(data), *data)
else:
logging.warn("setvar"+v['name']+" unsupported width!"+str(width))
return;
......@@ -201,7 +202,7 @@ class yamlreader(yamlconfig):
return;
data3=var1.get_value();
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
step=len(data2)//len(mask)
#print("mask step=",step)
......@@ -209,8 +210,9 @@ class yamlreader(yamlconfig):
if mask[i//step]: data3[i]=data2[i]
else:
data3=data2;
# print("OPCset",v['name'],data3[:64],mask)
logging.info(str(("OPCset",v['name'],data3[:64])))
if len(data3)==1: data3=data3[0];
logging.info(str(("OPCset",v['name'],data3)))
var1.set_value(data3);
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.
Please register or to comment