Beispiel #1
0
def _create_apx_context_from_autosar_workspace(ws):
    context = apx.Context()
    for swc in ws.findall('/ComponentType/*'):
        if isinstance(swc, autosar.component.AtomicSoftwareComponent):
            node = apx.Node().import_autosar_swc(swc)
            context.append(node)
    return context
    def test_code_generator(self):
        node = apx.Node("TestSimpleOnlyP")
        node.append(apx.ProvidePort('PS8Port', 'c', '=-1'))

        output_dir = 'derived'
        output_dir_full = os.path.join(os.path.dirname(__file__), output_dir)
        if not os.path.exists(output_dir_full):
            os.makedirs(output_dir_full)
        time.sleep(0.1)
        apx.NodeGenerator().generate(output_dir_full, node)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        shutil.rmtree(output_dir_full)
    def test_code_generator(self):
        node = apx.Node("TestSimple")
        node.append(apx.RequirePort('RS32Port', 'l', '=-2147483648'))
        node.append(apx.RequirePort('RU8Port', 'C', '=255'))
        node.append(apx.RequirePort('PS16ARPort256', 's[256]'))
        node.append(apx.ProvidePort('PS16ARPort256', 's[256]'))
        node.append(apx.ProvidePort('PS8Port', 'c', '=-1'))
        node.append(apx.ProvidePort('PU32Port', 'L', '=4294967295'))

        output_dir = 'derived'
        output_dir_full = os.path.join(os.path.dirname(__file__), output_dir)
        if not os.path.exists(output_dir_full):
            os.makedirs(output_dir_full)
        time.sleep(0.1)
        apx.NodeGenerator().generate(output_dir_full, node)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        shutil.rmtree(output_dir_full)
Beispiel #4
0
 def test_compile_record_require_port(self):
     compiler = apx.Compiler()
     node = apx.Node('TestNode')
     node.append(apx.DataType('SoundId_T', 'S'))
     node.append(apx.DataType('Volume_T', 'C'))
     node.append(apx.DataType('Repetitions_T', 'C'))
     node.append(
         apx.DataType(
             'SoundRequest_T',
             '{"SoundId"T["SoundId_T"]"Volume"T["Volume_T"]"Repetitions"T["Repetitions_T"]}'
         ))
     node.append(
         apx.RequirePort('SoundRequest', 'T["SoundRequest_T"]',
                         '={65535,255,255}'))
     prog = compiler.exec(node.find('SoundRequest'))
     expected = bytes([
         apx.OPCODE_UNPACK_PROG,
         (apx.UINT16_LEN + apx.UINT8_LEN + apx.UINT8_LEN), 0, 0, 0,
         apx.OPCODE_RECORD_ENTER, apx.OPCODE_RECORD_SELECT
     ]) + "SoundId\0".encode('ascii') + bytes([
         apx.OPCODE_UNPACK_U16, apx.OPCODE_RECORD_SELECT
     ]) + "Volume\0".encode('ascii') + bytes([
         apx.OPCODE_UNPACK_U8, apx.OPCODE_RECORD_SELECT
     ]) + "Repetitions\0".encode('ascii') + bytes([
         apx.OPCODE_UNPACK_U8,
         apx.OPCODE_RECORD_LEAVE,
     ])
     self.assertEqual(prog, expected)
Beispiel #5
0
 def test_compile_require_ports(self):
     compiler = apx.Compiler()
     node = apx.Node('TestNode')
     node.append(apx.DataType('TestType1_T', 'S(0,1000)'))
     node.append(apx.DataType('TestType2_T', 'a[32]'))
     port = node.append(apx.RequirePort('Signal1', 'C', '=255'))
     prog = compiler.exec(port)
     expected = bytes([
         apx.OPCODE_UNPACK_PROG,
         1,
         0,
         0,
         0,
         apx.OPCODE_UNPACK_U8,
     ])
     self.assertEqual(prog, expected)
     port = node.append(apx.RequirePort('Signal2', 'T[0]', '=255'))
     prog = compiler.exec(port)
     expected = bytes([
         apx.OPCODE_UNPACK_PROG,
         2,
         0,
         0,
         0,
         apx.OPCODE_UNPACK_U16,
     ])
     self.assertEqual(prog, expected)
     port = node.append(
         apx.RequirePort('Signal3', 'T["TestType2_T"]', '=""'))
     prog = compiler.exec(port)
     expected = bytes([
         apx.OPCODE_UNPACK_PROG, 32, 0, 0, 0, apx.OPCODE_UNPACK_STR, 32, 0
     ])
     self.assertEqual(prog, expected)
    def test_code_generator(self):
        node = apx.Node("TestCallbackFirst")
        node.append(apx.RequirePort('RS32Port', 'l', '=-2147483648'))
        node.append(apx.RequirePort('RU8Port', 'C', '=255'))

        callback_map = {'RS32Port': 'RS32Port_cb_func'}

        output_dir = 'derived'
        output_dir_full = os.path.join(os.path.dirname(__file__), output_dir)
        if not os.path.exists(output_dir_full):
            os.makedirs(output_dir_full)
        time.sleep(0.1)
        apx.NodeGenerator().generate(output_dir_full,
                                     node,
                                     callbacks=callback_map)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        shutil.rmtree(output_dir_full)
Beispiel #7
0
 def test_raw_ports_2(self):
     node = apx.Node('TestSWC')
     datatype = node.append(apx.DataType('InactiveActive_T', 'C(0,3)'))
     self.assertIsInstance(datatype, apx.DataType)
     port = node.append(apx.ProvidePort('VehicleSpeed', 'S', '=65535'))
     self.assertIsInstance(port, apx.ProvidePort)
     port = node.append(apx.ProvidePort('MainBeam', 'T[0]', '=3'))
     self.assertIsInstance(port, apx.ProvidePort)
     port = node.append(apx.ProvidePort('FuelLevel', 'C'))
     self.assertIsInstance(port, apx.ProvidePort)
     port = node.append(apx.ProvidePort('ParkBrakeActive', 'T[0]', '=3'))
     self.assertIsInstance(port, apx.ProvidePort)
     port = node.append(apx.RequirePort('RheostatLevelRqst', 'C', '=255'))
     self.assertIsInstance(port, apx.RequirePort)
     port = node.append(apx.RequirePort('StrSignal', 'a[4]', '=""'))
     self.assertIsInstance(port, apx.RequirePort)
     port = node.append(
         apx.RequirePort('RecordSignal', '{"Name"a[8]"Id"L"Data"S[3]}',
                         '={"",0xFFFFFFFF,{0,0,0}}'))
     self.assertIsInstance(port, apx.RequirePort)
     node.finalize(sort=False)
     lines = node.lines()
     self.assertEqual(len(lines), 9)
     self.assertEqual(lines[0], 'N"TestSWC"')
     self.assertEqual(lines[1], 'T"InactiveActive_T"C(0,3)')
     self.assertEqual(lines[2], 'P"VehicleSpeed"S:=65535')
     self.assertEqual(lines[3], 'P"MainBeam"T[0]:=3')
     self.assertEqual(lines[4], 'P"FuelLevel"C')
     self.assertEqual(lines[5], 'P"ParkBrakeActive"T[0]:=3')
     self.assertEqual(lines[6], 'R"RheostatLevelRqst"C:=255')
     self.assertEqual(lines[7], 'R"StrSignal"a[4]:=""')
     self.assertEqual(
         lines[8],
         'R"RecordSignal"{"Name"a[8]"Id"L"Data"S[3]}:={"",0xFFFFFFFF,{0,0,0}}'
     )
Beispiel #8
0
    def test_copy_ports_between_nodes(self):
        apx_text = """APX/1.2
N"TestNode1"
T"Repetitions_T"C
T"SoundId_T"S
T"Volume_T"C
T"SoundRequest_T"{"SoundId"T["SoundId_T"]"Volume"T["Volume_T"]"Repetitions"T["Repetitions_T"]}
P"SoundRequest"T["SoundRequest_T"]:={65535,255,255}
"""
        node1 = apx.Node.from_text(apx_text)
        self.assertIsInstance(node1, apx.Node)
        node1.finalize()
        node2 = apx.Node('MyCopy')
        self.assertIsInstance(node2, apx.Node)
        port1 = node1.find('SoundRequest')
        self.assertIsInstance(port1, apx.ProvidePort)
        port2 = node2.add_port_from_node(node1, port1)
        self.assertIsInstance(port2, apx.ProvidePort)
        node2.finalize(sort=True)
        result = apx.Context().append(node2).dumps()
        expected = """APX/1.2
N"MyCopy"
T"Repetitions_T"C
T"SoundId_T"S
T"SoundRequest_T"{"SoundId"T[1]"Volume"T[3]"Repetitions"T[0]}
T"Volume_T"C
P"SoundRequest"T[2]:={65535,255,255}
"""
        self.assertEqual(expected, result)
Beispiel #9
0
def create_apx_node_from_file_name(file_name, default_name):
    if file_name is None:
        node_name = default_name
    else:
        node_name = os.path.basename(file_name)
        if '.apx' in node_name:
            node_name = os.path.splitext(node_name)[0]
    return apx.Node(node_name)
Beispiel #10
0
 def test_missing_end_brace(self):
     node = apx.Node("TestSWC")
     with self.assertRaises(apx.ParseError) as context:
         port = apx.RequirePort(
             'TestPort1',
             '{"name"a[6]"Rectangle"{"x"L"y"L"width"L"height"L}',
             '={"",{0,0,0,0}}')
     self.assertEqual(str(context.exception),
                      "Missing '}' in data signature")
Beispiel #11
0
    def test_compile_provide_ports(self):
        compiler = apx.Compiler()
        node = apx.Node('TestNode')
        node.append(apx.DataType('TestType1_T', 'C'))
        node.append(apx.DataType('TestType2_T', 'C[10]'))
        node.append(apx.DataType('TestType3_T', 'S'))
        node.append(apx.DataType('TestType4_T', 'S[10]'))
        node.append(apx.DataType('TestType5_T', 'L'))
        node.append(apx.DataType('TestType6_T', 'L[10]'))
        node.append(apx.ProvidePort('U8Signal', 'T["TestType1_T"]'))
        node.append(apx.ProvidePort('U8ArraySignal', 'T["TestType2_T"]'))
        node.append(apx.ProvidePort('U16Signal', 'T["TestType3_T"]'))
        node.append(apx.ProvidePort('U16ArraySignal', 'T["TestType4_T"]'))
        node.append(apx.ProvidePort('U32Signal', 'T["TestType5_T"]'))
        node.append(apx.ProvidePort('U32ArraySignal', 'T["TestType6_T"]'))
        prog = compiler.exec(node.find('U8Signal'))
        expected = bytes(
            [apx.OPCODE_PACK_PROG, apx.UINT8_LEN, 0, 0, 0, apx.OPCODE_PACK_U8])
        self.assertEqual(prog, expected)

        prog = compiler.exec(node.find('U8ArraySignal'))
        expected = bytes([
            apx.OPCODE_PACK_PROG, apx.UINT8_LEN * 10, 0, 0, 0,
            apx.OPCODE_PACK_U8AR, 10, 0
        ])
        self.assertEqual(prog, expected)

        prog = compiler.exec(node.find('U16Signal'))
        expected = bytes([
            apx.OPCODE_PACK_PROG, apx.UINT16_LEN, 0, 0, 0, apx.OPCODE_PACK_U16
        ])
        self.assertEqual(prog, expected)

        prog = compiler.exec(node.find('U16ArraySignal'))
        expected = bytes([
            apx.OPCODE_PACK_PROG, apx.UINT16_LEN * 10, 0, 0, 0,
            apx.OPCODE_PACK_U16AR, 10, 0
        ])
        self.assertEqual(prog, expected)

        prog = compiler.exec(node.find('U32Signal'))
        expected = bytes([
            apx.OPCODE_PACK_PROG, apx.UINT32_LEN, 0, 0, 0, apx.OPCODE_PACK_U32
        ])
        self.assertEqual(prog, expected)

        prog = compiler.exec(node.find('U32ArraySignal'))
        expected = bytes([
            apx.OPCODE_PACK_PROG, apx.UINT32_LEN * 10, 0, 0, 0,
            apx.OPCODE_PACK_U32AR, 10, 0
        ])
        self.assertEqual(prog, expected)
Beispiel #12
0
def createContextfromPartition(autosar_partition):
    context = Context()
    for component in autosar_partition.components:
        if (component.swc is not None) and (isinstance(component.swc, autosar.component.ApplicationSoftwareComponent)):
            swc = component.swc
            ws = swc.rootWS()
            apx_node = apx.Node(swc.name)
            for port in swc.requirePorts + swc.providePorts:
                portInterface = ws.find(port.portInterfaceRef)
                if portInterface is None:
                    print('Warning (port=%s): PortInterface with ref %s not found in ECU extract'%(port.name, port.portInterfaceRef))
                else:
                    if (type(portInterface) is autosar.portinterface.SenderReceiverInterface) and (len(portInterface.dataElements)>0):
                        apx_node.append(port)
            context.append(apx_node)
    return context
Beispiel #13
0
def create_node_and_data():
    node = apx.Node('TestNode')
    node.add_type(apx.DataType('InactiveActive_T', 'C(0,3)'))
    node.append(apx.ProvidePort('VehicleSpeed', 'S', '=65535'))
    node.append(apx.ProvidePort('MainBeam', 'T[0]', '=3'))
    node.append(apx.ProvidePort('TotalDistance', 'L', '=0xFFFFFFFF'))
    node.append(
        apx.ProvidePort('ComplexRecordSignal',
                        '{"SensorData"{"x"S"y"S"z"S}"TimeStamp"L}',
                        '={{65535,65535,65535},0xFFFFFFFF}'))
    node.append(apx.RequirePort('RheostatLevelRqst', 'C', '=255'))
    node.append(apx.RequirePort('StrSignal', 'a[8]', '=""'))
    node.append(
        apx.RequirePort('RecordSignal', '{"Name"a[8]"Id"L"Data"S[3]}',
                        '={"",0xFFFFFFFF,{0,0,0}}'))
    return node
Beispiel #14
0
    def test_copy_data_type_between_nodes_when_type_is_record_with_references(
            self):
        apx_text = """APX/1.2
N"TestNode1"
T"Repetitions_T"C
T"SoundId_T"S
T"Volume_T"C
T"SoundRequest_T"{"SoundId"T["SoundId_T"]"Volume"T["Volume_T"]"Repetitions"T["Repetitions_T"]}
P"SoundRequest"T["SoundRequest_T"]:={65535,255,255}
"""
        node1 = apx.Node.from_text(apx_text)
        self.assertIsInstance(node1, apx.Node)
        node2 = apx.Node('MyCopy')
        self.assertIsInstance(node2, apx.Node)
        type1 = node1.find('SoundRequest_T')
        self.assertIsInstance(type1, apx.DataType)
        type2 = node2.add_data_type_from_node(node1, type1)
        self.assertIsInstance(type2, apx.DataType)
Beispiel #15
0
   def test_load_dumped_apx_text(self):
      node1 = apx.Node('Simulator')
      node1.dataTypes.append(apx.DataType('InactiveActive_T','C(0,3)'))
      node1.providePorts.append(apx.ProvidePort('VehicleSpeed','S','=65535'))
      node1.providePorts.append(apx.ProvidePort('MainBeam','T[0]','=3'))
      node1.providePorts.append(apx.ProvidePort('FuelLevel','C'))
      node1.providePorts.append(apx.ProvidePort('ParkBrakeActive','T[0]','=3'))
      node1.requirePorts.append(apx.RequirePort('RheostatLevelRqst','C','=255'))
      self.assertFalse(node1.providePorts[0].dsg.isComplexType())

      node1.finalize()
      context = apx.Context()
      context.append(node1)
      text=context.dumps()

      apx_parser = apx.Parser()
      node2 = apx_parser.loads(text)
      self.assertFalse(node2.providePorts[0].dsg.isComplexType())
   def test_fileManagerWithNode(self):      
      node = apx.Node('Simulator')

      node.dataTypes.append(apx.DataType('InactiveActive_T','C(0,3)'))
      node.append(apx.ProvidePort('VehicleSpeed','S','=65535'))
      node.append(apx.ProvidePort('MainBeam','T[0]','=3'))
      node.append(apx.ProvidePort('FuelLevel','C'))
      node.append(apx.ProvidePort('ParkBrakeActive','T[0]','=3'))
      node.append(apx.RequirePort('RheostatLevelRqst','C','=255'))
      nodeData = apx.NodeData(node)
      with apx.FileManager() as file_manager:
         file_manager.attachNodeData(nodeData)
         self.assertEqual(len(file_manager.localFileMap), 2)
         self.assertEqual(len(file_manager.requestedFiles), 1)
         file_manager.start()
         mockHandler = MockTransmitHandler()
         file_manager.onConnected(mockHandler)
         time.sleep(0.1)
         self.assertEqual(len(mockHandler.transmittedData), 4+63*2)         
Beispiel #17
0
 def test_write_string(self):
     node = apx.Node('TestNode')
     port = node.append(apx.ProvidePort('StrSignal', 'a[6]', '=""'))
     node_data = apx.NodeData(node)
     signal_offset = 0
     signal_length = 6
     output_file = node_data.outPortDataFile
     #verify init value
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      bytes(6))
     #write value
     node_data.write_provide_port(port, "Hello")
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      "Hello\0".encode('utf-8'))
     node_data.write_provide_port(port, "Abc")
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      "Abc\0\0\0".encode('utf-8'))
     node_data.write_provide_port(port, "")
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      bytes(6))
Beispiel #18
0
    def test_code_generator(self):
        node = apx.Node("TestSimpleOnlyR")
        node.append(apx.RequirePort('RU16Port','S','=0xffFF'))

        output_dir = 'derived'
        output_dir_full = os.path.join(os.path.dirname(__file__),output_dir)
        if not os.path.exists(output_dir_full):
            os.makedirs(output_dir_full)
        time.sleep(0.1)
        apx.NodeGenerator().generate(output_dir_full, node, with_inport_synced_status_flags=False)
        with open (os.path.join(os.path.dirname(__file__), output_dir, 'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            generated=fp.read()
        with open (os.path.join(os.path.dirname(__file__), 'expected_gen', 'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            expected=fp.read()
        self.assertEqual(expected, generated)
        with open (os.path.join(os.path.dirname(__file__), output_dir, 'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            generated=fp.read()
        with open (os.path.join(os.path.dirname(__file__), 'expected_gen', 'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            expected=fp.read()
        self.assertEqual(expected, generated)
        shutil.rmtree(output_dir_full)
Beispiel #19
0
    def test_code_generator(self):
        node = apx.Node("Test")
        node.append(apx.DataType('SoundRequest_T', '{"SoundId"S"Volume"C}'))
        node.append(apx.RequirePort('U8Port', 'C', '=255'))
        node.append(apx.RequirePort('U8ARPort', 'C[3]', '={255, 255, 255}'))
        node.append(
            apx.RequirePort('SoundRequest', 'T["SoundRequest_T"]',
                            '={65535,255}'))
        node.append(
            apx.ProvidePort('U16ARPort', 'S[4]',
                            '={65535, 65535, 65535, 65535}'))
        node.append(apx.ProvidePort('U32Port', 'L', '=4294967295'))

        output_dir = 'derived'
        output_dir_full = os.path.join(os.path.dirname(__file__), output_dir)
        if not os.path.exists(output_dir_full):
            os.makedirs(output_dir_full)
        time.sleep(0.1)
        apx.NodeGenerator().generate(output_dir_full, node)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        shutil.rmtree(output_dir_full)
Beispiel #20
0
 def test_write_s16(self):
     node = apx.Node('TestNode')
     port = node.append(apx.ProvidePort('S16Signal', 's', '=0'))
     node_data = apx.NodeData(node)
     signal_offset = 0
     signal_length = 2
     output_file = node_data.outPortDataFile
     #verify init value
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      bytes(signal_length))
     #write value
     node_data.write_provide_port(port, -1)
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      struct.pack('<h', -1))
     node_data.write_provide_port(port, -32768)
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      struct.pack('<h', -32768))
     node_data.write_provide_port(port, 32767)
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      struct.pack('<h', 32767))
     node_data.write_provide_port(port, 0)
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      struct.pack('<H', 0))
Beispiel #21
0
 def test_write_s32(self):
     node = apx.Node('TestNode')
     port = node.append(apx.ProvidePort('S32Signal', 'l', '=0'))
     node_data = apx.NodeData(node)
     signal_offset = 0
     signal_length = 4
     output_file = node_data.outPortDataFile
     #verify init value
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      bytes(signal_length))
     #write value
     node_data.write_provide_port(port, -1)
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      struct.pack('<i', -1))
     node_data.write_provide_port(port, -2147483648)
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      struct.pack('<i', -2147483648))
     node_data.write_provide_port(port, 2147483647)
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      struct.pack('<i', 2147483647))
     node_data.write_provide_port(port, 0)
     self.assertEqual(output_file.read(signal_offset, signal_length),
                      struct.pack('<i', 0))
Beispiel #22
0
 def test_dumps_from_raw(self):
    node = apx.Node('Simulator')
    node.dataTypes.append(apx.DataType('InactiveActive_T','C(0,3)'))
    node.providePorts.append(apx.ProvidePort('VehicleSpeed','S','=65535'))
    node.providePorts.append(apx.ProvidePort('MainBeam','T[0]','=3'))
    node.providePorts.append(apx.ProvidePort('FuelLevel','C'))
    node.providePorts.append(apx.ProvidePort('ParkBrakeActive','T[0]','=3'))
    node.requirePorts.append(apx.RequirePort('RheostatLevelRqst','C','=255'))
    node.finalize()
    context = apx.Context()
    context.append(node)
    text=context.dumps()
    lines=re.compile(r'\r\n|\n').split(text)
    self.assertEqual(len(lines),9)
    self.assertEqual(lines[0],'APX/1.2')
    self.assertEqual(lines[1],'N"Simulator"')
    self.assertEqual(lines[2],'T"InactiveActive_T"C(0,3)')
    self.assertEqual(lines[3],'P"VehicleSpeed"S:=65535')
    self.assertEqual(lines[4],'P"MainBeam"T[0]:=3')
    self.assertEqual(lines[5],'P"FuelLevel"C')
    self.assertEqual(lines[6],'P"ParkBrakeActive"T[0]:=3')
    self.assertEqual(lines[7],'R"RheostatLevelRqst"C:=255')
    self.assertEqual(lines[8],'')
Beispiel #23
0
import time


@apx.DataListener.register
class MyDataListener(apx.DataListener):
    def on_data(self, port, data):
        global value
        global client
        print("%s: %s" % (port.name, str(data)))
        if port.name == 'TestSignal2' and value is not None:
            value = (value + 1) & 0xFFFF  #wraparound to zero after 65535
            client.write_port('TestSignal1', value)


if __name__ == '__main__':
    node = apx.Node('TestNode1')
    node.append(apx.ProvidePort('TestSignal1', 'S'))
    node.append(apx.RequirePort('TestSignal2', 'S'))
    value = 1
    with apx.Client(node) as client:
        client.set_listener(MyDataListener())
        client.write_port('TestSignal1', value)
        if client.connect_tcp('localhost', 5000):
            while True:
                try:
                    time.sleep(10)
                    value = None
                    break
                except (KeyboardInterrupt, SystemExit):
                    value = None
                    break
Beispiel #24
0
 def test_raw_ports_1(self):
     node = apx.Node('TestNode')
     port = node.append(apx.RequirePort('U8Signal', 'C', '=255'))
     self.assertIsInstance(port, apx.RequirePort)
     self.assertIsInstance(port.data_element, apx.DataElement)
     self.assertEqual(port.data_element.typeCode, apx.UINT8_TYPE_CODE)
Beispiel #25
0
    def test_autosar_ports(self):
        ws = autosar.workspace()
        dataTypes = ws.createPackage('DataType', role='DataType')
        dataTypes.createSubPackage('DataTypeSemantics', role='CompuMethod')
        dataTypes.createSubPackage('DataTypeUnits', role='Unit')

        dataTypes.createIntegerDataType('EngineSpeed_T',
                                        min=0,
                                        max=65535,
                                        offset=0,
                                        scaling=1 / 8,
                                        unit='rpm')
        dataTypes.createIntegerDataType('VehicleSpeed_T',
                                        min=0,
                                        max=65535,
                                        offset=0,
                                        scaling=1 / 64,
                                        unit='kph')
        dataTypes.createIntegerDataType('Percent_T',
                                        min=0,
                                        max=255,
                                        offset=0,
                                        scaling=0.4,
                                        unit='Percent')
        dataTypes.createIntegerDataType('CoolantTemp_T',
                                        min=0,
                                        max=255,
                                        offset=-40,
                                        scaling=0.5,
                                        unit='DegreeC')
        dataTypes.createIntegerDataType(
            'InactiveActive_T',
            valueTable=[
                'InactiveActive_Inactive',  #0
                'InactiveActive_Active',  #1
                'InactiveActive_Error',  #2
                'InactiveActive_NotAvailable'
            ])  #3
        dataTypes.createIntegerDataType(
            'OnOff_T',
            valueTable=[
                "OnOff_Off",  #0
                "OnOff_On",  #1
                "OnOff_Error",  #2
                "OnOff_NotAvailable"
            ])  #3
        package = ws.createPackage('Constant', role='Constant')

        package.createConstant('EngineSpeed_IV', 'EngineSpeed_T', 65535)
        package.createConstant('VehicleSpeed_IV', 'VehicleSpeed_T', 65535)
        package.createConstant('FuelLevel_IV', 'Percent_T', 255)
        package.createConstant('CoolantTemp_IV', 'CoolantTemp_T', 255)
        package.createConstant('ParkBrakeState_IV', 'InactiveActive_T',
                               3)  #3=NotAvailable
        package.createConstant('MainBeamState_IV', 'OnOff_T',
                               3)  #3=NotAvailable
        package = ws.createPackage('PortInterface', role='PortInterface')

        package.createSenderReceiverInterface(
            'EngineSpeed_I',
            autosar.DataElement('EngineSpeed', '/DataType/EngineSpeed_T'))
        package.createSenderReceiverInterface(
            'VehicleSpeed_I',
            autosar.DataElement('VehicleSpeed', '/DataType/VehicleSpeed_T'))
        package.createSenderReceiverInterface(
            'FuelLevel_I',
            autosar.DataElement('FuelLevel', '/DataType/Percent_T'))
        package.createSenderReceiverInterface(
            'CoolantTemp_I',
            autosar.DataElement('CoolantTemp', '/DataType/CoolantTemp_T'))
        package.createSenderReceiverInterface(
            'ParkBrakeState_I',
            autosar.DataElement('InactiveActive',
                                '/DataType/InactiveActive_T'))
        package.createSenderReceiverInterface(
            'MainBeamState_I', autosar.DataElement('OnOff',
                                                   '/DataType/OnOff_T'))

        package = ws.createPackage('ComponentType', role='ComponentType')
        swc = package.createApplicationSoftwareComponent('TestSWC')
        swc.createProvidePort('EngineSpeed',
                              'EngineSpeed_I',
                              initValueRef='EngineSpeed_IV')
        swc.createProvidePort('VehicleSpeed',
                              'VehicleSpeed_I',
                              initValueRef='VehicleSpeed_IV')
        swc.createRequirePort('FuelLevel',
                              'FuelLevel_I',
                              initValueRef='FuelLevel_IV')
        swc.createRequirePort('CoolantTemp',
                              'CoolantTemp_I',
                              initValueRef='CoolantTemp_IV')
        swc.createRequirePort('ParkBrakeState',
                              'ParkBrakeState_I',
                              initValueRef='ParkBrakeState_IV')
        swc.createRequirePort('MainBeamState',
                              'MainBeamState_I',
                              initValueRef='MainBeamState_IV')

        apx_node = apx.Node(swc.name)
        apx_node.import_autosar_swc(swc)

        lines = apx_node.lines()
        self.assertEqual(len(lines), 13)
        self.assertEqual(lines[0], 'N"TestSWC"')
        self.assertEqual(lines[1], 'T"EngineSpeed_T"S')
        self.assertEqual(lines[2], 'T"VehicleSpeed_T"S')
        self.assertEqual(lines[3], 'T"Percent_T"C')
        self.assertEqual(lines[4], 'T"CoolantTemp_T"C')
        self.assertEqual(
            lines[5],
            'T"InactiveActive_T"C(0,3):VT("InactiveActive_Inactive","InactiveActive_Active","InactiveActive_Error","InactiveActive_NotAvailable")'
        )
        self.assertEqual(
            lines[6],
            'T"OnOff_T"C(0,3):VT("OnOff_Off","OnOff_On","OnOff_Error","OnOff_NotAvailable")'
        )
        self.assertEqual(lines[7], 'P"EngineSpeed"T[0]:=0xFFFF')
        self.assertEqual(lines[8], 'P"VehicleSpeed"T[1]:=0xFFFF')
        self.assertEqual(lines[9], 'R"FuelLevel"T[2]:=255')
        self.assertEqual(lines[10], 'R"CoolantTemp"T[3]:=255')
        self.assertEqual(lines[11], 'R"ParkBrakeState"T[4]:=3')
        self.assertEqual(lines[12], 'R"MainBeamState"T[5]:=3')
import apx

node = apx.Node('TestNode')
node.append(apx.ProvidePort('TestSignal2', 'C'))
node.append(apx.RequirePort('TestSignal1', 'S'))

apx.NodeGenerator().generate('.', node, includes=['Rte_Type.h'])
Beispiel #27
0
import apx

if __name__ == '__main__':
    node = apx.Node('ButtonStatus')
    node.append(apx.DataType('PushButtonStatus_T', 'C(0,1)'))
    node.append(apx.DataType('VehicleMode_T', 'C(0,15)'))
    node.append(
        apx.ProvidePort('SWS_PushbuttonStatus_Back', 'T["PushButtonStatus_T"]',
                        '=0'))
    node.append(
        apx.ProvidePort('SWS_PushbuttonStatus_Down', 'T["PushButtonStatus_T"]',
                        '=0'))
    node.append(
        apx.ProvidePort('SWS_PushbuttonStatus_Enter',
                        'T["PushButtonStatus_T"]', '=0'))
    node.append(
        apx.ProvidePort('SWS_PushbuttonStatus_Home', 'T["PushButtonStatus_T"]',
                        '=0'))
    node.append(
        apx.ProvidePort('SWS_PushbuttonStatus_Left', 'T["PushButtonStatus_T"]',
                        '=0'))
    node.append(
        apx.ProvidePort('SWS_PushbuttonStatus_Right',
                        'T["PushButtonStatus_T"]', '=0'))
    node.append(
        apx.ProvidePort('SWS_PushbuttonStatus_Up', 'T["PushButtonStatus_T"]',
                        '=0'))
    node.append(apx.RequirePort('VehicleMode', 'T["VehicleMode_T"]', '=15'))
    node.finalize()
    apx.NodeGenerator().generate('.', node, includes=['ApxTypeDefs.h'])
    apx.NodeGenerator().generate('.',
Beispiel #28
0
#!/usr/bin/env python3
import apx
        
if __name__ == '__main__':

    node1 = apx.Node('TestNode1')
    node1.append(apx.ProvidePort('WheelBasedVehicleSpeed','S'))
    node1.append(apx.ProvidePort('CabTiltLockWarning','C(0,7)'))
    node1.append(apx.RequirePort('VehicleMode','C(0,15)'))
    node1.append(apx.RequirePort('GearSelectionMode','C(0,7)'))
    apx.NodeGenerator().generate('.', node1, includes=['Std_Types.h'])
    
    node2 = apx.Node('TestNode2')
    node2.append(apx.ProvidePort('ParkBrakeAlert','C(0,3)','=3'))
    apx.NodeGenerator().generate('.', node2, includes=['Std_Types.h'])
    
Beispiel #29
0
    def test_code_generator(self):
        node = apx.Node("Test")
        node.append(apx.DataType('SoundRequest_T', '{"SoundId"S"Volume"C}'))
        node.append(apx.DataType('LightRequest_T', '{"LightId"S"Intensity"C}'))
        node.append(
            apx.DataType('HapticRequest_T', '{"HapticId"S"Intensity"C}'))
        node.append(apx.RequirePort('RU8FirstPort', 'C', '=12'))
        node.append(apx.RequirePort('RS16ARPort', 's[3]', '={32767, 1, 0}'))
        node.append(apx.RequirePort('RS32Port', 'l', '=1'))
        node.append(apx.RequirePort('RU8Port', 'C', '=255'))
        node.append(apx.RequirePort('RU8ARPort', 'C[3]', '={255, 255, 255}'))
        node.append(
            apx.RequirePort('LightRequest', 'T["LightRequest_T"]',
                            '={65535,255}'))
        node.append(
            apx.RequirePort('SoundRequest', 'T["SoundRequest_T"]',
                            '={65535,255}'))
        node.append(apx.RequirePort('RU8LastPort', 'C', '=210'))
        node.append(
            apx.ProvidePort('SoundRequestAck', 'T["SoundRequest_T"]',
                            '={65535,255}'))
        node.append(
            apx.ProvidePort('HapticRequest', 'T["HapticRequest_T"]',
                            '={65535,255}'))
        node.append(apx.ProvidePort('PS8ARPort', 'c[1]', '={1}'))
        node.append(apx.ProvidePort('PS8Port', 'c', '=0'))
        node.append(
            apx.ProvidePort('PU16ARPort', 'S[4]',
                            '={65535, 65535, 65535, 65535}'))
        node.append(apx.ProvidePort('PU32Port', 'L', '=4294967295'))

        callback_map = {
            'RU8Port': 'RU8Port_cb_func',
            'RS16ARPort': 'RS16ARPort_cb_func',
            'SoundRequest': 'SoundRequest_cb_func'
        }

        output_dir = 'derived'
        output_dir_full = os.path.join(os.path.dirname(__file__), output_dir)
        if not os.path.exists(output_dir_full):
            os.makedirs(output_dir_full)
        time.sleep(0.1)
        # If we want ports in the order appended; explicitly finalize the node before generator
        node.finalize(sort=False, compact=True)
        apx.NodeGenerator().generate(output_dir_full,
                                     node,
                                     callbacks=callback_map)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}_Cbk.h'.format(node)),
                "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}_Cbk.h'.format(node)),
                "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)

        node.name = "Test_compact"
        apx.NodeGenerator().generate(output_dir_full,
                                     node,
                                     callbacks=callback_map,
                                     compact=True)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}.h'.format(node)), "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}.c'.format(node)), "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        with open(
                os.path.join(os.path.dirname(__file__), output_dir,
                             'ApxNode_{0.name}_Cbk.h'.format(node)),
                "r") as fp:
            generated = fp.read()
        with open(
                os.path.join(os.path.dirname(__file__), 'expected_gen',
                             'ApxNode_{0.name}_Cbk.h'.format(node)),
                "r") as fp:
            expected = fp.read()
        self.assertEqual(expected, generated)
        shutil.rmtree(output_dir_full)
Beispiel #30
0
    'FuelLevelPercent_I', autosar.DataElement('FuelLevelPercent', 'Percent_T'))
portInterfaces.createSenderReceiverInterface(
    'VehicleSpeed_I', autosar.DataElement('VehicleSpeed', 'VehicleSpeed_T'))
components = ws.createPackage('ComponentType', role='ComponentType')
swc = components.createApplicationSoftwareComponent('test_client')
swc.createRequirePort('EngineRunningStatus',
                      'EngineRunningStatus_I',
                      initValueRef=constants['C_EngineRunningStatus_IV'].ref)
swc.createRequirePort('FuelLevelPercent',
                      'FuelLevelPercent_I',
                      initValueRef=constants['C_FuelLevelPercent_IV'].ref)
swc.createRequirePort('VehicleSpeed',
                      'VehicleSpeed_I',
                      initValueRef=constants['C_VehicleSpeed_IV'].ref)

swc.behavior.createRunnable(swc.name + '_Init',
                            portAccess=[x.name for x in swc.providePorts])
swc.behavior.createRunnable(
    swc.name + '_Run',
    portAccess=[x.name for x in swc.requirePorts + swc.providePorts])

partition = autosar.rte.Partition()
partition.addComponent(swc)
typeGenerator = autosar.rte.TypeGenerator(partition)
typeGenerator.generate()

node = apx.Node()
node.import_autosar_swc(swc)
node.append(apx.ProvidePort('VehicleMode', 'C(0,15)', '=15'))
apx.NodeGenerator().generate('.', node, includes=['Rte_Type.h'])
apx.Context().append(node).generateAPX('.')