From e05ace7dfeb2745fd6ccb2132b63d45dc3206d87 Mon Sep 17 00:00:00 2001 From: Marianpol Date: Thu, 25 Jun 2020 17:12:32 +0200 Subject: [PATCH] Use mask on datarefs --- pyren/convert_db.py | 1 + pyren/mod_db_manager.py | 2 +- pyren/mod_ecu.py | 37 ++++++++++++++++++++++++++++----- pyren/mod_ecu_command.py | 5 +++++ pyren/mod_ecu_default.py | 5 +++++ pyren/mod_ecu_identification.py | 5 +++++ pyren/mod_ecu_parameter.py | 8 ++++++- pyren/mod_ecu_state.py | 24 +++++++++++++++++++-- 8 files changed, 78 insertions(+), 9 deletions(-) diff --git a/pyren/convert_db.py b/pyren/convert_db.py index 467be3c..1d3a9e8 100755 --- a/pyren/convert_db.py +++ b/pyren/convert_db.py @@ -56,6 +56,7 @@ if __name__ == "__main__": zf.writestr(os.path.join("Vehicles", "DFG", os.path.basename(vf)), str(data)) for vf in ecufiles: + vf = vf[:-4] + vf[-4:].lower() print "Processing file ", vf f = open (vf, "r") data = f.read () diff --git a/pyren/mod_db_manager.py b/pyren/mod_db_manager.py index 73756bb..73ef6be 100644 --- a/pyren/mod_db_manager.py +++ b/pyren/mod_db_manager.py @@ -75,7 +75,7 @@ def find_DBs(): mod_globals.opt_ddt = True #check cache version - verfilename = "./cache/version09r.txt" + verfilename = "./cache/version09r_fix#1.txt" if not os.path.isfile(verfilename): #if the cache has old version then we should clear it for root, dirs, files in os.walk("./cache"): diff --git a/pyren/mod_ecu.py b/pyren/mod_ecu.py index 652aefd..4ece561 100755 --- a/pyren/mod_ecu.py +++ b/pyren/mod_ecu.py @@ -348,7 +348,34 @@ class ECU: csvf = 0 - + mask = False + masks = [] + datarefsToRemove = [] + + for st in self.States: + if st.startswith('MAS'): + mask = True + get_state( self.States[st], self.Mnemonics, self.Services, self.elm, self.calc ) + if int(self.States[st].value): + masks.append(self.States[st].name) + + if mask: + for dr in datarefs: + if dr.type=='State': + if self.States[dr.name].mask and self.States[dr.name].mask not in masks: + datarefsToRemove.append(dr) + if dr.type=='Parameter': + if self.Parameters[dr.name].mask and self.Parameters[dr.name].mask not in masks: + datarefsToRemove.append(dr) + if dr.type=='Identification': + if self.Identifications[dr.name].mask and self.Identifications[dr.name].mask not in masks: + datarefsToRemove.append(dr) + if dr.type=='Command': + if self.Commands[dr.name].mask and self.Commands[dr.name].mask not in masks: + datarefsToRemove.append(dr) + for dr in datarefsToRemove: + datarefs.remove(dr) + #Check if datarefs contains any commands for dr in datarefs: if dr.type=='Command': @@ -363,10 +390,10 @@ class ECU: nparams = 0 for dr in datarefs: if dr.type=='State': - csvline += ";" + (self.States[dr.name].label + ":" if mod_globals.opt_csv_human else "") + self.States[dr.name].codeMR + csvline += ";" + self.States[dr.name].codeMR + (":" + self.States[dr.name].label if mod_globals.opt_csv_human else "") nparams += 1 if dr.type=='Parameter': - csvline += ";" + (self.Parameters[dr.name].label + ":" if mod_globals.opt_csv_human else "") + self.Parameters[dr.name].codeMR + csvline += ";" + self.Parameters[dr.name].codeMR + (":" +self.Parameters[dr.name].label if mod_globals.opt_csv_human else "") nparams += 1 if mod_globals.opt_usrkey: csvline += ";User events" csvline = pyren_encode(csvline) @@ -406,10 +433,10 @@ class ECU: if mod_globals.opt_csv and csvf!=0: csvline = csvline + "\n" - csvline = csvline.replace('.',',') + #csvline = csvline.replace('.',',') #csvline = csvline.replace(',','.') csvline = csvline.replace(';','\t') - csvf.write(pyren_decode(csvline).encode('cp1251') if mod_globals.opt_csv_human else csvline) + csvf.write(pyren_decode(csvline).encode('utf8') if mod_globals.opt_csv_human else csvline) #if mod_globals.os == 'nt' or mod_globals.os == 'android': # csvf.write(pyren_decode(csvline).encode('cp1251') if mod_globals.opt_csv_human else csvline) #else: diff --git a/pyren/mod_ecu_command.py b/pyren/mod_ecu_command.py index 042e89a..50fddf7 100755 --- a/pyren/mod_ecu_command.py +++ b/pyren/mod_ecu_command.py @@ -382,6 +382,7 @@ class ecu_command: agcdRef = "" codeMR = "" type = "" + mask = "" label = "" prerequisite = "" datarefs = [] @@ -398,6 +399,10 @@ class ecu_command: if not self.codeMR: self.codeMR = self.name self.type = co.getAttribute("type") + + Mask = co.getElementsByTagName("Mask") + if Mask: + self.mask = Mask.item(0).getAttribute("value") Label = co.getElementsByTagName("Label") codetext = Label.item(0).getAttribute("codetext") diff --git a/pyren/mod_ecu_default.py b/pyren/mod_ecu_default.py index a6058cd..1e4a9d6 100644 --- a/pyren/mod_ecu_default.py +++ b/pyren/mod_ecu_default.py @@ -347,6 +347,7 @@ class ecu_default: code = "" agcdRef = "" codeMR = "" + mask = "" label = "" status = 0 datarefs = [] @@ -365,6 +366,10 @@ class ecu_default: self.name = df.getAttribute("name") self.agcdRef = df.getAttribute("agcdRef") self.codeMR = df.getAttribute("codeMR") + + Mask = df.getElementsByTagName("Mask") + if Mask: + self.mask = Mask.item(0).getAttribute("value") Label = df.getElementsByTagName("Label") codetext = Label.item(0).getAttribute("codetext") diff --git a/pyren/mod_ecu_identification.py b/pyren/mod_ecu_identification.py index 6d4e512..522d0b0 100755 --- a/pyren/mod_ecu_identification.py +++ b/pyren/mod_ecu_identification.py @@ -30,6 +30,7 @@ class ecu_identification: name = "" agcdRef = "" codeMR = "" + mask = "" label = "" value = "" type = "" @@ -42,6 +43,10 @@ class ecu_identification: self.name = st.getAttribute("name") self.agcdRef = st.getAttribute("agcdRef") self.codeMR = st.getAttribute("codeMR") + + Mask = st.getElementsByTagName("Mask") + if Mask: + self.mask = Mask.item(0).getAttribute("value") Label = st.getElementsByTagName("Label") codetext = Label.item(0).getAttribute("codetext") diff --git a/pyren/mod_ecu_parameter.py b/pyren/mod_ecu_parameter.py index 3274b2b..b518082 100755 --- a/pyren/mod_ecu_parameter.py +++ b/pyren/mod_ecu_parameter.py @@ -52,6 +52,7 @@ class ecu_parameter: name = "" agcdRef = "" codeMR = "" + mask = "" label = "" unit = "" type = "" @@ -72,6 +73,7 @@ class ecu_parameter: name = %s agcdRef = %s codeMR = %s + mask = %s label = %s unit = %s type = %s @@ -83,7 +85,7 @@ class ecu_parameter: helps = %s computation = %s mnemolist = %s - ''' % (self.name, self.agcdRef, self.codeMR, self.label, self.unit, self.type, + ''' % (self.name, self.agcdRef, self.codeMR, self.mask, self.label, self.unit, self.type, self.min, self.value, self.max, self.format, str(self.domains), hlps, self.computation, str(self.mnemolist)) return pyren_encode(out) @@ -92,6 +94,10 @@ class ecu_parameter: self.name = pr.getAttribute("name") self.agcdRef = pr.getAttribute("agcdRef") self.codeMR = pr.getAttribute("codeMR") + + Mask = pr.getElementsByTagName("Mask") + if Mask: + self.mask = Mask.item(0).getAttribute("value") Label = pr.getElementsByTagName("Label") codetext = Label.item(0).getAttribute("codetext") diff --git a/pyren/mod_ecu_state.py b/pyren/mod_ecu_state.py index 06022a5..3688328 100755 --- a/pyren/mod_ecu_state.py +++ b/pyren/mod_ecu_state.py @@ -21,7 +21,7 @@ def get_state( st, mn, se, elm, calc, dataids = {} ): if str(tmp_val).encode("utf-8") in st.caracter.keys(): st.value = st.caracter[str(tmp_val).encode("utf-8")] else: - st.value = "" + st.value = str(tmp_val).encode("utf-8") csv_val = unicode(st.value) if mod_globals.opt_csv_human else tmp_val if mod_globals.os=='android': @@ -36,6 +36,7 @@ class ecu_state: name = "" agcdRef = "" codeMR = "" + mask = "" label = "" value = "" type = "" @@ -57,6 +58,7 @@ class ecu_state: name = %s agcdRef = %s codeMR = %s + mask = %s label = %s value = %s type = %s @@ -65,7 +67,7 @@ class ecu_state: computation = %s mnemolist = %s ''' % ( - self.name, self.agcdRef, self.codeMR, self.label, self.value, self.type, + self.name, self.agcdRef, self.codeMR, self.mask, self.label, self.value, self.type, hlps, chrc, self.computation, self.mnemolist) return pyren_encode(out) @@ -73,6 +75,10 @@ class ecu_state: self.name = st.getAttribute("name") self.agcdRef = st.getAttribute("agcdRef") self.codeMR = st.getAttribute("codeMR") + + Mask = st.getElementsByTagName("Mask") + if Mask: + self.mask = Mask.item(0).getAttribute("value") Label = st.getElementsByTagName("Label") codetext = Label.item(0).getAttribute("codetext") @@ -148,4 +154,18 @@ class ecu_states: for st in States: state = ecu_state( st, opt, tran ) state_list[state.name] = state + + Masks = mdoc.getElementsByTagName("MaskList") + if Masks: + for ms in Masks: + DataRef = ms.getElementsByTagName("DataRef") + for dr in DataRef: + if dr.getAttribute("type") == 'State': + name = dr.getAttribute("name") + tempStateXml = """ + """.format(name, name, name) + mdom = xml.dom.minidom.parseString(tempStateXml) + mdocElem = mdom.documentElement + state = ecu_state( mdocElem, opt, tran ) + state_list[state.name] = state