186 lines
5.6 KiB
Python
Executable File
186 lines
5.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
import sys, os
|
|
import operator
|
|
|
|
import xml.dom.minidom
|
|
|
|
os.chdir(os.path.dirname(os.path.realpath(sys.argv[0])))
|
|
|
|
import mod_globals
|
|
from mod_utils import *
|
|
|
|
import xml.etree.ElementTree as et
|
|
|
|
class DataItem:
|
|
Name = ""
|
|
Endian = ""
|
|
FirstByte = 1
|
|
BitOffset = 0
|
|
Ref = False
|
|
|
|
def __str__(self):
|
|
out = 'Endian = %-5s FirstByte = %2d BitOffset = %2d Ref = %1d Name = %s' % (self.Endian,
|
|
self.FirstByte, self.BitOffset, self.Ref, self.Name)
|
|
return pyren_encode(out)
|
|
|
|
def __init__(self, di, defaultEndian ):
|
|
self.Name = di.attrib["Name"]
|
|
|
|
if "Endian" in list(di.attrib.keys()):
|
|
self.Endian = di.attrib["Endian"]
|
|
else:
|
|
self.Endian=defaultEndian
|
|
|
|
if "FirstByte" in list(di.attrib.keys ()):
|
|
self.FirstByte = int(di.attrib["FirstByte"])
|
|
|
|
if "BitOffset" in list(di.attrib.keys ()):
|
|
self.BitOffset = int(di.attrib["BitOffset"])
|
|
|
|
if "Ref" in list(di.attrib.keys ()):
|
|
Ref = di.attrib["Ref"]
|
|
if Ref=='1': self.Ref=True
|
|
else: self.Ref=False
|
|
else:
|
|
self.Ref = False
|
|
|
|
class decu_request:
|
|
|
|
Name = ""
|
|
DossierMaintenabilite = None
|
|
ManuelSend = None
|
|
DenyAccess = []
|
|
SentBytes = ""
|
|
SentDI = {}
|
|
VariableLength = False
|
|
ReceivedDI = {}
|
|
MinBytes = 1
|
|
ShiftBytesCount = 0
|
|
ReplyBytes = ""
|
|
|
|
def __str__(self):
|
|
|
|
sd = ''
|
|
for s in sorted(list(self.SentDI.values()), key=operator.attrgetter("FirstByte","BitOffset")):
|
|
sd = sd + '\n'+str(s)
|
|
sd = pyren_decode(sd)
|
|
|
|
rd = ''
|
|
for r in sorted(list(self.ReceivedDI.values()), key=operator.attrgetter("FirstByte","BitOffset")):
|
|
rd = rd + '\n'+str(r)
|
|
rd = pyren_decode(rd)
|
|
|
|
out = '''
|
|
Name = %s
|
|
DossierMaintenabilite = %d
|
|
ManuelSend = %d
|
|
DenyAccess = %s
|
|
SentBytes = %s
|
|
SentDI = %s
|
|
VariableLength = %d
|
|
ReceivedDI = %s
|
|
MinBytes = %d
|
|
ShiftBytesCount = %d
|
|
ReplyBytes = %s
|
|
''' % (self.Name, self.DossierMaintenabilite, self.ManuelSend, self.DenyAccess, self.SentBytes,
|
|
sd, self.VariableLength, rd, self.MinBytes, self.ShiftBytesCount, self.ReplyBytes)
|
|
return pyren_encode(out)
|
|
|
|
def __init__(self, rq, defaultEndian ):
|
|
|
|
ns = {'ns0': 'http://www-diag.renault.com/2002/ECU',
|
|
'ns1': 'http://www-diag.renault.com/2002/screens'}
|
|
|
|
self.Name = rq.attrib["Name"]
|
|
|
|
self.DossierMaintenabilite = False
|
|
DossierMaintenabilite = rq.findall("ns0:DossierMaintenabilite",ns) #[0]
|
|
if DossierMaintenabilite: self.DossierMaintenabilite=True
|
|
|
|
self.ManuelSend = False
|
|
ManuelSend = rq.findall("ns0:ManuelSend",ns)
|
|
if ManuelSend: self.ManuelSend=True
|
|
|
|
self.DenyAccess = []
|
|
DenyAccess = rq.findall("ns0:DenyAccess",ns) #[0]
|
|
if DenyAccess:
|
|
NoSDS = DenyAccess[0].findall("ns0:NoSDS",ns)
|
|
if NoSDS: self.DenyAccess.append('NoSDS')
|
|
|
|
Supplier = DenyAccess[0].findall("ns0:Supplier",ns)
|
|
if Supplier: self.DenyAccess.append('Supplier')
|
|
|
|
Engineering = DenyAccess[0].findall("ns0:Engineering",ns)
|
|
if Engineering: self.DenyAccess.append('Engineering')
|
|
|
|
Plant = DenyAccess[0].findall("ns0:Plant",ns)
|
|
if Plant: self.DenyAccess.append('Plant')
|
|
|
|
AfterSales = DenyAccess[0].findall("ns0:AfterSales",ns)
|
|
if AfterSales: self.DenyAccess.append('AfterSales')
|
|
|
|
|
|
Sent = rq.findall("ns0:Sent",ns) #[0]
|
|
if len(Sent):
|
|
self.SentBytes = ""
|
|
SentBytes = Sent[0].findall("ns0:SentBytes",ns)
|
|
if len(SentBytes): self.SentBytes = SentBytes[0].text #[0].text
|
|
|
|
self.VariableLength = False
|
|
VariableLength = Sent[0].findall("ns0:VariableLength",ns)
|
|
if len(VariableLength): self.VariableLength=True
|
|
|
|
self.SentDI = {}
|
|
DataItems = Sent[0].findall("ns0:DataItem",ns)
|
|
if DataItems:
|
|
for di in DataItems:
|
|
dataitem = DataItem( di, defaultEndian )
|
|
self.SentDI[dataitem.Name]=dataitem
|
|
|
|
Received = rq.findall("ns0:Received",ns) #[0]
|
|
if len(Received):
|
|
self.MinBytes = 0
|
|
MinBytes = Received[0].attrib["MinBytes"]
|
|
if MinBytes: self.MinBytes = int(MinBytes)
|
|
|
|
self.ShiftBytesCount = 0
|
|
ShiftBytesCount = Received[0].findall("ns0:ShiftBytesCount",ns)
|
|
if len(ShiftBytesCount): self.ShiftBytesCount = int(ShiftBytesCount[0].text) #[0].text)
|
|
|
|
self.ReplyBytes = ""
|
|
ReplyBytes = Received[0].findall("ns0:ReplyBytes",ns)
|
|
if len(ReplyBytes): self.ReplyBytes = ReplyBytes[0].text #[0].text
|
|
|
|
self.ReceivedDI = {}
|
|
DataItems = Received[0].findall("ns0:DataItem",ns)
|
|
if len(DataItems):
|
|
for di in DataItems:
|
|
dataitem = DataItem( di, defaultEndian )
|
|
self.ReceivedDI[dataitem.Name]=dataitem
|
|
|
|
class decu_requests:
|
|
def __init__(self, requiest_list, xdoc):
|
|
|
|
ns = {'ns0': 'http://www-diag.renault.com/2002/ECU',
|
|
'ns1': 'http://www-diag.renault.com/2002/screens'}
|
|
|
|
#try to find default endian
|
|
tmpdoc = xdoc.findall('ns0:Target/ns0:Requests', ns) #getElementsByTagName("Requests")
|
|
defaultEndian = ''
|
|
|
|
if tmpdoc and ('Endian' in list(tmpdoc[0].attrib.keys())):
|
|
defaultEndian = tmpdoc[0].attrib["Endian"]
|
|
else:
|
|
defaultEndian = "Big"
|
|
|
|
requests = tmpdoc[0].findall("ns0:Request", ns)
|
|
if requests:
|
|
for rq in requests:
|
|
request = decu_request( rq, defaultEndian )
|
|
requiest_list[request.Name] = request
|
|
#print request
|
|
|