OMOTE/Platformio/OmoteUI/OmoteUI.hpp
Matthew Colvin 7a9ee138db
Add platform io sim (#31)
* Lower default SPI Clock

Lowered the default SPI clock as some displays might show glitches with the SPI frequency set above 40MHz.

* Added missing library components

Added the missing library symbols, footprints and 3D-models. These are all in a project-specific library called "omoteLib" (#19)

* Implement MQTT publish in HardwareRevX

Change-Id: I7b6955a662716f83dd8daf34128a353efa26bf80

* add batteryStatus info and allow access to it through the interface.

Change-Id: Ieb748b1478d532f52ffff9edc783de3cbcf9f303

* rename hardwareAbstractionInterface

Change-Id: I39a9bcd7fc4d92b271a40a869faae7870d6d88a1

* rename HardwareAbstractionInterface files

Change-Id: Ifb6a96c38da61cb80aabc6c929e392a2fc91cf29

* fixed a typo

* Re work directory structure to support new architecture

Still need to get the Sim building

* lvgl simulator working.

* put init code into HardwareSimulator Class

* ensure all targets build
remove unused assets.c
add new github actions that reflect new simulator

* clean up build defines by using platform.ini to override default lv_config.
remove unneeded include directory.

Change-Id: Id63baa80dae89977d239a539b5db9ff67266e1d6

* Fix ESP32 Windows build after battling escape characters.
Add esp32 Windows target to Actions.

* Fixed screen height

- corrected the SCREEN_HEIGHT
- small graphical changes in OmoteUI to make it look like in the main branch

---------

Co-authored-by: Max <Max-MKA@web.de>
Co-authored-by: Matthew Colvin <Matthew.Colvin@garmin.com>
Co-authored-by: Matthew Colvin <35540398+Mc067415@users.noreply.github.com>
2023-08-12 00:16:48 +02:00

68 lines
2 KiB
C++

// OMOTE UI
// 2023 Matthew Colvin
#pragma once
#include "HardwareInterface.h"
#include "Images.hpp"
#include "lvgl.h"
#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<HardwareInterface> aHardware)
: mHardware(aHardware){};
static std::weak_ptr<OmoteUI> getRefrence() { return getInstance(); };
static std::shared_ptr<OmoteUI>
getInstance(std::shared_ptr<HardwareInterface> 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<HardwareInterface> 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};
};