Skip to content

Commit

Permalink
Merge pull request #151 from thooge/master
Browse files Browse the repository at this point in the history
System page for OBP40 and deep sleep improvements
  • Loading branch information
norbert-walter authored Jan 24, 2025
2 parents 0b7863c + 752388a commit cf7ef8d
Show file tree
Hide file tree
Showing 6 changed files with 144 additions and 75 deletions.
26 changes: 26 additions & 0 deletions lib/obp60task/OBP60Extensions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,32 @@ void deepSleep(CommonData &common){
getdisplay().powerOff(); // Display power off
setPortPin(OBP_POWER_50, false); // Power off ePaper display
// Stop system
esp_deep_sleep_start(); // Deep Sleep with weakup via touch pin
}
#endif
#ifdef BOARD_OBP40S3
// Deep sleep funktion
void deepSleep(CommonData &common){
RTC_lastpage = common.data.actpage - 1;
// Switch off all power lines
setPortPin(OBP_BACKLIGHT_LED, false); // Backlight Off
setFlashLED(false); // Flash LED Off
// Shutdown EInk display
getdisplay().setFullWindow(); // Set full Refresh
//getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update
getdisplay().fillScreen(common.bgcolor); // Clear screen
getdisplay().setTextColor(common.fgcolor);
getdisplay().setFont(&Ubuntu_Bold20pt7b);
getdisplay().setCursor(85, 150);
getdisplay().print("Sleep Mode");
getdisplay().setFont(&Ubuntu_Bold8pt7b);
getdisplay().setCursor(65, 175);
getdisplay().print("For wakeup press wheel and wait 5s");
getdisplay().nextPage(); // Partial update
getdisplay().powerOff(); // Display power off
setPortPin(OBP_POWER_EPD, false); // Power off ePaper display
setPortPin(OBP_POWER_SD, false); // Power off SD card
// Stop system
esp_deep_sleep_start(); // Deep Sleep with weakup via GPIO pin
}
#endif
Expand Down
2 changes: 0 additions & 2 deletions lib/obp60task/OBP60Extensions.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,7 @@ Point rotatePoint(const Point& origin, const Point& p, double angle);
std::vector<Point> rotatePoints(const Point& origin, const std::vector<Point>& pts, double angle);
void fillPoly4(const std::vector<Point>& p4, uint16_t color);

#ifdef BOARD_OBP60S3
void deepSleep(CommonData &common);
#endif

uint8_t getLastPage();

Expand Down
10 changes: 7 additions & 3 deletions lib/obp60task/OBP60Keypad.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ void initKeys(CommonData &commonData) {

#ifdef HARDWARE_V21
// Keypad functions for original OBP60 hardware
int readKeypad(GwLog* logger, uint thSensitivity) {
int readKeypad(GwLog* logger, uint thSensitivity, bool use_syspage) {

// Touch sensor values
// 35000 - Not touched
Expand Down Expand Up @@ -261,7 +261,7 @@ void initKeys(CommonData &commonData) {
}

// Keypad functions for OBP60 clone (thSensitivity is inactiv)
int readKeypad(GwLog* logger, uint thSensitivity) {
int readKeypad(GwLog* logger, uint thSensitivity, bool use_syspage) {
pinMode(UP, INPUT);
pinMode(DOWN, INPUT);
pinMode(CONF, INPUT);
Expand All @@ -279,7 +279,11 @@ void initKeys(CommonData &commonData) {
}
// If key pressed longer than 200ms
if(millis() > starttime + 200 && keycode == keycodeold) {
keystatus = keycode;
if (use_syspage and keycode == 3) {
keystatus = 12;
} else {
keystatus = keycode;
}
// Copy keycode
keycodeold = keycode;
while(readSensorpads() > 0){} // Wait for pad release
Expand Down
109 changes: 77 additions & 32 deletions lib/obp60task/PageSystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "OBP60Extensions.h"
#include "images/logo64.xbm"
#include <esp32/clk.h>
#include "qrcode.h"

#define STRINGIZE_IMPL(x) #x
#define STRINGIZE(x) STRINGIZE_IMPL(x)
Expand Down Expand Up @@ -66,28 +67,64 @@ char mode = 'N'; // (N)ormal, (D)evice list
if (hasFRAM) fram.write(FRAM_SYSTEM_MODE, mode);
return 0;
}
// grab cursor keys to disable page navigation
#ifdef BOARD_OBP60S3
// grab cursor key to disable page navigation
if (key == 3) {
return 0;
}
// soft reset
if (key == 4) {
ESP.restart();
}
#ifdef BOARD_OBP60S3
// standby / deep sleep
if (key == 5) {
deepSleep(*commonData);
}
#endif
// Code for keylock
if (key == 11) {
commonData->keylock = !commonData->keylock;
return 0;
}
#endif
#ifdef BOARD_OBP40S3
// grab cursor keys to disable page navigation
if (key == 9 or key == 10) {
return 0;
}
// standby / deep sleep
if (key == 12) {
deepSleep(*commonData);
}
#endif
return key;
}

void displayBarcode(String serialno, uint16_t x, uint16_t y, uint16_t s) {
// Barcode with serial number
// x, y is top left corner
// s is pixel size of a single box
QRCode qrcode;
uint8_t qrcodeData[qrcode_getBufferSize(4)];
#ifdef BOARD_OBP40S3
String prefix = "OBP40:SN:";
#endif
#ifdef BOARD_OBP60S3
String prefix = "OBP60:SN:";
#endif
qrcode_initText(&qrcode, qrcodeData, 4, 0, (prefix + serialno).c_str());
int16_t x0 = x;
for (uint8_t j = 0; j < qrcode.size; j++) {
for (uint8_t i = 0; i < qrcode.size; i++) {
if (qrcode_getModule(&qrcode, i, j)) {
getdisplay().fillRect(x, y, s, s, commonData->fgcolor);
}
x += s;
}
y += s;
x = x0;
}
}

virtual void displayPage(PageData &pageData){
GwConfigHandler *config = commonData->config;
GwLog *logger = commonData->logger;
Expand All @@ -114,40 +151,46 @@ char mode = 'N'; // (N)ormal, (D)evice list

if (mode == 'N') {
getdisplay().setFont(&Ubuntu_Bold12pt7b);
getdisplay().setCursor(20, 50);
getdisplay().setCursor(8, 50);
getdisplay().print("System Information");

getdisplay().drawXBitmap(320, 25, logo64_bits, logo64_width, logo64_height, commonData->fgcolor);

getdisplay().setFont(&Ubuntu_Bold8pt7b);

char ssid[23];
snprintf(ssid, 23, "MCUDEVICE-%04X%08X", (uint16_t)(chipid >> 32), (uint32_t)chipid);
getdisplay().setCursor(20, 70);
getdisplay().print(ssid);
getdisplay().setCursor(20, 100);
getdisplay().print("Press STBY for white page and standby");
char ssid[13];
snprintf(ssid, 13, "%04X%08X", (uint16_t)(chipid >> 32), (uint32_t)chipid);
displayBarcode(String(ssid), 320, 200, 2);
getdisplay().setCursor(8, 70);
getdisplay().print(String("MUDEVICE-") + String(ssid));

getdisplay().setCursor(8, 90);
getdisplay().print("Firmware Version: ");
getdisplay().print(VERSINFO);

getdisplay().setCursor(8, 265);
#ifdef BOARD_OBP60S3
getdisplay().print("Press STBY to enter deep sleep mode");
#endif
#ifdef BOARD_OBP40S3
getdisplay().print("Press wheel to enter deep sleep mode");
#endif

getdisplay().setCursor(2, y0);
getdisplay().print("Simulation:");
getdisplay().setCursor(120, y0);
getdisplay().print(simulation ? "on" : "off");

getdisplay().setCursor(202, y0);
getdisplay().print("Wifi:");
getdisplay().setCursor(300, y0);
getdisplay().print(commonData->status.wifiApOn ? "On" : "Off");

getdisplay().setCursor(2, y0 + 16);
getdisplay().print("Environment:");
getdisplay().setCursor(120, y0 + 16);
getdisplay().print(env_module);

// total RAM free
int Heap_free = esp_get_free_heap_size();
getdisplay().setCursor(202, y0 + 16);
getdisplay().setCursor(202, y0);
getdisplay().print("Total free:");
getdisplay().setCursor(300, y0 + 16);
getdisplay().setCursor(300, y0);
getdisplay().print(String(Heap_free));

getdisplay().setCursor(2, y0 + 32);
Expand All @@ -157,37 +200,39 @@ char mode = 'N'; // (N)ormal, (D)evice list

// RAM free for task
int RAM_free = uxTaskGetStackHighWaterMark(NULL);
getdisplay().setCursor(202, y0 + 32);
getdisplay().setCursor(202, y0 + 16);
getdisplay().print("Task free:");
getdisplay().setCursor(300, y0 + 32);
getdisplay().setCursor(300, y0 + 16);
getdisplay().print(String(RAM_free));

getdisplay().setCursor(2, y0 + 48);
// FRAM available / status
getdisplay().setCursor(202, y0 + 32);
getdisplay().print("FRAM:");
getdisplay().setCursor(300, y0 + 32);
getdisplay().print(hasFRAM ? "available" : "not found");

getdisplay().setCursor(202, y0 + 64);
getdisplay().print("CPU speed:");
getdisplay().setCursor(120, y0 + 48);
getdisplay().setCursor(300, y0 + 64);
getdisplay().print(cpuspeed);
getdisplay().print(" / ");
int cpu_freq = esp_clk_cpu_freq() / 1000000;
getdisplay().print(String(cpu_freq));

getdisplay().setCursor(202, y0 + 64);
getdisplay().setCursor(2, y0 + 64);
getdisplay().print("GPS:");
getdisplay().setCursor(300, y0 + 64);
getdisplay().setCursor(120, y0 + 64);
getdisplay().print(gps_module);

getdisplay().setCursor(2, y0 + 80);
getdisplay().print("FRAM:");
getdisplay().setCursor(120, y0 + 80);
getdisplay().print(hasFRAM ? "available" : "not found");

getdisplay().setCursor(202, y0 + 80);
getdisplay().print("RTC:");
getdisplay().setCursor(300, y0 + 80);
getdisplay().setCursor(120, y0 + 80);
getdisplay().print(rtc_module);

getdisplay().setCursor(2, y0 + 120);
getdisplay().print("Firmware Version: ");
getdisplay().print(VERSINFO);
getdisplay().setCursor(2, y0 + 96);
getdisplay().print("Wifi:");
getdisplay().setCursor(120, y0 + 96);
getdisplay().print(commonData->status.wifiApOn ? "On" : "Off");


} else {
Expand Down
11 changes: 11 additions & 0 deletions lib/obp60task/config_obp40.json
Original file line number Diff line number Diff line change
Expand Up @@ -913,6 +913,17 @@
"obp40": "true"
}
},
{
"name": "systemPage",
"label": "System Page",
"type": "boolean",
"default": "false",
"description": "Use wheel button for system page or direct deep sleep mode",
"category":"OBP40 Pages",
"capabilities": {
"obp40": "true"
}
},
{
"name": "imageFormat",
"label": "Screenshot Format",
Expand Down
Loading

0 comments on commit cf7ef8d

Please sign in to comment.