diff --git a/i2c/setRCUversion.py b/i2c/setRCUversion.py new file mode 100644 index 0000000000000000000000000000000000000000..bfe58a3ce177acf3fbcaf8ebba9ed1656b2f1af5 --- /dev/null +++ b/i2c/setRCUversion.py @@ -0,0 +1,20 @@ +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) diff --git a/rcu/RCU.py b/rcu/RCU.py index b8eea88a8e5fa6c6ee4aba13edf884ef1789e062..e1ca7b121679d54d33afe9f8ff223883469c4956 100644 --- a/rcu/RCU.py +++ b/rcu/RCU.py @@ -34,14 +34,14 @@ def strs2bytes(var): # print("str2bytes",var) if len(var)==0: return var; 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 def bytes2strs(var,step,dtype): if not(dtype==Vars.datatype.dstring): return var cnt=int(len(var)/step) 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(): def __init__(self,number,I2Ccallback,Switchcallback): @@ -172,6 +172,7 @@ class RCU1(): var=V1.Vars[Vari] # print(Step,Step2,i0,i1,value2,len(value1)) self.GetI2Cnoreg(RCUi,var.devreg,var.width,var.bitoffset,value2) +# print(value2) if (var.Scale!=0): value2[0]*=var.Scale; value1[i0:i1]=value2 elif V1.Vars[0].type==Vars.DevType.SPIbb: @@ -179,6 +180,7 @@ class RCU1(): # logging.info("SPIbb all not implemented yet") else: logging.error("Type not implemented") +# print(value1) def GetBBValueAll(self,V1,value1,mask): def SetBit(RCUi,dev,width,bitoffset,value,buffer=False): if not(buffer): self.SWcallback(mask) @@ -231,7 +233,8 @@ class RCU1(): # logging.debug(str(("GetI2Cbuffer",RCUi,dev.store,value))) l1=int(np.floor((width+bitoffset+7)/8)) 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 def GetI2C(self,RCUi,dev,width,bitoffset,value): @@ -257,7 +260,8 @@ class RCU1(): self.previous[RCUi,dev.store-1]=value[0] # logging.debug(str(("Store buffer",RCUi,dev.store,value[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] return True; def GetI2Cbit(self,RCUi,dev,pin): @@ -272,6 +276,7 @@ class RCU1(): def GetI2Cnoreg(self,RCUi,dev,width,bitoffset,value): + #print(width,len(value)) l1=int(np.floor((width+bitoffset+7)/8)) makesinglevalue=((len(value)==1) and (l1>1)); if makesinglevalue: value2=[0 for x in range(l1)] @@ -284,9 +289,13 @@ class RCU1(): if dev.store>0: self.previous[RCUi,dev.store-1]=value[0] # logging.debug(str(("Store buffer",RCUi,dev.store,value[0]))) - if (width!=l1*8) or (bitoffset>0): - value[0]=UnMask(value[0],width,bitoffset) +# if width<8: + if (width!=l1*8) or (bitoffset>0): + 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] + #if (len(value)>1) and (width<8): print value return True; def start(self,Q1): diff --git a/rcu/Vars.py b/rcu/Vars.py index 94dc921e8675cfeb770e492fa20d0c20dccdfb5a..164abf31774f15a9d5e07da4ec761a10169ae18c 100644 --- a/rcu/Vars.py +++ b/rcu/Vars.py @@ -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_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_VER=VarArray("RCU_version",1,[RCU_ID0],RW.ReadOnly,datatype.dstring,10,None,None) +RCU_Ver0=Var2dev("",RCUmod,DevType.I2C,RCU_ROM_Ver,7,0,1) +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)