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

RCU version

parent 0a01ae8f
No related branches found
No related tags found
1 merge request!8Pypcc2
from I2C import *
import time
RCU=1
Ver="RCU2L v1.1"
R1=32
ROM=0x50
Ver2=[ord(c.encode('utf-8')[0]) for c in Ver]
print(len(Ver),Ver,Ver2)
V2=[0]
I2C1server(0x70,[1<<RCU],reg=None,read=0) #select RCU
for i,v in enumerate(Ver2):
I2C1server(ROM,[],reg=R1+i,read=0) #select RCU
time.sleep(0.01)
I2C1server(ROM,[v],reg=None,read=0) #select RCU
time.sleep(0.01)
I2C1server(ROM,V2,reg=R1+i,read=1) #select RCU
print(i,v,V2)
Ver2=[0]*10
I2C1server(ROM,Ver2,reg=R1,read=1) #select RCU
print(Ver2)
...@@ -34,14 +34,14 @@ def strs2bytes(var): ...@@ -34,14 +34,14 @@ def strs2bytes(var):
# print("str2bytes",var) # print("str2bytes",var)
if len(var)==0: return var; if len(var)==0: return var;
if isinstance(var[0],str): #make string a byte array if isinstance(var[0],str): #make string a byte array
return [c.encode('ascii')[0] for s in var for c in s] return [ord(c.encode('utf-8')[0]) for s in var for c in s]
return var return var
def bytes2strs(var,step,dtype): def bytes2strs(var,step,dtype):
if not(dtype==Vars.datatype.dstring): return var if not(dtype==Vars.datatype.dstring): return var
cnt=int(len(var)/step) cnt=int(len(var)/step)
print(var) print(var)
return [(bytes(var[i*step:(i+1)*step]).decode("ascii")) for i in range(cnt)] return [(bytearray(var[i*step:(i+1)*step]).decode("utf-8")) for i in range(cnt)]
class RCU1(): class RCU1():
def __init__(self,number,I2Ccallback,Switchcallback): def __init__(self,number,I2Ccallback,Switchcallback):
...@@ -172,6 +172,7 @@ class RCU1(): ...@@ -172,6 +172,7 @@ class RCU1():
var=V1.Vars[Vari] var=V1.Vars[Vari]
# print(Step,Step2,i0,i1,value2,len(value1)) # print(Step,Step2,i0,i1,value2,len(value1))
self.GetI2Cnoreg(RCUi,var.devreg,var.width,var.bitoffset,value2) self.GetI2Cnoreg(RCUi,var.devreg,var.width,var.bitoffset,value2)
# print(value2)
if (var.Scale!=0): value2[0]*=var.Scale; if (var.Scale!=0): value2[0]*=var.Scale;
value1[i0:i1]=value2 value1[i0:i1]=value2
elif V1.Vars[0].type==Vars.DevType.SPIbb: elif V1.Vars[0].type==Vars.DevType.SPIbb:
...@@ -179,6 +180,7 @@ class RCU1(): ...@@ -179,6 +180,7 @@ class RCU1():
# logging.info("SPIbb all not implemented yet") # logging.info("SPIbb all not implemented yet")
else: else:
logging.error("Type not implemented") logging.error("Type not implemented")
# print(value1)
def GetBBValueAll(self,V1,value1,mask): def GetBBValueAll(self,V1,value1,mask):
def SetBit(RCUi,dev,width,bitoffset,value,buffer=False): def SetBit(RCUi,dev,width,bitoffset,value,buffer=False):
if not(buffer): self.SWcallback(mask) if not(buffer): self.SWcallback(mask)
...@@ -231,7 +233,8 @@ class RCU1(): ...@@ -231,7 +233,8 @@ class RCU1():
# logging.debug(str(("GetI2Cbuffer",RCUi,dev.store,value))) # logging.debug(str(("GetI2Cbuffer",RCUi,dev.store,value)))
l1=int(np.floor((width+bitoffset+7)/8)) l1=int(np.floor((width+bitoffset+7)/8))
if (width!=l1*8) or (bitoffset>0): if (width!=l1*8) or (bitoffset>0):
value[0]=UnMask(value[0],width,bitoffset) for i in range(len(value)):
value[i]=UnMask(value[i],width,bitoffset)
return True return True
def GetI2C(self,RCUi,dev,width,bitoffset,value): def GetI2C(self,RCUi,dev,width,bitoffset,value):
...@@ -257,7 +260,8 @@ class RCU1(): ...@@ -257,7 +260,8 @@ class RCU1():
self.previous[RCUi,dev.store-1]=value[0] self.previous[RCUi,dev.store-1]=value[0]
# logging.debug(str(("Store buffer",RCUi,dev.store,value[0]))) # logging.debug(str(("Store buffer",RCUi,dev.store,value[0])))
if (width!=l1*8) or (bitoffset>0): if (width!=l1*8) or (bitoffset>0):
value[0]=UnMask(value[0],width,bitoffset) for i in range(len(value)):
value[i]=UnMask(value[i],width,bitoffset)
else: value[0]=value2[0] else: value[0]=value2[0]
return True; return True;
def GetI2Cbit(self,RCUi,dev,pin): def GetI2Cbit(self,RCUi,dev,pin):
...@@ -272,6 +276,7 @@ class RCU1(): ...@@ -272,6 +276,7 @@ class RCU1():
def GetI2Cnoreg(self,RCUi,dev,width,bitoffset,value): def GetI2Cnoreg(self,RCUi,dev,width,bitoffset,value):
#print(width,len(value))
l1=int(np.floor((width+bitoffset+7)/8)) l1=int(np.floor((width+bitoffset+7)/8))
makesinglevalue=((len(value)==1) and (l1>1)); makesinglevalue=((len(value)==1) and (l1>1));
if makesinglevalue: value2=[0 for x in range(l1)] if makesinglevalue: value2=[0 for x in range(l1)]
...@@ -284,9 +289,13 @@ class RCU1(): ...@@ -284,9 +289,13 @@ class RCU1():
if dev.store>0: if dev.store>0:
self.previous[RCUi,dev.store-1]=value[0] self.previous[RCUi,dev.store-1]=value[0]
# logging.debug(str(("Store buffer",RCUi,dev.store,value[0]))) # logging.debug(str(("Store buffer",RCUi,dev.store,value[0])))
# if width<8:
if (width!=l1*8) or (bitoffset>0): if (width!=l1*8) or (bitoffset>0):
value[0]=UnMask(value[0],width,bitoffset) for i in range(len(value)):
value[i]=UnMask(value[i],width,bitoffset)
# value[0]=UnMask(value[0],width,bitoffset)
#else: value[0]=value2[0] #else: value[0]=value2[0]
#if (len(value)>1) and (width<8): print value
return True; return True;
def start(self,Q1): def start(self,Q1):
......
...@@ -49,8 +49,8 @@ HBA1_Pwr =VarArray("HBA_element_pwr" ,3,[HBA1_Pwr ,HBA2_Pwr ,HBA3_Pwr ],RW. ...@@ -49,8 +49,8 @@ HBA1_Pwr =VarArray("HBA_element_pwr" ,3,[HBA1_Pwr ,HBA2_Pwr ,HBA3_Pwr ],RW.
RCU_ID0=Var2dev("",RCUmod,DevType.I2C,RCU_ROM_ID,32,0,1) RCU_ID0=Var2dev("",RCUmod,DevType.I2C,RCU_ROM_ID,32,0,1)
RCU_ID=VarArray("RCU_ID",1,[RCU_ID0],RW.ReadOnly,datatype.dInt,1,None,None) RCU_ID=VarArray("RCU_ID",1,[RCU_ID0],RW.ReadOnly,datatype.dInt,1,None,None)
RCU_Ver0=Var2dev("",RCUmod,DevType.I2C,RCU_ROM_Ver,32,0,1) RCU_Ver0=Var2dev("",RCUmod,DevType.I2C,RCU_ROM_Ver,7,0,1)
RCU_VER=VarArray("RCU_version",1,[RCU_ID0],RW.ReadOnly,datatype.dstring,10,None,None) RCU_VER=VarArray("RCU_version",1,[RCU_Ver0],RW.ReadOnly,datatype.dstring,10,None,None)
RCU_ADC1_lock=Var2dev("RCU_ADC1_lock",RCUmod,DevType.SPIbb,RCU_ADC1_PLL_stat,8,0,1) RCU_ADC1_lock=Var2dev("RCU_ADC1_lock",RCUmod,DevType.SPIbb,RCU_ADC1_PLL_stat,8,0,1)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment