private void RandomPositionTimerOnTick(object sender, object o)
        {
            int?min = ViewUtility.GetInt(MinRandomTextBox);
            int?max = ViewUtility.GetInt(MaxRandomTextBox);

            if (!min.HasValue || !max.HasValue)
            {
                return;
            }
            int            position        = random.Next(min.Value, max.Value);
            NeedlePosition positionCommand = new NeedlePosition
            {
                Position  = (uint)position,
                Direction = NeedlePosition.NeedleDirectionValue.DoNotPassZero
            };

            App.FizViz.SendCommand(positionCommand);
        }
        /// <summary>
        /// Do a simple conversion of current metric value to needle position, and update the FizViz accordingly
        /// </summary>
        /// <param name="value"></param>
        private void SimplePosition(float value)
        {
            value = Math.Max(value, MetricMinimum);
            value = Math.Min(value, MetricMaximum);

            uint needlePosition = (uint)((((value - MetricMinimum) / (MetricMaximum - MetricMinimum)) * (displayPositionMaximum - displayPositionMinimum)) + displayPositionMinimum);

            FizVizCommand positionCommand = new NeedlePosition
            {
                Direction = NeedlePosition.NeedleDirectionValue.DoNotPassZero,
                Position  = needlePosition
            };

            Debug.WriteLine("Set position to " + needlePosition);
            if (App.FizViz != null)
            {
                App.FizViz.SendCommand(positionCommand);
            }
        }
        /****************************************************************
        *                       UI Callbacks                           *
        ****************************************************************/

        /// <summary>
        /// Generate and send a manual needle position command to FizViz
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void NeedlePositionButton_Click(object sender, RoutedEventArgs e)
        {
            ViewUtility.ResetControlBorders(ControlGrid);

            ushort?position = ViewUtility.GetUShort(NeedlePositionTextBox);

            if (!position.HasValue)
            {
                return;
            }

            NeedlePosition positionCommand = new NeedlePosition
            {
                Position  = position.Value,
                Direction = (NeedlePosition.NeedleDirectionValue)NeedleDirectionComboBox.SelectedValue
            };

            App.FizViz.SendCommand(positionCommand);
        }