Detect freezing screens
This commit is contained in:
parent
8c77d5b5d7
commit
8cc99d2437
4 changed files with 77 additions and 23 deletions
|
@ -227,7 +227,7 @@
|
||||||
<script id="screens-template" type="text/x-handlebars-template">
|
<script id="screens-template" type="text/x-handlebars-template">
|
||||||
{{#each screens }}
|
{{#each screens }}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class=" col-sm-6">
|
<div class="col-sm-12">
|
||||||
<div class="form-check form-switch">
|
<div class="form-check form-switch">
|
||||||
<input class="form-check-input" type="checkbox" id="screen{{id}}" name="screen[{{id}}]" value="1" {{#if enabled}}checked{{/if}}>
|
<input class="form-check-input" type="checkbox" id="screen{{id}}" name="screen[{{id}}]" value="1" {{#if enabled}}checked{{/if}}>
|
||||||
<label class="form-check-label" for="screen{{id}}">{{name}}</label>
|
<label class="form-check-label" for="screen{{id}}">{{name}}</label>
|
||||||
|
|
|
@ -47,6 +47,9 @@ build_flags =
|
||||||
-D ARDUINO_USB_CDC_ON_BOOT
|
-D ARDUINO_USB_CDC_ON_BOOT
|
||||||
-D HOSTNAME="\"btclock3\""
|
-D HOSTNAME="\"btclock3\""
|
||||||
-mfix-esp32-psram-cache-issue
|
-mfix-esp32-psram-cache-issue
|
||||||
|
-fexceptions
|
||||||
|
-DPIO_FRAMEWORK_ARDUINO_ENABLE_EXCEPTIONS
|
||||||
|
build_unflags = -fno-exceptions
|
||||||
|
|
||||||
[env:esp32wemos-s3-mini_BW]
|
[env:esp32wemos-s3-mini_BW]
|
||||||
extends = esp32wemos-s3-mini_BW_base
|
extends = esp32wemos-s3-mini_BW_base
|
||||||
|
|
|
@ -2,27 +2,55 @@
|
||||||
|
|
||||||
#ifdef IS_S3
|
#ifdef IS_S3
|
||||||
Native_Pin EPD_CS[NUM_SCREENS] = {
|
Native_Pin EPD_CS[NUM_SCREENS] = {
|
||||||
Native_Pin(2), Native_Pin(4), Native_Pin(6), Native_Pin(10), Native_Pin(33), Native_Pin(21), Native_Pin(17),
|
Native_Pin(2),
|
||||||
#if NUM_SCREENS == 9
|
Native_Pin(4),
|
||||||
|
Native_Pin(6),
|
||||||
|
Native_Pin(10),
|
||||||
|
Native_Pin(33),
|
||||||
|
Native_Pin(21),
|
||||||
|
Native_Pin(17),
|
||||||
|
#if NUM_SCREENS == 9
|
||||||
|
// MCP23X17_Pin(mcp2, 7),
|
||||||
Native_Pin(-1),
|
Native_Pin(-1),
|
||||||
Native_Pin(-1),
|
Native_Pin(-1),
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
Native_Pin EPD_BUSY[NUM_SCREENS] = {
|
Native_Pin EPD_BUSY[NUM_SCREENS] = {
|
||||||
Native_Pin(3), Native_Pin(5), Native_Pin(7), Native_Pin(9), Native_Pin(37), Native_Pin(18), Native_Pin(16),
|
Native_Pin(3),
|
||||||
#if NUM_SCREENS == 9
|
Native_Pin(5),
|
||||||
|
Native_Pin(7),
|
||||||
|
Native_Pin(9),
|
||||||
|
Native_Pin(37),
|
||||||
|
Native_Pin(18),
|
||||||
|
Native_Pin(16),
|
||||||
|
#if NUM_SCREENS == 9
|
||||||
|
// MCP23X17_Pin(mcp2, 6),
|
||||||
Native_Pin(-1),
|
Native_Pin(-1),
|
||||||
Native_Pin(-1),
|
Native_Pin(-1),
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
MCP23X17_Pin EPD_RESET_MPD[NUM_SCREENS] = {
|
MCP23X17_Pin EPD_RESET_MPD[NUM_SCREENS] = {
|
||||||
MCP23X17_Pin(mcp, 8), MCP23X17_Pin(mcp, 9), MCP23X17_Pin(mcp, 10), MCP23X17_Pin(mcp, 11), MCP23X17_Pin(mcp, 12), MCP23X17_Pin(mcp, 13), MCP23X17_Pin(mcp, 14),
|
MCP23X17_Pin(mcp, 8),
|
||||||
#if NUM_SCREENS == 9
|
MCP23X17_Pin(mcp, 9),
|
||||||
MCP23X17_Pin(mcp, 15),
|
MCP23X17_Pin(mcp, 10),
|
||||||
MCP23X17_Pin(mcp, 16)
|
MCP23X17_Pin(mcp, 11),
|
||||||
#endif
|
MCP23X17_Pin(mcp, 12),
|
||||||
|
MCP23X17_Pin(mcp, 13),
|
||||||
|
MCP23X17_Pin(mcp, 14),
|
||||||
|
#if NUM_SCREENS == 9
|
||||||
|
MCP23X17_Pin(mcp2, 2),
|
||||||
|
MCP23X17_Pin(mcp2, 5),
|
||||||
|
// MCP23X17_Pin(mcp, 15),
|
||||||
|
// MCP23X17_Pin(mcp, 16)
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if NUM_SCREENS == 9
|
||||||
|
MCP23X17_Pin EPD8_BUSY = MCP23X17_Pin(mcp2, 3);
|
||||||
|
MCP23X17_Pin EPD8_CS = MCP23X17_Pin(mcp2, 4);
|
||||||
|
MCP23X17_Pin EPD9_BUSY = MCP23X17_Pin(mcp2, 6);
|
||||||
|
MCP23X17_Pin EPD9_CS = MCP23X17_Pin(mcp2, 7);
|
||||||
|
#endif
|
||||||
Native_Pin EPD_DC = Native_Pin(14);
|
Native_Pin EPD_DC = Native_Pin(14);
|
||||||
|
|
||||||
GxEPD2_BW<GxEPD2_213_B74, GxEPD2_213_B74::HEIGHT> displays[NUM_SCREENS] = {
|
GxEPD2_BW<GxEPD2_213_B74, GxEPD2_213_B74::HEIGHT> displays[NUM_SCREENS] = {
|
||||||
|
@ -33,10 +61,10 @@ GxEPD2_BW<GxEPD2_213_B74, GxEPD2_213_B74::HEIGHT> displays[NUM_SCREENS] = {
|
||||||
GxEPD2_213_B74(&EPD_CS[4], &EPD_DC, &EPD_RESET_MPD[4], &EPD_BUSY[4]),
|
GxEPD2_213_B74(&EPD_CS[4], &EPD_DC, &EPD_RESET_MPD[4], &EPD_BUSY[4]),
|
||||||
GxEPD2_213_B74(&EPD_CS[5], &EPD_DC, &EPD_RESET_MPD[5], &EPD_BUSY[5]),
|
GxEPD2_213_B74(&EPD_CS[5], &EPD_DC, &EPD_RESET_MPD[5], &EPD_BUSY[5]),
|
||||||
GxEPD2_213_B74(&EPD_CS[6], &EPD_DC, &EPD_RESET_MPD[6], &EPD_BUSY[6]),
|
GxEPD2_213_B74(&EPD_CS[6], &EPD_DC, &EPD_RESET_MPD[6], &EPD_BUSY[6]),
|
||||||
#if NUM_SCREENS == 9
|
#if NUM_SCREENS == 9
|
||||||
GxEPD2_213_B74(&EPD_CS[7], &EPD_DC, &EPD_RESET_MPD[7], &EPD_BUSY[7]),
|
GxEPD2_213_B74(&EPD8_CS, &EPD_DC, &EPD_RESET_MPD[7], &EPD8_BUSY),
|
||||||
GxEPD2_213_B74(&EPD_CS[8], &EPD_DC, &EPD_RESET_MPD[8], &EPD_BUSY[8]),
|
GxEPD2_213_B74(&EPD9_CS, &EPD_DC, &EPD_RESET_MPD[8], &EPD9_BUSY),
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
const int SEM_WAIT_TIME = 10000;
|
const int SEM_WAIT_TIME = 10000;
|
||||||
|
@ -74,7 +102,19 @@ void initDisplays()
|
||||||
xTaskCreate(updateDisplay, "EpdUpd" + char(i), 4096, taskParam, 1, &tasks[i]); // create task
|
xTaskCreate(updateDisplay, "EpdUpd" + char(i), 4096, taskParam, 1, &tasks[i]); // create task
|
||||||
// delay(1000);
|
// delay(1000);
|
||||||
}
|
}
|
||||||
epdContent = {"B", "T", "C", "L", "O", "C", "K"};
|
epdContent = { "B",
|
||||||
|
"T",
|
||||||
|
"C",
|
||||||
|
"L",
|
||||||
|
"O",
|
||||||
|
"C",
|
||||||
|
"K"
|
||||||
|
#if NUM_SCREENS == 9
|
||||||
|
,
|
||||||
|
"0",
|
||||||
|
"9"
|
||||||
|
#endif
|
||||||
|
};
|
||||||
for (uint i = 0; i < NUM_SCREENS; i++)
|
for (uint i = 0; i < NUM_SCREENS; i++)
|
||||||
{
|
{
|
||||||
xTaskNotifyGive(tasks[i]);
|
xTaskNotifyGive(tasks[i]);
|
||||||
|
@ -222,7 +262,7 @@ void fullRefresh(void *pvParameters)
|
||||||
vTaskDelete(NULL);
|
vTaskDelete(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateDisplay(void *pvParameters)
|
extern "C" void updateDisplay(void *pvParameters) noexcept
|
||||||
{
|
{
|
||||||
const int epdIndex = *(int *)pvParameters;
|
const int epdIndex = *(int *)pvParameters;
|
||||||
delete (int *)pvParameters;
|
delete (int *)pvParameters;
|
||||||
|
@ -234,8 +274,6 @@ void updateDisplay(void *pvParameters)
|
||||||
|
|
||||||
if (epdContent[epdIndex].compareTo(currentEpdContent[epdIndex]) != 0)
|
if (epdContent[epdIndex].compareTo(currentEpdContent[epdIndex]) != 0)
|
||||||
{
|
{
|
||||||
currentEpdContent[epdIndex] = epdContent[epdIndex];
|
|
||||||
|
|
||||||
displays[epdIndex].init(0, false, 20); // Little longer reset duration because of MCP
|
displays[epdIndex].init(0, false, 20); // Little longer reset duration because of MCP
|
||||||
bool updatePartial = true;
|
bool updatePartial = true;
|
||||||
|
|
||||||
|
@ -257,8 +295,20 @@ void updateDisplay(void *pvParameters)
|
||||||
showDigit(epdIndex, epdContent[epdIndex].c_str()[0], updatePartial, &FONT_BIG);
|
showDigit(epdIndex, epdContent[epdIndex].c_str()[0], updatePartial, &FONT_BIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
displays[epdIndex].display(updatePartial);
|
char tries = 0;
|
||||||
displays[epdIndex].hibernate();
|
while (tries < 3)
|
||||||
|
{
|
||||||
|
if (displays[epdIndex].displayWithReturn(updatePartial))
|
||||||
|
{
|
||||||
|
displays[epdIndex].hibernate();
|
||||||
|
currentEpdContent[epdIndex] = epdContent[epdIndex];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
delay(100);
|
||||||
|
tries++;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
xSemaphoreGive(epdUpdateSemaphore[epdIndex]);
|
xSemaphoreGive(epdUpdateSemaphore[epdIndex]);
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "screens/halvingcountdown.hpp"
|
#include "screens/halvingcountdown.hpp"
|
||||||
#include <native_pin.hpp>
|
#include <native_pin.hpp>
|
||||||
#include <mcp23x17_pin.hpp>
|
#include <mcp23x17_pin.hpp>
|
||||||
|
#include <universal_pin.hpp>
|
||||||
|
|
||||||
#include <freertos/FreeRTOS.h>
|
#include <freertos/FreeRTOS.h>
|
||||||
#include <freertos/task.h>
|
#include <freertos/task.h>
|
||||||
|
@ -42,5 +43,5 @@ void showDigit(const uint dispNum, char chr, bool partial, const GFXfont *font);
|
||||||
|
|
||||||
void refreshDisplay(void *pvParameters);
|
void refreshDisplay(void *pvParameters);
|
||||||
void fullRefresh(void *pvParameters);
|
void fullRefresh(void *pvParameters);
|
||||||
void updateDisplay(void *pvParameters);
|
extern "C" void updateDisplay(void *pvParameters) noexcept;
|
||||||
//void genQrCode(String text, uint8_t *qrcode[qrcodegen_BUFFER_LEN_MAX]);
|
//void genQrCode(String text, uint8_t *qrcode[qrcodegen_BUFFER_LEN_MAX]);
|
||||||
|
|
Loading…
Reference in a new issue