#include "watchos.h" #include "Module_UI.h" #include "Module_RTC.h" class Task_Clock : public IRunnable, public IDrawable, public Task, public EventListener { Module_UI* ui = nullptr; kernel_handle_t window_handle; bool read_rtc = false; byte hour, minute; public: void start() { watchos::subscribe(this, WATCHOS_MODULE_RTC, WATCHOS_EVENT_TYPE_RTC_MINUTE); ui = static_cast(watchos::module(WATCHOS_MODULE_UI)); window_handle = ui->createWindow(this, ui->getRoot()); ui->setAbsolutePosition(window_handle, 0, 0, 200, 96); } void tick() { Event* e; while (this->hasEvent()) { e = this->getEvent(); if (e->source == WATCHOS_MODULE_RTC && e->event == WATCHOS_EVENT_TYPE_RTC_MINUTE) { if (!read_rtc || e->param1 != hour || e->param2 != minute) { hour = e->param1; minute = e->param2; read_rtc = true; ui->setDirty(window_handle); } } this->popEvent(); } } void draw(kernel_handle_t handle) { if (!read_rtc) { Module_RTC* rtc = static_cast(watchos::module(WATCHOS_MODULE_RTC)); hour = rtc->getHour(); minute = rtc->getMinute(); read_rtc = true; } char time[6]; sprintf(time, "%02d:%02d", hour, minute); ui->fill(COLOUR_SECONDARY); ui->print(0, ui->getHeight() - 8, time, COLOUR_PRIMARY, 1); } };