Вещи Android с Xamarin проблема с IGpioCallback - PullRequest
0 голосов
/ 13 июня 2018

Я только начинаю с Android Things с Xamarin, и я уже успешно включил светодиод, но у меня возникают проблемы с обнаружением нажатия кнопки.Я думаю, что проблема заключается в «RegisterGpioCallback» в коде ниже, но я не уверен и действительно не знаю, как это исправить.Кто-нибудь может мне помочь ??Это код, который я использую:

public class BlinkActivity : Activity
{
    private IGpio gpio;
    private IGpio button;
    private IGpioCallback mButtonCallback;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        this.mButtonCallback = mButtonCallback; 
        PeripheralManager peripheralManager = PeripheralManager.Instance;
        gpio = peripheralManager.OpenGpio("BCM17");
        gpio.SetDirection(Gpio.DirectionOutInitiallyLow);
        gpio.Value = false;
        button = peripheralManager.OpenGpio("BCM4");
        button.SetDirection(Gpio.DirectionIn);
        button.SetEdgeTriggerType(Gpio.EdgeNone);
        button.RegisterGpioCallback(new Handler(), mButtonCallback);
        base.OnCreate(savedInstanceState);
        Task.Run(() =>
        {
            if (mButtonCallback.OnGpioEdge(button) == true)
            {
                gpio.Value = !gpio.Value;
            }
        });
    }
}

1 Ответ

0 голосов
/ 13 июня 2018

Вам необходимо реализовать интерфейс IGpioCallback, чтобы библиотека com.google.android.things.pio могла сделать «обратный вызов» в ваше приложение при изменении значения GPIO.

Назначьте RegisterGpioCallback дляфактический экземпляр объекта, который реализовал интерфейс, в следующем примере, который будет на Activity.

public class BlinkActivity : Activity, IGpioCallback
{
    ~~~~
    button.RegisterGpioCallback(new Handler(), this);
    ~~~~

    // remove the Task.Run block

    public OnGpioEdge(Gpio gpio)
    {
        Log.Debug("SO", gpio.Value.ToString());
    }

    ~~~~
}
...