From 66bcca7e91b6c99ac45e453d4f48a1b1673b6824 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Sun, 15 Nov 2020 18:12:38 +0000 Subject: [PATCH] Start making the OLED driver available for modem redirection. --- Display.cpp | 16 +++++----------- MMDVMHost.cpp | 2 +- MMDVMHost.vcxproj | 2 ++ MMDVMHost.vcxproj.filters | 6 ++++++ OLED.cpp | 34 ++++++++++++++++++++++++++++++++-- OLED.h | 3 +++ 6 files changed, 49 insertions(+), 14 deletions(-) diff --git a/Display.cpp b/Display.cpp index 7d4b1a9..4a358be 100644 --- a/Display.cpp +++ b/Display.cpp @@ -27,16 +27,13 @@ #include "CASTInfo.h" #include "Conf.h" #include "Modem.h" +#include "OLED.h" #include "Log.h" #if defined(HD44780) #include "HD44780.h" #endif -#if defined(OLED) -#include "OLED.h" -#endif - #include #include #include @@ -668,21 +665,18 @@ CDisplay* CDisplay::createDisplay(const CConf& conf, IModem* modem) display = new CHD44780(rows, columns, conf.getCallsign(), dmrid, pins, i2cAddress, pwm, pwmPin, pwmBright, pwmDim, displayClock, utc, conf.getDuplex()); } #endif -#if defined(OLED) } else if (type == "OLED") { - unsigned char type = conf.getOLEDType(); - unsigned char brightness = conf.getOLEDBrightness(); - bool invert = conf.getOLEDInvert(); - bool scroll = conf.getOLEDScroll(); + unsigned char type = conf.getOLEDType(); + unsigned char brightness = conf.getOLEDBrightness(); + bool invert = conf.getOLEDInvert(); + bool scroll = conf.getOLEDScroll(); bool rotate = conf.getOLEDRotate(); bool logosaver = conf.getOLEDLogoScreensaver(); display = new COLED(type, brightness, invert, scroll, rotate, logosaver, conf.getDMRNetworkSlot1(), conf.getDMRNetworkSlot2()); -#endif } else if (type == "CAST") { display = new CCASTInfo(modem); } else { - LogWarning("No valid display found, disabling"); display = new CNullDisplay; } diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 238c14a..d62b126 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -217,7 +217,7 @@ int CMMDVMHost::run() return -1; } -#if !defined(HD44780) && !defined(OLED) && !defined(_OPENWRT) +#if !defined(HD44780) && !defined(_OPENWRT) // If we are currently root... if (getuid() == 0) { struct passwd* user = ::getpwnam("mmdvm"); diff --git a/MMDVMHost.vcxproj b/MMDVMHost.vcxproj index f54bca0..60f6fde 100644 --- a/MMDVMHost.vcxproj +++ b/MMDVMHost.vcxproj @@ -221,6 +221,7 @@ + @@ -325,6 +326,7 @@ + diff --git a/MMDVMHost.vcxproj.filters b/MMDVMHost.vcxproj.filters index f9d3698..1a77588 100644 --- a/MMDVMHost.vcxproj.filters +++ b/MMDVMHost.vcxproj.filters @@ -335,6 +335,9 @@ Header Files + + Header Files + @@ -628,5 +631,8 @@ Source Files + + Source Files + \ No newline at end of file diff --git a/OLED.cpp b/OLED.cpp index c83c714..6a2043a 100644 --- a/OLED.cpp +++ b/OLED.cpp @@ -500,7 +500,6 @@ void COLED::writeP25Int(const char* source, bool group, unsigned int dest, const OLED_statusbar(); m_display.display(); - } void COLED::clearP25Int() @@ -566,6 +565,36 @@ void COLED::clearNXDNInt() m_display.display(); } +void COLED::writeM17Int(const char* source, const char* dest, const char* type) +{ + m_mode = MODE_M17; + + m_display.clearDisplay(); + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); + + m_display.setCursor(0, OLED_LINE3); + m_display.printf("%s %.10s", type, source); + + m_display.setCursor(0, OLED_LINE4); + m_display.printf(" %s", dest); + + OLED_statusbar(); + m_display.display(); +} + +void COLED::clearM17Int() +{ + m_display.fillRect(0, OLED_LINE2, m_display.width(), m_display.height(), BLACK); + + m_display.setCursor(40, OLED_LINE4); + m_display.print("Listening"); + + m_display.setCursor(0, OLED_LINE6); + m_display.printf("%s", m_ipaddress.c_str()); + + m_display.display(); +} + void COLED::writePOCSAGInt(uint32_t ric, const std::string& message) { m_mode = MODE_POCSAG; @@ -583,7 +612,6 @@ void COLED::writePOCSAGInt(uint32_t ric, const std::string& message) OLED_statusbar(); m_display.display(); - } void COLED::clearPOCSAGInt() @@ -658,6 +686,8 @@ void COLED::OLED_statusbar() m_display.drawBitmap(0, 0, logo_P25_bmp, 128, 16, WHITE); else if (m_mode == MODE_NXDN) m_display.drawBitmap(0, 0, logo_NXDN_bmp, 128, 16, WHITE); + else if (m_mode == MODE_M17) + m_display.drawBitmap(0, 0, logo_M17_bmp, 128, 16, WHITE); else if (m_mode == MODE_POCSAG) m_display.drawBitmap(0, 0, logo_POCSAG_bmp, 128, 16, WHITE); else if (m_displayLogoScreensaver) diff --git a/OLED.h b/OLED.h index 5f3ead0..45c78ad 100644 --- a/OLED.h +++ b/OLED.h @@ -70,6 +70,9 @@ public: virtual int writeNXDNIntEx(const class CUserDBentry& source, bool group, unsigned int dest, const char* type); virtual void clearNXDNInt(); + virtual void writeM17Int(const char* source, const char* dest, const char* type); + virtual void clearM17Int(); + virtual void writePOCSAGInt(uint32_t ric, const std::string& message); virtual void clearPOCSAGInt();