mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-01 21:07:40 +08:00
[python] cleanup a little
This commit is contained in:
@@ -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):
|
||||||
@@ -53,7 +63,7 @@ class MessagesFrame(wx.Frame):
|
|||||||
self.timer.start()
|
self.timer.start()
|
||||||
|
|
||||||
def setup_image_list(self, notebook):
|
def setup_image_list(self, notebook):
|
||||||
imageList = wx.ImageList(24,24)
|
imageList = wx.ImageList(24, 24)
|
||||||
|
|
||||||
image = wx.Image(PPRZ_HOME + "/data/pictures/gray_led24.png")
|
image = wx.Image(PPRZ_HOME + "/data/pictures/gray_led24.png")
|
||||||
bitmap = wx.BitmapFromImage(image)
|
bitmap = wx.BitmapFromImage(image)
|
||||||
@@ -84,7 +94,7 @@ class MessagesFrame(wx.Frame):
|
|||||||
grid_sizer = wx.FlexGridSizer(len(aircraft.messages[name].field_names), 2)
|
grid_sizer = wx.FlexGridSizer(len(aircraft.messages[name].field_names), 2)
|
||||||
|
|
||||||
index = self.find_page(messages_book, name)
|
index = self.find_page(messages_book, name)
|
||||||
messages_book.InsertPage(index, field_panel, name, imageId = 1)
|
messages_book.InsertPage(index, field_panel, name, imageId=1)
|
||||||
aircraft.messages[name].index = index
|
aircraft.messages[name].index = index
|
||||||
|
|
||||||
# update indexes of pages which are to be moved
|
# update indexes of pages which are to be moved
|
||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -67,12 +52,22 @@ def ParseMessages():
|
|||||||
|
|
||||||
for the_field in the_message.xpath('field[@name]'):
|
for the_field in the_message.xpath('field[@name]'):
|
||||||
# for now, just save the field names -- in the future maybe expand this to save a struct?
|
# for now, just save the field names -- in the future maybe expand this to save a struct?
|
||||||
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()
|
||||||
|
|||||||
Reference in New Issue
Block a user