diff --git a/software/monitor/monitor/MonitorUI.cs b/software/monitor/monitor/MonitorUI.cs
index f2f43e0..a703ec4 100644
--- a/software/monitor/monitor/MonitorUI.cs
+++ b/software/monitor/monitor/MonitorUI.cs
@@ -25,6 +25,11 @@
// 15/10/2019 dimercur
// Demande #43: Migrer le code lié à la gestion des images dans sa propre classe widget
+// 11/04/2019 dimercur
+// Suppression du timer battery
+// suppression de la case à cocher getbattery
+// Prise en charge des messages ANSWER_TIMEOUT et ANSWER_COM_ERROR dans OnCommandReceivedEvent
+
using System;
using Gtk;
using Gdk;
@@ -68,11 +73,6 @@ public partial class MainWindow : Gtk.Window
///
private ImageWidget imageWidget;
- ///
- /// Timer for battery request
- ///
- private System.Timers.Timer batteryTimer;
-
///
/// Counter for image reception and detecting bad picture ratio
///
@@ -91,10 +91,6 @@ public partial class MainWindow : Gtk.Window
// Init of image widget
imageWidget = new ImageWidget(drawingAreaCamera);
- // create new timer for battery request, every 10s
- batteryTimer = new System.Timers.Timer(10000.0);
- batteryTimer.Elapsed += OnBatteryTimerElapsed;
-
// Customize controls
AdjustControls();
}
@@ -145,7 +141,6 @@ public partial class MainWindow : Gtk.Window
if (cmdManager != null) cmdManager.Close();
- batteryTimer.Stop();
break;
case SystemState.ServerConnected:
buttonServerConnection.Label = "Disconnect";
@@ -159,14 +154,12 @@ public partial class MainWindow : Gtk.Window
labelRobotControl.Sensitive = false;
gtkAlignmentRobotControl.Sensitive = false;
- batteryTimer.Stop();
break;
case SystemState.RobotConnected:
buttonRobotActivation.Label = "Reset";
labelRobotControl.Sensitive = true;
gtkAlignmentRobotControl.Sensitive = true;
- batteryTimer.Start();
break;
default:
labelRobot.Sensitive = false;
@@ -259,64 +252,81 @@ public partial class MainWindow : Gtk.Window
// Depending on message received (based on header), launch correponding action
header = header.ToUpper();
- if (header == DestijlCommandList.ROBOT_BATTERY_LEVEL)
+ switch (header)
{
- string batLevel = "";
+ case DestijlCommandList.ANSWER_TIMEOUT:
+ case DestijlCommandList.ANSWER_COM_ERROR:
+ Console.WriteLine("Communication lost with robot");
+ Gtk.Application.Invoke(delegate
+ {
+ MessagePopup(MessageType.Error, ButtonsType.Ok, "Robot lost", "Communication with robot lost !");
+ });
- switch (data[0])
- {
- case '2':
- batLevel = "High";
- break;
- case '1':
- batLevel = "Low";
- break;
- case '0':
- batLevel = "Empty";
- break;
- default:
- batLevel = "Invalid value";
- break;
- }
+ ChangeState(SystemState.ServerConnected);
- Gtk.Application.Invoke(delegate
- {
- labelBatteryLevel.Text = batLevel;
- });
- }
- else if (header == DestijlCommandList.CAMERA_IMAGE)
- {
- imageReceivedCounter++;
+ break;
+ case DestijlCommandList.ROBOT_BATTERY_LEVEL:
+ string batLevel = "";
- byte[] image = new byte[2];
- try
- {
- image = Convert.FromBase64String(data);
- }
- catch (FormatException)
- {
- badImageReceivedCounter++;
- Console.WriteLine("Unable to convert from base64 ");
- }
+ switch (data[0])
+ {
+ case '2':
+ batLevel = "High";
+ break;
+ case '1':
+ batLevel = "Low";
+ break;
+ case '0':
+ batLevel = "Empty";
+ break;
+ default:
+ batLevel = "Invalid value";
+ break;
+ }
- try
- {
- imageWidget.ShowImage(image);
- }
- catch (GLib.GException)
- {
- badImageReceivedCounter++;
+ Gtk.Application.Invoke(delegate
+ {
+ labelBatteryLevel.Text = batLevel;
+ });
+
+ break;
+ case DestijlCommandList.CAMERA_IMAGE:
+ imageReceivedCounter++;
+
+ byte[] image = new byte[2];
+ try
+ {
+ image = Convert.FromBase64String(data);
+ }
+ catch (FormatException)
+ {
+ badImageReceivedCounter++;
+ Console.WriteLine("Unable to convert from base64 ");
+ }
+
+ try
+ {
+ imageWidget.ShowImage(image);
+ }
+ catch (GLib.GException)
+ {
+ badImageReceivedCounter++;
#if DEBUG
- Console.WriteLine("Bad Image: " + badImageReceivedCounter +
- " / " + imageReceivedCounter +
- " (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)");
+ Console.WriteLine("Bad Image: " + badImageReceivedCounter +
+ " / " + imageReceivedCounter +
+ " (" + badImageReceivedCounter * 100 / imageReceivedCounter + "%)");
#endif
- }
- //}
- }
- else if (header == DestijlCommandList.CAMERA_POSITION)
- {
- imageWidget.Position = DestijlCommandManager.DecodePosition(data);
+ }
+
+ break;
+ case DestijlCommandList.CAMERA_POSITION:
+ imageWidget.Position = DestijlCommandManager.DecodePosition(data);
+
+ break;
+ default:
+ Console.WriteLine("Untreated message from supervisor: " + header + ": " + data);
+
+ break;
}
}
}
@@ -526,50 +536,6 @@ public partial class MainWindow : Gtk.Window
}
}
- ///
- /// Callback called when battery timer expired
- ///
- /// Sender object
- /// Event
- void OnBatteryTimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
- {
- DestijlCommandManager.CommandStatus status;
- batteryTimer.Stop();
-
- // if battery checkbox is checked, a request for battery level is done
- if (checkButtonGetBattery.Active)
- {
- status = cmdManager.RobotGetBattery();
-
- // if status is not ok, show appropriate message and print "Unknown" for battery level
- switch (status)
- {
- case DestijlCommandManager.CommandStatus.Success:
- batteryTimer.Start();
- break;
- case DestijlCommandManager.CommandStatus.CommunicationLostWithServer:
- Console.WriteLine("Error: Connection lost with server");
- batteryTimer.Stop();
- labelBatteryLevel.Text = "Unknown";
-
- ChangeState(SystemState.NotConnected);
- break;
- case DestijlCommandManager.CommandStatus.CommunicationLostWithRobot:
- Console.WriteLine("Error: Connection lost with robot");
- batteryTimer.Stop();
- labelBatteryLevel.Text = "Unknown";
-
- ChangeState(SystemState.ServerConnected);
- break;
- default:
- labelBatteryLevel.Text = "Unknown";
- batteryTimer.Start();
- break;
- }
- }
- else batteryTimer.Start();
- }
-
///
/// Callback called when checkbutton for camera is clicked
///
diff --git a/software/monitor/monitor/gtk-gui/MainWindow.cs b/software/monitor/monitor/gtk-gui/MainWindow.cs
index 466b549..30def1b 100644
--- a/software/monitor/monitor/gtk-gui/MainWindow.cs
+++ b/software/monitor/monitor/gtk-gui/MainWindow.cs
@@ -125,8 +125,6 @@ public partial class MainWindow
private global::Gtk.Label labelBatteryLevel;
- private global::Gtk.CheckButton checkButtonGetBattery;
-
protected virtual void Build()
{
global::Stetic.Gui.Initialize(this);
@@ -530,92 +528,91 @@ public partial class MainWindow
this.table4.ColumnSpacing = ((uint)(6));
// Container child table4.Gtk.Table+TableChild
this.buttonDown = new global::Gtk.Button();
- global::Gtk.Tooltips w40 = new Gtk.Tooltips();
- w40.SetTip(this.buttonDown, "Move robot backward", "Move robot backward");
+ this.buttonDown.TooltipMarkup = "Move robot backward";
this.buttonDown.CanFocus = true;
this.buttonDown.Name = "buttonDown";
this.buttonDown.UseUnderline = true;
- global::Gtk.Image w41 = new global::Gtk.Image();
- w41.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-down-symbolic.symbolic.png");
- this.buttonDown.Image = w41;
+ global::Gtk.Image w40 = new global::Gtk.Image();
+ w40.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-down-symbolic.symbolic.png");
+ this.buttonDown.Image = w40;
this.table4.Add(this.buttonDown);
- global::Gtk.Table.TableChild w42 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonDown]));
- w42.TopAttach = ((uint)(2));
- w42.BottomAttach = ((uint)(3));
- w42.LeftAttach = ((uint)(1));
- w42.RightAttach = ((uint)(2));
- w42.XOptions = ((global::Gtk.AttachOptions)(4));
- w42.YOptions = ((global::Gtk.AttachOptions)(4));
+ global::Gtk.Table.TableChild w41 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonDown]));
+ w41.TopAttach = ((uint)(2));
+ w41.BottomAttach = ((uint)(3));
+ w41.LeftAttach = ((uint)(1));
+ w41.RightAttach = ((uint)(2));
+ w41.XOptions = ((global::Gtk.AttachOptions)(4));
+ w41.YOptions = ((global::Gtk.AttachOptions)(4));
// Container child table4.Gtk.Table+TableChild
this.buttonForward = new global::Gtk.Button();
- w40.SetTip(this.buttonForward, "Move robot forward", "Move robot forward");
+ this.buttonForward.TooltipMarkup = "Move robot forward";
this.buttonForward.CanFocus = true;
this.buttonForward.Name = "buttonForward";
this.buttonForward.UseUnderline = true;
- global::Gtk.Image w43 = new global::Gtk.Image();
- w43.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-up-symbolic.symbolic.png");
- this.buttonForward.Image = w43;
+ global::Gtk.Image w42 = new global::Gtk.Image();
+ w42.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-up-symbolic.symbolic.png");
+ this.buttonForward.Image = w42;
this.table4.Add(this.buttonForward);
- global::Gtk.Table.TableChild w44 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonForward]));
- w44.LeftAttach = ((uint)(1));
- w44.RightAttach = ((uint)(2));
- w44.XOptions = ((global::Gtk.AttachOptions)(4));
- w44.YOptions = ((global::Gtk.AttachOptions)(4));
+ global::Gtk.Table.TableChild w43 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonForward]));
+ w43.LeftAttach = ((uint)(1));
+ w43.RightAttach = ((uint)(2));
+ w43.XOptions = ((global::Gtk.AttachOptions)(4));
+ w43.YOptions = ((global::Gtk.AttachOptions)(4));
// Container child table4.Gtk.Table+TableChild
this.buttonLeft = new global::Gtk.Button();
- w40.SetTip(this.buttonLeft, "Turn robot to the left", "Turn robot to the left");
+ this.buttonLeft.TooltipMarkup = "Turn robot to the left";
this.buttonLeft.CanFocus = true;
this.buttonLeft.Name = "buttonLeft";
this.buttonLeft.UseUnderline = true;
- global::Gtk.Image w45 = new global::Gtk.Image();
- w45.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-start-symbolic.symbolic.png");
- this.buttonLeft.Image = w45;
+ global::Gtk.Image w44 = new global::Gtk.Image();
+ w44.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-start-symbolic.symbolic.png");
+ this.buttonLeft.Image = w44;
this.table4.Add(this.buttonLeft);
- global::Gtk.Table.TableChild w46 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonLeft]));
- w46.TopAttach = ((uint)(1));
- w46.BottomAttach = ((uint)(2));
- w46.XOptions = ((global::Gtk.AttachOptions)(4));
- w46.YOptions = ((global::Gtk.AttachOptions)(4));
+ global::Gtk.Table.TableChild w45 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonLeft]));
+ w45.TopAttach = ((uint)(1));
+ w45.BottomAttach = ((uint)(2));
+ w45.XOptions = ((global::Gtk.AttachOptions)(4));
+ w45.YOptions = ((global::Gtk.AttachOptions)(4));
// Container child table4.Gtk.Table+TableChild
this.buttonRight = new global::Gtk.Button();
- w40.SetTip(this.buttonRight, "Turn robot to the right", "Turn robot to the right");
+ this.buttonRight.TooltipMarkup = "Turn robot to the right";
this.buttonRight.CanFocus = true;
this.buttonRight.Name = "buttonRight";
this.buttonRight.UseUnderline = true;
- global::Gtk.Image w47 = new global::Gtk.Image();
- w47.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-end-symbolic.symbolic.png");
- this.buttonRight.Image = w47;
+ global::Gtk.Image w46 = new global::Gtk.Image();
+ w46.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.pan-end-symbolic.symbolic.png");
+ this.buttonRight.Image = w46;
this.table4.Add(this.buttonRight);
- global::Gtk.Table.TableChild w48 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonRight]));
- w48.TopAttach = ((uint)(1));
- w48.BottomAttach = ((uint)(2));
- w48.LeftAttach = ((uint)(2));
- w48.RightAttach = ((uint)(3));
- w48.XOptions = ((global::Gtk.AttachOptions)(4));
- w48.YOptions = ((global::Gtk.AttachOptions)(4));
+ global::Gtk.Table.TableChild w47 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonRight]));
+ w47.TopAttach = ((uint)(1));
+ w47.BottomAttach = ((uint)(2));
+ w47.LeftAttach = ((uint)(2));
+ w47.RightAttach = ((uint)(3));
+ w47.XOptions = ((global::Gtk.AttachOptions)(4));
+ w47.YOptions = ((global::Gtk.AttachOptions)(4));
// Container child table4.Gtk.Table+TableChild
this.buttonStop = new global::Gtk.Button();
- w40.SetTip(this.buttonStop, "Stop robot movements", "Stop robot movements");
+ this.buttonStop.TooltipMarkup = "Stop robot movements";
this.buttonStop.CanFocus = true;
this.buttonStop.Name = "buttonStop";
this.buttonStop.UseUnderline = true;
- global::Gtk.Image w49 = new global::Gtk.Image();
- w49.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.hand-filled-32.png");
- this.buttonStop.Image = w49;
+ global::Gtk.Image w48 = new global::Gtk.Image();
+ w48.Pixbuf = global::Gdk.Pixbuf.LoadFromResource("monitor.ressources.hand-filled-32.png");
+ this.buttonStop.Image = w48;
this.table4.Add(this.buttonStop);
- global::Gtk.Table.TableChild w50 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonStop]));
- w50.TopAttach = ((uint)(1));
- w50.BottomAttach = ((uint)(2));
- w50.LeftAttach = ((uint)(1));
- w50.RightAttach = ((uint)(2));
- w50.XOptions = ((global::Gtk.AttachOptions)(4));
- w50.YOptions = ((global::Gtk.AttachOptions)(4));
+ global::Gtk.Table.TableChild w49 = ((global::Gtk.Table.TableChild)(this.table4[this.buttonStop]));
+ w49.TopAttach = ((uint)(1));
+ w49.BottomAttach = ((uint)(2));
+ w49.LeftAttach = ((uint)(1));
+ w49.RightAttach = ((uint)(2));
+ w49.XOptions = ((global::Gtk.AttachOptions)(4));
+ w49.YOptions = ((global::Gtk.AttachOptions)(4));
this.alignment8.Add(this.table4);
this.vbox9.Add(this.alignment8);
- global::Gtk.Box.BoxChild w52 = ((global::Gtk.Box.BoxChild)(this.vbox9[this.alignment8]));
- w52.Position = 0;
- w52.Expand = false;
- w52.Fill = false;
+ global::Gtk.Box.BoxChild w51 = ((global::Gtk.Box.BoxChild)(this.vbox9[this.alignment8]));
+ w51.Position = 0;
+ w51.Expand = false;
+ w51.Fill = false;
// Container child vbox9.Gtk.Box+BoxChild
this.table3 = new global::Gtk.Table(((uint)(1)), ((uint)(2)), false);
this.table3.Name = "table3";
@@ -628,10 +625,10 @@ public partial class MainWindow
this.label3.LabelProp = global::Mono.Unix.Catalog.GetString("Battery level:");
this.label3.Justify = ((global::Gtk.Justification)(1));
this.table3.Add(this.label3);
- global::Gtk.Table.TableChild w53 = ((global::Gtk.Table.TableChild)(this.table3[this.label3]));
- w53.YPadding = ((uint)(10));
- w53.XOptions = ((global::Gtk.AttachOptions)(4));
- w53.YOptions = ((global::Gtk.AttachOptions)(4));
+ global::Gtk.Table.TableChild w52 = ((global::Gtk.Table.TableChild)(this.table3[this.label3]));
+ w52.YPadding = ((uint)(10));
+ w52.XOptions = ((global::Gtk.AttachOptions)(4));
+ w52.YOptions = ((global::Gtk.AttachOptions)(4));
// Container child table3.Gtk.Table+TableChild
this.labelBatteryLevel = new global::Gtk.Label();
this.labelBatteryLevel.Name = "labelBatteryLevel";
@@ -639,49 +636,36 @@ public partial class MainWindow
this.labelBatteryLevel.Xalign = 0F;
this.labelBatteryLevel.LabelProp = global::Mono.Unix.Catalog.GetString("Unknown");
this.table3.Add(this.labelBatteryLevel);
- global::Gtk.Table.TableChild w54 = ((global::Gtk.Table.TableChild)(this.table3[this.labelBatteryLevel]));
- w54.LeftAttach = ((uint)(1));
- w54.RightAttach = ((uint)(2));
- w54.YOptions = ((global::Gtk.AttachOptions)(4));
+ global::Gtk.Table.TableChild w53 = ((global::Gtk.Table.TableChild)(this.table3[this.labelBatteryLevel]));
+ w53.LeftAttach = ((uint)(1));
+ w53.RightAttach = ((uint)(2));
+ w53.YOptions = ((global::Gtk.AttachOptions)(4));
this.vbox9.Add(this.table3);
- global::Gtk.Box.BoxChild w55 = ((global::Gtk.Box.BoxChild)(this.vbox9[this.table3]));
- w55.Position = 2;
- w55.Expand = false;
- w55.Fill = false;
- // Container child vbox9.Gtk.Box+BoxChild
- this.checkButtonGetBattery = new global::Gtk.CheckButton();
- this.checkButtonGetBattery.CanFocus = true;
- this.checkButtonGetBattery.Name = "checkButtonGetBattery";
- this.checkButtonGetBattery.Label = global::Mono.Unix.Catalog.GetString("Get battery level");
- this.checkButtonGetBattery.Active = true;
- this.checkButtonGetBattery.DrawIndicator = true;
- this.checkButtonGetBattery.UseUnderline = true;
- this.vbox9.Add(this.checkButtonGetBattery);
- global::Gtk.Box.BoxChild w56 = ((global::Gtk.Box.BoxChild)(this.vbox9[this.checkButtonGetBattery]));
- w56.Position = 3;
- w56.Expand = false;
- w56.Fill = false;
+ global::Gtk.Box.BoxChild w54 = ((global::Gtk.Box.BoxChild)(this.vbox9[this.table3]));
+ w54.Position = 2;
+ w54.Expand = false;
+ w54.Fill = false;
this.gtkAlignmentRobotControl.Add(this.vbox9);
this.vbox12.Add(this.gtkAlignmentRobotControl);
- global::Gtk.Box.BoxChild w58 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.gtkAlignmentRobotControl]));
- w58.Position = 1;
+ global::Gtk.Box.BoxChild w56 = ((global::Gtk.Box.BoxChild)(this.vbox12[this.gtkAlignmentRobotControl]));
+ w56.Position = 1;
this.vbox5.Add(this.vbox12);
- global::Gtk.Box.BoxChild w59 = ((global::Gtk.Box.BoxChild)(this.vbox5[this.vbox12]));
- w59.Position = 4;
+ global::Gtk.Box.BoxChild w57 = ((global::Gtk.Box.BoxChild)(this.vbox5[this.vbox12]));
+ w57.Position = 4;
this.alignment3.Add(this.vbox5);
this.hbox3.Add(this.alignment3);
- global::Gtk.Box.BoxChild w61 = ((global::Gtk.Box.BoxChild)(this.hbox3[this.alignment3]));
- w61.Position = 1;
- w61.Expand = false;
- w61.Fill = false;
+ global::Gtk.Box.BoxChild w59 = ((global::Gtk.Box.BoxChild)(this.hbox3[this.alignment3]));
+ w59.Position = 1;
+ w59.Expand = false;
+ w59.Fill = false;
this.hbox1.Add(this.hbox3);
- global::Gtk.Box.BoxChild w62 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.hbox3]));
- w62.Position = 1;
- w62.Expand = false;
- w62.Fill = false;
+ global::Gtk.Box.BoxChild w60 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.hbox3]));
+ w60.Position = 1;
+ w60.Expand = false;
+ w60.Fill = false;
this.vbox1.Add(this.hbox1);
- global::Gtk.Box.BoxChild w63 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox1]));
- w63.Position = 1;
+ global::Gtk.Box.BoxChild w61 = ((global::Gtk.Box.BoxChild)(this.vbox1[this.hbox1]));
+ w61.Position = 1;
this.Add(this.vbox1);
if ((this.Child != null))
{
diff --git a/software/monitor/monitor/gtk-gui/gui.stetic b/software/monitor/monitor/gtk-gui/gui.stetic
index c5412f8..26af0d7 100644
--- a/software/monitor/monitor/gtk-gui/gui.stetic
+++ b/software/monitor/monitor/gtk-gui/gui.stetic
@@ -809,20 +809,7 @@
-
-
- True
- Get battery level
- True
- True
- True
-
-
- 3
- True
- False
- False
-
+
diff --git a/software/monitor/monitor/monitor b/software/monitor/monitor/monitor
index f916d3a..91a9f4d 100755
Binary files a/software/monitor/monitor/monitor and b/software/monitor/monitor/monitor differ