mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-10-29 09:35:28 +00:00
refactoring eink devices behaviour
This commit is contained in:
1 parent
428a95c643
commit
a31e2c92df
17 files changed
+71
-25
No files matched your search
@@ -197,11 +197,10 @@ class HomeScreen : public UIScreen {
|
||||
sensors_nb ++;
|
||||
}
|
||||
sensors_scroll = sensors_nb > UI_RECENT_LIST_SIZE;
|
||||
#if AUTO_OFF_MILLIS > 0
|
||||
next_sensors_refresh = millis() + 5000; // refresh sensor values every 5 sec
|
||||
#else
|
||||
next_sensors_refresh = millis() + 60000; // refresh sensor values every 1 min
|
||||
#endif
|
||||
if (display.isEink()) // preserve eink displays
|
||||
next_sensors_refresh = millis() + 60000; // refresh sensor values every 1 min
|
||||
else
|
||||
next_sensors_refresh = millis() + 5000; // refresh sensor values every 5 sec
|
||||
}
|
||||
}
|
||||
|
||||
@@ -703,11 +702,7 @@ public:
|
||||
display.translateUTF8ToBlocks(filtered_msg, p->msg, sizeof(filtered_msg));
|
||||
display.printWordWrap(filtered_msg, display.width());
|
||||
|
||||
#if AUTO_OFF_MILLIS==0 // probably e-ink
|
||||
return 10000; // 10 s
|
||||
#else
|
||||
return 1000; // next render after 1000 ms
|
||||
#endif
|
||||
return display.isEink() ? 10000 : 1000; // 10 s for eink
|
||||
}
|
||||
|
||||
bool handleInput(char c) override {
|
||||
@@ -739,6 +734,9 @@ void UITask::begin(DisplayDriver* display, SensorManager* sensors, NodePrefs* no
|
||||
#if defined(PIN_USER_BTN_ANA)
|
||||
analog_btn.begin();
|
||||
#endif
|
||||
#if defined(BACKLIGHT_BTN)
|
||||
backlight_btn.begin();
|
||||
#endif
|
||||
|
||||
_node_prefs = node_prefs;
|
||||
|
||||
@@ -1002,13 +1000,30 @@ void UITask::loop() {
|
||||
#endif
|
||||
#if defined(BACKLIGHT_BTN)
|
||||
if (millis() > next_backlight_btn_check) {
|
||||
bool touch_state = digitalRead(PIN_BUTTON2);
|
||||
if (backlight_btn.isPressed()) {
|
||||
if (!_display->isOn()) {
|
||||
_display->turnOn();
|
||||
_next_refresh = 0;
|
||||
}
|
||||
_auto_off = millis() + AUTO_OFF_MILLIS; // extend auto-off timer
|
||||
backlight_btn_pressed_at = millis(); // still pressed
|
||||
}
|
||||
bool touch_state = (millis() - backlight_btn_pressed_at > 5000);
|
||||
// Backlight button events
|
||||
int bev = backlight_btn.check();
|
||||
if (bev == BUTTON_EVENT_DOUBLE_CLICK) {
|
||||
_display->forceFullRefresh();
|
||||
} else if (bev == BUTTON_EVENT_TRIPLE_CLICK) {
|
||||
_display->blankScreen();
|
||||
_display->turnOff();
|
||||
backlight_btn_pressed_at = 0;
|
||||
}
|
||||
#if defined(DISP_BACKLIGHT)
|
||||
digitalWrite(DISP_BACKLIGHT, !touch_state);
|
||||
#elif defined(EXP_PIN_BACKLIGHT)
|
||||
expander.digitalWrite(EXP_PIN_BACKLIGHT, !touch_state);
|
||||
#endif
|
||||
next_backlight_btn_check = millis() + 300;
|
||||
next_backlight_btn_check = millis() + 100;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1056,6 +1071,11 @@ void UITask::loop() {
|
||||
}
|
||||
#endif
|
||||
if (millis() > _auto_off) {
|
||||
#ifdef EINK_SCREENOFF_BLANK
|
||||
if (curr != msg_preview) { // don't blank if messages are waiting
|
||||
display.blankScreen();
|
||||
}
|
||||
#endif
|
||||
_display->turnOff();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -61,7 +61,8 @@ class UITask : public AbstractUITask {
|
||||
unsigned long _alert_expiry;
|
||||
int _msgcount;
|
||||
unsigned long ui_started_at, next_batt_chck;
|
||||
int next_backlight_btn_check = 0;
|
||||
unsigned long next_backlight_btn_check = 0;
|
||||
unsigned long backlight_btn_pressed_at = 0;
|
||||
#ifdef PIN_STATUS_LED
|
||||
int led_state = 0;
|
||||
int next_led_change = 0;
|
||||
|
||||
@@ -27,6 +27,7 @@ public:
|
||||
virtual void turnOn() = 0;
|
||||
virtual void turnOff() = 0;
|
||||
virtual void clear() = 0;
|
||||
virtual void blankScreen() {} // to cleanly erase screen before turning off
|
||||
virtual void startFrame(ColorVal bkg = UIColor::window_bkg) = 0;
|
||||
virtual void setTextSize(int sz) = 0;
|
||||
virtual void setColor(ColorVal c) = 0;
|
||||
|
||||
@@ -82,13 +82,17 @@ void GxEPDDisplay::turnOff() {
|
||||
expander.digitalWrite(EXP_PIN_BACKLIGHT, LOW);
|
||||
#endif
|
||||
_isOn = false;
|
||||
last_display_crc_value=0;
|
||||
display.hibernate();
|
||||
}
|
||||
|
||||
void GxEPDDisplay::blankScreen() {
|
||||
// do full refresh before powering off to clear screen
|
||||
// no full refresh needed at wakeup
|
||||
display.clearScreen(0xFF); // Clears microcontroller side RAM
|
||||
display.writeScreenBuffer(0xFF); // Forces 0xFF (White) into the display controller's history registers
|
||||
resetPartialRefreshCounter();
|
||||
last_display_crc_value=0;
|
||||
display.hibernate();
|
||||
}
|
||||
|
||||
void GxEPDDisplay::clear() {
|
||||
|
||||
@@ -61,6 +61,7 @@ public:
|
||||
void turnOn() override;
|
||||
void turnOff() override;
|
||||
void clear() override;
|
||||
void blankScreen() override;
|
||||
void startFrame(ColorVal bkg = UIColor::window_bkg) override;
|
||||
void setTextSize(int sz) override;
|
||||
void setColor(ColorVal c) override;
|
||||
|
||||
@@ -32,8 +32,12 @@ build_flags = ${nrf52_base.build_flags}
|
||||
-D PIN_GPS_RESET_ACTIVE=LOW
|
||||
-D TELEM_BME280_ADDRESS=0x77
|
||||
-D DISPLAY_CLASS=GxEPDDisplay
|
||||
-D EINK_SCREENOFF_BLANK
|
||||
-D UI_RECENT_LIST_SIZE=9
|
||||
-D UI_MSG_PREVIEW_SIZE=165
|
||||
-D EINK_MAX_PARTIAL_REFRESH=60
|
||||
-D AUTO_OFF_MILLIS=1800000
|
||||
-D BACKLIGHT_BTN=PIN_BUTTON2
|
||||
-D AUTO_OFF_MILLIS=0
|
||||
build_src_filter = ${nrf52_base.build_src_filter}
|
||||
+<helpers/*.cpp>
|
||||
+<TechoBoard.cpp>
|
||||
@@ -91,7 +95,6 @@ build_flags =
|
||||
-D BLE_PIN_CODE=123456
|
||||
; -D BLE_DEBUG_LOGGING=1
|
||||
-D OFFLINE_QUEUE_SIZE=256
|
||||
-D UI_RECENT_LIST_SIZE=9
|
||||
-D UI_SENSORS_PAGE=1
|
||||
-D UI_GPS_PAGE=1
|
||||
; -D MESH_PACKET_LOGGING=1
|
||||
@@ -116,7 +119,6 @@ build_flags =
|
||||
-D MAX_CONTACTS=350
|
||||
-D MAX_GROUP_CHANNELS=40
|
||||
-D OFFLINE_QUEUE_SIZE=256
|
||||
-D UI_RECENT_LIST_SIZE=9
|
||||
-D UI_SENSORS_PAGE=1
|
||||
-D AUTO_SHUTDOWN_MILLIVOLTS=3300
|
||||
-D QSPIFLASH=1
|
||||
|
||||
@@ -23,6 +23,7 @@ EnvironmentSensorManager sensors = EnvironmentSensorManager();
|
||||
#ifdef DISPLAY_CLASS
|
||||
DISPLAY_CLASS display;
|
||||
MomentaryButton user_btn(PIN_USER_BTN, 1000, true);
|
||||
MomentaryButton backlight_btn(BACKLIGHT_BTN, 1000, true);
|
||||
#endif
|
||||
|
||||
bool radio_init() {
|
||||
|
||||
@@ -22,6 +22,7 @@ extern EnvironmentSensorManager sensors;
|
||||
#ifdef DISPLAY_CLASS
|
||||
extern DISPLAY_CLASS display;
|
||||
extern MomentaryButton user_btn;
|
||||
extern MomentaryButton backlight_btn;
|
||||
#endif
|
||||
|
||||
bool radio_init();
|
||||
|
||||
@@ -24,6 +24,13 @@ build_flags = ${nrf52_base.build_flags}
|
||||
-D SX126X_RX_BOOSTED_GAIN=1
|
||||
-D LORA_TX_POWER=22
|
||||
-D P_LORA_TX_LED=13
|
||||
-D UI_RECENT_LIST_SIZE=9
|
||||
-D UI_MSG_PREVIEW_SIZE=165
|
||||
-D EINK_MAX_PARTIAL_REFRESH=60
|
||||
-D BACKLIGHT_BTN=PIN_BUTTON2
|
||||
-D AUTO_OFF_MILLIS=1800000
|
||||
-D UI_NO_HIBERNATE
|
||||
-D DISABLE_DIAGNOSTIC_OUTPUT
|
||||
build_src_filter = ${nrf52_base.build_src_filter}
|
||||
+<helpers/*.cpp>
|
||||
+<ThinkNodeM1Board.cpp>
|
||||
|
||||
@@ -17,6 +17,7 @@ ThinkNodeM1SensorManager sensors = ThinkNodeM1SensorManager(nmea);
|
||||
#ifdef DISPLAY_CLASS
|
||||
DISPLAY_CLASS display;
|
||||
MomentaryButton user_btn(PIN_USER_BTN, 1000, true);
|
||||
MomentaryButton backlight_btn(BACKLIGHT_BTN, 1000, true);
|
||||
#endif
|
||||
|
||||
bool radio_init() {
|
||||
|
||||
@@ -40,6 +40,7 @@ extern ThinkNodeM1SensorManager sensors;
|
||||
#ifdef DISPLAY_CLASS
|
||||
extern DISPLAY_CLASS display;
|
||||
extern MomentaryButton user_btn;
|
||||
extern MomentaryButton backlight_btn;
|
||||
#endif
|
||||
|
||||
bool radio_init();
|
||||
|
||||
@@ -26,8 +26,12 @@ build_flags = ${esp32_base.build_flags}
|
||||
-D EINK_SCALE_Y=1.5625f
|
||||
-D EINK_X_OFFSET=0
|
||||
-D EINK_Y_OFFSET=10
|
||||
-D UI_RECENT_LIST_SIZE=9
|
||||
-D UI_MSG_PREVIEW_SIZE=165
|
||||
-D EINK_MAX_PARTIAL_REFRESH=60
|
||||
-D BACKLIGHT_BTN=PIN_BUTTON2
|
||||
-D AUTO_OFF_MILLIS=0
|
||||
-D AUTO_OFF_MILLIS=1800000
|
||||
-D UI_NO_HIBERNATE
|
||||
-D DISABLE_DIAGNOSTIC_OUTPUT
|
||||
-D SX126X_DIO2_AS_RF_SWITCH=true
|
||||
-D SX126X_DIO3_TCXO_VOLTAGE=3.3
|
||||
@@ -150,7 +154,6 @@ build_flags =
|
||||
-D MAX_GROUP_CHANNELS=40
|
||||
-D BLE_PIN_CODE=123456
|
||||
-D OFFLINE_QUEUE_SIZE=256
|
||||
-D UI_RECENT_LIST_SIZE=9
|
||||
; -D BLE_DEBUG_LOGGING=1
|
||||
; -D MESH_PACKET_LOGGING=1
|
||||
; -D GPS_NMEA_DEBUG
|
||||
|
||||
@@ -26,6 +26,7 @@ EnvironmentSensorManager sensors = EnvironmentSensorManager();
|
||||
#ifdef DISPLAY_CLASS
|
||||
DISPLAY_CLASS display;
|
||||
MomentaryButton user_btn(PIN_USER_BTN, 1000, true);
|
||||
MomentaryButton backlight_btn(BACKLIGHT_BTN, 1000, true);
|
||||
#endif
|
||||
|
||||
bool radio_init() {
|
||||
|
||||
@@ -24,6 +24,7 @@ extern PCA9557 expander;
|
||||
#ifdef DISPLAY_CLASS
|
||||
extern DISPLAY_CLASS display;
|
||||
extern MomentaryButton user_btn;
|
||||
extern MomentaryButton backlight_btn;
|
||||
#endif
|
||||
|
||||
bool radio_init();
|
||||
|
||||
@@ -18,12 +18,16 @@ build_flags = ${nrf52_base.build_flags}
|
||||
-D P_LORA_SCLK=19
|
||||
-D P_LORA_MISO=22
|
||||
-D P_LORA_MOSI=20
|
||||
-D UI_SHOW_CLOCK=1
|
||||
-D DISPLAY_ROTATION=4
|
||||
-D UI_HAS_ROTARY_INPUT=1
|
||||
-D UI_HAS_NAV_INPUT=1
|
||||
-D UI_RECENT_LIST_SIZE=9
|
||||
-D UI_MSG_PREVIEW_SIZE=165
|
||||
-D EINK_MAX_PARTIAL_REFRESH=60
|
||||
-D AUTO_OFF_MILLIS=1800000
|
||||
-D BACKLIGHT_BTN=PIN_BUTTON2
|
||||
-D UI_SHOW_CLOCK=1
|
||||
-D EINK_SCREENOFF_BLANK
|
||||
-D EINK_DISPLAY_MODEL=GxEPD2_154_D67
|
||||
; -D EINK_DISPLAY_MODEL=GxEPD2_154_GDEY0154D67
|
||||
; -D EINK_DISPLAY_MODEL=GxEPD2_150_BN
|
||||
@@ -92,10 +96,7 @@ build_flags =
|
||||
-D MAX_GROUP_CHANNELS=40
|
||||
-D BLE_PIN_CODE=123456
|
||||
# -D BLE_DEBUG_LOGGING=1
|
||||
-D DISPLAY_ROTATION=4
|
||||
-D DISPLAY_CLASS=GxEPDDisplay
|
||||
-D BACKLIGHT_BTN=PIN_BUTTON2
|
||||
-D AUTO_OFF_MILLIS=0
|
||||
-D OFFLINE_QUEUE_SIZE=256
|
||||
-D PIN_BUZZER=33
|
||||
-D AUTO_SHUTDOWN_MILLIVOLTS=3300
|
||||
@@ -133,8 +134,6 @@ build_flags =
|
||||
-D DISPLAY_ROTATION=4
|
||||
-D QSPIFLASH=1
|
||||
-D DISPLAY_CLASS=GxEPDDisplay
|
||||
-D BACKLIGHT_BTN=PIN_BUTTON2
|
||||
-D AUTO_OFF_MILLIS=0
|
||||
-D OFFLINE_QUEUE_SIZE=256
|
||||
-D PIN_BUZZER=6
|
||||
-D AUTO_SHUTDOWN_MILLIVOLTS=3300
|
||||
|
||||
@@ -23,6 +23,7 @@ EnvironmentSensorManager sensors = EnvironmentSensorManager();
|
||||
DISPLAY_CLASS display;
|
||||
MomentaryButton user_btn(PIN_USER_BTN, 1000, true);
|
||||
RotaryInputGPIO rotary_input(PIN_BUTTON1_A, PIN_BUTTON1_B);
|
||||
MomentaryButton backlight_btn(BACKLIGHT_BTN, 1000, true);
|
||||
#endif
|
||||
|
||||
bool radio_init() {
|
||||
|
||||
@@ -23,6 +23,7 @@ extern EnvironmentSensorManager sensors;
|
||||
#ifdef DISPLAY_CLASS
|
||||
extern DISPLAY_CLASS display;
|
||||
extern MomentaryButton user_btn;
|
||||
extern MomentaryButton backlight_btn;
|
||||
extern RotaryInputGPIO rotary_input;
|
||||
#endif
|
||||
|
||||
|
||||
Reference in new issue
Block a user