From 6cb92ffe4989dada14772a7604ed889a1b9f9512 Mon Sep 17 00:00:00 2001 From: Jeroen Date: Mon, 8 May 2023 09:58:26 +0200 Subject: [PATCH] Fix for aligment at displayfloat command (#18601) * Fix for wrong aligment at displayfloat command * Added alignment parameter to prevent regression --------- Co-authored-by: JeroenSt --- .../tasmota_xdsp_display/xdsp_15_tm1637.ino | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/tasmota/tasmota_xdsp_display/xdsp_15_tm1637.ino b/tasmota/tasmota_xdsp_display/xdsp_15_tm1637.ino index b2ec1e80a..b4599132c 100644 --- a/tasmota/tasmota_xdsp_display/xdsp_15_tm1637.ino +++ b/tasmota/tasmota_xdsp_display/xdsp_15_tm1637.ino @@ -83,14 +83,14 @@ - DisplayFloat num [,position {0-(Settings->display_width-1)} [,precision {0-Settings->display_width} [,length {1 to Settings->display_width}]]] + DisplayFloat num [,position {0-(Settings->display_width-1)} [,precision {0-Settings->display_width} [,length {1 to Settings->display_width} [,alignment {0=left 1=right}]]]] Clears and then displays float (with decimal point) command e.g., "DisplayFloat 12.34" See function description below for more details. - DisplayFloatNC num [,position {0-(Settings->display_width-1)} [,precision {0-Settings->display_width} [,length {1 to Settings->display_width}]]] + DisplayFloatNC num [,position {0-(Settings->display_width-1)} [,precision {0-Settings->display_width} [,length {1 to Settings->display_width} [,alignment {0=left 1=right}]]]] Displays float (with decimal point) as above, but without clearing first. command e.g., "DisplayFloatNC 12.34" See function description below for more details. @@ -431,14 +431,18 @@ bool CmndTM1637Float(bool clear) char sPrecision[CMD_MAX_LEN]; char sPosition[CMD_MAX_LEN]; char sLength[CMD_MAX_LEN]; + char sAlignment[CMD_MAX_LEN]; uint8_t length = 0; uint8_t precision = Settings->display_width; uint8_t position = 0; - + uint8_t alignment = 0; float fnum = 0.0f; switch (ArgC()) { + case 5: + subStr(sAlignment, XdrvMailbox.data, ",", 5); + alignment = atoi(sAlignment); case 4: subStr(sLength, XdrvMailbox.data, ",", 4); length = atoi(sLength); @@ -469,6 +473,14 @@ bool CmndTM1637Float(bool clear) if ((length <= 0) || (length > Settings->display_width)) length = Settings->display_width; + // Add leading spaces before value if txt is shorter than length + if ((alignment == 1) && (strlen(txt) < length + 1)) + { + char tmptxt[30]; + ext_snprintf_P(tmptxt, sizeof(tmptxt), "%*s%s", strlen(txt)-(length+1), "", txt); + strcpy (txt, tmptxt); + } + AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: num %4_f, prec %d, len %d"), &fnum, precision, length); if (TM1637 == TM1637Data.display_type)