diff --git a/config/UNB2.yaml b/config/UNB2.yaml index 5ac65152df724826fc6d31bd083adf5d8d630d2f..750d31cd440e32c5b297cecffb67e35c2b5e1bca 100644 --- a/config/UNB2.yaml +++ b/config/UNB2.yaml @@ -136,7 +136,7 @@ variables: driver: GPIO mask: UNB2_mask width: 1 - rw: ro + rw: hidden #ro dtype: boolean dim: 2 @@ -155,7 +155,7 @@ variables: driver: switch_UNB2 devreg: 0x50.0 width: 80 #10 characters - rw: ro + rw: hidden #ro dtype: string dim: 2 @@ -167,43 +167,67 @@ variables: dtype: uint32 dim: 2 - - name: [UNB2_DC_DC_48V_12V_VIN,UNB2_DC_DC_48V_12V_VOUT,UNB2_DC_DC_48V_12V_IOUT,UNB2_DC_DC_48V_12V_TEMP] + + - name: [UNB2_DC_DC_48V_12V_VIN,UNB2_DC_DC_48V_12V_VOUT] + driver: switch_PS + devreg: [0x2C.0x88,0x2C.0x8B] + width: 16 + rw: ro + dtype: double + endian: "<" + scale: 4.8828125e-4 #2^-11 + dim: 2 + monitor: true + + - name: [UNB2_DC_DC_48V_12V_VOUT_MODE,UNB2_POL_QSFP_N01_VOUT_MODE,UNB2_POL_QSFP_N23_VOUT_MODE,UNB2_POL_SWITCH_1V2_VOUT_MODE,UNB2_POL_SWITCH_PHY_VOUT_MODE,UNB2_POL_CLOCK_VOUT_MODE] + driver: switch_PS + devreg: [0x2C.0x20,0x2.0x20,0x1.0x20,0xF.0x20,0xE.0x20,0xD.0x20] + width: 8 + rw: ro + dtype: uint8 + dim: 2 + debug: true + monitor: true + + - name: [UNB2_POL_QSFP_N01_VOUT,UNB2_POL_QSFP_N23_VOUT] driver: switch_PS - devreg: [0x2C.0x88,0x2C.0x8B,0x2C.0x8C,0x2C.0x8D] + devreg: [0x2.0x8B,0x1.0x8B] width: 16 rw: ro dtype: double - scale: 1.2207e-4 #2^-13 + endian: "<" + scale: 1.220703125e-4 #2^-13 dim: 2 monitor: true - - name: [UNB2_POL_QSFP_N01_VOUT,UNB2_POL_QSFP_N01_IOUT,UNB2_POL_QSFP_N01_TEMP,UNB2_POL_QSFP_N23_VOUT,UNB2_POL_QSFP_N23_IOUT,UNB2_POL_QSFP_N23_TEMP] + - name: [UNB2_POL_SWITCH_1V2_VOUT,UNB2_POL_SWITCH_PHY_VOUT,UNB2_POL_CLOCK_VOUT] driver: switch_PS - devreg: [0x2.0x8B,0x2.0x8C,0x2.0x8D,0x1.0x8B,0x1.0x8C,0x1.0x8D] + devreg: [0xF.0x8B,0xE.0x8B,0xD.0x8B] width: 16 rw: ro dtype: double - scale: 1.2207e-4 #2^-13 + endian: "<" + scale: 2.44140625e-4 #2^-12 dim: 2 monitor: true - - name: [UNB2_POL_SWITCH_1V2_VOUT,UNB2_POL_SWITCH_1V2_IOUT,UNB2_POL_SWITCH_1V2_TEMP,UNB2_POL_SWITCH_PHY_VOUT,UNB2_POL_SWITCH_PHY_IOUT,UNB2_POL_SWITCH_PHY_TEMP] + - name: [UNB2_DC_DC_48V_12V_IOUT,UNB2_POL_QSFP_N01_IOUT,UNB2_POL_QSFP_N23_IOUT,UNB2_POL_SWITCH_1V2_IOUT,UNB2_POL_SWITCH_PHY_IOUT,UNB2_POL_CLOCK_IOUT] driver: switch_PS - devreg: [0xF.0x8B,0xF.0x8C,0xF.0x8D,0xE.0x8B,0xE.0x8C,0xE.0x8D] + devreg: [0x2C.0x8C,0x2.0x8C,0x1.0x8C,0xF.0x8C,0xE.0x8C,0xD.0x8C] width: 16 rw: ro dtype: double - scale: 1.2207e-4 #2^-13 + scale: smbus_2bytes_to_float dim: 2 monitor: true - - name: [UNB2_POL_CLOCK_VOUT,UNB2_POL_CLOCK_IOUT,UNB2_POL_CLOCK_TEMP] + - name: [UNB2_DC_DC_48V_12V_TEMP,UNB2_POL_QSFP_N01_TEMP,UNB2_POL_QSFP_N23_TEMP,UNB2_POL_SWITCH_1V2_TEMP,UNB2_POL_SWITCH_PHY_TEMP,UNB2_POL_CLOCK_TEMP] driver: switch_PS - devreg: [0xD.0x8B,0xD.0x8C,0xD.0x8D] + devreg: [0x2C.0x8D,0x2.0x8D,0x1.0x8D,0xF.0x8D,0xE.0x8D,0xD.0x8D] width: 16 rw: ro dtype: double - scale: 1.2207e-4 #2^-13 + scale: smbus_2bytes_to_float dim: 2 monitor: true @@ -223,41 +247,62 @@ variables: driver: switch_DDR4 devreg: [0x18.0x149,0x19.0x149] width: 160 - rw: ro + rw: hidden #ro dtype: string dim: 16 +# monitor: true + + - name: [UNB2_FPGA_POL_CORE_IOUT,UNB2_FPGA_POL_ERAM_IOUT,UNB2_FPGA_POL_RXGXB_IOUT,UNB2_FPGA_POL_TXGXB_IOUT,UNB2_FPGA_POL_HGXB_IOUT,UNB2_FPGA_POL_PGM_IOUT] + driver: switch_FPGA_PS + devreg: [0x1.0x8C,0xD.0x8C,0xE.0x8C,0xF.0x8C,0x10.0x8C,0x11.0x8C] + width: 16 + rw: ro + dtype: double + scale: smbus_2bytes_to_float + dim: 8 monitor: true - - name: [UNB2_POL_FPGA_CORE_VOUT,UNB2_FPGA_POL_CORE_IOUT,UNB2_FPGA_POL_CORE_TEMP,UNB2_FPGA_POL_ERAM_VOUT,UNB2_FPGA_POL_ERAM_IOUT,UNB2_FPGA_POL_ERAM_TEMP] + - name: [UNB2_FPGA_POL_CORE_TEMP,UNB2_FPGA_POL_ERAM_TEMP,UNB2_FPGA_POL_RXGXB_TEMP,UNB2_FPGA_POL_TXGXB_TEMP,UNB2_FPGA_POL_HGXB_TEMP,UNB2_FPGA_POL_PGM_TEMP] driver: switch_FPGA_PS - devreg: [0x1.0x8B,0x1.0x8C,0x1.0x8D,0xD.0x8B,0xD.0x8C,0xD.0x8D] + devreg: [0x1.0x8D,0xD.0x8D,0xE.0x8D,0xF.0x8D,0x10.0x8D,0x11.0x8D] width: 16 rw: ro dtype: double - scale: 1.2207e-4 #2^-13 + scale: smbus_2bytes_to_float dim: 8 monitor: true - - name: [UNB2_FPGA_POL_RXGXB_VOUT,UNB2_FPGA_POL_RXGXB_IOUT,UNB2_FPGA_POL_RXGXB_TEMP,UNB2_FPGA_POL_TXGXB_VOUT,UNB2_FPGA_POL_TXGXB_IOUT,UNB2_POL_FPGA_TXGXB_TEMP] + - name: [UNB2_FPGA_POL_CORE_VOUT] driver: switch_FPGA_PS - devreg: [0xE.0x8B,0xE.0x8C,0xE.0x8D,0xF.0x8B,0xF.0x8C,0xF.0x8D] + devreg: [0x1.0x8B] width: 16 rw: ro dtype: double - scale: 1.2207e-4 #2^-13 + endian: "<" + scale: 1.220703125e-4 #2^-13 dim: 8 monitor: true - - name: [UNB2_FPGA_POL_HGXB_VOUT,UNB2_FPGA_POL_HGXB_IOUT,UNB2_FPGA_POL_HGXB_TEMP,UNB2_FPGA_POL_PGM_VOUT,UNB2_FPGA_POL_PGM_IOUT,UNB2_FPGA_POL_PGM_TEMP] + - name: [UNB2_FPGA_POL_ERAM_VOUT,UNB2_FPGA_POL_RXGXB_VOUT,UNB2_FPGA_POL_TXGXB_VOUT,UNB2_FPGA_POL_HGXB_VOUT,UNB2_FPGA_POL_PGM_VOUT] driver: switch_FPGA_PS - devreg: [0x10.0x8B,0x10.0x8C,0x10.0x8D,0x11.0x8B,0x11.0x8C,0x11.0x8D] + devreg: [0xD.0x8B,0xE.0x8B,0xF.0x8B,0x10.0x8B,0x11.0x8B] width: 16 rw: ro dtype: double - scale: 1.2207e-4 #2^-13 + endian: "<" + scale: 2.44140625e-4 #2^-12 dim: 8 monitor: true + - name: [UNB2_FPGA_POL_CORE_VOUT_MODE,UNB2_FPGA_POL_ERAM_VOUT_MODE,UNB2_FPGA_POL_RXGXB_VOUT_MODE,UNB2_FPGA_POL_TXGXB_VOUT_MODE,UNB2_FPGA_POL_HGXB_VOUT_MODE,UNB2_FPGA_POL_PGM_VOUT_MODE] + driver: switch_FPGA_PS + devreg: [0x1.0x20,0xD.0x20,0xE.0x20,0xF.0x20,0x10.0x20,0x11.0x20] + width: 8 + rw: ro + dtype: uint8 + dim: 8 + debug: true + monitor: true ##Local MP per FPGA node, QSFP cage @@ -268,7 +313,7 @@ variables: width: 16 rw: ro dtype: double - scale: 0.0625 #TBC + scale: 3.90625e-3 #1/256 dim: 48 monitor: true @@ -284,6 +329,13 @@ variables: methods: + - name: UNB2_Init #Called after startup to load. + driver: switch_UNB2 + debug: True + instructions: + - UNB2_EEPROM_Unique_ID: Update + + - name: UNB2_on mask: UNB2_mask instructions: diff --git a/i2cserv/i2c.py b/i2cserv/i2c.py index 3eb98b2e5b2709666b647b370600ac8f6fc27a61..27e86db37782e13cdf95000b4890a338918a27ec 100644 --- a/i2cserv/i2c.py +++ b/i2cserv/i2c.py @@ -32,6 +32,7 @@ class i2c(hwdev): bus.iaddr_bytes=0 if not(reg is None): bus.ioctl_write(0,bytes(bytearray([reg]))) +# time.sleep(0.500) data[:]=[int(x) for x in bus.ioctl_read(0,length)] logging.debug(str(("I2C get",addr,reg,data,read))) # print("I2C read",addr,reg,data,read) diff --git a/i2cserv/i2c_array.py b/i2cserv/i2c_array.py index 60fed98e8b6247608a9c99ba03605d8a4e7c7696..ce2c610034bd2ee2773e7590a4af97fbbc0e07bb 100644 --- a/i2cserv/i2c_array.py +++ b/i2cserv/i2c_array.py @@ -24,6 +24,7 @@ class i2c_array(i2c_dev): self.RCU_Switch1=range(pars[0],pars[1]+1); self.N=len(self.RCU_Switch1); self.I2Cmask=[0]*self.N + self.disableI2ConError=True; # self.devregs,RCU_storeReg=DevRegList(yaml) # print("Init",config['name'],'len=',len(self.RCU_Switch1),' stored reg=',RCU_storeReg) @@ -74,14 +75,14 @@ class i2c_array(i2c_dev): self.RCUi=RCUi; res=self.SetVarValue(devreg,width,bitoffset,data[i0:i1]) if not(res): - self.I2Cmask[RCUi]=1; + if self.disableI2ConError: self.I2Cmask[RCUi]=1; mask[RCUi*Step+Vari]=False; continue; if getalso: value2=value1[i0:i1] res=self.GetVarValue(devreg,width,bitoffset,value2) if not(res): - self.I2Cmask[RCUi]=1; + if self.disableI2ConError: self.I2Cmask[RCUi]=1; mask[RCUi*Step+Vari]=False; continue; value1[i0:i1]=value2 @@ -116,7 +117,7 @@ class i2c_array(i2c_dev): self.RCUi=RCUi; res=self.GetVarValue(devreg,width,bitoffset,value2) if not(res): - self.I2Cmask[RCUi]=1; + if self.disableI2ConError: self.I2Cmask[RCUi]=1; mask[RCUi*Step+Vari]=False; continue; value1[i0:i1]=value2 @@ -158,7 +159,7 @@ class i2c_array(i2c_dev): self.RCUi=RCUi; res=self.GetVarValue(devreg,8,0,value2) if not(res): - self.I2Cmask[RCUi]=False; + if self.disableI2ConError: self.I2Cmask[RCUi]=1; value1[RCUi]=value2[0] if devreg.get('store'): if mask[RCUi]: @@ -199,7 +200,7 @@ class i2c_array(i2c_dev): if not(callback(devreg['addr'],value2,reg=reg,read=1)): return False; if value2[0] is None: return False value[:]=value2[:]; - if devreg['store']: + if devreg.get('store'): storearray=self.getstorearray(devreg,len(value)); storearray[self.RCUi]=(value[0] if len(value)==1 else value[:]) logging.debug(str(("Store buffer",self.RCUi,storearray[self.RCUi]))) diff --git a/i2cserv/i2c_array2.py b/i2cserv/i2c_array2.py index ef71eb3661414a3d1683c74950bf9d82a83dbabf..8a515636fcc0713ca44d78e87a97f464305ea419 100644 --- a/i2cserv/i2c_array2.py +++ b/i2cserv/i2c_array2.py @@ -22,6 +22,7 @@ class i2c_array2(i2c_array): if len(sw2)>0: self.N*=len(sw2) if len(sw3)>0: self.N*=len(sw3) self.I2Cmask=[0]*self.N + self.disableI2ConError=False; self.sw1=[x for x in sw1 for i in range(self.N//len(sw1))] self.sw2=[x for x in sw2 for i in range(self.N//len(sw1)//len(sw2))]*len(sw1) self.sw3=[x for x in sw3]*len(sw1)*len(sw2) diff --git a/i2cserv/i2c_smbus.py b/i2cserv/i2c_smbus.py new file mode 100644 index 0000000000000000000000000000000000000000..a0b6efc03f2ac02a76936632b669500e9ad0ff9c --- /dev/null +++ b/i2cserv/i2c_smbus.py @@ -0,0 +1,60 @@ +import os +#if os.sys.platform is 'linux': +#import pylibi2c; +import smbus +import time +import logging +#read=0: write to register +#read=1: read from register +#read=2: write to register (common in group) +#read=3: wait ms second +from .hwdev import hwdev; + +class i2c_smbus(hwdev): + def __init__(self,config): + hwdev.__init__(self,config); +# self.I2Cdev='/dev/i2c-'+str(config['parameters'][0]); + self.bus_nr=config['parameters'][0] + logging.info("smbus driver on bus "+str(self.bus_nr)) + self.bus = smbus.SMBus(self.bus_nr) + self.I2Ccounter=0 + + def i2csetget(self,addr,data,reg=None,read=0): + try: +# if True: + if read==3: + time.sleep(data[0]/1000.) + return True +# bus=pylibi2c.I2CDevice(self.I2Cdev,addr) + length=len(data) + if read==1: + if not(reg is None): + data[:]=self.bus.read_i2c_block_data(addr, reg, length) + elif length==1: + data[0]=self.bus.read_byte(addr) + elif length==2: + d=self.bus.read_word(addr) + data[0]=(d>>8)&255; + data[1]=d&255; + else: + for i in range(length): + data[i]=self.bus.read_byte(addr) #Not vey efficient!! + logging.debug(str(("I2C get",addr,reg,data,read))) + else: + if not(reg is None): + self.bus.write_i2c_block_data(addr, reg, data) + elif length==1: + self.bus.write_byte(addr,data[0]) + elif length==2: + self.bus.write_word(addr,data[0]<<8+data[1]) + else: + for i in range(length): + self.bus.write_byte(addr,data[i]) #Not vey efficient!! + logging.debug(str(("I2C set",addr,reg,bytes(bytearray(data)),read))) + return True; + except: +# else: + logging.debug("I2C failed!") +# data[:]=0 + return False; + diff --git a/i2cserv/i2c_switch2.py b/i2cserv/i2c_switch2.py index e86b47cff9fa12144433358100be54c006260fb0..4600c0a1b8aaa05d0d76e9cd2916530510814fea 100644 --- a/i2cserv/i2c_switch2.py +++ b/i2cserv/i2c_switch2.py @@ -1,6 +1,6 @@ #3 switches of UNB2 import logging -from .i2c import i2c +from .i2c_smbus import i2c_smbus as i2c class i2c_switch2(i2c): def __init__(self,config): @@ -8,26 +8,28 @@ class i2c_switch2(i2c): self.SWaddr1=config['devreg'][0]['addr'] self.SWaddr2=config['devreg'][1]['addr'] self.SWaddr3=config['devreg'][2]['addr'] - self.channel1=0 - self.channel2=0 - self.channel3=0 + self.channel1=-1 + self.channel2=-1 + self.channel3=-1 logging.info("i2c switch2 at address %i,%i,%i" % (self.SWaddr1,self.SWaddr2,self.SWaddr3)) + logging.warn("APSCT switch disabled for testing") def SetSW1(self,channelbit): channel=1<<(channelbit) if (channel)==self.channel1: return True; logging.debug("SetChannel1=%i" % channelbit) self.channel1=channel - self.channel2=0 - self.channel3=0 - return self.i2csetget(self.SWaddr1,[channel]) + self.channel2=-1 + self.channel3=-1 + return True; #testing without APSCT switch +# return self.i2csetget(self.SWaddr1,[channel]) def SetSW2(self,channelbit): channel=1<<(channelbit) if (channel)==self.channel2: return True; logging.debug("SetChannel2=%i" % channelbit) self.channel2=channel - self.channel3=0 + self.channel3=-1 return self.i2csetget(self.SWaddr2,[channel]) def SetSW3(self,channelbit): diff --git a/i2cserv/i2cp.py b/i2cserv/i2cp.py new file mode 100644 index 0000000000000000000000000000000000000000..897d2e74538c68383728c61eeef2a206e55fdd92 --- /dev/null +++ b/i2cserv/i2cp.py @@ -0,0 +1,48 @@ +import os +#if os.sys.platform is 'linux': +#import pylibi2c; +import time +import logging +#read=0: write to register +#read=1: read from register +#read=2: write to register (common in group) +#read=3: wait ms second +from .hwdev import hwdev; + +from periphery import I2C; + +class i2cp(hwdev): + def __init__(self,config): + hwdev.__init__(self,config); + self.I2Cdev='/dev/i2c-'+str(config['parameters'][0]); + self.i2c=I2C(self.I2Cdev) + logging.info("i2c driver on port "+str(self.I2Cdev)) + self.I2Ccounter=0 + + def i2csetget(self,addr,data,reg=None,read=0): +# logging.debug(str(("I2C",addr,reg,data,read))) +# try: + if True: + if read==3: + time.sleep(data[0]/1000.) + return True + logging.debug(str(("I2C",addr,reg,data,read))) + + if read==1: + if not(reg is None): self.i2c.transfer(addr,[I2C.Message([reg])]) + msgs=[I2C.Message(data,read=True)] + self.i2c.transfer(addr,msgs) + data[:]=msgs[0].data + logging.debug(str(("I2C get",addr,reg,data,read))) + else: + if reg is None: + msgs=[I2C.Message(data)] + else: + msgs=[I2C.Message([reg]),I2C.Message(data)] + self.i2c.transfer(addr,msgs) + logging.debug(str(("I2C set",addr,reg,bytes(bytearray(data)),read))) + return True; +# except: + else: + return False; + diff --git a/opcuaserv/smbus_float.py b/opcuaserv/smbus_float.py new file mode 100644 index 0000000000000000000000000000000000000000..87bafce16c1290ede4a5a9bd3bd59cbb85bd07e3 --- /dev/null +++ b/opcuaserv/smbus_float.py @@ -0,0 +1,18 @@ +def smbus_2bytes_to_float(data): + expo = ((data & 0xf8)>>3) + if expo > 2**4: + expo = expo-2**5 + mantisse = ((data & 0x7)<<8) + ((data & 0xff00) >> 8) + output = mantisse * 2**expo + return output + +def smbus_2bytes_to_float_exp12(data,expo=-12): + mantisse = ((data & 0xff)<<8) + ((data & 0xff00) >> 8) +# print(data,mantisse,expo) + output = mantisse * 2**expo + return output + +def smbus_2bytes_to_float_exp13(data): + return smbus_2bytes_to_float_exp12(data,expo=-13) + + diff --git a/opcuaserv/yamlreader.py b/opcuaserv/yamlreader.py index e0c3873729830e1d99f4322c022398b43a012c06..6e0de63474b9cf6caa093dcb8f2440c2fbc05561 100644 --- a/opcuaserv/yamlreader.py +++ b/opcuaserv/yamlreader.py @@ -3,6 +3,7 @@ import struct import time from yamlconfig import * import logging +from .smbus_float import * def bytes2int(bts): x=0; for b in bts: @@ -31,7 +32,7 @@ class yamlreader(yamlconfig): self.OPCset(self.statusid,[1],[]) def AddVars(self,AddVarR,AddVarW): - self.monitorvar=AddVarW(self.yamlfile+"_monitor_rate_RW",60,None,None,None) + self.monitorvar=AddVarW(self.yamlfile+"_monitor_rate_RW",30,None,None,None) for v in self.conf['variables']: # print(v) dim1=v.get('dim',1); @@ -160,6 +161,7 @@ class yamlreader(yamlconfig): v=self.conf['variables'][id1]; dtype=v.get('dtype','integer'); width=(v.get('width',8)-1)//8+1 + endian=v.get('endian','>'); logging.debug(str(("OPCset",width,data))) if dtype=="boolean": data2=[d==1 for d in data]; @@ -168,13 +170,13 @@ class yamlreader(yamlconfig): if width<=1: data2=[d for d in data] elif width==2: - data2 = struct.unpack('>%sH' % (len(data)//2), data) + data2 = struct.unpack(endian+'%sH' % (len(data)//2), data) elif width==3: - data2 = [struct.unpack('>L' ,bytearray([0])+data[x*3:x*3+3])[0] for x in range(len(data)//3)] + data2 = [struct.unpack(endian+'L' ,bytearray([0])+data[x*3:x*3+3])[0] for x in range(len(data)//3)] elif width==4: - data2 = struct.unpack('>%sL' % (len(data)//4), data) + data2 = struct.unpack(endian+'%sL' % (len(data)//4), data) elif width==8: - data2 = struct.unpack('>%sQ' % (len(data)//8), data) + data2 = struct.unpack(endian+'%sQ' % (len(data)//8), data) else: logging.warn("OPCset"+v['name']+" unsupported width!"+str(width)) return; @@ -186,8 +188,12 @@ class yamlreader(yamlconfig): logging.warn("OPCset unsupported type"); return; if dtype=="double": - scale=float(v.get('scale',1.)) - data2=[(d*scale) for d in data2] + scale=v.get('scale',1.) + if scale in ["smbus_2bytes_to_float","smbus_2bytes_to_float_exp12","smbus_2bytes_to_float_exp13"]: + data2=[eval(scale)(d) for d in data2] + else: + scale=float(scale) + data2=[(d*scale) for d in data2] var1=v.get('OPCR') if not(var1): var1=v.get('OPCW') if not(var1): diff --git a/testUNB2.py b/testUNB2.py index a6e3530a84a32db8644c76e8258a8f93bae81b75..c3d0a58df1875e3e3a1ede61aef063c89b83a136 100644 --- a/testUNB2.py +++ b/testUNB2.py @@ -35,21 +35,42 @@ var1=RCU_conf.getvarid('UNB2_EEPROM_Unique_ID'); N=2; mask=[i<1 for i in range(N)]; print("mask=",mask); -RCU_I2C.readvar(var1,mask); - +#RCU_I2C.readvar(var1,mask); -var1=RCU_conf.getvarid('UNB2_DC_DC_48V_12V_VIN'); +points=["UNB2_POL_SWITCH_1V2_VOUT","UNB2_POL_SWITCH_1V2_TEMP"] +#points=UNB2_POL_SWITCH_1V2_IOUT,UNB2_POL_SWITCH_1V2_TEMP,UNB2_POL_SWITCH_PHY_VOUT,UNB2_POL_SWITCH_PHY_IOUT,UNB2_POL_SWITCH_PHY_TEMP] N=2; -mask=[i<2 for i in range(N)]; +mask=[i<1 for i in range(N)]; print("mask=",mask); -RCU_I2C.readvar(var1,mask); +for p in points: + var1=RCU_conf.getvarid(p); +# RCU_I2C.readvar(var1,mask); + +N=8; +mask=[i<4 for i in range(N)]; +print("mask=",mask); +var1=RCU_conf.getvarid("UNB2_FPGA_POL_CORE_IOUT") +#RCU_I2C.readvar(var1,mask); + -var1=RCU_conf.getvarid('UNB2_FPGA_QSFP_CAGE_LOS'); N=48; -mask=[i<8 for i in range(N)]; +mask=[i<15 for i in range(N)]; +print("mask=",mask); +var1=RCU_conf.getvarid("UNB2_FPGA_QSFP_CAGE_TEMP") +#RCU_I2C.readvar(var1,mask); + +N=16; +mask=[i<2 for i in range(N)]; print("mask=",mask); +var1=RCU_conf.getvarid("UNB2_FPGA_DDR4_SLOT_PART_NUMBER") RCU_I2C.readvar(var1,mask); +#var1=RCU_conf.getvarid('UNB2_FPGA_QSFP_CAGE_LOS'); +#N=48; +#mask=[i<8 for i in range(N)]; +#print("mask=",mask); +#RCU_I2C.readvar(var1,mask); + #var1=RCU_conf.getmethodid('RCU_on'); #N=32; #mask=[i<2 for i in range(N)];