コード例 #1
0
    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)
コード例 #2
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}}'
     )
コード例 #3
0
ファイル: node.py プロジェクト: JoakimSundling/py-apx
 def append(self, item):
     """
     Adds the item to the node.
     Item can be of type DataType, RequirePort and ProvidePort
     returns the object (port or datatype)
     """
     if isinstance(item, apx.DataType):
         return self.add_type(item)
     if isinstance(item, apx.RequirePort):
         return self.add_require_port(item)
     elif isinstance(item, apx.ProvidePort):
         return self.add_provide_port(item)
     elif isinstance(item, autosar.component.Port):
         return self.add_autosar_port(item)
     elif isinstance(item, str):
         parts = apx_split_line(item)
         if len(parts) != 4:
             raise ValueError("invalid APX string: '%s'" % item)
         if parts[0] == 'R':
             newPort = apx.RequirePort(parts[1], parts[2], parts[3])
             if newPort is not None:
                 return self.add_require_port(newPort)
             else:
                 raise ValueError('apx.RequirePort() returned None')
         elif parts[0] == 'P':
             newPort = apx.ProvidePort(parts[1], parts[2], parts[3])
             if newPort is not None:
                 return self.add_provide_port(newPort)
             else:
                 raise ValueError('apx.ProvidePort() returned None')
         else:
             raise ValueError(parts[0])
     else:
         raise ValueError(type(item))
コード例 #4
0
ファイル: compiler_test.py プロジェクト: sander-visser/py-apx
 def test_compile_record_provide_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.ProvidePort('SoundRequest', 'T["SoundRequest_T"]',
                         '={65535,255,255}'))
     prog = compiler.exec(node.find('SoundRequest'))
     expected = bytes([
         apx.OPCODE_PACK_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_PACK_U16, apx.OPCODE_RECORD_SELECT
     ]) + "Volume\0".encode('ascii') + bytes([
         apx.OPCODE_PACK_U8, apx.OPCODE_RECORD_SELECT
     ]) + "Repetitions\0".encode('ascii') + bytes([
         apx.OPCODE_PACK_U8,
         apx.OPCODE_RECORD_LEAVE,
     ])
     self.assertEqual(prog, expected)
コード例 #5
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
コード例 #6
0
    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)
コード例 #7
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())
コード例 #8
0
   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)         
コード例 #9
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)
コード例 #10
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],'')
コード例 #11
0
ファイル: compiler_test.py プロジェクト: sander-visser/py-apx
    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)
コード例 #12
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))
コード例 #13
0
ファイル: node.py プロジェクト: JoakimSundling/py-apx
 def add_autosar_port(self, port, ws=None):
     """
     adds an autosar port to the node
     returns the port ID of the newly added port
     """
     if ws is None:
         ws = port.rootWS()
     assert (ws is not None)
     dataType = self._updateDataType(ws, port)
     if dataType is not None:
         if isinstance(port, autosar.component.RequirePort):
             apx_port = apx.RequirePort(
                 port.name, "T[%s]" % dataType.id,
                 self._calcAttributeFromAutosarPort(ws, port))
             return self.add_require_port(apx_port)
         elif isinstance(port, autosar.component.ProvidePort):
             apx_port = apx.ProvidePort(
                 port.name, "T[%s]" % dataType.id,
                 self._calcAttributeFromAutosarPort(ws, port))
             return self.add_provide_port(apx_port)
         else:
             raise ValueError('invalid type ' + str(type(port)))
コード例 #14
0
ファイル: node.py プロジェクト: sander-visser/py-apx
 def compact(self, name=None):
     """
     clones the node in a version where all type definitions are removed
     """
     if name is None:
         name = self.name
     compact = Node(name)
     compact.requirePorts = [
         apx.RequirePort(
             port.name,
             port.dsg.resolve_data_element().to_string(normalized=True),
             str(port.attr) if port.attr is not None else None)
         for port in self.requirePorts
     ]
     compact.providePorts = [
         apx.ProvidePort(
             port.name,
             port.dsg.resolve_data_element().to_string(normalized=True),
             str(port.attr) if port.attr is not None else None)
         for port in self.providePorts
     ]
     return compact
コード例 #15
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))
コード例 #16
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))
コード例 #17
0

@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
コード例 #18
0
        self.lock.acquire()
        self.PTestSignal1 = (self.PTestSignal1 + 1) & 0xFFFF
        self.PTestSignal2 = (self.PTestSignal2 + 1) & 0xFFFF
        self.PTestSignal3 = (self.PTestSignal3 + 1) & 0xFFFF
        self.lock.release()
        self.client.write_port('PTestSignal1', self.PTestSignal1)
        self.client.write_port('PTestSignal2', self.PTestSignal2)
        self.client.write_port('PTestSignal3', self.PTestSignal3)

    def stop(self):
        self.client.stop()


if __name__ == '__main__':
    node = apx.Node('StressNode1')
    node.append(apx.ProvidePort('PTestSignal1', 'S'))
    node.append(apx.ProvidePort('PTestSignal2', 'S'))
    node.append(apx.ProvidePort('PTestSignal3', 'S'))
    node.append(apx.ProvidePort('PTestSignal4', 'C[4]'))
    node.append(apx.ProvidePort('PTestSignal5', '{"Name"a[10]"Id"S}'))
    node.append(apx.RequirePort('QTestSignal1', 'S'))
    node.append(apx.RequirePort('QTestSignal2', 'S'))
    node.append(apx.RequirePort('QTestSignal3', 'S'))
    node.append(apx.RequirePort('QTestSignal4', 'S[4]'))
    node.append(apx.RequirePort('QTestSignal5', '{"Name"a[10]"Id"S}'))

    with apx.Client(node) as client:
        worker = MyApxWorker(client)
        if worker.connect():
            while True:
                try:
コード例 #19
0
ファイル: node_01.py プロジェクト: sander-visser/py-apx
import apx

node = apx.Node('Example')
node.append(apx.DataType('BatteryVoltage_T', 'S'))
node.append(apx.DataType('Date_T', '{"Year"C"Month"C(1,13)"Day"C(1,32)}'))
node.append(
    apx.DataType(
        'InactiveActive_T', 'C(0,3)',
        'VT("InactiveActive_Inactive", "InactiveActive_Active", "InactiveActive_Error", "InactiveActive_NotAvailable")'
    ))

node.append(
    apx.ProvidePort('BatteryVoltage', 'T["BatteryVoltage_T"]', '=65535'))
node.append(apx.RequirePort('CurrentDate', 'T["Date_T"]', '={255, 13, 32}'))
node.append(
    apx.RequirePort('ExteriorLightsActive', 'T["InactiveActive_T"]', '=3'))

print(apx.Context().append(node).dumps())
コード例 #20
0
 def _processLine(self, line):
     parts = apx_split_line(line)
     if parts is None:
         return
     if len(parts) > 0:
         if self.cs == START_SECTION:
             if parts[0] == 'N':  #Node Line
                 self.cs = NODE_SECTION
                 apxNode = apx.Node(parts[1])
                 self._applyNode(apxNode)
             else:
                 raise apx.ParseError(
                     'Syntax error on line {:d}. Expected Node definition'.
                     format(self.lineNumber, line))
         elif self.cs == NODE_SECTION:
             if parts[0] == 'T':
                 self.cs = TYPE_SECTION
                 apxType = apx.DataType(parts[1], parts[2], parts[3])
                 self._applyType(apxType)
             elif parts[0] == 'P':
                 self.cs = PROVIDE_SECTION
                 portLine = apx.ProvidePort(parts[1], parts[2], parts[3])
                 self._applyPort(portLine)
             elif parts[0] == 'R':
                 self.cs = REQUIRE_SECTION
                 portLine = apx.RequirePort(parts[1], parts[2], parts[3])
                 self._applyPort(portLine)
             else:
                 raise apx.ParseError(
                     'Syntax error on line {:d}: {}'.format(
                         self.lineNumber, line))
         elif self.cs == TYPE_SECTION:
             if parts[0] == 'T':
                 typeLine = apx.DataType(parts[1], parts[2], parts[3])
                 self._applyType(typeLine)
             elif parts[0] == 'P':
                 self.cs = PROVIDE_SECTION
                 portLine = apx.ProvidePort(parts[1], parts[2], parts[3])
                 self._applyPort(portLine)
             elif parts[0] == 'R':
                 self.cs = REQUIRE_SECTION
                 portLine = apx.RequirePort(parts[1], parts[2], parts[3])
                 self._applyPort(portLine)
             else:
                 raise apx.ParseError(
                     'Syntax error on line {:d}: {}'.format(
                         self.lineNumber, line))
         elif self.cs == PROVIDE_SECTION:
             if parts[0] == 'P':
                 portLine = apx.ProvidePort(parts[1], parts[2], parts[3])
                 self._applyPort(portLine)
             elif parts[0] == 'R':
                 self.cs = REQUIRE_SECTION
                 portLine = apx.RequirePort(parts[1], parts[2], parts[3])
                 self._applyPort(portLine)
         elif self.cs == REQUIRE_SECTION:
             if parts[0] == 'R':
                 portLine = apx.RequirePort(parts[1], parts[2], parts[3])
                 self._applyPort(portLine)
             elif parts[0] == 'P':
                 self.cs = PROVIDE_SECTION
                 portLine = apx.ProvidePort(parts[1], parts[2], parts[3])
                 self._applyPort(portLine)
             else:
                 raise apx.ParseError(
                     'Syntax error on line {:d}: {}'.format(
                         self.lineNumber, line))
         else:
             raise RuntimeError("Internal parser error, line={:d}".format(
                 self.lineNumber))
     else:
         raise apx.ParseError('Syntax error on line {:d}: {}'.format(
             self.lineNumber, line))
コード例 #21
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('.')
コード例 #22
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)
コード例 #23
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'])
    
コード例 #24
0
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'])
コード例 #25
0
ファイル: gen_apx.py プロジェクト: t-lund/c-apx
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('.',