From 9cb7790bf943018986a3c8985ffa2bdd23de190c Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Mon, 30 Jul 2018 18:19:46 +0100 Subject: [PATCH] Clean up the code for Windows and style. --- IICController.cpp => I2CController.cpp | 77 +++++++++++++------------- IICController.h => I2CController.h | 12 ++-- MMDVMHost.vcxproj | 2 + MMDVMHost.vcxproj.filters | 6 ++ Makefile | 10 ++-- Makefile.Pi | 2 +- Makefile.Pi.Adafruit | 2 +- Makefile.Pi.HD44780 | 2 +- Makefile.Pi.OLED | 2 +- Makefile.Pi.PCF8574 | 2 +- Modem.cpp | 50 ++++++++++++++--- Modem.h | 2 +- 12 files changed, 105 insertions(+), 64 deletions(-) rename IICController.cpp => I2CController.cpp (75%) rename IICController.h => I2CController.h (84%) diff --git a/IICController.cpp b/I2CController.cpp similarity index 75% rename from IICController.cpp rename to I2CController.cpp index 6704bac..b44ab03 100644 --- a/IICController.cpp +++ b/I2CController.cpp @@ -17,7 +17,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "IICController.h" +#include "I2CController.h" #include "Log.h" #include @@ -26,9 +26,37 @@ #include #if defined(_WIN32) || defined(_WIN64) + #include #include + +CI2CController::CI2CController(const std::string& device, SERIAL_SPEED speed, unsigned int address, bool assertRTS) : +CSerialController(device, speed, assertRTS), +m_address(address) +{ +} + +CI2CController::~CI2CController() +{ +} + +bool CI2CController::open() +{ + return CSerialController::open(); +} + +int CI2CController::read(unsigned char* buffer, unsigned int length) +{ + return CSerialController::read(buffer, length); +} + +int CI2CController::write(const unsigned char* buffer, unsigned int length) +{ + return CSerialController::write(buffer, length); +} + #else + #include #include #include @@ -38,51 +66,21 @@ #if !defined(__APPLE__) #include #endif -#endif - -#if defined(_WIN32) || defined(_WIN64) - -CIICController::CSerialController(const std::string& device, SERIAL_SPEED speed, unsigned int address, bool assertRTS) : -CSerialController(device,speed,assertRTS), +CI2CController::CI2CController(const std::string& device, SERIAL_SPEED speed, unsigned int address, bool assertRTS) : +CSerialController(device, speed, assertRTS), m_address(address) { } -CIICController::~CIICController() +CI2CController::~CI2CController() { } -bool CIICController::open() -{ - return CSerialController::open(); -} - -int CIICController::read(unsigned char* buffer, unsigned int length) -{ - return CSerialController::read(buffer,length); -} - -int CIICController::write(const unsigned char* buffer, unsigned int length) -{ - return CSerialController:;write(buffer,length); -} - -#else - -CIICController::CIICController(const std::string& device, SERIAL_SPEED speed, unsigned int address, bool assertRTS) : -CSerialController(device,speed,assertRTS), -m_address(address) -{ -} - -CIICController::~CIICController() -{ -} - -bool CIICController::open() +bool CI2CController::open() { assert(m_fd == -1); + #if !defined(__APPLE__) m_fd = ::open(m_device.c_str(), O_RDWR); if (m_fd < 0) { @@ -102,12 +100,13 @@ bool CIICController::open() return false; } #else -#warning "I2C controller does not support OSX" + #warning "I2C controller does not support OSX" #endif + return true; } -int CIICController::read(unsigned char* buffer, unsigned int length) +int CI2CController::read(unsigned char* buffer, unsigned int length) { assert(buffer != NULL); assert(m_fd != -1); @@ -135,7 +134,7 @@ int CIICController::read(unsigned char* buffer, unsigned int length) return length; } -int CIICController::write(const unsigned char* buffer, unsigned int length) +int CI2CController::write(const unsigned char* buffer, unsigned int length) { assert(buffer != NULL); assert(m_fd != -1); diff --git a/IICController.h b/I2CController.h similarity index 84% rename from IICController.h rename to I2CController.h index dc99b01..6e59672 100644 --- a/IICController.h +++ b/I2CController.h @@ -17,15 +17,15 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef IICController_H -#define IICController_H +#ifndef I2CController_H +#define I2CController_H #include "SerialController.h" -class CIICController : public CSerialController { +class CI2CController : public CSerialController { public: - CIICController(const std::string& device, SERIAL_SPEED speed, unsigned int address = 0x22U, bool assertRTS = false); - virtual ~CIICController(); + CI2CController(const std::string& device, SERIAL_SPEED speed, unsigned int address = 0x22U, bool assertRTS = false); + virtual ~CI2CController(); virtual bool open(); @@ -34,7 +34,7 @@ public: virtual int write(const unsigned char* buffer, unsigned int length); private: - unsigned int m_address; + unsigned int m_address; }; #endif diff --git a/MMDVMHost.vcxproj b/MMDVMHost.vcxproj index e967e9d..7c565a0 100644 --- a/MMDVMHost.vcxproj +++ b/MMDVMHost.vcxproj @@ -183,6 +183,7 @@ + @@ -269,6 +270,7 @@ + diff --git a/MMDVMHost.vcxproj.filters b/MMDVMHost.vcxproj.filters index 20a3aad..328f121 100644 --- a/MMDVMHost.vcxproj.filters +++ b/MMDVMHost.vcxproj.filters @@ -272,6 +272,9 @@ Header Files + + Header Files + @@ -508,5 +511,8 @@ Source Files + + Source Files + \ No newline at end of file diff --git a/Makefile b/Makefile index ebda8a1..195652d 100644 --- a/Makefile +++ b/Makefile @@ -9,11 +9,11 @@ LDFLAGS = -g OBJECTS = \ AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o \ - NullDisplay.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o \ - NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o POCSAGNetwork.o \ - QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o \ - UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o IICController.o + DStarSlowData.o Golay2087.o Golay24128.o Hamming.o I2CController.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o \ + Nextion.o NullDisplay.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o \ + NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o \ + POCSAGNetwork.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \ + Timer.o UDPSocket.o UMP.o Utils.o YSFControl.o YSFConvolution.o YSFFICH.o YSFNetwork.o YSFPayload.o all: MMDVMHost diff --git a/Makefile.Pi b/Makefile.Pi index 0d8475b..0c14f6c 100644 --- a/Makefile.Pi +++ b/Makefile.Pi @@ -9,7 +9,7 @@ LDFLAGS = -g -L/usr/local/lib OBJECTS = \ AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o \ + DStarSlowData.o Golay2087.o Golay24128.o Hamming.o I2CController.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o \ NullDisplay.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o NXDNSACCH.o \ NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o POCSAGNetwork.o \ QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o Timer.o UDPSocket.o \ diff --git a/Makefile.Pi.Adafruit b/Makefile.Pi.Adafruit index 27266de..2fa1a02 100644 --- a/Makefile.Pi.Adafruit +++ b/Makefile.Pi.Adafruit @@ -9,7 +9,7 @@ LDFLAGS = -g -L/usr/local/lib OBJECTS = \ AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o \ + DStarSlowData.o Golay2087.o Golay24128.o Hamming.o HD44780.o I2CController.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o \ Nextion.o NullDisplay.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o \ NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o \ POCSAGNetwork.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \ diff --git a/Makefile.Pi.HD44780 b/Makefile.Pi.HD44780 index 602ad3b..918710a 100644 --- a/Makefile.Pi.HD44780 +++ b/Makefile.Pi.HD44780 @@ -9,7 +9,7 @@ LDFLAGS = -g -L/usr/local/lib OBJECTS = \ AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o \ + DStarSlowData.o Golay2087.o Golay24128.o Hamming.o HD44780.o I2CController.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o \ Nextion.o NullDisplay.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o \ NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o \ POCSAGNetwork.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \ diff --git a/Makefile.Pi.OLED b/Makefile.Pi.OLED index 6ef3fd8..6b305cb 100644 --- a/Makefile.Pi.OLED +++ b/Makefile.Pi.OLED @@ -9,7 +9,7 @@ LDFLAGS = -g -L/usr/local/lib OBJECTS = \ AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o OLED.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o \ + DStarSlowData.o Golay2087.o Golay24128.o Hamming.o I2CController.o OLED.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o \ Nextion.o NullDisplay.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o \ NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o \ POCSAGNetwork.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \ diff --git a/Makefile.Pi.PCF8574 b/Makefile.Pi.PCF8574 index 0652e34..1075ea6 100644 --- a/Makefile.Pi.PCF8574 +++ b/Makefile.Pi.PCF8574 @@ -9,7 +9,7 @@ LDFLAGS = -g -L/usr/local/lib OBJECTS = \ AMBEFEC.o BCH.o BPTC19696.o Conf.o CRC.o Display.o DMRControl.o DMRCSBK.o DMRData.o DMRDataHeader.o DMREMB.o DMREmbeddedData.o DMRFullLC.o \ DMRLookup.o DMRLC.o DMRNetwork.o DMRShortLC.o DMRSlot.o DMRSlotType.o DMRAccessControl.o DMRTrellis.o DStarControl.o DStarHeader.o DStarNetwork.o \ - DStarSlowData.o Golay2087.o Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o \ + DStarSlowData.o Golay2087.o Golay24128.o Hamming.o HD44780.o I2CController.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o \ Nextion.o NullDisplay.o NXDNAudio.o NXDNControl.o NXDNConvolution.o NXDNCRC.o NXDNFACCH1.o NXDNLayer3.o NXDNLICH.o NXDNLookup.o NXDNNetwork.o \ NXDNSACCH.o NXDNUDCH.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Trellis.o P25Utils.o POCSAGControl.o \ POCSAGNetwork.o QR1676.o RS129.o RS241213.o RSSIInterpolator.o SerialController.o SerialPort.o SHA256.o StopWatch.o Sync.o TFTSerial.o Thread.o \ diff --git a/Modem.cpp b/Modem.cpp index 92fd56a..06bf916 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -16,6 +16,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include "I2CController.h" #include "DStarDefines.h" #include "DMRDefines.h" #include "YSFDefines.h" @@ -26,7 +27,6 @@ #include "Modem.h" #include "Utils.h" #include "Log.h" -#include "IICController.h" #include #include @@ -125,7 +125,7 @@ m_nxdnEnabled(false), m_pocsagEnabled(false), m_rxDCOffset(0), m_txDCOffset(0), -m_serial(0), +m_serial(NULL), m_buffer(NULL), m_length(0U), m_offset(0U), @@ -167,16 +167,15 @@ m_hwType(HWT_UNKNOWN) CModem::~CModem() { - if(m_serial) - delete m_serial; + delete m_serial; delete[] m_buffer; } void CModem::setSerialParams(const std::string& protocol, unsigned int address) { - //Create the serial controller instance according the protocol specified in conf. - if(protocol == "i2c") - m_serial = new CIICController(m_port, SERIAL_115200, address, true); + // Create the serial controller instance according the protocol specified in conf. + if (protocol == "i2c") + m_serial = new CI2CController(m_port, SERIAL_115200, address, true); else m_serial = new CSerialController(m_port, SERIAL_115200, true); } @@ -231,12 +230,17 @@ bool CModem::open() ::LogMessage("Opening the MMDVM"); bool ret = m_serial->open(); - if (!ret) + if (!ret) { + delete m_serial; + m_serial = NULL; return false; + } ret = readVersion(); if (!ret) { m_serial->close(); + delete m_serial; + m_serial = NULL; return false; } else { /* Stopping the inactivity timer here when a firmware version has been @@ -247,12 +251,16 @@ bool CModem::open() ret = setFrequency(); if (!ret) { m_serial->close(); + delete m_serial; + m_serial = NULL; return false; } ret = setConfig(); if (!ret) { m_serial->close(); + delete m_serial; + m_serial = NULL; return false; } @@ -266,6 +274,8 @@ bool CModem::open() void CModem::clock(unsigned int ms) { + assert(m_serial != NULL); + // Poll the modem status every 250ms m_statusTimer.clock(ms); if (m_statusTimer.hasExpired()) { @@ -741,9 +751,13 @@ void CModem::clock(unsigned int ms) void CModem::close() { + assert(m_serial != NULL); + ::LogMessage("Closing the MMDVM"); m_serial->close(); + delete m_serial; + m_serial = NULL; } unsigned int CModem::readDStarData(unsigned char* data) @@ -1093,6 +1107,7 @@ bool CModem::writeTransparentData(const unsigned char* data, unsigned int length bool CModem::writeSerial(const unsigned char* data, unsigned int length) { + assert(m_serial != NULL); assert(data != NULL); assert(length > 0U); @@ -1131,6 +1146,8 @@ bool CModem::hasError() const bool CModem::readVersion() { + assert(m_serial != NULL); + CThread::sleep(2000U); // 2s for (unsigned int i = 0U; i < 6U; i++) { @@ -1186,6 +1203,8 @@ bool CModem::readVersion() bool CModem::readStatus() { + assert(m_serial != NULL); + unsigned char buffer[3U]; buffer[0U] = MMDVM_FRAME_START; @@ -1199,6 +1218,8 @@ bool CModem::readStatus() bool CModem::setConfig() { + assert(m_serial != NULL); + unsigned char buffer[30U]; buffer[0U] = MMDVM_FRAME_START; @@ -1298,6 +1319,8 @@ bool CModem::setConfig() bool CModem::setFrequency() { + assert(m_serial != NULL); + unsigned char buffer[20U]; unsigned char len; @@ -1365,6 +1388,8 @@ bool CModem::setFrequency() RESP_TYPE_MMDVM CModem::getResponse() { + assert(m_serial != NULL); + if (m_offset == 0U) { // Get the start of the frame or nothing at all int ret = m_serial->read(m_buffer + 0U, 1U); @@ -1466,6 +1491,8 @@ HW_TYPE CModem::getHWType() const bool CModem::setMode(unsigned char mode) { + assert(m_serial != NULL); + unsigned char buffer[4U]; buffer[0U] = MMDVM_FRAME_START; @@ -1480,6 +1507,8 @@ bool CModem::setMode(unsigned char mode) bool CModem::sendCWId(const std::string& callsign) { + assert(m_serial != NULL); + unsigned int length = callsign.length(); if (length > 200U) length = 200U; @@ -1500,6 +1529,8 @@ bool CModem::sendCWId(const std::string& callsign) bool CModem::writeDMRStart(bool tx) { + assert(m_serial != NULL); + if (tx && m_tx) return true; if (!tx && !m_tx) @@ -1519,6 +1550,8 @@ bool CModem::writeDMRStart(bool tx) bool CModem::writeDMRAbort(unsigned int slotNo) { + assert(m_serial != NULL); + if (slotNo == 1U) m_txDMRData1.clear(); else @@ -1538,6 +1571,7 @@ bool CModem::writeDMRAbort(unsigned int slotNo) bool CModem::writeDMRShortLC(const unsigned char* lc) { + assert(m_serial != NULL); assert(lc != NULL); unsigned char buffer[12U]; diff --git a/Modem.h b/Modem.h index 437b0f4..52d2780 100644 --- a/Modem.h +++ b/Modem.h @@ -128,7 +128,7 @@ private: bool m_pocsagEnabled; int m_rxDCOffset; int m_txDCOffset; - CSerialController *m_serial; + CSerialController* m_serial; unsigned char* m_buffer; unsigned int m_length; unsigned int m_offset;