[python] cleanup a little

This commit is contained in:
Felix Ruess
2015-01-22 19:25:48 +01:00
parent 9a0472d8d2
commit a2bb0e90c6
4 changed files with 50 additions and 49 deletions
@@ -1,23 +1,17 @@
#!/usr/bin/env python #!/usr/bin/env python
import wx import wx
import getopt
import sys
import messagesframe import messagesframe
class MessagesApp(wx.App): class MessagesApp(wx.App):
def OnInit(self): def OnInit(self):
self.main = messagesframe.MessagesFrame() self.main = messagesframe.MessagesFrame()
self.main.Show() self.main.Show()
self.SetTopWindow(self.main) self.SetTopWindow(self.main)
#opts, args = getopt.getopt(sys.argv[1:], "p:",
#["plot"])
#for o,a in opts:
#if o in ("-p", "--plot"):
#[ac_id, message, field, color, use_x] = a.split(':')
#self.main.AddPlot(int(ac_id), message, field, color, bool(int(use_x)))
return True return True
def main(): def main():
application = MessagesApp(0) application = MessagesApp(0)
application.MainLoop() application.MainLoop()
@@ -4,7 +4,6 @@ import sys
import os import os
import time import time
import threading import threading
import math
PPRZ_HOME = os.getenv("PAPARAZZI_HOME") PPRZ_HOME = os.getenv("PAPARAZZI_HOME")
sys.path.append(PPRZ_HOME + "/sw/lib/python") sys.path.append(PPRZ_HOME + "/sw/lib/python")
@@ -17,8 +16,20 @@ DATA_WIDTH = 100
HEIGHT = 800 HEIGHT = 800
BORDER = 1 BORDER = 1
class MessagesFrame(wx.Frame): class MessagesFrame(wx.Frame):
def message_recv(self, ac_id, name, values): def message_recv(self, ac_id, name, values):
"""Handle incoming messages
Callback function for IvyMessagesInterface
:param ac_id: aircraft id
:type ac_id: int
:param name: message name
:type name: str
:param values: message values
:type values: list
"""
if ac_id in self.aircrafts and name in self.aircrafts[ac_id].messages: if ac_id in self.aircrafts and name in self.aircrafts[ac_id].messages:
if time.time() - self.aircrafts[ac_id].messages[name].last_seen < 0.2: if time.time() - self.aircrafts[ac_id].messages[name].last_seen < 0.2:
return return
@@ -31,11 +42,10 @@ class MessagesFrame(wx.Frame):
start = 0 start = 0
end = book.GetPageCount() end = book.GetPageCount()
while (start < end): while start < end:
if book.GetPageText(start) > name: if book.GetPageText(start) > name:
return start return start
start = start + 1 start += 1
return start return start
def update_leds(self): def update_leds(self):
@@ -140,5 +150,5 @@ class MessagesFrame(wx.Frame):
def OnClose(self, event): def OnClose(self, event):
self.timer.cancel() self.timer.cancel()
self.interface.Shutdown() self.interface.shutdown()
self.Destroy() self.Destroy()
+5 -3
View File
@@ -7,9 +7,10 @@ import time
import os import os
import re import re
class Message: class Message:
def __init__(self, class_name, name): def __init__(self, class_name, name):
messages_xml_map.ParseMessages() messages_xml_map.parse_messages()
self.field_value = [] self.field_value = []
self.field_names = messages_xml_map.message_dictionary[class_name][name] self.field_names = messages_xml_map.message_dictionary[class_name][name]
self.field_controls = [] self.field_controls = []
@@ -17,9 +18,10 @@ class Message:
self.last_seen = time.clock() self.last_seen = time.clock()
self.name = name self.name = name
class Aircraft: class Aircraft:
def __init__(self, id): def __init__(self, ac_id):
self.ac_id = id self.ac_id = ac_id
self.messages = {} self.messages = {}
self.messages_book = None self.messages_book = None
+24 -29
View File
@@ -3,43 +3,28 @@
from __future__ import absolute_import, print_function from __future__ import absolute_import, print_function
import os import os
import sys
import getopt
messages_path = '%s/conf/messages.xml' % os.getenv("PAPARAZZI_HOME") default_messages_file = '%s/conf/messages.xml' % os.getenv("PAPARAZZI_HOME")
message_dictionary = {} message_dictionary = {}
message_dictionary_types = {} message_dictionary_types = {}
message_dictionary_id_name = {} message_dictionary_id_name = {}
message_dictionary_name_id = {} message_dictionary_name_id = {}
def Usage(scmd):
lpathitem = scmd.split('/')
fmt = '''Usage: %s [-h | --help] [-f FILE | --file=FILE]
where
\t-h | --help print this message
\t-f FILE | --file=FILE where FILE is path to messages.xml
'''
print(fmt % lpathitem[-1])
def GetOptions(): class MessagesNotFound(Exception):
try: def __init__(self, filename):
optlist, left_args = getopt.getopt(sys.argv[1:],'hf:', ['help','file=']) self.filename = filename
except getopt.GetoptError:
# print help information and exit: def __str__(self):
Usage(sys.argv[0]) return "messages file " + repr(self.filename) + " not found"
sys.exit(2)
for o, a in optlist:
if o in ("-h", "--help"):
Usage(sys.argv[0])
sys.exit()
elif o in ("-f", "--file"):
messages_path = a
def ParseMessages(): def parse_messages(messages_file=default_messages_file):
if not os.path.isfile(messages_file):
raise MessagesNotFound(messages_file)
from lxml import etree from lxml import etree
tree = etree.parse( messages_path) tree = etree.parse(messages_file)
for the_class in tree.xpath("//msg_class[@name]"): for the_class in tree.xpath("//msg_class[@name]"):
class_name = the_class.attrib['name'] class_name = the_class.attrib['name']
if class_name not in message_dictionary: if class_name not in message_dictionary:
@@ -53,7 +38,7 @@ def ParseMessages():
message_id = the_message.attrib['id'] message_id = the_message.attrib['id']
else: else:
message_id = the_message.attrib['ID'] message_id = the_message.attrib['ID']
if (message_id[0:2] == "0x"): if message_id[0:2] == "0x":
message_id = int(message_id, 16) message_id = int(message_id, 16)
else: else:
message_id = int(message_id) message_id = int(message_id)
@@ -70,9 +55,19 @@ def ParseMessages():
message_dictionary[class_name][message_name].append(the_field.attrib['name']) message_dictionary[class_name][message_name].append(the_field.attrib['name'])
message_dictionary_types[class_name][message_id].append(the_field.attrib['type']) message_dictionary_types[class_name][message_id].append(the_field.attrib['type'])
def test(): def test():
GetOptions() import argparse
ParseMessages() parser = argparse.ArgumentParser()
parser.add_argument("-f", "--file", help="path to messages.xml file", default=default_messages_file)
parser.add_argument("-l", "--list", help="list parsed messages", action="store_true", dest="list_messages")
parser.add_argument("-c", "--class", help="message class", dest="msg_class", default="telemetry")
args = parser.parse_args()
parse_messages(args.file)
if args.list_messages:
print("Listing %i messages in '%s' msg_class" % (len(message_dictionary[args.msg_class]), args.msg_class))
for msg in message_dictionary[args.msg_class]:
print(msg)
if __name__ == '__main__': if __name__ == '__main__':
test() test()