File userinterface.h¶
File List > Desktop-DevKit-UI-Template > src > userinterface.h
Go to the documentation of this file
Source Code¶
#pragma once
#include "desktop_devkit.h"
#include "main_page.h"
#include "ui_glue.h"
class Ui
{
public:
void Init(daisy::desktop_devkit::Hardware *hw)
{
hw_ = hw;
daisy::UI::SpecialControlIds specialControlIds; //< None
daisy::UiCanvasDescriptor ledDisplayDescriptor;
ledDisplayDescriptor.id_ = canvasLedDisplay;
ledDisplayDescriptor.handle_ = hw_;
ledDisplayDescriptor.updateRateMs_ = 16; //< 60Hz
ledDisplayDescriptor.clearFunction_ = ClearLeds;
ledDisplayDescriptor.flushFunction_ = FlushLeds;
pot_listener_.Init(hw_);
pot_monitor_.Init(event_queue_,
pot_listener_,
125,
(1.f / (1 << 9)),
(1.f / (1 << 12)));
// Init the pages:
ui_.Init(event_queue_,
specialControlIds,
{ledDisplayDescriptor},
canvasLedDisplay);
// ui_.OpenPage(splash_page_);
ui_.OpenPage(main_page_);
}
void GenerateEvents()
{
// Pot events
pot_monitor_.Process();
// Button events
for(size_t i = 0; i < daisy::desktop_devkit::kNumButtons; i++)
{
auto *btn = &hw_->button[i];
if(btn->RisingEdge())
{
event_queue_.AddButtonPressed(i, 1);
}
else if(btn->Pressed() && btn->TimeHeldMs() > kLongPressDuration)
{
if(!ignore_next_btn_release[i])
{
event_queue_.AddButtonPressed(i, 2);
ignore_next_btn_release[i] = true;
}
}
else if(btn->FallingEdge())
{
if(ignore_next_btn_release[i])
{
ignore_next_btn_release[i] = false;
}
else
{
event_queue_.AddButtonReleased(i);
}
}
}
}
void DoEvents() { ui_.Process(); }
private:
daisy::desktop_devkit::Hardware *hw_;
daisy::UI ui_;
MainPage main_page_;
bool ignore_next_btn_release[daisy::desktop_devkit::kNumButtons];
daisy::UiEventQueue event_queue_;
PotListener pot_listener_;
daisy::PotMonitor<PotListener, daisy::desktop_devkit::kNumPots>
pot_monitor_;
};