Hi Guys,
I’ve created a class that derives from GHIElectronics.TinyCLR.UI.Window and overridden the OnButtonDown and OnButtonUp methods but neither of them seems to be getting called when I feed in events via InputProvider.RaiseButton.
Any ideas on what i’m doing wrong?
Window code:
using System.Diagnostics;
using GHIElectronics.TinyCLR.UI;
using GHIElectronics.TinyCLR.UI.Input;
namespace RaiseButtonProblem
{
public class MainWindow : Window
{
override protected void OnButtonUp(ButtonEventArgs e)
{
// never gets called...
Debug.WriteLine("OnButtonUp");
}
override protected void OnButtonDown(ButtonEventArgs e)
{
// never gets called...
Debug.WriteLine("OnButtonDown");
}
}
}
Main application code:
using System;
using GHIElectronics.TinyCLR.UI;
using GHIElectronics.TinyCLR.Pins;
using GHIElectronics.TinyCLR.UI.Input;
using GHIElectronics.TinyCLR.Devices.Gpio;
using GHIElectronics.TinyCLR.Devices.Display;
namespace RaiseButtonProblem
{
public class Program : Application
{
private GpioPin _gpioPin1;
Program(DisplayController d) : base(d)
{
}
public static void Main()
{
var displayController = GetDisplayController();
var program = new Program(displayController);
// Updated as per Johns suggestion
var mainWindow = new MainWindow();
mainWindow.Visibility = Visibility.Visible;
Buttons.Focus(mainWindow);
program.Run(mainWindow);
}
override protected void OnStartup(EventArgs e)
{
var gpioController = GpioController.GetDefault();
_gpioPin1 = gpioController.OpenPin(G120.GpioPin.P2_10);
_gpioPin1.SetDriveMode(GpioPinDriveMode.InputPullDown);
_gpioPin1.ValueChanged += _gpioPin1_ValueChanged;
base.OnStartup(e);
}
private void _gpioPin1_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e)
{
// Debugger shows that event is being
// raised here when the button is pressed.
InputProvider.RaiseButton(
HardwareButton.Up,
e.Edge == GpioPinEdge.RisingEdge,
e.Timestamp);
}
private static DisplayController GetDisplayController()
{
var displayController = DisplayController.GetDefault();
var settings = new ParallelDisplayControllerSettings
{
Width = 800,
Height = 480,
DataFormat = DisplayDataFormat.Rgb565,
PixelClockRate = 30 * 1000 * 1000,
PixelPolarity = false,
DataEnablePolarity = true,
DataEnableIsFixed = false,
HorizontalFrontPorch = 40,
HorizontalBackPorch = 88,
HorizontalSyncPulseWidth = 48,
HorizontalSyncPolarity = false,
VerticalFrontPorch = 13,
VerticalBackPorch = 32,
VerticalSyncPulseWidth = 3,
VerticalSyncPolarity = false
};
displayController.SetConfiguration(settings);
displayController.Enable();
return displayController;
}
}
}