示例#1
0
    /// <summary>
    /// Initializes a new instance of the <see cref="MainWindow"/> class.
    /// </summary>
    public MainWindow() : base(Gtk.WindowType.Toplevel)
    {
        Build();

        cmdManager = new DestijlCommandManager(OnCommandReceivedEvent);

        // Init of image widget
        imageWidget = new ImageWidget(drawingAreaCamera);

        // Customize controls
        AdjustControls();
    }
示例#2
0
    /// <summary>
    /// Initializes a new instance of the <see cref="MainWindow"/> class.
    /// </summary>
    public MainWindow() : base(Gtk.WindowType.Toplevel)
    {
        Build();

        cmdManager = new DestijlCommandManager(OnCommandReceivedEvent);

        // 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();
    }
示例#3
0
    /// <summary>
    /// Callback called when new message is received from server
    /// </summary>
    /// <param name="header">Header of message</param>
    /// <param name="data">Data of message</param>
    public void OnCommandReceivedEvent(string header, string data)
    {
        if (header == null)
        {
            // we have lost server
            ChangeState(SystemState.NotConnected);

            Gtk.Application.Invoke(delegate
            {
                MessagePopup(MessageType.Error,
                             ButtonsType.Ok, "Server lost",
                             "Server is down: disconnecting");
                cmdManager.Close();
            });
        }

        // if we have received a valid message
        if (header != null)
        {
#if DEBUG
            // print message content
            if (header.Length > 4)
            {
                Console.WriteLine("Bad header(" + header.Length + ")");
            }
#endif
            // Depending on message received (based on header), launch correponding action
            header = header.ToUpper();

            switch (header)
            {
            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 !");
                });

                ChangeState(SystemState.ServerConnected);

                break;

            case DestijlCommandList.ROBOT_BATTERY_LEVEL:
                string batLevel = "";

                switch (data[0])
                {
                case '2':
                    batLevel = "High";
                    break;

                case '1':
                    batLevel = "Low";
                    break;

                case '0':
                    batLevel = "Empty";
                    break;

                default:
                    batLevel = "Invalid value";
                    break;
                }

                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 + "%)");
#endif
                }

                break;

            case DestijlCommandList.CAMERA_POSITION:
                imageWidget.Position = DestijlCommandManager.DecodePosition(data);

                break;

            default:
                Console.WriteLine("Untreated message from supervisor: " + header + ": " + data);

                break;
            }
        }
    }