diff --git a/bin/recvtr2 b/bin/recvtr2 index 0469cecb2de9deefbe5098a9d41b7992d173fc67..471721afd670a4837318f862fee0ec17834b40b6 100755 --- a/bin/recvtr2 +++ b/bin/recvtr2 @@ -9,9 +9,10 @@ then conffile="RECVTR_LB" fi +#CCD should not run if [ $lmp_id -eq 10 ] || [ $lmp_id -eq 21 ] then - conffile="CCDTR" + conffile="None" fi echo $lmp_id,$conffile diff --git a/pypcc/config/CCDTR_EEPROM.yaml b/pypcc/config/CCDTR_EEPROM.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b5e902ef859ffa9f680074a26a764f6438afee5d --- /dev/null +++ b/pypcc/config/CCDTR_EEPROM.yaml @@ -0,0 +1,89 @@ +version: "1.0" +description: "1234" + +drivers: + - name: I2C + type: i2c + parameters: [1] #I2C port number + - name: I2C_CLK + type: i2c_dev #I2C devices + parent: I2C + status: CCDTR_I2C_error + +#This is the I2C devices in the RCU +device_registers: + - name: ROM + description: 24AA02UIDT + address: 0x50 + driver: I2C_CLK + registers: + - name: ID + description: Random + address: 0xfc + - name: Version + description: Set in production + address: 0 + - name: Serial + address: 0x20 + + + +variables: + - name: CCDTR_I2C_error + description: 0=good, >0 indicates an I2C communication error to CCD + driver: I2C_CLK + rw: ro #server RW variable, not linked to IO + dtype: uint8 + + - name: CCDTR_monitor_rate + description: Monitor rate in seconds + rw: variable + dtype: uint8 + + - name: CCDTR_translator_busy + description: True when I2C lines are busy + rw: ro #server variable, not linked to IO + dtype: boolean + dim: 1 + + - name: CCD_PCB_ID + description: Unique PCB ID + driver: I2C_CLK + devreg: ROM.ID + width: 32 + rw: ro + dtype: uint32 + + - name: CCD_PCB_version + description: PCB version number + driver: I2C_CLK + devreg: ROM.Version + width: 0x80 #16 characters + rw: ro + dtype: string + + - name: CCD_PCB_number + description: PCB number + driver: I2C_CLK + devreg: ROM.Serial + width: 0x80 #16 characters + rw: ro + dtype: string + + + +methods: + - name: CCDTR_Init #Called after startup to load. Should have all stored registers + driver: I2C_CLK + debug: True + instructions: + - CCDTR_I2C_error : 0 + - CCDTR_Update: 0 + + - name: CCDTR_Update + driver: I2C_CLK + debug: True + instructions: + - CCD_PCB_ID : Update + - CCD_PCB_version : Update + - CCD_PCB_number : Update diff --git a/pypcc/testing/check_ip.py b/pypcc/testing/check_ip.py index a0b22090afd8eec2eb7993e36dbcca470826a0ba..9d1c268080ee45d07d3ddda2b09da8e125227e33 100644 --- a/pypcc/testing/check_ip.py +++ b/pypcc/testing/check_ip.py @@ -1,5 +1,6 @@ IP_CCD= '10.99.250.90' IP_APSCT_TEST='10.99.100.100' +IP_UNKNOWN ='10.99.250.99' #IP_APSCT_subrack='10.99.x.100' import logging @@ -62,13 +63,16 @@ def check_ip(): ID=get_LMP_ID() logging.info("LMP id="+hex(ID)) - ip_new=IP_CCD #default (CCD) + ip_new=IP_UNKNOWN #default (CCD) if ID==0x3F: #APSCT in test setup ip_new=IP_APSCT_TEST logging.info("APSCT test setup, ip=%s"%ip_new) if ID in [0,1,2,3]: #APSCT in subrack ip_new='10.99.%i.100'%ID logging.info("APSCT subrack, ip=%s"%ip_new) + if ID in [21,10]: + ip_new=IP_CCD + logging.info("CCD detected, ip=%s"%ip_new) if (ip_new!=ip_current) and not(ip_current is None): logging.warning("Change IP to %s"%ip_new) diff --git a/pypcc/testing/pitr_main.py b/pypcc/testing/pitr_main.py index dbad246e30260ee83cfe99c284b4cff5ed475ed8..5aa6f657b3688162670dc21c8fd64f81e7fb3df8 100644 --- a/pypcc/testing/pitr_main.py +++ b/pypcc/testing/pitr_main.py @@ -4,12 +4,12 @@ import subprocess import signal import logging from queue import Queue -#try: -from .check_ip import check_ip -from .setEEPROM import SetEEPROM -#except: -#from check_ip import check_ip -#from setEEPROM import SetEEPROM +try: + from .check_ip import check_ip + from .setEEPROM import SetEEPROM +except: + from check_ip import check_ip + from setEEPROM import SetEEPROM port=4899 @@ -66,6 +66,7 @@ def start_translator(ObjectId,tr_action): if True: pcb_type='' + conffile='' i2c_nr=-1 i2c1=subprocess.run(['i2cdetect','-y','1'],stdout=subprocess.PIPE).stdout.decode() i2c5=subprocess.run(['i2cdetect','-y','5'],stdout=subprocess.PIPE).stdout.decode() @@ -74,9 +75,11 @@ if True: if i2c5[1]=='50': logging.info("EEPROM detected on I2C 5") pcb_type='APSCT' + conffile='APSCTTR' i2c_nr=5 elif i2c1[1]=='50': logging.info("EEPROM detected on I2C 1") + conffile='CCDTR_EEPROM' pcb_type='CCD' i2c_nr=1 @@ -107,10 +110,10 @@ def testEEPROMcode(value): def EEPROM_code_changed(): # try: EEPROM_ID.set_value(byte2int(get_i2c('0xfc',4))) - value=SetEEPROM("APSCTTR","APSCT_PCB_number",None); + value=SetEEPROM(conffile,pcb_type+"_PCB_number",None); EEPROM_number.set_value(value) EEPROM_number_new.set_value(value) - value=SetEEPROM("APSCTTR","APSCT_PCB_version",None); + value=SetEEPROM(conffile,pcb_type+"_PCB_version",None); EEPROM_version.set_value(value) EEPROM_version_new.set_value(value) # except: @@ -125,6 +128,7 @@ def update_temperature(): if True: # global server,running,PCCobj,DEBUGobj,idx,sub; server = Server() + logging.getLogger('asyncua').setLevel(logging.ERROR) server.set_endpoint("opc.tcp://0.0.0.0:{}/".format(port)) idx = server.register_namespace("http://lofar.eu") @@ -184,11 +188,11 @@ if True: EEPROM_code_changed() elif (nodeid==EEPROM_number_new.nodeid.Identifier): if EEPROM_number_new.get_value()!=EEPROM_number.get_value(): - newvalue=SetEEPROM("APSCTTR","APSCT_PCB_number",EEPROM_number_new.get_value()); + newvalue=SetEEPROM(conffile,pcb_type+"_PCB_number",EEPROM_number_new.get_value()); EEPROM_number.set_value(newvalue) elif (nodeid==EEPROM_version_new.nodeid.Identifier): if EEPROM_version_new.get_value()!=EEPROM_version.get_value(): - newvalue=SetEEPROM("APSCTTR","APSCT_PCB_version",EEPROM_version_new.get_value()); + newvalue=SetEEPROM(conffile,pcb_type+"_PCB_version",EEPROM_version_new.get_value()); EEPROM_version.set_value(newvalue) # sleep(10) #P1.GetVarNames("",AddVar); diff --git a/pypcc/testing/setEEPROM.py b/pypcc/testing/setEEPROM.py index 6fc18e19799e71997e8cf943784a6ee04c43a7cf..c196178d0c010b6b26a6211e29105873cfe8f2e3 100644 --- a/pypcc/testing/setEEPROM.py +++ b/pypcc/testing/setEEPROM.py @@ -106,7 +106,13 @@ def SetEEPROM(configfile,varSet,value): if __name__=="__main__": logging.basicConfig(level="INFO",format='%(asctime)s [%(levelname)-8s,%(filename)-20s:%(lineno)-3d] %(message)s') - newval=SetEEPROM("APSCTTR","APSCT_PCB_version","123") - print("new value=",newval) - newval=SetEEPROM("APSCTTR","APSCT_PCB_version","123") - print("new value=",newval) + if False: + newval=SetEEPROM("APSCTTR","APSCT_PCB_version","123") + print("new value=",newval) + newval=SetEEPROM("APSCTTR","APSCT_PCB_version","123") + print("new value=",newval) + else: + newval=SetEEPROM("CCDTR","CCD_PCB_version","123") + print("new value=",newval) + newval=SetEEPROM("CCDTR","CCD_PCB_version","123") + print("new value=",newval)