Esempio n. 1
0
   def __init__(self,node):
      if isinstance(node, apx.Node):
          self.node=node
          context=apx.Context()
          context.append(node)
          apx_text=context.dumps()
      elif isinstance(node, str):
         parser = apx.Parser()
         apx_text=node
         self.node = parser.loads(apx_text)
      else:
         raise NotImplementedError(type(node))

      compiler = apx.compiler.Compiler()
      self.name=self.node.name
      self.inPortByteMap = [] #length: length of self.inPortDataFile
      self.inPortDataMap = [] #length: number of require ports
      self.outPortDataMap = [] #length: number of provide ports
      self.inPortPrograms = [] #length: number of require ports
      self.outPortPrograms = [] #length: number of provide ports
      self.outPortValues = [] #length: number of provide ports
      self.inPortDataFile = self._createInPortDataFile(self.node, compiler) if len(self.node.requirePorts)>0 else None
      self.outPortDataFile = self._createOutPortDataFile(self.node, compiler) if len(self.node.providePorts)>0 else None
      self.definitionFile = self._createDefinitionFile(node.name,apx_text)
      self.vm = apx.VM()
      self.lock=threading.Lock() #the virtual machine is not thread-safe, use this lock to protect it in case users try to read/write ports from multiple threads
      if self.inPortDataFile is not None:
         self.inPortDataFile.nodeDataHandler=self
      self.nodeDataClient=None
Esempio n. 2
0
 def create_node(self, apxText):
     """
     Creates new APX node from a string
     """
     parser = apx.Parser()
     node = parser.loads(apxText)
     if node is not None:
         self.attach_node(node)
Esempio n. 3
0
    def test_parse_node2(self):
        apx_text = """APX/1.2
N"TestNode"
T"VehicleSpeed_T"S
T"EngineSpeed_T"S
T"InactiveActive_T"C(0,3):VT("InactiveActive_Inactive","InactiveActive_Active","InactiveActive_Error","InactiveActive_NotAvailable")
R"VehicleSpeed"T[0]:=0xFFFF
R"EngineSpeed"T[1]:=0xFFFF
R"ParkBrakeState"T["InactiveActive_T"]:=3
"""

        apx_parser = apx.Parser()
        node = apx_parser.loads(apx_text)
        self.assertIsInstance(node, apx.Node)
        self.assertEqual(node.name, "TestNode")
Esempio n. 4
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())
Esempio n. 5
0
    def test_parse_comments(self):
        apx_text = """APX/1.2
N"TestNode"
T"VehicleSpeed_T"S
T"EngineSpeed_T"S
T"InactiveActive_T"C(0,3):VT("InactiveActive_Inactive","InactiveActive_Active","InactiveActive_Error","InactiveActive_NotAvailable")
#Line Comment1
#Line Comment2
R"VehicleSpeed"T[0]:=0xFFFF #A Comment
R"EngineSpeed"T[1]:=0xFFFF
R"ParkBrakeState"T["InactiveActive_T"]:=3 
"""

        apx_parser = apx.Parser()
        node = apx_parser.loads(apx_text)
        self.assertIsInstance(node, apx.Node)
        self.assertEqual(node.name, "TestNode")
        port = node.find('ParkBrakeState')
        self.assertIsInstance(port, apx.RequirePort)
Esempio n. 6
0
    def test_parse_node(self):
        text = """APX/1.2
N"TestSWC"
T"Percent_T"C
T"CoolantTemp_T"C
T"InactiveActive_T"C(0,3):VT("InactiveActive_Inactive","InactiveActive_Active","InactiveActive_Error","InactiveActive_NotAvailable")
T"OnOff_T"C(0,3):VT("OnOff_Off","OnOff_On","OnOff_Error","OnOff_NotAvailable")
T"EngineSpeed_T"S
T"VehicleSpeed_T"S
R"FuelLevel"T[0]:=255
R"CoolantTemp"T[1]:=255
R"ParkBrakeState"T[2]:=3
R"MainBeamState"T[3]:=3
P"EngineSpeed"T[4]:=0xFFFF
P"VehicleSpeed"T[5]:=0xFFFF
"""

        apx_parser = apx.Parser()
        node = apx_parser.loads(text)
        self.assertIsInstance(node, apx.Node)
        self.assertEqual(node.name, "TestSWC")
        self.assertEqual(len(node.dataTypes), 6)
        self.assertEqual(len(node.requirePorts), 4)
        self.assertEqual(len(node.providePorts), 2)
        self.assertIs(node.requirePorts[0].dsg.dataElement.typeReference,
                      node.dataTypes[0])
        self.assertIs(node.requirePorts[1].dsg.dataElement.typeReference,
                      node.dataTypes[1])
        self.assertIs(node.requirePorts[2].dsg.dataElement.typeReference,
                      node.dataTypes[2])
        self.assertIs(node.requirePorts[3].dsg.dataElement.typeReference,
                      node.dataTypes[3])
        self.assertIs(node.providePorts[0].dsg.dataElement.typeReference,
                      node.dataTypes[4])
        self.assertIs(node.providePorts[1].dsg.dataElement.typeReference,
                      node.dataTypes[5])
        self.assertEqual(node.find('FuelLevel').id, 0)
        self.assertEqual(node.find('CoolantTemp').id, 1)
        self.assertEqual(node.find('ParkBrakeState').id, 2)
        self.assertEqual(node.find('MainBeamState').id, 3)
        self.assertEqual(node.find('EngineSpeed').id, 0)
        self.assertEqual(node.find('VehicleSpeed').id, 1)
Esempio n. 7
0
#!/usr/bin/env python3
import apx
import argparse

if __name__ == '__main__':
    arg_parser = argparse.ArgumentParser()
    arg_parser.add_argument('input_files',  nargs='+', help='List of APX files')
    arg_parser.add_argument('-n', '--name', help='Name of the new APX node', required=True)
    arg_parser.add_argument('--sort', help='Name of the new APX node', action='store_true', default=False)
    arg_parser.add_argument('--normalize', help='Forces APX to be generated in normalized form', action='store_true', default=False)

    args = arg_parser.parse_args()

    node_list =[]
    parser = apx.Parser()
    for file in args.input_files:
        node_list.append(parser.parse(file))
    if len(node_list) > 0:
        apx_node = apx.Node(args.name)
        for other_node in node_list:
            apx_node.extend(other_node)
    apx_node.finalize(sort=args.sort)
    apx_node.save_apx(normalized=args.normalize)
Esempio n. 8
0
import argparse

if __name__ == '__main__':
    arg_parser = argparse.ArgumentParser()
    arg_parser.add_argument('input_file',
                            nargs='*',
                            help='Path to input file (.apx)')
    arg_parser.add_argument(
        '-o',
        dest='output_file',
        help='Output file name (default is to overwrite input file)',
        default=None)
    arg_parser.add_argument('-p',
                            '--pipe',
                            help='Uses stdin and stdout instead of files',
                            action='store_true',
                            default=False)
    args = arg_parser.parse_args()
    if len(args.input_file) == 0 and not args.pipe:
        arg_parser.print_help()
        sys.exit(1)

    output_file = args.output_file if args.output_file is not None else args.input_file[
        0]

    if args.pipe:
        node = apx.Parser().load(sys.stdin)
        print(node.dumps(normalized=False))
    else:
        node = apx.Parser().parse(args.input_file[0])
        node.save_apx(output_file=output_file, normalized=False)
Esempio n. 9
0
        '--mirror',
        help='Forces output of head and tail to be mirrored',
        action='store_true',
        default=False)

    args = arg_parser.parse_args()
    if args.file is None and len(args.port_names) == 0:
        arg_parser.print_help()
        sys.exit(1)

    head_node = create_apx_node_from_file_name(args.head, args.head_name)
    if args.tail is not None:
        tail_node = create_apx_node_from_file_name(args.tail, args.tail_name)
    else:
        tail_node = None
    source_node = apx.Parser().parse(args.input_file)

    if args.file is not None:
        port_names = parse_lines_in_file(args.file)
    else:
        port_names = args.port_names

    processed = set()
    for name in port_names:
        source_port = source_node.find(name)
        if (source_port is not None) and (source_port.name not in processed):
            processed.add(source_port.name)
            head_node.add_port_from_node(source_node, source_port)

    if args.mirror:
        head_node = head_node.mirror()