mirror of https://github.com/arendst/Tasmota.git
Refactor display modes1 to 4
This commit is contained in:
parent
0471ba24c1
commit
ae9d2a2c85
|
@ -256,6 +256,7 @@ char **disp_log_buffer;
|
|||
char **disp_screen_buffer;
|
||||
char disp_temp[2]; // C or F
|
||||
char disp_pres[5]; // hPa or mmHg
|
||||
char disp_topic[TOPSZ];
|
||||
|
||||
uint8_t disp_log_buffer_cols = 0;
|
||||
uint8_t disp_log_buffer_idx = 0;
|
||||
|
@ -1497,8 +1498,7 @@ void free_dt_vars(void) {
|
|||
|
||||
#ifdef USE_DISPLAY_MODES1TO5
|
||||
|
||||
void DisplayClearScreenBuffer(void)
|
||||
{
|
||||
void DisplayClearScreenBuffer(void) {
|
||||
if (disp_screen_buffer_cols) {
|
||||
for (uint32_t i = 0; i < disp_screen_buffer_rows; i++) {
|
||||
memset(disp_screen_buffer[i], 0, disp_screen_buffer_cols);
|
||||
|
@ -1506,8 +1506,7 @@ void DisplayClearScreenBuffer(void)
|
|||
}
|
||||
}
|
||||
|
||||
void DisplayFreeScreenBuffer(void)
|
||||
{
|
||||
void DisplayFreeScreenBuffer(void) {
|
||||
if (disp_screen_buffer != nullptr) {
|
||||
for (uint32_t i = 0; i < disp_screen_buffer_rows; i++) {
|
||||
if (disp_screen_buffer[i] != nullptr) { free(disp_screen_buffer[i]); }
|
||||
|
@ -1518,14 +1517,13 @@ void DisplayFreeScreenBuffer(void)
|
|||
}
|
||||
}
|
||||
|
||||
void DisplayAllocScreenBuffer(void)
|
||||
{
|
||||
void DisplayAllocScreenBuffer(void) {
|
||||
if (!disp_screen_buffer_cols) {
|
||||
disp_screen_buffer_rows = Settings->display_rows;
|
||||
disp_screen_buffer = (char**)malloc(sizeof(*disp_screen_buffer) * disp_screen_buffer_rows);
|
||||
disp_screen_buffer = (char**)calloc(sizeof(*disp_screen_buffer) * disp_screen_buffer_rows, 1);
|
||||
if (disp_screen_buffer != nullptr) {
|
||||
for (uint32_t i = 0; i < disp_screen_buffer_rows; i++) {
|
||||
disp_screen_buffer[i] = (char*)malloc(sizeof(*disp_screen_buffer[i]) * (Settings->display_cols[0] +1));
|
||||
disp_screen_buffer[i] = (char*)calloc(sizeof(*disp_screen_buffer[i]) * (Settings->display_cols[0] +1), 1);
|
||||
if (disp_screen_buffer[i] == nullptr) {
|
||||
DisplayFreeScreenBuffer();
|
||||
break;
|
||||
|
@ -1539,14 +1537,12 @@ void DisplayAllocScreenBuffer(void)
|
|||
}
|
||||
}
|
||||
|
||||
void DisplayReAllocScreenBuffer(void)
|
||||
{
|
||||
void DisplayReAllocScreenBuffer(void) {
|
||||
DisplayFreeScreenBuffer();
|
||||
DisplayAllocScreenBuffer();
|
||||
}
|
||||
|
||||
void DisplayFillScreen(uint32_t line)
|
||||
{
|
||||
void DisplayFillScreen(uint32_t line) {
|
||||
uint32_t len = disp_screen_buffer_cols - strlen(disp_screen_buffer[line]);
|
||||
if (len) {
|
||||
memset(disp_screen_buffer[line] + strlen(disp_screen_buffer[line]), 0x20, len);
|
||||
|
@ -1556,17 +1552,7 @@ void DisplayFillScreen(uint32_t line)
|
|||
|
||||
/*-------------------------------------------------------------------------------------------*/
|
||||
|
||||
void DisplayClearLogBuffer(void)
|
||||
{
|
||||
if (disp_log_buffer_cols) {
|
||||
for (uint32_t i = 0; i < DISPLAY_LOG_ROWS; i++) {
|
||||
memset(disp_log_buffer[i], 0, disp_log_buffer_cols);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayFreeLogBuffer(void)
|
||||
{
|
||||
void DisplayFreeLogBuffer(void) {
|
||||
if (disp_log_buffer != nullptr) {
|
||||
for (uint32_t i = 0; i < DISPLAY_LOG_ROWS; i++) {
|
||||
if (disp_log_buffer[i] != nullptr) { free(disp_log_buffer[i]); }
|
||||
|
@ -1576,13 +1562,12 @@ void DisplayFreeLogBuffer(void)
|
|||
}
|
||||
}
|
||||
|
||||
void DisplayAllocLogBuffer(void)
|
||||
{
|
||||
void DisplayAllocLogBuffer(void) {
|
||||
if (!disp_log_buffer_cols) {
|
||||
disp_log_buffer = (char**)malloc(sizeof(*disp_log_buffer) * DISPLAY_LOG_ROWS);
|
||||
disp_log_buffer = (char**)calloc(sizeof(*disp_log_buffer) * DISPLAY_LOG_ROWS, 1);
|
||||
if (disp_log_buffer != nullptr) {
|
||||
for (uint32_t i = 0; i < DISPLAY_LOG_ROWS; i++) {
|
||||
disp_log_buffer[i] = (char*)malloc(sizeof(*disp_log_buffer[i]) * (Settings->display_cols[0] +1));
|
||||
disp_log_buffer[i] = (char*)calloc(sizeof(*disp_log_buffer[i]) * (Settings->display_cols[0] +1), 1);
|
||||
if (disp_log_buffer[i] == nullptr) {
|
||||
DisplayFreeLogBuffer();
|
||||
break;
|
||||
|
@ -1591,46 +1576,42 @@ void DisplayAllocLogBuffer(void)
|
|||
}
|
||||
if (disp_log_buffer != nullptr) {
|
||||
disp_log_buffer_cols = Settings->display_cols[0] +1;
|
||||
DisplayClearLogBuffer();
|
||||
DisplayClearScreenBuffer();
|
||||
DisplayClear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayReAllocLogBuffer(void)
|
||||
{
|
||||
void DisplayReAllocLogBuffer(void) {
|
||||
DisplayFreeLogBuffer();
|
||||
DisplayAllocLogBuffer();
|
||||
}
|
||||
|
||||
void DisplayLogBufferAdd(char* txt)
|
||||
{
|
||||
void DisplayLogBufferAdd(char* txt) {
|
||||
if (disp_log_buffer_cols) {
|
||||
strlcpy(disp_log_buffer[disp_log_buffer_idx], txt, disp_log_buffer_cols); // This preserves the % sign where printf won't
|
||||
disp_log_buffer_idx++;
|
||||
strlcpy(disp_log_buffer[disp_log_buffer_idx++], txt, disp_log_buffer_cols); // This preserves the % sign where printf won't
|
||||
if (DISPLAY_LOG_ROWS == disp_log_buffer_idx) { disp_log_buffer_idx = 0; }
|
||||
}
|
||||
}
|
||||
|
||||
char* DisplayLogBuffer(char temp_code)
|
||||
{
|
||||
char* DisplayLogBuffer(char temp_code) {
|
||||
char* result = nullptr;
|
||||
if (disp_log_buffer_cols) {
|
||||
if (disp_log_buffer_idx != disp_log_buffer_ptr) {
|
||||
result = disp_log_buffer[disp_log_buffer_ptr];
|
||||
disp_log_buffer_ptr++;
|
||||
uint32_t log_buffer_ptr = disp_log_buffer_ptr;
|
||||
result = disp_log_buffer[disp_log_buffer_ptr++];
|
||||
if (DISPLAY_LOG_ROWS == disp_log_buffer_ptr) { disp_log_buffer_ptr = 0; }
|
||||
|
||||
char *pch = strchr(result, '~'); // = 0x7E (~) Replace degrees character (276 octal)
|
||||
if (pch != nullptr) { result[pch - result] = temp_code; }
|
||||
|
||||
AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("DSP: %02d %s"), log_buffer_ptr, result);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void DisplayLogBufferInit(void)
|
||||
{
|
||||
void DisplayLogBufferInit(void) {
|
||||
if (Settings->display_mode) {
|
||||
disp_log_buffer_idx = 0;
|
||||
disp_log_buffer_ptr = 0;
|
||||
|
@ -1730,19 +1711,31 @@ void DisplayJsonValue(const char* topic, const char* device, const char* mkey, c
|
|||
}
|
||||
|
||||
char buffer[Settings->display_cols[0] +1]; // Max sized buffer string
|
||||
memset(buffer, 0x20, sizeof(buffer)); // Temporarily use for spaces
|
||||
uint32_t size = strlen(topic);
|
||||
if ((Settings->display_rows > 4) && size) { // Skip header if less than five rows
|
||||
if (strcmp(topic, disp_topic)) { // Show topic header only once
|
||||
strcpy(disp_topic, topic);
|
||||
char buffer2[Settings->display_cols[0] +1]; // Max sized buffer string
|
||||
memset(buffer2, '-', sizeof(buffer2)); // Set to -
|
||||
buffer2[sizeof(buffer2) -1] = '\0';
|
||||
snprintf_P(buffer, sizeof(buffer), PSTR("- %s %s"), topic, buffer2); // - pow1 -------------
|
||||
DisplayLogBufferAdd(buffer);
|
||||
}
|
||||
size = 0; // Remove topic from source
|
||||
}
|
||||
memset(buffer, ' ', sizeof(buffer)); // Temporarily use for spaces
|
||||
buffer[sizeof(buffer) -1] = '\0';
|
||||
char source[Settings->display_cols[0] - Settings->display_cols[1]]; // Max sized source string
|
||||
snprintf_P(source, sizeof(source), PSTR("%s%s%s%s"), topic, (strlen(topic))?"/":"", mkey, buffer); // pow1/Voltage or Voltage if topic is empty (local sensor)
|
||||
snprintf_P(source, sizeof(source), PSTR("%s%s%s%s"), (size)?topic:"", (size)?"/":"", mkey, buffer); // pow1/Voltage or Voltage if topic is empty (local sensor or header)
|
||||
snprintf_P(buffer, sizeof(buffer), PSTR("%s %s"), source, svalue);
|
||||
|
||||
// AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "mkey [%s], source [%s], value [%s], quantity_code %d, log_buffer [%s]"), mkey, source, value, quantity_code, buffer);
|
||||
// AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "topic [%s], device [%s], mkey [%s], source [%s], value [%s], quantity_code %d, log_buffer [%s]"),
|
||||
// topic, device, mkey, source, value, quantity_code, buffer);
|
||||
|
||||
DisplayLogBufferAdd(buffer);
|
||||
}
|
||||
|
||||
void DisplayAnalyzeJson(char *topic, const char *json)
|
||||
{
|
||||
void DisplayAnalyzeJson(char *topic, const char *json) {
|
||||
// //tele/pow2/STATE {"Time":"2017-09-20T11:53:03", "Uptime":10, "Vcc":3.123, "POWER":"ON", "Wifi":{"AP":2, "SSId":"indebuurt2", "RSSI":68, "APMac":"00:22:6B:FE:8E:20"}}
|
||||
// //tele/pow2/ENERGY {"Time":"2017-09-20T11:53:03", "Total":6.522, "Yesterday":0.150, "Today":0.073, "Period":0.5, "Power":12.1, "Factor":0.56, "Voltage":210.1, "Current":0.102}
|
||||
|
||||
|
@ -1819,10 +1812,8 @@ void DisplayMqttSubscribe(void) {
|
|||
strncat(ntopic, SettingsText(SET_MQTTPREFIX3), sizeof(ntopic) - strlen(ntopic) -1); // Subscribe to tele messages
|
||||
strncat_P(ntopic, PSTR("/#"), sizeof(ntopic) - strlen(ntopic) -1); // Add multi-level wildcard
|
||||
if (Settings->display_model && (Settings->display_mode &0x04)) {
|
||||
if (!disp_subscribed) {
|
||||
disp_subscribed = true;
|
||||
MqttSubscribe(ntopic);
|
||||
}
|
||||
disp_subscribed = true;
|
||||
MqttSubscribe(ntopic);
|
||||
} else {
|
||||
if (disp_subscribed) {
|
||||
disp_subscribed = false;
|
||||
|
@ -1831,8 +1822,7 @@ void DisplayMqttSubscribe(void) {
|
|||
}
|
||||
}
|
||||
|
||||
bool DisplayMqttData(void)
|
||||
{
|
||||
bool DisplayMqttData(void) {
|
||||
if (disp_subscribed) {
|
||||
char stopic[TOPSZ];
|
||||
|
||||
|
|
|
@ -149,9 +149,6 @@ bool LcdPrintLog(void)
|
|||
}
|
||||
strlcpy(disp_screen_buffer[last_row], txt, disp_screen_buffer_cols);
|
||||
DisplayFillScreen(last_row);
|
||||
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "[%s]"), disp_screen_buffer[last_row]);
|
||||
|
||||
lcd->setCursor(0, last_row);
|
||||
lcd->print(disp_screen_buffer[last_row]);
|
||||
|
||||
|
|
|
@ -267,9 +267,6 @@ void MatrixPrintLog(uint8_t direction)
|
|||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION "[%s]"), mtx_buffer);
|
||||
|
||||
mtx_done = 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -130,8 +130,6 @@ void EpdPrintLog29(void)
|
|||
DisplayFillScreen(last_row);
|
||||
renderer->DrawStringAt(0, epd_scroll, disp_screen_buffer[last_row], COLORED, 0);
|
||||
// EpdDisplayFrame();
|
||||
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION "[%s]"), txt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1203,9 +1203,6 @@ bool TM1637PrintLog(void) {
|
|||
|
||||
strlcpy(disp_screen_buffer[last_row], txt, disp_screen_buffer_cols);
|
||||
DisplayFillScreen(last_row);
|
||||
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "[%s]"), disp_screen_buffer[last_row]);
|
||||
|
||||
TM1637Print(disp_screen_buffer[last_row]);
|
||||
|
||||
result = true;
|
||||
|
|
|
@ -550,7 +550,7 @@ void UDISP_PrintLog(void)
|
|||
if (!disp_screen_buffer_cols) { DisplayAllocScreenBuffer(); }
|
||||
|
||||
char* txt = DisplayLogBuffer('\370');
|
||||
if (txt != NULL) {
|
||||
if (txt != nullptr) {
|
||||
uint8_t last_row = Settings->display_rows -1;
|
||||
|
||||
// renderer->clearDisplay();
|
||||
|
@ -562,9 +562,6 @@ void UDISP_PrintLog(void)
|
|||
}
|
||||
strlcpy(disp_screen_buffer[last_row], txt, disp_screen_buffer_cols);
|
||||
DisplayFillScreen(last_row);
|
||||
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "[%s]"), disp_screen_buffer[last_row]);
|
||||
|
||||
renderer->println(disp_screen_buffer[last_row]);
|
||||
renderer->Updateframe();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue