From 27fb0ad4d7b3906473f8512695ca0069ddd6ea29 Mon Sep 17 00:00:00 2001 From: Adam PIppin Date: Mon, 5 Jul 2021 16:54:12 -0700 Subject: [PATCH] UI stuff --- watchos2/IDrawable.h | 4 +- watchos2/Kernel.cpp | 4 +- watchos2/Kernel.h | 2 +- watchos2/Module_UI.cpp | 276 ++++++++++++++++++++++++++++++ watchos2/Module_UI.h | 36 ++++ watchos2/Task_Test.cpp | 16 +- watchos2/__vm/Compile.vmps.xml | 2 +- watchos2/__vm/Upload.vmps.xml | 2 +- watchos2/watchos.cpp | 2 +- watchos2/watchos.h | 3 +- watchos2/watchos2.ino | 48 +++--- watchos2/watchos2.vcxproj | 39 ++++- watchos2/watchos2.vcxproj.filters | 67 ++++++++ watchos2/watchos_config.h | 13 ++ watchos2/watchos_consts.h | 15 +- 15 files changed, 491 insertions(+), 38 deletions(-) diff --git a/watchos2/IDrawable.h b/watchos2/IDrawable.h index ef5580d..b065add 100644 --- a/watchos2/IDrawable.h +++ b/watchos2/IDrawable.h @@ -1,10 +1,12 @@ #ifndef _IDRAWABLE_h #define _IDRAWABLE_h +#include "watchos_types.h" + class IDrawable { public: - virtual void draw(int hwnd, int x, int y, int width, int height) = 0; + virtual void draw(kernel_handle_t handle) = 0; }; #endif \ No newline at end of file diff --git a/watchos2/Kernel.cpp b/watchos2/Kernel.cpp index 6a4effd..caa2ff6 100644 --- a/watchos2/Kernel.cpp +++ b/watchos2/Kernel.cpp @@ -160,14 +160,14 @@ void Kernel::releaseHandle(kernel_handle_t handle) watchos::panic("Attempt to release invalid Kernel handle"); } -kernel_handle_t Kernel::registerTask(Task* task) +kernel_handle_t Kernel::registerTask(Task* task, well_known_handle_t wk_handle) { for (int i = 0; i < KERNEL_MAX_TASKS; i++) { if (m_task[i] == nullptr) { m_task[i] = new KernelTask(); - m_task[i]->handle = allocHandle(WATCHOS_HANDLE_TYPE_TASK, task, (kernel_handle_destructor_t)destruct_task); + m_task[i]->handle = allocHandle(WATCHOS_HANDLE_TYPE_TASK, task, (kernel_handle_destructor_t)destruct_task, wk_handle); m_task[i]->task = task; useHandle(m_task[i]->handle); return m_task[i]->handle; diff --git a/watchos2/Kernel.h b/watchos2/Kernel.h index 62f0485..a58a334 100644 --- a/watchos2/Kernel.h +++ b/watchos2/Kernel.h @@ -54,7 +54,7 @@ public: kernel_handle_t getHandleForWellKnown(well_known_handle_t handle); - kernel_handle_t registerTask(Task* task); + kernel_handle_t registerTask(Task* task, well_known_handle_t wk_handle = WATCHOS_HANDLE_NULL); void unregisterTask(Task* task); void pushEvent(well_known_handle_t source, uint16_t event, byte param1, byte param2); diff --git a/watchos2/Module_UI.cpp b/watchos2/Module_UI.cpp index e69de29..2a909f3 100644 --- a/watchos2/Module_UI.cpp +++ b/watchos2/Module_UI.cpp @@ -0,0 +1,276 @@ +#include "watchos.h" +#include "Module_UI.h" +#include +#include + +GxEPD2_BW gfx = GxEPD2_154_D67(HW_DISPLAY_CS, HW_DISPLAY_DC, HW_DISPLAY_RESET, HW_DISPLAY_BUSY); + +struct UiWindow +{ + kernel_handle_t handle; + IDrawable* drawable; + byte layout_mode; + UiWindow* parent; + bool dirty; +}; + +void destruct_window(kernel_handle_t handle, void* object) +{ +} + +#ifdef WATCHOS_UI_MULTICORE +TaskHandle_t draw_task; +void draw_wrapper(void* parameter) +{ + Module_UI* ui = static_cast(parameter); + ui->do_draw(); + draw_task = nullptr; + vTaskDelete(NULL); +} +#endif + +Module_UI::Module_UI() +{ + for (int i = 0; i < MODULE_UI_MAX_WINDOWS; i++) + { + m_window[i] = nullptr; + } + + m_root = createWindow(WATCHOS_HANDLE_NULL); +} + +void Module_UI::tick() +{ + draw(); +} + +kernel_handle_t Module_UI::createWindow(IDrawable* drawable, kernel_handle_t parent) +{ + for (int i = 0; i < MODULE_UI_MAX_WINDOWS; i++) + { + if (m_window[i] == nullptr) + { + m_window[i] = new UiWindow(); + m_window[i]->drawable = drawable; + m_window[i]->handle = watchos::kernel()->allocHandle(WATCHOS_HANDLE_TYPE_UI_WINDOW, m_window[i], (kernel_handle_destructor_t)destruct_window); + m_window[i]->layout_mode = MODULE_UI_LAYOUT_MODE_NONE; + m_window[i]->parent = nullptr; + m_window[i]->dirty = false; + + if (parent != WATCHOS_HANDLE_NULL) + { + for (int j = 0; j < MODULE_UI_MAX_WINDOWS; j++) + { + if (m_window[j] != nullptr && m_window[j]->handle == parent) + { + m_window[i]->parent = m_window[j]; + break; + } + } + + if (m_window[i]->parent == nullptr) + { + watchos::panic("Cannot find parent window handle %#010x", parent); + } + } + + return m_window[i]->handle; + } + } + + watchos::panic("Exceeded MODULE_UI_MAX_WINDOWS"); +} + +kernel_handle_t Module_UI::createWindow(kernel_handle_t parent) +{ + return createWindow(nullptr, parent); +} + +kernel_handle_t Module_UI::getRoot() +{ + return m_root; +} + +void Module_UI::draw() +{ +#ifdef WATCHOS_UI_MULTICORE + if (draw_task == nullptr) + { + xTaskCreatePinnedToCore(draw_wrapper, "Draw", MODULE_UI_MULTICORE_STACK_SIZE, this, 0, &draw_task, 0); + } +#else + do_draw(); +#endif +} + +void Module_UI::do_draw() +{ + // TODO: Disable light/deep sleep + + // Initialize gfx if necessary + if (!m_initialized) + { + m_initialized = true; + gfx.init(0, false); + } + + for (int i = 0; i < MODULE_UI_MAX_WINDOWS; i++) + { + if (m_window[i] != nullptr && m_window[i]->handle == m_root) + { + draw_window(m_window[i], 0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT); + break; + } + } + + // TODO: Redraw only parts of the screen if necessary, etc + gfx.display(true); + + // TODO: Reenable sleep +} + +void Module_UI::draw_window(UiWindow* window, int x, int y, int width, int height) +{ + m_draw_x = x; + m_draw_y = y; + m_draw_w = width; + m_draw_h = height; + + // Draw window + if (window->drawable != nullptr) + { + window->drawable->draw(window->handle); + } + + // Count children + int child_count = 0; + for (int i = 0; i < MODULE_UI_MAX_WINDOWS; i++) + { + if (m_window[i] != nullptr && m_window[i]->parent == window) + { + child_count++; + } + } + + if (child_count == 0) + { + // No children to draw, we're done! + return; + } + + int child_offset = 0; + int child_width, child_height; + switch (window->layout_mode) + { + case MODULE_UI_LAYOUT_MODE_NONE: + for (int i = 0; i < MODULE_UI_MAX_WINDOWS; i++) + { + if (m_window[i] != nullptr && m_window[i]->parent == window) + { + draw_window(m_window[i], x, y, width, height); + } + } + break; + case MODULE_UI_LAYOUT_MODE_SPLIT_HORIZONTAL: + child_height = height / child_count; + for (int i = 0; i < MODULE_UI_MAX_WINDOWS; i++) + { + if (m_window[i] != nullptr && m_window[i]->parent == window) + { + draw_window(m_window[i], x, y + (child_offset++ * child_height), width, child_height); + } + } + break; + case MODULE_UI_LAYOUT_MODE_SPLIT_VERTICAL: + child_width = width / child_count; + for (int i = 0; i < MODULE_UI_MAX_WINDOWS; i++) + { + if (m_window[i] != nullptr && m_window[i]->parent == window) + { + draw_window(m_window[i], x + (child_offset++ * child_width), y, child_width, height); + } + } + break; + case MODULE_UI_LAYOUT_MODE_ABSOLUTE: + // TODO: + break; + } +} + +void Module_UI::setLayoutMode(kernel_handle_t window_handle, byte layout_mode) +{ + for (int i = 0; i < MODULE_UI_MAX_WINDOWS; i++) + { + if (m_window[i] != nullptr && m_window[i]->handle == window_handle) + { + m_window[i]->layout_mode = layout_mode; + return; + } + } + watchos::panic("Trying to set layout mode on non-existent handle: %#010x", window_handle); +} + +void Module_UI::setDirty(kernel_handle_t window_handle) +{ + for (int i = 0; i < MODULE_UI_MAX_WINDOWS; i++) + { + if (m_window[i] != nullptr && m_window[i]->handle == window_handle) + { + m_window[i]->dirty = true; + m_dirty = true; + return; + } + } + watchos::panic("Trying to set dirty non-existent window handle: %#010x", window_handle); +} + +int Module_UI::getWidth() +{ + return m_draw_w; +} + +int Module_UI::getHeight() +{ + return m_draw_h; +} + +void Module_UI::fill(uint16_t colour) +{ + fill(m_draw_x, m_draw_y, m_draw_w, m_draw_h, colour); +} + +void Module_UI::fill(int x, int y, int width, int height, uint16_t colour) +{ + local_to_screen(&x, &y); + gfx.fillRect(x, y, width, height, colour); +} + +void Module_UI::print(int x, int y, char* str, uint16_t colour, void* font) +{ + local_to_screen(&x, &y); + gfx.setCursor(x, y); + gfx.setTextColor(colour); + if (font == nullptr) + { + gfx.setFont(&FreeMono12pt7b); + } + else + { + gfx.setFont(static_cast(font)); + } + gfx.print(str); +} + +void Module_UI::local_to_screen(int* x, int* y) +{ + // TODO: Check bounds? + if (x < 0) + *x = (m_draw_w - *x) + m_draw_x; + else + *x = m_draw_x + *x; + + if (y < 0) + *y = (m_draw_h - *y) + m_draw_y; + else + *y = m_draw_y + *y; +} \ No newline at end of file diff --git a/watchos2/Module_UI.h b/watchos2/Module_UI.h index b0be076..0aa99c1 100644 --- a/watchos2/Module_UI.h +++ b/watchos2/Module_UI.h @@ -8,14 +8,50 @@ #include "Task.h" #include "IRunnable.h" +#include "IDrawable.h" #define MODULE_UI_MAX_WINDOWS 32 +#define MODULE_UI_MULTICORE_STACK_SIZE 10240 + +#define MODULE_UI_LAYOUT_MODE_NONE 0 +#define MODULE_UI_LAYOUT_MODE_SPLIT_VERTICAL 1 +#define MODULE_UI_LAYOUT_MODE_SPLIT_HORIZONTAL 2 +#define MODULE_UI_LAYOUT_MODE_ABSOLUTE 3 struct UiWindow; class Module_UI : public Task, public IRunnable { UiWindow* m_window[MODULE_UI_MAX_WINDOWS]; + + bool m_initialized = false; + bool m_dirty = false; + // temp, until we implement scenes + kernel_handle_t m_root; + int m_draw_x, m_draw_y, m_draw_w, m_draw_h; + + void draw_window(UiWindow* window, int x, int y, int width, int height); + void local_to_screen(int* x, int* y); + +public: + Module_UI(); + kernel_handle_t createWindow(IDrawable* drawable, kernel_handle_t parent); + kernel_handle_t createWindow(kernel_handle_t parent); + kernel_handle_t getRoot(); + + void tick(); + + void draw(); + void do_draw(); + + void setLayoutMode(kernel_handle_t window_handle, byte layout_mode); + void setDirty(kernel_handle_t window_handle); + + int getWidth(); + int getHeight(); + void fill(uint16_t colour = COLOUR_SECONDARY); + void fill(int x, int y, int width, int height, uint16_t colour = COLOUR_SECONDARY); + void print(int x, int y, char* str, uint16_t colour = COLOUR_PRIMARY, void* font = nullptr); }; #endif \ No newline at end of file diff --git a/watchos2/Task_Test.cpp b/watchos2/Task_Test.cpp index 23c3832..ef74b73 100644 --- a/watchos2/Task_Test.cpp +++ b/watchos2/Task_Test.cpp @@ -1,11 +1,20 @@ #include "watchos.h" +#include "Module_UI.h" -class Task_Test : public IRunnable, public Task, public EventListener +class Task_Test : public IRunnable, public IDrawable, public Task, public EventListener { + Module_UI* ui = nullptr; + kernel_handle_t window_handle; + public: Task_Test() { watchos::subscribe(this, 0xffffffffffffffffu, 0xffffu); + ui = static_cast(watchos::module(WATCHOS_MODULE_UI)); + ui->setLayoutMode(ui->getRoot(), MODULE_UI_LAYOUT_MODE_SPLIT_HORIZONTAL); + + window_handle = ui->createWindow(this, ui->getRoot()); + ui->createWindow(ui->getRoot()); } void tick() { @@ -19,4 +28,9 @@ public: this->popEvent(); } } + void draw(kernel_handle_t handle) + { + ui->fill(COLOUR_SECONDARY); + ui->print(0, ui->getHeight(), "Hello, world!"); + } }; \ No newline at end of file diff --git a/watchos2/__vm/Compile.vmps.xml b/watchos2/__vm/Compile.vmps.xml index 2040ddf..1432efd 100644 --- a/watchos2/__vm/Compile.vmps.xml +++ b/watchos2/__vm/Compile.vmps.xml @@ -2,7 +2,7 @@ - + diff --git a/watchos2/__vm/Upload.vmps.xml b/watchos2/__vm/Upload.vmps.xml index 5d6debe..1432efd 100644 --- a/watchos2/__vm/Upload.vmps.xml +++ b/watchos2/__vm/Upload.vmps.xml @@ -2,7 +2,7 @@ - + diff --git a/watchos2/watchos.cpp b/watchos2/watchos.cpp index 9dcf0bb..c1df761 100644 --- a/watchos2/watchos.cpp +++ b/watchos2/watchos.cpp @@ -58,7 +58,7 @@ Task* watchos::task(kernel_handle_t task) return static_cast(kernel()->getHandle(task)); } -Task* watchos::task(well_known_handle_t handle) +Task* watchos::module(well_known_handle_t handle) { return static_cast(kernel()->getHandle(kernel()->getHandleForWellKnown(handle))); } diff --git a/watchos2/watchos.h b/watchos2/watchos.h index 64da8be..a057360 100644 --- a/watchos2/watchos.h +++ b/watchos2/watchos.h @@ -12,6 +12,7 @@ #include "Kernel.h" #include "Task.h" #include "IRunnable.h" +#include "IDrawable.h" class watchos { @@ -26,7 +27,7 @@ public: static Event* event(kernel_handle_t event); static Task* task(kernel_handle_t task); - static Task* task(well_known_handle_t handle); + static Task* module(well_known_handle_t handle); static void reference(kernel_handle_t handle); static void release(kernel_handle_t handle); diff --git a/watchos2/watchos2.ino b/watchos2/watchos2.ino index f52a46d..2298e67 100644 --- a/watchos2/watchos2.ino +++ b/watchos2/watchos2.ino @@ -1,25 +1,27 @@ -/* - Name: watchos2.ino - Created: 6/30/2021 9:38:10 PM - Author: Adam -*/ +/* + Name: watchos2.ino + Created: 6/30/2021 9:38:10 PM + Author: Adam +*/ + +#include "watchos.h" +#include "Task_Test.cpp" +#include -#include "watchos.h" -#include "Task_Test.cpp" -#include - // the setup function runs once when you press reset or power the board -void setup() { - delay(500); - watchos::initialize(); - Kernel* kernel = watchos::kernel(); - watchos::run(new Task_Test()); - watchos::debug("Setup done!"); - kernel->pushEvent(0xDEADBEEFu, 0x01, 0x10, 0x20); - -} - -// the loop function runs over and over again until power down or reset -void loop() { - watchos::kernel()->tick(); -} +void setup() { + delay(500); + watchos::initialize(); + Kernel* kernel = watchos::kernel(); + kernel->registerTask(new Module_UI(), WATCHOS_MODULE_UI); + watchos::run(new Task_Test()); + watchos::debug("Setup done!"); + kernel->pushEvent(0xDEADBEEFu, 0x01, 0x10, 0x20); + +} + +// the loop function runs over and over again until power down or reset +void loop() { + watchos::debug("Tick!"); + watchos::kernel()->tick(); +} diff --git a/watchos2/watchos2.vcxproj b/watchos2/watchos2.vcxproj index 07c074e..5c70ef5 100644 --- a/watchos2/watchos2.vcxproj +++ b/watchos2/watchos2.vcxproj @@ -77,10 +77,10 @@ Level3 Disabled true - %(AdditionalIncludeDirectories) - %(ForcedIncludeFiles) + $(ProjectDir)..\watchos2;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\EEPROM\src;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\Wire\src;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\SPI\src;$(ProjectDir)..\..\..\..\Arduino\libraries\Adafruit_GFX_Library;$(ProjectDir)..\..\..\..\Arduino\libraries\GxEPD2\src;$(ProjectDir)..\..\..\..\Arduino\libraries\Adafruit_BusIO;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32\apps;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32\libb64;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\variants\esp32;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\config;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\app_trace;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\app_update;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\asio;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\bootloader_support;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\bt;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\coap;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\console;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\driver;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\efuse;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp-tls;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp32;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_adc_cal;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_event;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_http_client;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_http_server;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_https_ota;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_https_server;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_ringbuf;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_websocket_client;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\espcoredump;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\ethernet;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\expat;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\fatfs;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\freemodbus;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\freertos;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\heap;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\idf_test;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\jsmn;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\json;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\libsodium;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\log;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\lwip;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\mbedtls;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\mdns;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\micro-ecc;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\mqtt;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\newlib;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\nghttp;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\nvs_flash;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\openssl;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\protobuf-c;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\protocomm;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\pthread;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\sdmmc;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\smartconfig_ack;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\soc;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\spi_flash;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\spiffs;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\tcp_transport;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\tcpip_adapter;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\ulp;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\unity;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\vfs;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\wear_levelling;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\wifi_provisioning;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\wpa_supplicant;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\xtensa-debug-module;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp-face;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp32-camera;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\fb_gfx;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\lib\gcc\xtensa-esp32-elf\5.2.0\include;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\xtensa-esp32-elf\include\c++\5.2.0\xtensa-esp32-elf;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\xtensa-esp32-elf\include;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\xtensa-esp32-elf\include\c++\5.2.0;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\include\c++\5.2.0;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\include;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include;%(AdditionalIncludeDirectories) + $(ProjectDir)__vm\.watchos2.vsarduino.h;%(ForcedIncludeFiles) true - %(PreprocessorDefinitions) + __ESP32_esp32__;__ESP32_ESP32__;ESP_PLATFORM;HAVE_CONFIG_H;GCC_NOT_5_2_0=0;WITH_POSIX;F_CPU=240000000L;ARDUINO=108015;ARDUINO_ESP32_DEV;ARDUINO_ARCH_ESP32;ESP32;CORE_DEBUG_LEVEL=0;__cplusplus=201103L;_VMICRO_INTELLISENSE;%(PreprocessorDefinitions) true @@ -93,6 +93,9 @@ true true true + $(ProjectDir)..\watchos2;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\Preferences\src;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32\apps;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32\libb64;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\variants\esp32;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\config;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\app_trace;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\app_update;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\asio;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\bootloader_support;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\bt;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\coap;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\console;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\driver;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\efuse;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp-tls;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp32;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_adc_cal;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_event;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_http_client;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_http_server;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_https_ota;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_https_server;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_ringbuf;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp_websocket_client;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\espcoredump;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\ethernet;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\expat;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\fatfs;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\freemodbus;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\freertos;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\heap;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\idf_test;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\jsmn;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\json;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\libsodium;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\log;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\lwip;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\mbedtls;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\mdns;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\micro-ecc;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\mqtt;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\newlib;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\nghttp;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\nvs_flash;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\openssl;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\protobuf-c;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\protocomm;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\pthread;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\sdmmc;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\smartconfig_ack;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\soc;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\spi_flash;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\spiffs;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\tcp_transport;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\tcpip_adapter;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\ulp;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\unity;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\vfs;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\wear_levelling;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\wifi_provisioning;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\wpa_supplicant;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\xtensa-debug-module;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp-face;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\esp32-camera;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include\fb_gfx;$(ProjectDir)..\..\..\..\..\DOCUME~1\Projects\Watchy\watchos2\watchos2;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\lib\gcc\xtensa-esp32-elf\5.2.0\include;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\xtensa-esp32-elf\include\c++\5.2.0\xtensa-esp32-elf;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\xtensa-esp32-elf\include;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\xtensa-esp32-elf\include\c++\5.2.0;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\include\c++\5.2.0;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\1.22.0-97-gc752ad5-5.2.0\include;$(ProjectDir)..\..\..\..\..\AppData\Local\arduino15\packages\esp32\hardware\esp32\1.0.6\tools\sdk\include;%(AdditionalIncludeDirectories) + $(ProjectDir)__vm\.watchos2.vsarduino.h;%(ForcedIncludeFiles) + __ESP32_esp32__;__ESP32_ESP32__;ESP_PLATFORM;HAVE_CONFIG_H;GCC_NOT_5_2_0=0;WITH_POSIX;F_CPU=240000000L;ARDUINO=108015;ARDUINO_ESP32_DEV;ARDUINO_ARCH_ESP32;ESP32;CORE_DEBUG_LEVEL=0;__cplusplus=201103L;_VMICRO_INTELLISENSE;%(PreprocessorDefinitions) true @@ -115,7 +118,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/watchos2/watchos2.vcxproj.filters b/watchos2/watchos2.vcxproj.filters index bd51f8a..d1a670f 100644 --- a/watchos2/watchos2.vcxproj.filters +++ b/watchos2/watchos2.vcxproj.filters @@ -20,4 +20,71 @@ Misc Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + \ No newline at end of file diff --git a/watchos2/watchos_config.h b/watchos2/watchos_config.h index e69de29..54590af 100644 --- a/watchos2/watchos_config.h +++ b/watchos2/watchos_config.h @@ -0,0 +1,13 @@ +#ifndef _WATCHOS_CONFIG_h +#define _WATCHOS_CONFIG_h + +// If defined, enable debugging output. +#define WATCHOS_DEBUG + +// If defined, use black background + white fg +#define WATCHOS_DARK_MODE + +// If defined, use the second core for drawing +#define WATCHOS_UI_MULTICORE + +#endif \ No newline at end of file diff --git a/watchos2/watchos_consts.h b/watchos2/watchos_consts.h index 6134f3e..1320c90 100644 --- a/watchos2/watchos_consts.h +++ b/watchos2/watchos_consts.h @@ -1,14 +1,23 @@ #ifndef _WATCHOS_CONSTS_h #define _WATCHOS_CONSTS_h -// If defined, enable debugging output. -#define WATCHOS_DEBUG +#include "watchos_config.h" -#define WATCHOS_WK_TEST 0x00000001 +#ifdef WATCHOS_DARK_MODE +#define COLOUR_PRIMARY 0xFFFF // white +#define COLOUR_SECONDARY 0x0000 // black +#else +#define COLOUR_PRIMARY 0x0000 // black +#define COLOUR_SECONDARY 0xFFFF // white +#endif + +#define WATCHOS_MODULE_UI 0x00000001 #define WATCHOS_HANDLE_NULL 0x00000000 + #define WATCHOS_HANDLE_TYPE_TASK 0x01 #define WATCHOS_HANDLE_TYPE_EVENT 0x02 #define WATCHOS_HANDLE_TYPE_EVENT_SUBSCRIPTION 0x03 +#define WATCHOS_HANDLE_TYPE_UI_WINDOW 0x04 #endif \ No newline at end of file