mirror of https://github.com/sqfmi/Watchy.git
Refactor Display Init
* It makes more sense to put it in the Display class * The reset should be 2ms, 10ms is worst case * Also there was a disable call based on display that makes more sense to put in the default boot switch statementpull/242/head
parent
2b21e50c2f
commit
f2c0c91a61
|
@ -15,8 +15,10 @@
|
||||||
// Link: https://github.com/sqfmi/Watchy
|
// Link: https://github.com/sqfmi/Watchy
|
||||||
|
|
||||||
#include "Display.h"
|
#include "Display.h"
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
RTC_DATA_ATTR bool displayFullInit = true;
|
||||||
|
|
||||||
void WatchyDisplay::busyCallback(const void *) {
|
void WatchyDisplay::busyCallback(const void *) {
|
||||||
gpio_wakeup_enable((gpio_num_t)DISPLAY_BUSY, GPIO_INTR_LOW_LEVEL);
|
gpio_wakeup_enable((gpio_num_t)DISPLAY_BUSY, GPIO_INTR_LOW_LEVEL);
|
||||||
esp_sleep_enable_gpio_wakeup();
|
esp_sleep_enable_gpio_wakeup();
|
||||||
|
@ -26,11 +28,16 @@ void WatchyDisplay::busyCallback(const void *) {
|
||||||
WatchyDisplay::WatchyDisplay() :
|
WatchyDisplay::WatchyDisplay() :
|
||||||
GxEPD2_EPD(DISPLAY_CS, DISPLAY_DC, DISPLAY_RES, DISPLAY_BUSY, HIGH, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate)
|
GxEPD2_EPD(DISPLAY_CS, DISPLAY_DC, DISPLAY_RES, DISPLAY_BUSY, HIGH, 10000000, WIDTH, HEIGHT, panel, hasColor, hasPartialUpdate, hasFastPartialUpdate)
|
||||||
{
|
{
|
||||||
// Watchy default initialization
|
// Setup callback and SPI by default
|
||||||
selectSPI(SPI, SPISettings(20000000, MSBFIRST, SPI_MODE0)); // Set SPI to 20Mhz (default is 4Mhz)
|
selectSPI(SPI, SPISettings(20000000, MSBFIRST, SPI_MODE0));
|
||||||
setBusyCallback(busyCallback);
|
setBusyCallback(busyCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WatchyDisplay::initWatchy() {
|
||||||
|
// Watchy default initialization
|
||||||
|
init(0, displayFullInit, 2, true);
|
||||||
|
}
|
||||||
|
|
||||||
void WatchyDisplay::clearScreen(uint8_t value)
|
void WatchyDisplay::clearScreen(uint8_t value)
|
||||||
{
|
{
|
||||||
writeScreenBuffer(value);
|
writeScreenBuffer(value);
|
||||||
|
@ -404,6 +411,7 @@ void WatchyDisplay::_Update_Full()
|
||||||
_transferCommand(0x20);
|
_transferCommand(0x20);
|
||||||
_endTransfer();
|
_endTransfer();
|
||||||
_waitWhileBusy("_Update_Full", full_refresh_time);
|
_waitWhileBusy("_Update_Full", full_refresh_time);
|
||||||
|
displayFullInit = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WatchyDisplay::_Update_Part()
|
void WatchyDisplay::_Update_Part()
|
||||||
|
|
|
@ -35,6 +35,7 @@ class WatchyDisplay : public GxEPD2_EPD
|
||||||
static const uint16_t partial_refresh_time = 500; // ms, e.g. 457282us
|
static const uint16_t partial_refresh_time = 500; // ms, e.g. 457282us
|
||||||
// constructor
|
// constructor
|
||||||
WatchyDisplay();
|
WatchyDisplay();
|
||||||
|
void initWatchy();
|
||||||
static void busyCallback(const void *);
|
static void busyCallback(const void *);
|
||||||
// methods (virtual)
|
// methods (virtual)
|
||||||
// Support for Bitmaps (Sprites) to Controller Buffer and to Screen
|
// Support for Bitmaps (Sprites) to Controller Buffer and to Screen
|
||||||
|
|
|
@ -11,7 +11,6 @@ RTC_DATA_ATTR bool WIFI_CONFIGURED;
|
||||||
RTC_DATA_ATTR bool BLE_CONFIGURED;
|
RTC_DATA_ATTR bool BLE_CONFIGURED;
|
||||||
RTC_DATA_ATTR weatherData currentWeather;
|
RTC_DATA_ATTR weatherData currentWeather;
|
||||||
RTC_DATA_ATTR int weatherIntervalCounter = -1;
|
RTC_DATA_ATTR int weatherIntervalCounter = -1;
|
||||||
RTC_DATA_ATTR bool displayFullInit = true;
|
|
||||||
RTC_DATA_ATTR long gmtOffset = 0;
|
RTC_DATA_ATTR long gmtOffset = 0;
|
||||||
RTC_DATA_ATTR bool alreadyInMenu = true;
|
RTC_DATA_ATTR bool alreadyInMenu = true;
|
||||||
RTC_DATA_ATTR tmElements_t bootTime;
|
RTC_DATA_ATTR tmElements_t bootTime;
|
||||||
|
@ -22,9 +21,8 @@ void Watchy::init(String datetime) {
|
||||||
Wire.begin(SDA, SCL); // init i2c
|
Wire.begin(SDA, SCL); // init i2c
|
||||||
RTC.init();
|
RTC.init();
|
||||||
|
|
||||||
// Init the display here for all cases, if unused, it will do nothing
|
// Init the display since is almost sure we will use it
|
||||||
display.init(0, displayFullInit, 10,
|
display.epd2.initWatchy();
|
||||||
true); // 10ms by spec, and fast pulldown reset
|
|
||||||
|
|
||||||
switch (wakeup_reason) {
|
switch (wakeup_reason) {
|
||||||
case ESP_SLEEP_WAKEUP_EXT0: // RTC Alarm
|
case ESP_SLEEP_WAKEUP_EXT0: // RTC Alarm
|
||||||
|
@ -61,15 +59,14 @@ void Watchy::init(String datetime) {
|
||||||
RTC.read(bootTime);
|
RTC.read(bootTime);
|
||||||
showWatchFace(false); // full update on reset
|
showWatchFace(false); // full update on reset
|
||||||
vibMotor(75, 4);
|
vibMotor(75, 4);
|
||||||
|
// For some reason, seems to be enabled on first boot
|
||||||
|
esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_ALL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
deepSleep();
|
deepSleep();
|
||||||
}
|
}
|
||||||
void Watchy::deepSleep() {
|
void Watchy::deepSleep() {
|
||||||
display.hibernate();
|
display.hibernate();
|
||||||
if (displayFullInit) // For some reason, seems to be enabled on first boot
|
|
||||||
esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_ALL);
|
|
||||||
displayFullInit = false; // Notify not to init it again
|
|
||||||
RTC.clearAlarm(); // resets the alarm flag in the RTC
|
RTC.clearAlarm(); // resets the alarm flag in the RTC
|
||||||
|
|
||||||
// Set GPIOs 0-39 to input to avoid power leaking out
|
// Set GPIOs 0-39 to input to avoid power leaking out
|
||||||
|
|
Loading…
Reference in New Issue