Ejemplo n.º 1
0
    def create_checkNegativeResponseFunction(diagServiceElement, xmlElements):

        diagInstanceQualifier = getSdgsDataItem(diagServiceElement,
                                                "DiagInstanceQualifier")

        checkNegativeResponseFunctionName = "check_{0}_negResponse".format(
            diagInstanceQualifier)

        checkNegativeResponseFunctionString = checkNegativeResponseTemplate.format(
            checkNegativeResponseFunctionName)

        exec(checkNegativeResponseFunctionString)

        return locals()[checkNegativeResponseFunctionName]
Ejemplo n.º 2
0
    def create_requestFunction(diagServiceElement, xmlElements):
        serviceId = 0x00
        securityRequest = 0x00

        # have to dig out the sgds name for this one
        requestElement = xmlElements[diagServiceElement.find(
            'REQUEST-REF').attrib['ID-REF']]

        sdgsName = getSdgsDataItem(diagServiceElement, "DiagInstanceQualifier")

        serviceId = getServiceIdFromDiagService(diagServiceElement,
                                                xmlElements)
        accessMode = getParamWithSemantic(requestElement, "ACCESSMODE")
        subfunction = getParamWithSemantic(requestElement, "SUBFUNCTION")

        # if accessMode is not none then this is a seed request
        if accessMode is not None:
            securityRequest = int(
                getParamWithSemantic(requestElement,
                                     "ACCESSMODE").find("CODED-VALUE").text)
            requestFuncString = requestFuncTemplate_getSeed.format(
                sdgsName, serviceId, securityRequest)
        elif subfunction is not None:
            securityRequest = int(
                getParamWithSemantic(requestElement,
                                     "SUBFUNCTION").find("CODED-VALUE").text)
            requestFuncString = requestFuncTemplate_sendKey.format(
                sdgsName, serviceId, securityRequest)
        else:
            requestFuncString = None

        if requestFuncString is not None:
            exec(requestFuncString)
            return locals()[sdgsName]
        else:
            return None
Ejemplo n.º 3
0
    def check_inputDataFunction(diagServiceElement, xmlElements):

        diagInstanceQualifier = getSdgsDataItem(diagServiceElement,
                                                "DiagInstanceQualifier")
Ejemplo n.º 4
0
    def create_checkPositiveResponseFunction(diagServiceElement, xmlElements):
        responseId = 0
        securityRequest = 0

        responseId = getServiceIdFromDiagService(diagServiceElement,
                                                 xmlElements) + 0x40
        positiveResponseElement = getPositiveResponse(diagServiceElement,
                                                      xmlElements)

        diagInstanceQualifier = getSdgsDataItem(diagServiceElement,
                                                "DiagInstanceQualifier")

        checkSidFunctionName = "check_{0}_sid".format(diagInstanceQualifier)
        checkSecurityAccessFunctionName = "check_{0}_securityAccess".format(
            diagInstanceQualifier)
        checkReturnedDataFunctionName = "check_{0}_returnedData".format(
            diagInstanceQualifier)

        accessmode = getParamWithSemantic(positiveResponseElement,
                                          "ACCESSMODE")
        subfunction = getParamWithSemantic(positiveResponseElement,
                                           "SUBFUNCTION")

        if accessmode is not None:
            securityRequest = int(accessmode.find("CODED-VALUE").text)
        elif subfunction is not None:
            securityRequest = int(subfunction.find("CODED-VALUE").text)
        else:
            raise Exception("Format not known")

        dataParams = getParamWithSemantic(positiveResponseElement, "DATA")

        if dataParams is not None:
            if isinstance(dataParams, list):
                raise Exception("Currently can not deal with lists of data")
            else:
                dop = getDiagObjectProp(dataParams, xmlElements)
                bitLength = getBitLengthFromDop(dop)
                payloadLength = int(ceil(bitLength / 8))
        else:
            payloadLength = 0

        checkSidFunctionString = checkSidTemplate.format(
            checkSidFunctionName, responseId)

        checkSecurityAccessFunctionString = checkSecurityAccessTemplate.format(
            checkSecurityAccessFunctionName, securityRequest)

        if payloadLength == 0:
            checkReturnedDataString = None
        else:
            checkReturnedDataString = checkReturnedDataTemplate.format(
                checkReturnedDataFunctionName, payloadLength)
            exec(checkReturnedDataString)

        exec(checkSidFunctionString)
        exec(checkSecurityAccessFunctionString)

        checkSidFunction = locals()[checkSidFunctionName]
        checkSecurityAccessFunction = locals()[checkSecurityAccessFunctionName]

        checkReturnedDataFunction = None
        try:
            checkReturnedDataFunction = locals()[checkReturnedDataFunctionName]
        except:
            pass

        return checkSidFunction, checkSecurityAccessFunction, checkReturnedDataFunction
    xmlElements = {}

    for child in root.iter():
        currTag = child.tag
        try:
            xmlElements[child.attrib['ID']] = child
        except KeyError:
            pass

    for key, value in xmlElements.items():
        if value.tag == 'DIAG-SERVICE':
            print(value)
            shortName = getShortName(value)
            longName = getLongName(value)
            sdgsParams = getSdgsData(value)
            print("Short Name: {0}".format(shortName))
            print("Long Name: {0}".format(longName))
            for i, j in sdgsParams.items():
                print("{0}: {1}".format(i, j))
            print("Service Id: {0:#x}".format(
                getServiceIdFromDiagService(value, xmlElements)))
            print("DiagInstanceName: {0}".format(
                getSdgsDataItem(value, "DiagInstanceName")))
            requestElement = xmlElements[value.find(
                "REQUEST-REF").attrib["ID-REF"]]
            positiveResponses = getPositiveResponse(value, xmlElements)
            print(positiveResponses)
            print("")

    pass
    import inspect

    filename = "Bootloader.odx"

    root = ET.parse(filename)

    xmlElements = {}

    for child in root.iter():
        currTag = child.tag
        try:
            xmlElements[child.attrib['ID']] = child
        except KeyError:
            pass

    for key, value in xmlElements.items():

        if value.tag == "DIAG-SERVICE":
            if value.attrib["SEMANTIC"] == "SECURITY":

                suppressResponse = getSdgsDataItem(
                    value, "PositiveResponseSuppressed")
                if suppressResponse == "no":
                    a = SecurityAccessMethodFactory.create_requestFunction(
                        value, xmlElements)
                    b = SecurityAccessMethodFactory.create_checkPositiveResponseFunction(
                        value, xmlElements)
                    c = SecurityAccessMethodFactory.create_checkNegativeResponseFunction(
                        value, xmlElements)
                pass