示例#1
0
    def startElement(self, name, attrs):

        pid = None
        desc = None
        target = 0
        units = None
        expr = None
        value_format = None
        address = None

        byte_index = PMCUParameter.CU_INVALID_BYTE_INDEX()
        bit_index = PMCUParameter.CU_INVALID_BIT_INDEX()

        if name == "protocol":

            for (k, v) in attrs.items():
                if k == "id":
                    print 'protocol ' + v
                    self._proto_id = v

        if self._proto_id != "SSM":
            return

        if name == "parameter":

            for (k, v) in attrs.items():
                if k == "id":
                    pid = v
                if k == "name":
                    name = v
                if k == "desc":
                    desc = v
                if k == "ecubyteindex":
                    byte_index = int(v)
                if k == "ecubit":
                    bit_index = int(v)
                if k == "target":
                    target = int(v)

            if byte_index is not PMCUParameter.CU_INVALID_BYTE_INDEX(
            ) and bit_index is not PMCUParameter.CU_INVALID_BIT_INDEX():
                self._parameter = PMCUStandardParameter(
                    pid, name, desc, byte_index, bit_index, target)
            elif byte_index is PMCUParameter.CU_INVALID_BYTE_INDEX(
            ) and bit_index is PMCUParameter.CU_INVALID_BIT_INDEX():
                self._parameter = PMCUCalculatedParameter(
                    pid, name, desc, target)
            else:
                raise Exception

        elif name == "ecuparam":
            for (k, v) in attrs.items():
                if k == "id":
                    pid = v
                if k == "name":
                    name = v
                if k == "desc":
                    desc = v
                if k == "target":
                    target = int(v)

            self._parameter = PMCUFixedAddressParameter(
                pid, name, desc, target)

        elif name == "switch":
            for (k, v) in attrs.items():
                if k == "id":
                    pid = v
                if k == "name":
                    name = v
                if k == "desc":
                    desc = v
                if k == "byte":
                    address = int(v, 16)
                if k == "ecubyteindex":
                    byte_index = int(v)
                if k == "bit":
                    bit_index = int(v)
                if k == "target":
                    target = int(v)

            self._parameter = PMCUSwitchParameter(pid, name, desc, address,
                                                  byte_index, bit_index,
                                                  target)

        elif name == "address":
            self._address_length = 1
            for (k, v) in attrs.items():
                if k == "length":
                    self._address_length = int(v)

        elif name == "conversion":
            for (k, v) in attrs.items():
                if k == "units":
                    units = v
                if k == "expr":
                    expr = v
                if k == "format":
                    value_format = v

            self._parameter.add_conversion(
                PMCUConversion(units, expr, value_format))

        elif name == "ecu":
            for (k, v) in attrs.items():
                if k == "id":
                    self._ecu_ids = v.split(",")

        elif name == "ref":
            for (k, v) in attrs.items():
                if k == "parameter":
                    self._parameter.add_dependency(v)
示例#2
0
    def startElement(self, name, attrs):

        pid = None
        desc = None
        target = 0
        units = None
        expr = None
        value_format = None
        address = None

        byte_index = PMCUParameter.CU_INVALID_BYTE_INDEX()
        bit_index = PMCUParameter.CU_INVALID_BIT_INDEX()

        if name == "protocol":

            for (k, v) in attrs.items():
                if k == "id":
                    print 'protocol ' + v
                    self._proto_id = v

        if self._proto_id != "SSM":
            return

        if name == "parameter":

            for (k, v) in attrs.items():
                if k == "id":
                    pid = v
                if k == "name":
                    name = v
                if k == "desc":
                    desc = v
                if k == "ecubyteindex":
                    byte_index = int(v)
                if k == "ecubit":
                    bit_index = int(v)
                if k == "target":
                    target = int(v)

            if byte_index is not PMCUParameter.CU_INVALID_BYTE_INDEX() and bit_index is not PMCUParameter.CU_INVALID_BIT_INDEX():
                self._parameter = PMCUStandardParameter(pid, name, desc, byte_index, bit_index, target)
            elif byte_index is PMCUParameter.CU_INVALID_BYTE_INDEX() and bit_index is PMCUParameter.CU_INVALID_BIT_INDEX():
                self._parameter = PMCUCalculatedParameter(pid, name, desc, target)
            else:
                raise Exception

        elif name == "ecuparam":
            for (k, v) in attrs.items():
                if k == "id":
                    pid = v
                if k == "name":
                    name = v
                if k == "desc":
                    desc = v
                if k == "target":
                    target = int(v)

            self._parameter = PMCUFixedAddressParameter(pid, name, desc, target)

        elif name == "switch":
            for (k, v) in attrs.items():
                if k == "id":
                    pid = v
                if k == "name":
                    name = v
                if k == "desc":
                    desc = v
                if k == "byte":
                    address = int(v, 16)
                if k == "ecubyteindex":
                    byte_index = int(v)
                if k == "bit":
                    bit_index = int(v)
                if k == "target":
                    target = int(v)

            self._parameter = PMCUSwitchParameter(pid, name, desc, address, byte_index, bit_index, target)

        elif name == "address":
            self._address_length = 1
            for (k, v) in attrs.items():
                if k == "length":
                    self._address_length = int(v)

        elif name == "conversion":
            for (k, v) in attrs.items():
                if k == "units":
                    units = v
                if k == "expr":
                    expr = v
                if k == "format":
                    value_format = v

            self._parameter.add_conversion(PMCUConversion(units, expr, value_format))

        elif name == "ecu":
            for (k, v) in attrs.items():
                if k == "id":
                    self._ecu_ids = v.split(",")

        elif name == "ref":
            for (k, v) in attrs.items():
                if k == "parameter":
                    self._parameter.add_dependency(v)
示例#3
0
class PMXmlParser(xml.sax.ContentHandler):
    def __init__(self):
        xml.sax.ContentHandler.__init__(self)
        self._message = ''
        self._log_id = 0

        self._element_no = 0

        self._contexts = None

        self._parameter = None
        self._parameters = set()

        self._characters = ''
        self._ecu_ids = None
        self._address_length = 0
        self._proto_id = ''

    def parse(self, file_name):
        self._message = 'Parsing XML data'
        self._log_id = PM.log(self._message)

        file_path = os.path.join("data", file_name)
        source = open(file_path)
        xml.sax.parse(source, self)
        self.log_progress()
        PM.log(self._message + " [DONE]")

        return self._parameters

    def startElement(self, name, attrs):

        pid = None
        desc = None
        target = 0
        units = None
        expr = None
        value_format = None
        address = None

        byte_index = PMCUParameter.CU_INVALID_BYTE_INDEX()
        bit_index = PMCUParameter.CU_INVALID_BIT_INDEX()

        if name == "protocol":

            for (k, v) in attrs.items():
                if k == "id":
                    print 'protocol ' + v
                    self._proto_id = v

        if self._proto_id != "SSM":
            return

        if name == "parameter":

            for (k, v) in attrs.items():
                if k == "id":
                    pid = v
                if k == "name":
                    name = v
                if k == "desc":
                    desc = v
                if k == "ecubyteindex":
                    byte_index = int(v)
                if k == "ecubit":
                    bit_index = int(v)
                if k == "target":
                    target = int(v)

            if byte_index is not PMCUParameter.CU_INVALID_BYTE_INDEX(
            ) and bit_index is not PMCUParameter.CU_INVALID_BIT_INDEX():
                self._parameter = PMCUStandardParameter(
                    pid, name, desc, byte_index, bit_index, target)
            elif byte_index is PMCUParameter.CU_INVALID_BYTE_INDEX(
            ) and bit_index is PMCUParameter.CU_INVALID_BIT_INDEX():
                self._parameter = PMCUCalculatedParameter(
                    pid, name, desc, target)
            else:
                raise Exception

        elif name == "ecuparam":
            for (k, v) in attrs.items():
                if k == "id":
                    pid = v
                if k == "name":
                    name = v
                if k == "desc":
                    desc = v
                if k == "target":
                    target = int(v)

            self._parameter = PMCUFixedAddressParameter(
                pid, name, desc, target)

        elif name == "switch":
            for (k, v) in attrs.items():
                if k == "id":
                    pid = v
                if k == "name":
                    name = v
                if k == "desc":
                    desc = v
                if k == "byte":
                    address = int(v, 16)
                if k == "ecubyteindex":
                    byte_index = int(v)
                if k == "bit":
                    bit_index = int(v)
                if k == "target":
                    target = int(v)

            self._parameter = PMCUSwitchParameter(pid, name, desc, address,
                                                  byte_index, bit_index,
                                                  target)

        elif name == "address":
            self._address_length = 1
            for (k, v) in attrs.items():
                if k == "length":
                    self._address_length = int(v)

        elif name == "conversion":
            for (k, v) in attrs.items():
                if k == "units":
                    units = v
                if k == "expr":
                    expr = v
                if k == "format":
                    value_format = v

            self._parameter.add_conversion(
                PMCUConversion(units, expr, value_format))

        elif name == "ecu":
            for (k, v) in attrs.items():
                if k == "id":
                    self._ecu_ids = v.split(",")

        elif name == "ref":
            for (k, v) in attrs.items():
                if k == "parameter":
                    self._parameter.add_dependency(v)

    def characters(self, content):
        if self._proto_id != "SSM":
            return
        self._characters = self._characters + content

    def endElement(self, name):
        if self._proto_id != "SSM":
            return

        if name == "parameter":
            self._parameters.add(self._parameter)
            self._parameter = None

        elif name == "ecuparam":
            self._parameters.add(self._parameter)
            self._parameter = None

        elif name == "switch":
            self._parameters.add(self._parameter)
            self._parameter = None

        elif name == "address":
            self._characters = self._characters.strip()

            if len(self._characters.strip()) > 0:

                if self._parameter.get_cu_type(
                ) == PMCUParameter.CU_TYPE_STD_PARAMETER():
                    self._parameter.set_address(
                        PMCUAddress(int(self._characters, 16),
                                    self._address_length))
                elif self._parameter.get_cu_type(
                ) == PMCUParameter.CU_TYPE_FIXED_ADDRESS_PARAMETER():
                    address = PMCUAddress(int(self._characters, 16),
                                          self._address_length)
                    for ecu_id in self._ecu_ids:
                        self._parameter.add_ecu_id(ecu_id, address)

            self._address_length = 0
            self._characters = ''

        elif name == "ecu":
            self._ecu_ids = None

        self._element_no += 1

        if self._element_no % 1000 == 0:
            self.log_progress()

    def log_progress(self):
        PM.log(
            self._message + " " + str(self._element_no) + " elements, " +
            str(len(self._parameters)) + " parameters", self._log_id)
示例#4
0
class PMXmlParser(xml.sax.ContentHandler):
    def __init__(self):
        xml.sax.ContentHandler.__init__(self)
        self._message = ''
        self._log_id = 0

        self._element_no = 0

        self._contexts = None

        self._parameter = None
        self._parameters = set()

        self._characters = ''
        self._ecu_ids = None
        self._address_length = 0
        self._proto_id = ''

    def parse(self, file_name):
        self._message = 'Parsing XML data'
        self._log_id = PM.log(self._message)

        file_path = os.path.join("data", file_name)
        source = open(file_path)
        xml.sax.parse(source, self)
        self.log_progress()
        PM.log(self._message + " [DONE]")

        return self._parameters

    def startElement(self, name, attrs):

        pid = None
        desc = None
        target = 0
        units = None
        expr = None
        value_format = None
        address = None

        byte_index = PMCUParameter.CU_INVALID_BYTE_INDEX()
        bit_index = PMCUParameter.CU_INVALID_BIT_INDEX()

        if name == "protocol":

            for (k, v) in attrs.items():
                if k == "id":
                    print 'protocol ' + v
                    self._proto_id = v

        if self._proto_id != "SSM":
            return

        if name == "parameter":

            for (k, v) in attrs.items():
                if k == "id":
                    pid = v
                if k == "name":
                    name = v
                if k == "desc":
                    desc = v
                if k == "ecubyteindex":
                    byte_index = int(v)
                if k == "ecubit":
                    bit_index = int(v)
                if k == "target":
                    target = int(v)

            if byte_index is not PMCUParameter.CU_INVALID_BYTE_INDEX() and bit_index is not PMCUParameter.CU_INVALID_BIT_INDEX():
                self._parameter = PMCUStandardParameter(pid, name, desc, byte_index, bit_index, target)
            elif byte_index is PMCUParameter.CU_INVALID_BYTE_INDEX() and bit_index is PMCUParameter.CU_INVALID_BIT_INDEX():
                self._parameter = PMCUCalculatedParameter(pid, name, desc, target)
            else:
                raise Exception

        elif name == "ecuparam":
            for (k, v) in attrs.items():
                if k == "id":
                    pid = v
                if k == "name":
                    name = v
                if k == "desc":
                    desc = v
                if k == "target":
                    target = int(v)

            self._parameter = PMCUFixedAddressParameter(pid, name, desc, target)

        elif name == "switch":
            for (k, v) in attrs.items():
                if k == "id":
                    pid = v
                if k == "name":
                    name = v
                if k == "desc":
                    desc = v
                if k == "byte":
                    address = int(v, 16)
                if k == "ecubyteindex":
                    byte_index = int(v)
                if k == "bit":
                    bit_index = int(v)
                if k == "target":
                    target = int(v)

            self._parameter = PMCUSwitchParameter(pid, name, desc, address, byte_index, bit_index, target)

        elif name == "address":
            self._address_length = 1
            for (k, v) in attrs.items():
                if k == "length":
                    self._address_length = int(v)

        elif name == "conversion":
            for (k, v) in attrs.items():
                if k == "units":
                    units = v
                if k == "expr":
                    expr = v
                if k == "format":
                    value_format = v

            self._parameter.add_conversion(PMCUConversion(units, expr, value_format))

        elif name == "ecu":
            for (k, v) in attrs.items():
                if k == "id":
                    self._ecu_ids = v.split(",")

        elif name == "ref":
            for (k, v) in attrs.items():
                if k == "parameter":
                    self._parameter.add_dependency(v)

    def characters(self, content):
        if self._proto_id != "SSM":
            return
        self._characters = self._characters + content

    def endElement(self, name):
        if self._proto_id != "SSM":
            return

        if name == "parameter":
            self._parameters.add(self._parameter)
            self._parameter = None

        elif name == "ecuparam":
            self._parameters.add(self._parameter)
            self._parameter = None

        elif name == "switch":
            self._parameters.add(self._parameter)
            self._parameter = None

        elif name == "address":
            self._characters = self._characters.strip()

            if len(self._characters.strip()) > 0:

                if self._parameter.get_cu_type() == PMCUParameter.CU_TYPE_STD_PARAMETER():
                    self._parameter.set_address(PMCUAddress(int(self._characters, 16), self._address_length))
                elif self._parameter.get_cu_type() == PMCUParameter.CU_TYPE_FIXED_ADDRESS_PARAMETER():
                    address = PMCUAddress(int(self._characters, 16), self._address_length)
                    for ecu_id in self._ecu_ids:
                        self._parameter.add_ecu_id(ecu_id, address)

            self._address_length = 0
            self._characters = ''

        elif name == "ecu":
            self._ecu_ids = None

        self._element_no += 1

        if self._element_no % 1000 == 0:
            self.log_progress()

    def log_progress(self):
        PM.log(self._message + " " + str(self._element_no) + " elements, " + str(len(self._parameters)) + " parameters",
               self._log_id)