Use mask on datarefs

This commit is contained in:
Marianpol 2020-06-25 17:12:32 +02:00
parent 21b7116116
commit e05ace7dfe
8 changed files with 78 additions and 9 deletions

View File

@ -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 ()

View File

@ -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"):

View File

@ -348,6 +348,33 @@ 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:
@ -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:

View File

@ -382,6 +382,7 @@ class ecu_command:
agcdRef = ""
codeMR = ""
type = ""
mask = ""
label = ""
prerequisite = ""
datarefs = []
@ -399,6 +400,10 @@ class ecu_command:
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")
defaultText = Label.item(0).getAttribute("defaultText")

View File

@ -347,6 +347,7 @@ class ecu_default:
code = ""
agcdRef = ""
codeMR = ""
mask = ""
label = ""
status = 0
datarefs = []
@ -366,6 +367,10 @@ class ecu_default:
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")
defaultText = Label.item(0).getAttribute("defaultText")

View File

@ -30,6 +30,7 @@ class ecu_identification:
name = ""
agcdRef = ""
codeMR = ""
mask = ""
label = ""
value = ""
type = ""
@ -43,6 +44,10 @@ class ecu_identification:
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")
defaultText = Label.item(0).getAttribute("defaultText")

View File

@ -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)
@ -93,6 +95,10 @@ class ecu_parameter:
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")
defaultText = Label.item(0).getAttribute("defaultText")

View File

@ -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)
@ -74,6 +76,10 @@ class ecu_state:
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")
defaultText = Label.item(0).getAttribute("defaultText")
@ -149,3 +155,17 @@ class ecu_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 = """<State name="{}" agcdRef="{}" codeMR="{}">
<Label codetext="51354" defaultText="FAULT FINDING VERSION"/></State>""".format(name, name, name)
mdom = xml.dom.minidom.parseString(tempStateXml)
mdocElem = mdom.documentElement
state = ecu_state( mdocElem, opt, tran )
state_list[state.name] = state