Move display creation from main class to static CDisplay::create()
This commit is contained in:
parent
9cb7790bf9
commit
464d0fdc6f
173
Display.cpp
173
Display.cpp
|
@ -430,3 +430,176 @@ void CDisplay::writeNXDNRSSIInt(unsigned char rssi)
|
||||||
void CDisplay::writeNXDNBERInt(float ber)
|
void CDisplay::writeNXDNBERInt(float ber)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Factory method extracted from MMDVMHost.cpp - BG5HHP */
|
||||||
|
#include "SerialController.h"
|
||||||
|
#include "ModemSerialPort.h"
|
||||||
|
#include "TFTSerial.h"
|
||||||
|
#include "LCDproc.h"
|
||||||
|
#include "Nextion.h"
|
||||||
|
#include "NullDisplay.h"
|
||||||
|
|
||||||
|
#include "Conf.h"
|
||||||
|
#include "Modem.h"
|
||||||
|
#include "UMP.h"
|
||||||
|
|
||||||
|
#if defined(HD44780)
|
||||||
|
#include "HD44780.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(OLED)
|
||||||
|
#include "OLED.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CDisplay* CDisplay::createDisplay(const CConf &conf, CUMP *ump, CModem *modem){
|
||||||
|
CDisplay *display = NULL;
|
||||||
|
|
||||||
|
std::string type = conf.getDisplay();
|
||||||
|
unsigned int dmrid = conf.getDMRId();
|
||||||
|
|
||||||
|
LogInfo("Display Parameters");
|
||||||
|
LogInfo(" Type: %s", type.c_str());
|
||||||
|
|
||||||
|
if (type == "TFT Serial") {
|
||||||
|
std::string port = conf.getTFTSerialPort();
|
||||||
|
unsigned int brightness = conf.getTFTSerialBrightness();
|
||||||
|
|
||||||
|
LogInfo(" Port: %s", port.c_str());
|
||||||
|
LogInfo(" Brightness: %u", brightness);
|
||||||
|
|
||||||
|
ISerialPort* serial = NULL;
|
||||||
|
if (port == "modem")
|
||||||
|
serial = new CModemSerialPort(modem);
|
||||||
|
else
|
||||||
|
serial = new CSerialController(port, SERIAL_9600);
|
||||||
|
|
||||||
|
display = new CTFTSerial(conf.getCallsign(), dmrid, serial, brightness);
|
||||||
|
} else if (type == "Nextion") {
|
||||||
|
std::string port = conf.getNextionPort();
|
||||||
|
unsigned int brightness = conf.getNextionBrightness();
|
||||||
|
bool displayClock = conf.getNextionDisplayClock();
|
||||||
|
bool utc = conf.getNextionUTC();
|
||||||
|
unsigned int idleBrightness = conf.getNextionIdleBrightness();
|
||||||
|
unsigned int screenLayout = conf.getNextionScreenLayout();
|
||||||
|
|
||||||
|
LogInfo(" Port: %s", port.c_str());
|
||||||
|
LogInfo(" Brightness: %u", brightness);
|
||||||
|
LogInfo(" Clock Display: %s", displayClock ? "yes" : "no");
|
||||||
|
if (displayClock)
|
||||||
|
LogInfo(" Display UTC: %s", utc ? "yes" : "no");
|
||||||
|
LogInfo(" Idle Brightness: %u", idleBrightness);
|
||||||
|
|
||||||
|
switch (screenLayout) {
|
||||||
|
case 0U:
|
||||||
|
LogInfo(" Screen Layout: G4KLX (Default)");
|
||||||
|
break;
|
||||||
|
case 2U:
|
||||||
|
LogInfo(" Screen Layout: ON7LDS");
|
||||||
|
break;
|
||||||
|
case 3U:
|
||||||
|
LogInfo(" Screen Layout: DIY by ON7LDS");
|
||||||
|
break;
|
||||||
|
case 4U:
|
||||||
|
LogInfo(" Screen Layout: DIY by ON7LDS (High speed)");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LogInfo(" Screen Layout: %u (Unknown)", screenLayout);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (port == "modem") {
|
||||||
|
ISerialPort* serial = new CModemSerialPort(modem);
|
||||||
|
display = new CNextion(conf.getCallsign(), dmrid, serial, brightness, displayClock, utc, idleBrightness, screenLayout);
|
||||||
|
} else if (port == "ump") {
|
||||||
|
if (ump != NULL)
|
||||||
|
display = new CNextion(conf.getCallsign(), dmrid, ump, brightness, displayClock, utc, idleBrightness, screenLayout);
|
||||||
|
else
|
||||||
|
display = new CNullDisplay;
|
||||||
|
} else {
|
||||||
|
SERIAL_SPEED baudrate = SERIAL_9600;
|
||||||
|
if (screenLayout==4U)
|
||||||
|
baudrate = SERIAL_115200;
|
||||||
|
ISerialPort* serial = new CSerialController(port, baudrate);
|
||||||
|
display = new CNextion(conf.getCallsign(), dmrid, serial, brightness, displayClock, utc, idleBrightness, screenLayout);
|
||||||
|
}
|
||||||
|
} else if (type == "LCDproc") {
|
||||||
|
std::string address = conf.getLCDprocAddress();
|
||||||
|
unsigned int port = conf.getLCDprocPort();
|
||||||
|
unsigned int localPort = conf.getLCDprocLocalPort();
|
||||||
|
bool displayClock = conf.getLCDprocDisplayClock();
|
||||||
|
bool utc = conf.getLCDprocUTC();
|
||||||
|
bool dimOnIdle = conf.getLCDprocDimOnIdle();
|
||||||
|
|
||||||
|
LogInfo(" Address: %s", address.c_str());
|
||||||
|
LogInfo(" Port: %u", port);
|
||||||
|
|
||||||
|
if (localPort == 0 )
|
||||||
|
LogInfo(" Local Port: random");
|
||||||
|
else
|
||||||
|
LogInfo(" Local Port: %u", localPort);
|
||||||
|
|
||||||
|
LogInfo(" Dim Display on Idle: %s", dimOnIdle ? "yes" : "no");
|
||||||
|
LogInfo(" Clock Display: %s", displayClock ? "yes" : "no");
|
||||||
|
|
||||||
|
if (displayClock)
|
||||||
|
LogInfo(" Display UTC: %s", utc ? "yes" : "no");
|
||||||
|
|
||||||
|
display = new CLCDproc(address.c_str(), port, localPort, conf.getCallsign(), dmrid, displayClock, utc, conf.getDuplex(), dimOnIdle);
|
||||||
|
#if defined(HD44780)
|
||||||
|
} else if (type == "HD44780") {
|
||||||
|
unsigned int rows = conf.getHD44780Rows();
|
||||||
|
unsigned int columns = conf.getHD44780Columns();
|
||||||
|
std::vector<unsigned int> pins = conf.getHD44780Pins();
|
||||||
|
unsigned int i2cAddress = conf.getHD44780i2cAddress();
|
||||||
|
bool pwm = conf.getHD44780PWM();
|
||||||
|
unsigned int pwmPin = conf.getHD44780PWMPin();
|
||||||
|
unsigned int pwmBright = conf.getHD44780PWMBright();
|
||||||
|
unsigned int pwmDim = conf.getHD44780PWMDim();
|
||||||
|
bool displayClock = conf.getHD44780DisplayClock();
|
||||||
|
bool utc = conf.getHD44780UTC();
|
||||||
|
|
||||||
|
if (pins.size() == 6U) {
|
||||||
|
LogInfo(" Rows: %u", rows);
|
||||||
|
LogInfo(" Columns: %u", columns);
|
||||||
|
|
||||||
|
#if defined(ADAFRUIT_DISPLAY) || defined(PCF8574_DISPLAY)
|
||||||
|
LogInfo(" Device Address: %#x", i2cAddress);
|
||||||
|
#else
|
||||||
|
LogInfo(" Pins: %u,%u,%u,%u,%u,%u", pins.at(0U), pins.at(1U), pins.at(2U), pins.at(3U), pins.at(4U), pins.at(5U));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
LogInfo(" PWM Backlight: %s", pwm ? "yes" : "no");
|
||||||
|
if (pwm) {
|
||||||
|
LogInfo(" PWM Pin: %u", pwmPin);
|
||||||
|
LogInfo(" PWM Bright: %u", pwmBright);
|
||||||
|
LogInfo(" PWM Dim: %u", pwmDim);
|
||||||
|
}
|
||||||
|
|
||||||
|
LogInfo(" Clock Display: %s", displayClock ? "yes" : "no");
|
||||||
|
if (displayClock)
|
||||||
|
LogInfo(" Display UTC: %s", utc ? "yes" : "no");
|
||||||
|
|
||||||
|
m_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();
|
||||||
|
display = new COLED(type, brightness, invert, scroll, conf.getDMRNetworkSlot1(), conf.getDMRNetworkSlot2());
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
LogWarning("No valid display found, disabling");
|
||||||
|
display = new CNullDisplay;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ret = display->open();
|
||||||
|
if (!ret) {
|
||||||
|
delete display;
|
||||||
|
display = new CNullDisplay;
|
||||||
|
}
|
||||||
|
return display;
|
||||||
|
}
|
|
@ -25,6 +25,10 @@
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
|
class CConf;
|
||||||
|
class CModem;
|
||||||
|
class CUMP;
|
||||||
|
|
||||||
class CDisplay
|
class CDisplay
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -72,6 +76,8 @@ public:
|
||||||
|
|
||||||
void clock(unsigned int ms);
|
void clock(unsigned int ms);
|
||||||
|
|
||||||
|
static CDisplay* createDisplay(const CConf &conf, CUMP *ump, CModem *modem);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setIdleInt() = 0;
|
virtual void setIdleInt() = 0;
|
||||||
virtual void setLockoutInt() = 0;
|
virtual void setLockoutInt() = 0;
|
||||||
|
|
169
MMDVMHost.cpp
169
MMDVMHost.cpp
|
@ -19,32 +19,19 @@
|
||||||
#include "MMDVMHost.h"
|
#include "MMDVMHost.h"
|
||||||
#include "RSSIInterpolator.h"
|
#include "RSSIInterpolator.h"
|
||||||
#include "SerialController.h"
|
#include "SerialController.h"
|
||||||
#include "ModemSerialPort.h"
|
|
||||||
#include "Version.h"
|
#include "Version.h"
|
||||||
#include "StopWatch.h"
|
#include "StopWatch.h"
|
||||||
#include "Defines.h"
|
#include "Defines.h"
|
||||||
#include "DStarControl.h"
|
#include "DStarControl.h"
|
||||||
#include "DMRControl.h"
|
#include "DMRControl.h"
|
||||||
#include "TFTSerial.h"
|
|
||||||
#include "NullDisplay.h"
|
|
||||||
#include "YSFControl.h"
|
#include "YSFControl.h"
|
||||||
#include "P25Control.h"
|
#include "P25Control.h"
|
||||||
#include "NXDNControl.h"
|
#include "NXDNControl.h"
|
||||||
#include "POCSAGControl.h"
|
#include "POCSAGControl.h"
|
||||||
#include "Nextion.h"
|
|
||||||
#include "LCDproc.h"
|
|
||||||
#include "Thread.h"
|
#include "Thread.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
#include "GitVersion.h"
|
#include "GitVersion.h"
|
||||||
|
|
||||||
#if defined(HD44780)
|
|
||||||
#include "HD44780.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(OLED)
|
|
||||||
#include "OLED.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -286,7 +273,7 @@ int CMMDVMHost::run()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
createDisplay();
|
m_display = CDisplay::createDisplay(m_conf,m_ump,m_modem);
|
||||||
|
|
||||||
if (m_dstarEnabled && m_conf.getDStarNetworkEnabled()) {
|
if (m_dstarEnabled && m_conf.getDStarNetworkEnabled()) {
|
||||||
ret = createDStarNetwork();
|
ret = createDStarNetwork();
|
||||||
|
@ -1364,160 +1351,6 @@ void CMMDVMHost::readParams()
|
||||||
LogInfo(" POCSAG: %s", m_pocsagEnabled ? "enabled" : "disabled");
|
LogInfo(" POCSAG: %s", m_pocsagEnabled ? "enabled" : "disabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMMDVMHost::createDisplay()
|
|
||||||
{
|
|
||||||
std::string type = m_conf.getDisplay();
|
|
||||||
unsigned int dmrid = m_conf.getDMRId();
|
|
||||||
|
|
||||||
LogInfo("Display Parameters");
|
|
||||||
LogInfo(" Type: %s", type.c_str());
|
|
||||||
|
|
||||||
if (type == "TFT Serial") {
|
|
||||||
std::string port = m_conf.getTFTSerialPort();
|
|
||||||
unsigned int brightness = m_conf.getTFTSerialBrightness();
|
|
||||||
|
|
||||||
LogInfo(" Port: %s", port.c_str());
|
|
||||||
LogInfo(" Brightness: %u", brightness);
|
|
||||||
|
|
||||||
ISerialPort* serial = NULL;
|
|
||||||
if (port == "modem")
|
|
||||||
serial = new CModemSerialPort(m_modem);
|
|
||||||
else
|
|
||||||
serial = new CSerialController(port, SERIAL_9600);
|
|
||||||
|
|
||||||
m_display = new CTFTSerial(m_callsign, dmrid, serial, brightness);
|
|
||||||
} else if (type == "Nextion") {
|
|
||||||
std::string port = m_conf.getNextionPort();
|
|
||||||
unsigned int brightness = m_conf.getNextionBrightness();
|
|
||||||
bool displayClock = m_conf.getNextionDisplayClock();
|
|
||||||
bool utc = m_conf.getNextionUTC();
|
|
||||||
unsigned int idleBrightness = m_conf.getNextionIdleBrightness();
|
|
||||||
unsigned int screenLayout = m_conf.getNextionScreenLayout();
|
|
||||||
|
|
||||||
LogInfo(" Port: %s", port.c_str());
|
|
||||||
LogInfo(" Brightness: %u", brightness);
|
|
||||||
LogInfo(" Clock Display: %s", displayClock ? "yes" : "no");
|
|
||||||
if (displayClock)
|
|
||||||
LogInfo(" Display UTC: %s", utc ? "yes" : "no");
|
|
||||||
LogInfo(" Idle Brightness: %u", idleBrightness);
|
|
||||||
|
|
||||||
switch (screenLayout) {
|
|
||||||
case 0U:
|
|
||||||
LogInfo(" Screen Layout: G4KLX (Default)");
|
|
||||||
break;
|
|
||||||
case 2U:
|
|
||||||
LogInfo(" Screen Layout: ON7LDS");
|
|
||||||
break;
|
|
||||||
case 3U:
|
|
||||||
LogInfo(" Screen Layout: DIY by ON7LDS");
|
|
||||||
break;
|
|
||||||
case 4U:
|
|
||||||
LogInfo(" Screen Layout: DIY by ON7LDS (High speed)");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
LogInfo(" Screen Layout: %u (Unknown)", screenLayout);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (port == "modem") {
|
|
||||||
ISerialPort* serial = new CModemSerialPort(m_modem);
|
|
||||||
m_display = new CNextion(m_callsign, dmrid, serial, brightness, displayClock, utc, idleBrightness, screenLayout);
|
|
||||||
} else if (port == "ump") {
|
|
||||||
if (m_ump != NULL)
|
|
||||||
m_display = new CNextion(m_callsign, dmrid, m_ump, brightness, displayClock, utc, idleBrightness, screenLayout);
|
|
||||||
} else {
|
|
||||||
SERIAL_SPEED baudrate = SERIAL_9600;
|
|
||||||
if (screenLayout==4U)
|
|
||||||
baudrate = SERIAL_115200;
|
|
||||||
ISerialPort* serial = new CSerialController(port, baudrate);
|
|
||||||
m_display = new CNextion(m_callsign, dmrid, serial, brightness, displayClock, utc, idleBrightness, screenLayout);
|
|
||||||
}
|
|
||||||
} else if (type == "LCDproc") {
|
|
||||||
std::string address = m_conf.getLCDprocAddress();
|
|
||||||
unsigned int port = m_conf.getLCDprocPort();
|
|
||||||
unsigned int localPort = m_conf.getLCDprocLocalPort();
|
|
||||||
bool displayClock = m_conf.getLCDprocDisplayClock();
|
|
||||||
bool utc = m_conf.getLCDprocUTC();
|
|
||||||
bool dimOnIdle = m_conf.getLCDprocDimOnIdle();
|
|
||||||
|
|
||||||
LogInfo(" Address: %s", address.c_str());
|
|
||||||
LogInfo(" Port: %u", port);
|
|
||||||
|
|
||||||
if (localPort == 0 )
|
|
||||||
LogInfo(" Local Port: random");
|
|
||||||
else
|
|
||||||
LogInfo(" Local Port: %u", localPort);
|
|
||||||
|
|
||||||
LogInfo(" Dim Display on Idle: %s", dimOnIdle ? "yes" : "no");
|
|
||||||
LogInfo(" Clock Display: %s", displayClock ? "yes" : "no");
|
|
||||||
|
|
||||||
if (displayClock)
|
|
||||||
LogInfo(" Display UTC: %s", utc ? "yes" : "no");
|
|
||||||
|
|
||||||
m_display = new CLCDproc(address.c_str(), port, localPort, m_callsign, dmrid, displayClock, utc, m_duplex, dimOnIdle);
|
|
||||||
#if defined(HD44780)
|
|
||||||
} else if (type == "HD44780") {
|
|
||||||
unsigned int rows = m_conf.getHD44780Rows();
|
|
||||||
unsigned int columns = m_conf.getHD44780Columns();
|
|
||||||
std::vector<unsigned int> pins = m_conf.getHD44780Pins();
|
|
||||||
unsigned int i2cAddress = m_conf.getHD44780i2cAddress();
|
|
||||||
bool pwm = m_conf.getHD44780PWM();
|
|
||||||
unsigned int pwmPin = m_conf.getHD44780PWMPin();
|
|
||||||
unsigned int pwmBright = m_conf.getHD44780PWMBright();
|
|
||||||
unsigned int pwmDim = m_conf.getHD44780PWMDim();
|
|
||||||
bool displayClock = m_conf.getHD44780DisplayClock();
|
|
||||||
bool utc = m_conf.getHD44780UTC();
|
|
||||||
|
|
||||||
if (pins.size() == 6U) {
|
|
||||||
LogInfo(" Rows: %u", rows);
|
|
||||||
LogInfo(" Columns: %u", columns);
|
|
||||||
|
|
||||||
#if defined(ADAFRUIT_DISPLAY) || defined(PCF8574_DISPLAY)
|
|
||||||
LogInfo(" Device Address: %#x", i2cAddress);
|
|
||||||
#else
|
|
||||||
LogInfo(" Pins: %u,%u,%u,%u,%u,%u", pins.at(0U), pins.at(1U), pins.at(2U), pins.at(3U), pins.at(4U), pins.at(5U));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
LogInfo(" PWM Backlight: %s", pwm ? "yes" : "no");
|
|
||||||
if (pwm) {
|
|
||||||
LogInfo(" PWM Pin: %u", pwmPin);
|
|
||||||
LogInfo(" PWM Bright: %u", pwmBright);
|
|
||||||
LogInfo(" PWM Dim: %u", pwmDim);
|
|
||||||
}
|
|
||||||
|
|
||||||
LogInfo(" Clock Display: %s", displayClock ? "yes" : "no");
|
|
||||||
if (displayClock)
|
|
||||||
LogInfo(" Display UTC: %s", utc ? "yes" : "no");
|
|
||||||
|
|
||||||
m_display = new CHD44780(rows, columns, m_callsign, dmrid, pins, i2cAddress, pwm, pwmPin, pwmBright, pwmDim, displayClock, utc, m_duplex);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(OLED)
|
|
||||||
} else if (type == "OLED") {
|
|
||||||
unsigned char type = m_conf.getOLEDType();
|
|
||||||
unsigned char brightness = m_conf.getOLEDBrightness();
|
|
||||||
bool invert = m_conf.getOLEDInvert();
|
|
||||||
bool scroll = m_conf.getOLEDScroll();
|
|
||||||
m_display = new COLED(type, brightness, invert, scroll, m_conf.getDMRNetworkSlot1(), m_conf.getDMRNetworkSlot2());
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
m_display = new CNullDisplay;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_display == NULL) {
|
|
||||||
LogWarning("No valid display found, disabling");
|
|
||||||
m_display = new CNullDisplay;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ret = m_display->open();
|
|
||||||
if (!ret) {
|
|
||||||
delete m_display;
|
|
||||||
m_display = new CNullDisplay;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMMDVMHost::setMode(unsigned char mode)
|
void CMMDVMHost::setMode(unsigned char mode)
|
||||||
{
|
{
|
||||||
assert(m_modem != NULL);
|
assert(m_modem != NULL);
|
||||||
|
|
|
@ -92,7 +92,6 @@ private:
|
||||||
bool createP25Network();
|
bool createP25Network();
|
||||||
bool createNXDNNetwork();
|
bool createNXDNNetwork();
|
||||||
bool createPOCSAGNetwork();
|
bool createPOCSAGNetwork();
|
||||||
void createDisplay();
|
|
||||||
|
|
||||||
void setMode(unsigned char mode);
|
void setMode(unsigned char mode);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue