diff --git a/HD44780.cpp b/HD44780.cpp index d8e8c2f..800a671 100644 --- a/HD44780.cpp +++ b/HD44780.cpp @@ -206,24 +206,39 @@ void CHD44780::writeDMR(unsigned int slotNo, const char* src, bool group, unsign } } - if (slotNo == 1U) { - char buffer[40U]; - if (m_cols > 16U) - ::sprintf(buffer, "%s %s > %s%u", type, src, group ? "TG" : "", dstId); - else + if (m_rows == 2U && m_cols == 16U) { + char buffer[16U]; + if (slotNo == 1U) { ::sprintf(buffer, "%s > %s%u", src, group ? "TG" : "", dstId); - - ::lcdPosition(m_fd, 0, m_rows > 2U ? 1 : 0); - ::lcdPrintf(m_fd, "1 %.*s", m_cols - 2U, buffer); - } else { - char buffer[40U]; - if (m_cols > 16U) - ::sprintf(buffer, "%s %s > %s%u", type, src, group ? "TG" : "", dstId); - else + ::lcdPosition(m_fd, 0, 0); + ::lcdPrintf(m_fd, "1 %.*s", m_cols - 2U, buffer); + } else { ::sprintf(buffer, "%s > %s%u", src, group ? "TG" : "", dstId); - - ::lcdPosition(m_fd, 0, m_rows > 2U ? 2 : 1); - ::lcdPrintf(m_fd, "2 %.*s", m_cols - 2U, buffer); + ::lcdPosition(m_fd, 0, 1); + ::lcdPrintf(m_fd, "2 %.*s", m_cols - 2U, buffer); + } + } else if (m_rows == 4U && m_cols == 20U) { + char buffer[20U]; + if (slotNo == 1U) { + ::sprintf(buffer, "%s %s > %s%u", type, src, group ? "TG" : "", dstId); + ::lcdPosition(m_fd, 0, 1); + ::lcdPrintf(m_fd, "1 %.*s", m_cols - 2U, buffer); + } else { + ::sprintf(buffer, "%s %s > %s%u", type, src, group ? "TG" : "", dstId); + ::lcdPosition(m_fd, 0, 2); + ::lcdPrintf(m_fd, "2 %.*s", m_cols - 2U, buffer); + } + } else if (m_rows == 2 && m_cols == 40U) { + char buffer[40U]; + if (slotNo == 1U) { + ::sprintf(buffer, "%s %s > %s%u", type, src, group ? "TG" : "", dstId); + ::lcdPosition(m_fd, 0, 0); + ::lcdPrintf(m_fd, "1 %.*s", m_cols - 2U, buffer); + } else { + ::sprintf(buffer, "%s %s > %s%u", type, src, group ? "TG" : "", dstId); + ::lcdPosition(m_fd, 0, 1); + ::lcdPrintf(m_fd, "2 %.*s", m_cols - 2U, buffer); + } } m_dmr = true;