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

HBAT working

parent f6f8f0ce
Branches
Tags
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