[python] used updated IvyMessagesInterface

This commit is contained in:
Felix Ruess
2016-02-28 00:02:50 +01:00
parent 390597e387
commit eba0a75a3a
8 changed files with 24 additions and 41 deletions
@@ -66,7 +66,8 @@ class RadioWatchFrame(wx.Frame):
sizer.Add(self.rc_statusText, 1, wx.EXPAND)
self.SetSizer(sizer)
sizer.Layout()
self.interface = IvyMessagesInterface(self.message_recv)
self.interface = IvyMessagesInterface("radiowatchframe")
self.interface.subscribe(self.message_recv)
self.update_timer = wx.CallLater(UPDATE_INTERVAL, self.gui_update)
def OnClose(self, event):
@@ -35,16 +35,13 @@ class Guidance(object):
except Exception as e:
print(e)
print("auto2 setting not found, mode change not possible.")
self._interface = IvyMessagesInterface(self.message_recv)
def message_recv(self, ac_id, msg):
if self.verbose:
print("Got msg %s" % msg.name)
self._interface = IvyMessagesInterface("guided mode example")
def shutdown(self):
if self._interface is not None:
print("Shutting down ivy interface...")
self._interface.shutdown()
self._interface = None
def __del__(self):
self.shutdown()
@@ -24,7 +24,8 @@ server = None
class Ivy2RedisServer():
def __init__(self, redishost, redisport, verbose=False):
self.verbose = verbose
self.interface = IvyMessagesInterface(self.message_recv)
self.interface = IvyMessagesInterface("Ivy2Redis")
self.interface.subscribe(self.message_recv)
self.r = redis.StrictRedis(host=redishost, port=redisport, db=0)
self.keep_running = True
print("Connected to redis server %s on port %i" % (redishost, redisport))
@@ -172,7 +172,9 @@ class MessagesFrame(wx.Frame):
self.timer = threading.Timer(0.1, self.update_leds)
self.timer.start()
self.msg_class = msg_class
self.interface = IvyMessagesInterface(self.message_recv)
self.interface = IvyMessagesInterface("Paparazzi Messages Viewer")
self.interface.subscribe(self.message_recv)
def OnClose(self, event):
self.timer.cancel()
@@ -18,11 +18,7 @@ from pprzlink.message import PprzMessage
class WaypointMover(object):
def __init__(self, verbose=False):
self.verbose = verbose
self._interface = IvyMessagesInterface(self.message_recv)
def message_recv(self, ac_id, msg):
if self.verbose:
print("Got msg %s" % msg.name)
self._interface = IvyMessagesInterface("WaypointMover")
def shutdown(self):
print("Shutting down ivy interface...")
@@ -32,7 +32,7 @@ class Aircraft(object):
class MessagePicker(wx.Frame):
def __init__(self, parent, callback, initIvy=True):
def __init__(self, parent, callback, ivy_interface=None):
wx.Frame.__init__(self, parent, name="MessagePicker", title=u'Message Picker', size=wx.Size(320,640))
self.aircrafts = {}
@@ -43,7 +43,11 @@ class MessagePicker(wx.Frame):
self.tree.Bind(wx.EVT_LEFT_DCLICK, self.OnDoubleClick)
self.tree.Bind(wx.EVT_CHAR, self.OnKeyChar)
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.message_interface = IvyMessagesInterface(self.msg_recv, initIvy)
if ivy_interface is None:
self.message_interface = IvyMessagesInterface("MessagePicker")
else:
self.message_interface = ivy_interface
self.message_interface.subscribe(self.msg_recv)
def OnClose(self, event):
# if we have a parent (like the plotpanel) only hide instead of shutdown
@@ -19,7 +19,8 @@ sys.path.append(PPRZ_SRC + "/sw/ext/pprzlink/lib/v1.0/python")
import pprz_env
from pprzlink import messages_xml_map
from ivy_msg_interface import IvyMessagesInterface
from pprzlink.message import PprzMessage
class PlotData:
def __init__(self, ivy_msg_id, title, width, color=None, scale=1.0):
@@ -172,7 +173,6 @@ class PlotPanel(object):
self.frame = frame # the frame owns any controls we might need to update
parent.SetDropTarget(TextDropTarget(self)) # calls self.OnDropText when drag and drop complete
self.InitIvy()
self.width = 800
self.height = 200
@@ -191,6 +191,8 @@ class PlotPanel(object):
messages_xml_map.parse_messages()
self.ivy_interface = IvyMessagesInterface(_IVY_APPNAME)
# start the timer
self.timer = wx.FutureCall(self.plot_interval, self.OnTimer)
@@ -229,29 +231,9 @@ class PlotPanel(object):
pass
def ShowMessagePicker(self, parent):
frame = messagepicker.MessagePicker(parent, self.BindCurve, False)
frame = messagepicker.MessagePicker(parent, self.BindCurve, self.ivy_interface)
frame.Show()
def InitIvy(self):
# initialising the bus
IvyInit(_IVY_APPNAME, # application name for Ivy
"", # "[%s is ready]" % IVYAPPNAME, # ready message
0, # main loop is local (ie. using IvyMainloop)
lambda x, y: y, # handler called on connection/deconnection
lambda x, y: y # handler called when a diemessage is received
)
# starting the bus
# Note: env variable IVYBUS will be used if no parameter or empty string
# is given ; this is performed by IvyStart (C)
try:
logging.getLogger('Ivy').setLevel(logging.WARN)
IvyStart(pprz_env.IVY_BUS)
# binding to every message
# IvyBindMsg(self.OnIvyMsg, "(.*)")
except:
IvyStop()
def OnDropText(self, data):
[ac_id, category, message, field, scale] = data.encode('ASCII').split(':')
self.BindCurve(int(ac_id), message, field, scale=float(scale))
@@ -299,7 +281,7 @@ class PlotPanel(object):
random.randint(0, 255))
return
ivy_id = IvyBindMsg(self.OnIvyMsg, str(message_string))
ivy_id = self.ivy_interface.bind_raw(self.OnIvyMsg, str(message_string))
title = '%i:%s:%s' % (ac_id, message, field)
self.plots[ac_id][message][field] = PlotData(ivy_id, title, self.plot_size, color, scale)
self.frame.AddCurve(ivy_id, title, use_as_x)
@@ -336,7 +318,7 @@ class PlotPanel(object):
if (self.x_axis is not None) and (self.x_axis.id == ivy_id):
self.x_axis = None
IvyUnBindMsg(ivy_id)
self.ivy_interface.unbind(ivy_id)
del self.plots[ac_id][msg][field]
if len(self.plots[ac_id][msg]) == 0:
del self.plots[ac_id][msg]