# CII 5.0 RC 1 ## Features and Fixes ### CII Logger Names (ECII-1011) All logger names of CII were changed to be systematic and hierarchical, e.g. to enable debug logs for MAL OPCUA, use: `log4cplus.loggers.cii.mal.opcua=DEBUG` The list of new names can be found at: https://gitlab.eso.org/ecos/eltsw-docs/-/wikis/KnowledgeBase/CII#adjust-cii-log-levels-log ### Log Viewer - Fix: user-applied column sizes are not respected, auto-resizes back (ECII-1115) - Fix: after pressing the clear button, no logs are displayed any more (ECII-1130) #### Column Names (ECII-1040) We aligned the naming in log gui and log files. Whitespace and special chars were removed from all column names: (e.g. Log ID -> LogID, Error Date/Time -> ErrorDateTime, etc.) The following columns were renamed: - Level -> LogType - Host -> HostName - Code Reference -> Cref This change affects code if it uses the log viewer's "visible columns" Qt property. It also affects end-users when writing filter expressions into the gui's Query field ### MAL - Fix: bad_function_call core dump. Tentative fix, to be confirmed (ELSV-963) - Fix: segfault in Python MAL (ECII-1179) - DDS ICD strings are no longer automatically limited to 255 chars (ECII-1037, ECII-1024) #### ZPB Python MAL API no longer applies opaqueness to arrays of structs (ECII-1050) We are no longer generating "holder" classes to represent arrays Example For an ICD like this: ``` ``` CII 4 generated the following types: - MyStruct - VectorMyStruct which were used like this: ``` mystruct1 = mal.createDataEntity(MyStruct); mystruct1.setVal(True) mystruct2 = mal.createDataEntity(MyStruct); mystruct2.setVal(False) mystructs = VectorMyStruct() mystructs.append(mystruct1) mystructs.append(mystruct2) returnval = myinterface.Reverse (mystructs) isinstance (returnval, list) # False, it is a VectorMyStruct print (returnval[0].getVal()) # False print (returnval[1].getVal()) # True ``` CII 5 generates only: - MyStruct and uses native python lists: ``` mystruct1 = mal.createDataEntity(MyStruct); mystruct1.setVal(True) mystruct2 = mal.createDataEntity(MyStruct); mystruct2.setVal(False) mystructs = [] # <--- use plain python list mystructs.append(mystruct1) mystructs.append(mystruct2) returnval = myinterface.Reverse (mystructs) isinstance (returnval, list) # True print (returnval[0].getVal()) # False print (returnval[1].getVal()) # True ``` #### Python MAL QoS lists We now use plain lists instead of a custom list type. ``` THREE_SECONDS = datetime.timedelta(0, 3) qos1 = elt.pymal.rr.qos.ConnectionTime(THREE_SECONDS) qos2 = elt.pymal.rr.qos.ReplyTime(THREE_SECONDS) qoslist = elt.pymal.RrQoSlist (qos1, qos2) <-- no longer accepted by getClient qoslist = [ qos1, qos2 ] <-- use this instead with factory.getClient(uri, RobotControlSync, qos=qoslist) as robot: ``` ### Config(-NG) - Fix: file inclusion from absolute path fails (ECII-1060) ## General - MAL internal clean-ups (1072, 1152, 1155, 1159, 1162) - SRV internal clean-up (967, 972, 1132, 1133, 1136, 1154, 1163, 1168, 1180, 1181, 1182, 1200) ## Knowledge Base - Getting More Logs [MAL Log] https://gitlab.eso.org/ecos/eltsw-docs/-/wikis/KnowledgeBase/CII#getting-more-logs-mal-log - Less or More Logs [OLDB Log] https://gitlab.eso.org/ecos/eltsw-docs/-/wikis/KnowledgeBase/CII#less-or-more-logs-oldb-log - Adjust CII Log Levels [Log] https://gitlab.eso.org/ecos/eltsw-docs/-/wikis/KnowledgeBase/CII#adjust-cii-log-levels-log