OMOTE/Platformio/include/OmoteUI/OmoteUI.hpp

69 lines
2.1 KiB
C++
Raw Normal View History

Lay the ground work for a hardware abstraction layer (#15) * Pull out OmoteUI into its own hpp/cpp that only controls UI/UX Added HardwareAbstractionInterface to allow UI to be decoupled Add OmoteUI class/Header to visual studio solution Bump the compiler to c++17 for std::clamp * code format update visual studio solution to build all versions properly Pull pin defs into config file use config file to allow USE_SIMULATOR checks in OmoteUI this will allow the sim to compile in specific code within the UI * put pin mode config into hardwarerevX class along with some other hardware things. Still lots of work to pull everything into the HAL. Change-Id: If3cacc43d43670b0ff2233140b1cff66a4aeb48d * pull Prefrences, IMU interrupt and sleep into the hardware class Change-Id: I082ae086ed70306789df80eafce8870a5cdfd125 * pull in touch screen, IMU and slow screen wake into hardware Change-Id: I61b49a6d0551463becbc3bdf1418ac9fde9d9376 * Pull wifi and IR into Hardware RevX pull last bit of global variables into hardware rev * un public everything * clean up simulator build * rename loop handler reorder setup to better match the origional main * Add Loop Handler that updates UI * Add images to their own file to shrink OmoteUI * Allow Wifi to be turned off with the macro * Update Battery Update Task instead of a time based check and update * Clean up abstract interface move defenitions out of hardwareRevX.hpp into cpp * reorder HardwareRevX functions * Add comment blocks to top of headers --------- Co-authored-by: Matthew Colvin <35540398+Mc067415@users.noreply.github.com> Co-authored-by: Matthew Colvin <Matthew.Colvin@garmin.com>
2023-07-31 14:28:10 -04:00
// OMOTE UI
// 2023 Matthew Colvin
#pragma once
#define LV_CONF_INCLUDE_SIMPLE
#include "HardwareAbstractionInterface.h"
#include "lvgl.h"
#include "Images.hpp"
#include <algorithm>
#include <memory>
#include <stdio.h>
#include <string>
/// @brief Singleton to allow UI code to live separately from the Initialization
/// of resources.
class OmoteUI {
public:
OmoteUI(std::shared_ptr<HardwareAbstractionInterface> aHardware)
: mHardware(aHardware) {};
static std::weak_ptr<OmoteUI> getRefrence() { return getInstance(); };
static std::shared_ptr<OmoteUI> getInstance(
std::shared_ptr<HardwareAbstractionInterface> aHardware = nullptr) {
if (mInstance) {
return mInstance;
} else if (aHardware) {
mInstance = std::make_shared<OmoteUI>(aHardware);
}
return mInstance;
};
// Set the page indicator scroll position relative to the tabview scroll
// position
void store_scroll_value_event_cb(lv_event_t *e);
// Update current device when the tabview page is changes
void tabview_device_event_cb(lv_event_t *e);
// Slider Event handler
void bl_slider_event_cb(lv_event_t *e);
// Apple Key Event handler
void appleKey_event_cb(lv_event_t *e);
// Wakeup by IMU Switch Event handler
void WakeEnableSetting_event_cb(lv_event_t *e);
// Smart Home Toggle Event handler
void smartHomeToggle_event_cb(lv_event_t *e);
// Smart Home Toggle Event handler
void smartHomeSlider_event_cb(lv_event_t *e);
// Virtual Keypad Event handler
void virtualKeypad_event_cb(lv_event_t *e);
// Use LVGL to layout the ui and register the callbacks
void layout_UI();
void loopHandler();
private:
static std::shared_ptr<OmoteUI> mInstance;
std::shared_ptr<HardwareAbstractionInterface> mHardware;
lv_obj_t *panel = nullptr;
Images imgs = Images();
uint_fast8_t currentDevice = 4;
int backlight_brightness = 255;
lv_color_t color_primary = lv_color_hex(0x303030); // gray
bool wakeupByIMUEnabled = true;
inline static const uint_fast8_t virtualKeyMapTechnisat[10] = {
0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0x0};
};