Ejemplo n.º 1
0
        public static void Plot(DeviceBase device, ScottPlot.FormsPlot plot)
        {
            if (device == null)
            {
                return;
            }
            double current_unixtime = UnixTime.Current();
            double cutoff           = current_unixtime - 5;

            device.PruneAmplitudeHistory(cutoff);

            double[] a_time = null, a_amp = null, b_time = null, b_amp = null;
            if (device.ExtractAmplitudeData(ref a_time, ref a_amp, ref b_time, ref b_amp))
            {
                plot.plt.Clear();
                plot.plt.PlotStep(a_time, a_amp);
                plot.plt.PlotStep(b_time, b_amp);
                plot.plt.Axis(cutoff, current_unixtime, 0, 255);
                plot.plt.Ticks(rulerModeX: false, rulerModeY: false, displayTicksX: false, displayTicksY: false);
                plot.plt.Frame(left: false, right: false, top: false);
                plot.plt.TightenLayout(padding: 0, render: true);
                plot.Render();
            }
        }
Ejemplo n.º 2
0
        public static void Poller(X.Gamepad gamepad,
                                  DeviceBase device,
                                  PanicDelegate DoPanic,
                                  List <RadioButton> controlmodeselections,
                                  NumericUpDown stick_sensitivity,
                                  NumericUpDown shoulder_sensitivity,
                                  NumericUpDown shoulder_floor,
                                  bool clear_to_send,
                                  ref bool A_button_debounce,
                                  ref bool B_button_debounce,
                                  ref bool X_button_debounce,
                                  ref bool Y_button_debounce)
        {
            if (gamepad == null)
            {
                return;
            }
            gamepad.Update();

            if (gamepad.X_down && !X_button_debounce)
            {
                X_button_debounce = true;
                DoPanic();
                return;
            }
            else
            {
                X_button_debounce = false;
            }

            RadioButton checked_input = controlmodeselections.FirstOrDefault(e => e.Checked);

            if (checked_input == null)
            {
                return;
            }

            if (gamepad.Y_down && !Y_button_debounce)
            {
                Y_button_debounce = true;
                int selidx = controlmodeselections.IndexOf(checked_input);
                selidx++;
                if (selidx >= controlmodeselections.Count)
                {
                    selidx = 0;
                }
                checked_input         = controlmodeselections[selidx];
                checked_input.Checked = true;
                return;
            }
            else if (gamepad.Y_up)
            {
                Y_button_debounce = false;
            }

            int shoulder_sensitivity_adjust = 0;

            if (gamepad.Dpad_Right_down)
            {
                shoulder_sensitivity_adjust = 1;
            }
            if (gamepad.Dpad_Left_down)
            {
                shoulder_sensitivity_adjust = -1;
            }
            if (shoulder_sensitivity_adjust != 0)
            {
                try
                {
                    shoulder_sensitivity.Value += shoulder_sensitivity_adjust;
                }
                catch (Exception) { }
            }

            int shoulder_floor_adjust = 0;

            if (gamepad.RBumper_down)
            {
                shoulder_floor_adjust = 1;
            }
            if (gamepad.LBumper_down)
            {
                shoulder_floor_adjust = -1;
            }
            if (shoulder_floor_adjust != 0)
            {
                try
                {
                    shoulder_floor.Value += shoulder_floor_adjust;
                }
                catch (Exception) { }
            }

            if (device == null || !device.IsReady || !clear_to_send)
            {
                return;
            }

            ModeCommand mode = null;

            if (gamepad.B_down && !B_button_debounce)
            {
                mode = new ModeCommand()
                {
                    Mode = (int)Intense.Mode,
                    MA   = Intense.StartingMA
                };
                B_button_debounce = true;
            }
            else if (gamepad.B_up)
            {
                B_button_debounce = false;
            }

            if (gamepad.A_down && !A_button_debounce)
            {
                mode = new ModeCommand()
                {
                    Mode = (int)Waves.Mode,
                    MA   = Waves.StartingMA
                };
                A_button_debounce = true;
            }
            else if (gamepad.A_up)
            {
                A_button_debounce = false;
            }

            if (mode != null)
            {
                device.SetMode(mode);
                return;
            }

            int           sensitivity, floor;
            LevelsCommand level = new LevelsCommand()
            {
                Mode = (ControlMode)checked_input.Tag
            };

            switch (level.Mode)
            {
            case ControlMode.remote:
                return;

            case ControlMode.absolute:
                //TODO: need to mathematically ensure this always winds up 0 <= x <= 255
                sensitivity = (int)shoulder_sensitivity.Value;
                floor       = (int)shoulder_floor.Value;
                level.A     = (int)Math.Sqrt((gamepad.LTrigger + floor) * sensitivity);
                level.B     = (int)Math.Sqrt((gamepad.RTrigger + floor) * sensitivity);
                break;

            case ControlMode.relative:
                sensitivity = (int)stick_sensitivity.Value;
                level.A     = (int)(gamepad.LStick_N.Y * sensitivity);
                level.B     = (int)(gamepad.RStick_N.Y * sensitivity);
                break;
            }
            if (gamepad.Dpad_Up_down)
            {
                level.MA = 1;
            }
            if (gamepad.Dpad_Down_down)
            {
                level.MA = -1;
            }

            device.SetLevels(level);
        }