From 711bcbf7457cf6276a6d2b1511f9b2156ec45190 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Wed, 15 Nov 2017 10:47:56 +0000 Subject: [PATCH] Reformat code and make small alterations. --- DMRSlot.cpp | 146 ++++++++++++++----------- MMDVMHost.cpp | 16 ++- MMDVMHost.vcxproj | 4 +- MMDVMHost.vcxproj.filters | 4 +- Makefile | 6 +- Makefile.Pi | 6 +- Makefile.Pi.Adafruit | 6 +- Makefile.Pi.HD44780 | 6 +- Makefile.Pi.OLED | 6 +- Makefile.Pi.PCF8574 | 6 +- Makefile.Solaris | 6 +- Network.cpp | 180 ------------------------------- NetworkInfo.cpp | 213 +++++++++++++++++++++++++++++++++++++ Network.h => NetworkInfo.h | 9 +- Nextion.cpp | 93 +++++++++------- 15 files changed, 393 insertions(+), 314 deletions(-) delete mode 100644 Network.cpp create mode 100644 NetworkInfo.cpp rename Network.h => NetworkInfo.h (90%) diff --git a/DMRSlot.cpp b/DMRSlot.cpp index 81337ca..1366d78 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -128,6 +128,7 @@ CDMRSlot::~CDMRSlot() delete[] m_rfEmbeddedData; delete[] m_netEmbeddedData; delete[] m_lastFrame; + delete[] m_rfTalkerAlias; } bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) @@ -333,7 +334,9 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) LogMessage("DMR Slot %u, received RF end of voice transmission, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else LogMessage("DMR Slot %u, received RF end of voice transmission, %.1f seconds, BER: %.1f%%", m_slotNo, float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); - m_display->writeDMRTA(m_slotNo,NULL," "); + + m_display->writeDMRTA(m_slotNo, NULL, " "); + if (m_rfTimeout) { writeEndRF(); return false; @@ -619,9 +622,11 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) m_network->writeTalkerAlias(m_rfLC->getSrcId(), 0U, data); if (!(m_rfTalkerId & TALKER_ID_HEADER)) { - if (m_rfTalkerId==TALKER_ID_NONE) memset(m_rfTalkerAlias,0,32U); + if (m_rfTalkerId == TALKER_ID_NONE) + ::memset(m_rfTalkerAlias, '\0', 32U); ::memcpy(m_rfTalkerAlias, data, 6U); - m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias,"R"); + m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias, "R"); + if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Header", m_slotNo); CUtils::dump(2U, text, data, 9U); @@ -636,9 +641,11 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) m_network->writeTalkerAlias(m_rfLC->getSrcId(), 1U, data); if (!(m_rfTalkerId & TALKER_ID_BLOCK1)) { - if (m_rfTalkerId==TALKER_ID_NONE) memset(m_rfTalkerAlias,0,32U); - ::memcpy(m_rfTalkerAlias+6U, data, 7U); - m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias,"R"); + if (m_rfTalkerId == TALKER_ID_NONE) + ::memset(m_rfTalkerAlias, '\0', 32U); + ::memcpy(m_rfTalkerAlias + 6U, data, 7U); + m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias, "R"); + if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 1", m_slotNo); CUtils::dump(2U, text, data, 9U); @@ -653,10 +660,11 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) m_network->writeTalkerAlias(m_rfLC->getSrcId(), 2U, data); if (!(m_rfTalkerId & TALKER_ID_BLOCK2)) { - if (m_rfTalkerId==TALKER_ID_NONE) memset(m_rfTalkerAlias,0,32U); - m_rfTalkerId |= TALKER_ID_BLOCK2; - ::memcpy(m_rfTalkerAlias+6U+7U, data, 7U); - m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias,"R"); + if (m_rfTalkerId == TALKER_ID_NONE) + ::memset(m_rfTalkerAlias, 0, 32U); + ::memcpy(m_rfTalkerAlias + 6U + 7U, data, 7U); + m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias, "R"); + if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 2", m_slotNo); CUtils::dump(2U, text, data, 9U); @@ -671,9 +679,11 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) m_network->writeTalkerAlias(m_rfLC->getSrcId(), 3U, data); if (!(m_rfTalkerId & TALKER_ID_BLOCK3)) { - if (m_rfTalkerId==TALKER_ID_NONE) ::memset(m_rfTalkerAlias,0,32U); - ::memcpy(m_rfTalkerAlias+6U+7U+7U, data, 7U); - m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias,"R"); + if (m_rfTalkerId == TALKER_ID_NONE) + ::memset(m_rfTalkerAlias, '\0', 32U); + ::memcpy(m_rfTalkerAlias + 6U + 7U + 7U, data, 7U); + m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias, "R"); + if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 3", m_slotNo); CUtils::dump(2U, text, data, 9U); @@ -1186,7 +1196,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) // We've received the voice header and terminator haven't we? m_netFrames += 2U; LogMessage("DMR Slot %u, received network end of voice transmission, %.1f seconds, %u%% packet loss, BER: %.1f%%", m_slotNo, float(m_netFrames) / 16.667F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); - m_display->writeDMRTA(m_slotNo,NULL," "); + m_display->writeDMRTA(m_slotNo, NULL, " "); writeEndNet(); } else if (dataType == DT_DATA_HEADER) { if (m_netState == RS_NET_DATA) @@ -1398,9 +1408,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) break; case FLCO_TALKER_ALIAS_HEADER: if (!(m_netTalkerId & TALKER_ID_HEADER)) { - if (!m_netTalkerId) memset(m_rfTalkerAlias,0,32U); - ::memcpy(m_rfTalkerAlias, data+2U, 7U); - m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias,"N"); + if (!m_netTalkerId) + ::memset(m_rfTalkerAlias, '\0', 32U); + ::memcpy(m_rfTalkerAlias, data + 2U, 7U); + m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias, "N"); + if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Header", m_slotNo); CUtils::dump(2U, text, data, 9U); @@ -1411,9 +1423,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) break; case FLCO_TALKER_ALIAS_BLOCK1: if (!(m_netTalkerId & TALKER_ID_BLOCK1)) { - if (!m_netTalkerId) memset(m_rfTalkerAlias,0,32U); - ::memcpy(m_rfTalkerAlias+7U, data+2U, 7U); - m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias,"N"); + if (!m_netTalkerId) + ::memset(m_rfTalkerAlias, '\0', 32U); + ::memcpy(m_rfTalkerAlias + 7U, data + 2U, 7U); + m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias, "N"); + if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 1", m_slotNo); CUtils::dump(2U, text, data, 9U); @@ -1424,9 +1438,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) break; case FLCO_TALKER_ALIAS_BLOCK2: if (!(m_netTalkerId & TALKER_ID_BLOCK2)) { - if (!m_netTalkerId) ::memset(m_rfTalkerAlias,0,32U); - ::memcpy(m_rfTalkerAlias+7U+7U, data+2U, 7U); - m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias,"N"); + if (!m_netTalkerId) + ::memset(m_rfTalkerAlias, '\0', 32U); + ::memcpy(m_rfTalkerAlias + 7U + 7U, data + 2U, 7U); + m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias, "N"); + if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 2", m_slotNo); CUtils::dump(2U, text, data, 9U); @@ -1437,9 +1453,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) break; case FLCO_TALKER_ALIAS_BLOCK3: if (!(m_netTalkerId & TALKER_ID_BLOCK3)) { - if (!m_netTalkerId) memset(m_rfTalkerAlias,0,32U); - ::memcpy(m_rfTalkerAlias+7U+7U+7U, data+2U, 7U); - m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias,"N"); + if (!m_netTalkerId) + ::memset(m_rfTalkerAlias, '\0', 32U); + ::memcpy(m_rfTalkerAlias + 7U + 7U + 7U, data+2U, 7U); + m_display->writeDMRTA(m_slotNo, m_rfTalkerAlias, "N"); + if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded Talker Alias Block 3", m_slotNo); CUtils::dump(2U, text, data, 9U); @@ -1619,51 +1637,51 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) void CDMRSlot::logGPSposition(const unsigned char* data) { - signed long longitudeI,latitudeI; - unsigned int errorI; - float longitude,latitude; - char errorS[30]; + unsigned int errorI = (data[2U] & 0x0E) >> 1U; - errorI=((data[2U]&0x0E) >> 1U); + char errorS[30]; switch (errorI) { - case 0U: - ::sprintf(errorS, "< 2m"); - break; - case 1U: - ::sprintf(errorS, "< 20m"); - break; - case 2U: - ::sprintf(errorS, "< 200m"); - break; - case 3U: - ::sprintf(errorS, "< 2km"); - break; - case 4U: - ::sprintf(errorS, "< 20km"); - break; - case 5U: - ::sprintf(errorS, "< 200km"); - break; - case 6U: - ::sprintf(errorS, "> 200km"); - break; - default: - ::sprintf(errorS, "not known or position invalid"); - break; + case 0U: + ::strcpy(errorS, "< 2m"); + break; + case 1U: + ::strcpy(errorS, "< 20m"); + break; + case 2U: + ::strcpy(errorS, "< 200m"); + break; + case 3U: + ::strcpy(errorS, "< 2km"); + break; + case 4U: + ::strcpy(errorS, "< 20km"); + break; + case 5U: + ::strcpy(errorS, "< 200km"); + break; + case 6U: + ::strcpy(errorS, "> 200km"); + break; + default: + ::strcpy(errorS, "not known or position invalid"); + break; } - longitudeI=(data[3U]<<16U)+(data[4U]<<8U)+(data[5U]); - if ((data[2]&0x01U)==0x01U) longitudeI=-longitudeI; + long longitudeI = (data[3U] << 16) + (data[4U] << 8) + data[5U]; + if ((data[2U] & 0x01U) == 0x01U) + longitudeI = -longitudeI; - latitudeI=((data[6U]&0x7FU)<<16U)+(data[7U]<<8U)+(data[8U]); - if ((data[6U]&0x80U)==0x80U) latitudeI=-latitudeI; + long latitudeI = ((data[6U] & 0x7FU) << 16) + (data[7U] << 8) + data[8U]; + if ((data[6U] & 0x80U) == 0x80U) + latitudeI = -latitudeI; - longitude=(float)360/33554432; // 360/2^25 steps - latitude=(float)180/16777216; // 180/2^24 steps + float longitude = 360.0F / 33554432.0F; // 360/2^25 steps + float latitude = 180.0F / 16777216.0F; // 180/2^24 steps - longitude*=longitudeI; - latitude*=latitudeI; - LogMessage("GPS position [%08f,%09f] (Position error %s)",latitude,longitude,errorS); + longitude *= longitudeI; + latitude *= latitudeI; + + LogMessage("GPS position [%08f,%09f] (Position error %s)",latitude,longitude,errorS); } void CDMRSlot::clock() diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 0979ad0..89d2a3e 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -1107,10 +1107,18 @@ void CMMDVMHost::createDisplay() if (displayClock) LogInfo(" Display UTC: %s", utc ? "yes" : "no"); LogInfo(" Idle Brightness: %u", idleBrightness); - if (screenLayout==0) - LogInfo(" Screen Layout: Default (G4KLX)"); - else - LogInfo(" Screen Layout: %u (ON7LDS)", screenLayout); + + switch (screenLayout) { + case 0U: + LogInfo(" Screen Layout: G4KLX (Default)"); + break; + case 2U: + LogInfo(" Screen Layout: ON7LDS"); + break; + default: + LogInfo(" Screen Layout: %u (Unknown)", screenLayout); + break; + } if (port == "modem") { ISerialPort* serial = new CModemSerialPort(m_modem); diff --git a/MMDVMHost.vcxproj b/MMDVMHost.vcxproj index caf9d63..5d575e0 100644 --- a/MMDVMHost.vcxproj +++ b/MMDVMHost.vcxproj @@ -189,7 +189,7 @@ - + @@ -259,7 +259,7 @@ - + diff --git a/MMDVMHost.vcxproj.filters b/MMDVMHost.vcxproj.filters index 9128703..6373a8c 100644 --- a/MMDVMHost.vcxproj.filters +++ b/MMDVMHost.vcxproj.filters @@ -221,7 +221,7 @@ Header Files - + Header Files @@ -415,7 +415,7 @@ Source Files - + Source Files diff --git a/Makefile b/Makefile index 7b7c26e..f963f70 100644 --- a/Makefile +++ b/Makefile @@ -9,9 +9,9 @@ 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 Network.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \ - P25Network.o P25NID.o P25Utils.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 + Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o \ + P25LowSpeedData.o P25Network.o P25NID.o P25Utils.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 3ac85ad..f7b91cc 100644 --- a/Makefile.Pi +++ b/Makefile.Pi @@ -9,9 +9,9 @@ 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 Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \ - P25Network.o P25NID.o P25Utils.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 + Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o \ + P25LowSpeedData.o P25Network.o P25NID.o P25Utils.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.Adafruit b/Makefile.Pi.Adafruit index 816f5ad..13caba4 100644 --- a/Makefile.Pi.Adafruit +++ b/Makefile.Pi.Adafruit @@ -9,9 +9,9 @@ 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 Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o \ - P25LowSpeedData.o P25Network.o P25NID.o P25Utils.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 + Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o P25Audio.o P25Control.o \ + P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Utils.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.HD44780 b/Makefile.Pi.HD44780 index 13b5688..3720b25 100644 --- a/Makefile.Pi.HD44780 +++ b/Makefile.Pi.HD44780 @@ -9,9 +9,9 @@ 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 Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \ - P25Network.o P25NID.o P25Utils.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 + Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o P25Audio.o P25Control.o \ + P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Utils.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.OLED b/Makefile.Pi.OLED index 000de85..bb03e91 100644 --- a/Makefile.Pi.OLED +++ b/Makefile.Pi.OLED @@ -9,9 +9,9 @@ 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 Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \ - P25Network.o P25NID.o P25Utils.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 + Golay24128.o Hamming.o OLED.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o \ + P25LowSpeedData.o P25Network.o P25NID.o P25Utils.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.PCF8574 b/Makefile.Pi.PCF8574 index 9164dab..b9104f4 100644 --- a/Makefile.Pi.PCF8574 +++ b/Makefile.Pi.PCF8574 @@ -9,9 +9,9 @@ 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 Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \ - P25Network.o P25NID.o P25Utils.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 + Golay24128.o Hamming.o HD44780.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o P25Audio.o P25Control.o \ + P25Data.o P25LowSpeedData.o P25Network.o P25NID.o P25Utils.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.Solaris b/Makefile.Solaris index 7136c1a..dbfc33f 100644 --- a/Makefile.Solaris +++ b/Makefile.Solaris @@ -9,9 +9,9 @@ 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 Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o P25LowSpeedData.o \ - P25Network.o P25NID.o P25Utils.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 + Golay24128.o Hamming.o LCDproc.o Log.o MMDVMHost.o Modem.o ModemSerialPort.o Mutex.o NetworkInfo.o Nextion.o NullDisplay.o P25Audio.o P25Control.o P25Data.o \ + P25LowSpeedData.o P25Network.o P25NID.o P25Utils.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/Network.cpp b/Network.cpp deleted file mode 100644 index 084492c..0000000 --- a/Network.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (C) 2017 by Lieven De Samblanx ON7LDS - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "Network.h" -#include "Log.h" - -#include -#include -#include -#include -#include - -#include -#if !defined(_WIN32) && !defined(_WIN64) -#include -#include -#include -#include -#else -#include -#include -#pragma comment(lib, "iphlpapi.lib") -#ifndef NO_ERROR -#define NO_ERROR 0 -#endif -#ifndef ERROR_BUFFER_OVERFLOW -#define ERROR_BUFFER_OVERFLOW 111 -#endif -#ifndef ERROR_INSUFFICIENT_BUFFER -#define ERROR_INSUFFICIENT_BUFFER 122 -#endif -#endif - -void CNetworkInfo::getNetworkInterface(unsigned char* info) -{ - LogInfo("Interfaces Info"); - ::strcpy((char*)info, "(address unknown)"); - - -#if !defined(_WIN32) && !defined(_WIN64) - -#define IFLISTSIZ 25 - - struct ifaddrs *ifaddr, *ifa; - int family, s, n, ifnr; - char host[NI_MAXHOST]; - char interfacelist[IFLISTSIZ][50+INET6_ADDRSTRLEN]; - char *dflt, *p; - FILE *f; - char line[100U]; - - dflt=NULL; - f = fopen("/proc/net/route" , "r"); - while(fgets(line , 100U , f)) { - dflt = strtok(line , " \t"); - p = strtok(NULL , " \t"); - if(dflt!=NULL && p!=NULL) { - if(strcmp(p , "00000000") == 0) { break; } - } - } - fclose(f); - - - for(n=0;nifa_next, n++) { - if (ifa->ifa_addr == NULL) continue; - family = ifa->ifa_addr->sa_family; - if (family == AF_INET || family == AF_INET6) { - s = getnameinfo(ifa->ifa_addr,(family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); - if (s != 0) { - LogError("getnameinfo() failed: %s\n", gai_strerror(s)); - continue; - } - if (family == AF_INET) { - sprintf(interfacelist[ifnr], "%s: %s", ifa->ifa_name,host); - LogInfo(" IPv4: %s", interfacelist[ifnr] ); - } else { - sprintf(interfacelist[ifnr], "%s: %s", ifa->ifa_name,host); - LogInfo(" IPv6: %s", interfacelist[ifnr] ); - } - ifnr++; - } - } - freeifaddrs(ifaddr); - - LogInfo(" Default interface is : %s" , dflt); - - for(n=0;n<(ifnr);n++) { - p=strchr(interfacelist[n],'%'); - if (p!=NULL) *p=0; - if(strstr(interfacelist[n], dflt) != 0) { - ::strcpy((char*)info,interfacelist[n]); - break; - } - } - LogInfo(" IP to show: %s", info ); - } -#else - PMIB_IPFORWARDTABLE pIpForwardTable; - DWORD dwSize = 0; - DWORD dwRetVal = 0; - int i, ifnr; - - pIpForwardTable = (MIB_IPFORWARDTABLE *)malloc(sizeof(MIB_IPFORWARDTABLE)); - if (pIpForwardTable == NULL) { - LogError("Error allocating memory"); - return; - } - if (GetIpForwardTable(pIpForwardTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { - free(pIpForwardTable); - pIpForwardTable = (MIB_IPFORWARDTABLE *)malloc(dwSize); - if (pIpForwardTable == NULL) { - LogError("Error allocating memory"); - return; - } - } - if ((dwRetVal = GetIpForwardTable(pIpForwardTable, &dwSize, 0)) == NO_ERROR) { - for (i = 0; i < (int)pIpForwardTable->dwNumEntries; i++) { - if (pIpForwardTable->table[i].dwForwardDest == 0) break; - } - ifnr = pIpForwardTable->table[i].dwForwardIfIndex; - free(pIpForwardTable); - - PIP_ADAPTER_INFO pAdapterInfo; - pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO)); - ULONG buflen = sizeof(IP_ADAPTER_INFO); - - if (GetAdaptersInfo(pAdapterInfo, &buflen) == ERROR_BUFFER_OVERFLOW) { - free(pAdapterInfo); - pAdapterInfo = (IP_ADAPTER_INFO *)malloc(buflen); - if (pAdapterInfo == NULL) { - LogError("Error allocating memory"); - return; - } - } - if (GetAdaptersInfo(pAdapterInfo, &buflen) == NO_ERROR) { - PIP_ADAPTER_INFO pAdapter = pAdapterInfo; - while (pAdapter) { - LogInfo(" IP : %s", pAdapter->IpAddressList.IpAddress.String); - if (pAdapter->Index == ifnr) { - ::strcpy((char*)info, pAdapter->IpAddressList.IpAddress.String); - } - pAdapter = pAdapter->Next; - } - LogInfo(" IP to show: %s", info); - - } - else { - LogError("Call to GetAdaptersInfo failed."); - } - return; - } - else { - LogError("GetIpForwardTable failed."); - free(pIpForwardTable); - return; - } -#endif -} diff --git a/NetworkInfo.cpp b/NetworkInfo.cpp new file mode 100644 index 0000000..615bef1 --- /dev/null +++ b/NetworkInfo.cpp @@ -0,0 +1,213 @@ +/* + * Copyright (C) 2017 by Lieven De Samblanx ON7LDS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "NetworkInfo.h" +#include "Log.h" + +#include +#include +#include +#include +#include + +#include +#if !defined(_WIN32) && !defined(_WIN64) +#include +#include +#include +#include +#else +#include +#include +#pragma comment(lib, "iphlpapi.lib") +#ifndef NO_ERROR +#define NO_ERROR 0 +#endif +#ifndef ERROR_BUFFER_OVERFLOW +#define ERROR_BUFFER_OVERFLOW 111 +#endif +#ifndef ERROR_INSUFFICIENT_BUFFER +#define ERROR_INSUFFICIENT_BUFFER 122 +#endif +#endif + +CNetworkInfo::CNetworkInfo() +{ +} + +CNetworkInfo::~CNetworkInfo() +{ +} + +void CNetworkInfo::getNetworkInterface(unsigned char* info) +{ + LogInfo("Interfaces Info"); + + ::strcpy((char*)info, "(address unknown)"); + +#if !defined(_WIN32) && !defined(_WIN64) + const unsigned int IFLISTSIZ = 25U; + + FILE* fp = ::fopen("/proc/net/route" , "r"); + if (fp == NULL) { + LogError("Unabled to open /proc/route"); + return; + } + + char line[100U]; + while (::fgets(line, 100U, fp)) { + char* dflt = strtok(line , " \t"); + char* p = strtok(NULL , " \t"); + + if (dflt != NULL && p != NULL) { + if (::strcmp(p , "00000000") == 0) + break; + } + } + + ::fclose(fp); + + char interfacelist[IFLISTSIZ][50+INET6_ADDRSTRLEN]; + for (unsigned int n = 0U; n < IFLISTSIZ; n++) + interfacelist[n][0] = 0; + + struct ifaddrs* ifaddr; + if (::getifaddrs(&ifaddr) == -1) { + LogError("getifaddrs failure"); + return; + } + + unsigned int ifnr = 0U; + for (struct ifaddrs* ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { + if (ifa->ifa_addr == NULL) + continue; + + int family = ifa->ifa_addr->sa_family; + if (family == AF_INET || family == AF_INET6) { + char host[NI_MAXHOST]; + int s = ::getnameinfo(ifa->ifa_addr, family == AF_INET ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); + if (s != 0) { + LogError("getnameinfo() failed: %s\n", gai_strerror(s)); + continue; + } + + if (family == AF_INET) { + ::sprintf(interfacelist[ifnr], "%s: %s", ifa->ifa_name, host); + LogInfo(" IPv4: %s", interfacelist[ifnr]); + } else { + ::sprintf(interfacelist[ifnr], "%s: %s", ifa->ifa_name, host); + LogInfo(" IPv6: %s", interfacelist[ifnr]); + } + + ifnr++; + } + } + + ::freeifaddrs(ifaddr); + + LogInfo(" Default interface is : %s" , dflt); + + for (unsigned int n = 0U; n < ifnr; n++) { + char* p = ::strchr(interfacelist[n], '%'); + if (p != NULL) + *p = 0; + + if (::strstr(interfacelist[n], dflt) != 0) { + ::strcpy((char*)info, interfacelist[n]); + break; + } + } + + LogInfo(" IP to show: %s", info ); +#else + PMIB_IPFORWARDTABLE pIpForwardTable = (MIB_IPFORWARDTABLE *)::malloc(sizeof(MIB_IPFORWARDTABLE)); + if (pIpForwardTable == NULL) { + LogError("Error allocating memory"); + return; + } + + DWORD dwSize = 0U; + if (::GetIpForwardTable(pIpForwardTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { + ::free(pIpForwardTable); + pIpForwardTable = (MIB_IPFORWARDTABLE *)::malloc(dwSize); + if (pIpForwardTable == NULL) { + LogError("Error allocating memory"); + return; + } + } + + DWORD ret = ::GetIpForwardTable(pIpForwardTable, &dwSize, 0); + if (ret != NO_ERROR) { + ::free(pIpForwardTable); + LogError("GetIpForwardTable failed."); + return; + } + + DWORD found = 999U; + for (DWORD i = 0U; i < pIpForwardTable->dwNumEntries; i++) { + if (pIpForwardTable->table[i].dwForwardDest == 0U) { + found = i; + break; + } + } + + if (found == 999U) { + ::free(pIpForwardTable); + LogError("Unable to find the default destination in the routing table."); + return; + } + + DWORD ifnr = pIpForwardTable->table[found].dwForwardIfIndex; + ::free(pIpForwardTable); + + PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)::malloc(sizeof(IP_ADAPTER_INFO)); + if (pAdapterInfo == NULL) { + LogError("Error allocating memory"); + return; + } + + ULONG buflen = sizeof(IP_ADAPTER_INFO); + if (::GetAdaptersInfo(pAdapterInfo, &buflen) == ERROR_BUFFER_OVERFLOW) { + ::free(pAdapterInfo); + pAdapterInfo = (IP_ADAPTER_INFO *)::malloc(buflen); + if (pAdapterInfo == NULL) { + LogError("Error allocating memory"); + return; + } + } + + if (::GetAdaptersInfo(pAdapterInfo, &buflen) != NO_ERROR) { + ::free(pAdapterInfo); + LogError("Call to GetAdaptersInfo failed."); + return; + } + + PIP_ADAPTER_INFO pAdapter = pAdapterInfo; + while (pAdapter != NULL) { + LogInfo(" IP : %s", pAdapter->IpAddressList.IpAddress.String); + if (pAdapter->Index == ifnr) + ::strcpy((char*)info, pAdapter->IpAddressList.IpAddress.String); + + pAdapter = pAdapter->Next; + } + + ::free(pAdapterInfo); + + LogInfo(" IP to show: %s", info); +#endif +} diff --git a/Network.h b/NetworkInfo.h similarity index 90% rename from Network.h rename to NetworkInfo.h index 0d639b6..2febcde 100644 --- a/Network.h +++ b/NetworkInfo.h @@ -16,16 +16,17 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#if !defined(NETWORK_H) -#define NETWORK_H - +#if !defined(NETWORKINFO_H) +#define NETWORKINFO_H class CNetworkInfo { public: + CNetworkInfo(); + ~CNetworkInfo(); void getNetworkInterface(unsigned char* info); - +private: }; #endif diff --git a/Nextion.cpp b/Nextion.cpp index f4a3f63..8ada02f 100644 --- a/Nextion.cpp +++ b/Nextion.cpp @@ -16,9 +16,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include "NetworkInfo.h" #include "Nextion.h" #include "Log.h" -#include "Network.h" #include #include @@ -243,16 +243,18 @@ void CNextion::writeDMRInt(unsigned int slotNo, const std::string& src, bool gro sendCommand("page DMR"); if (slotNo == 1U) { - if (m_screenLayout==2U) { + if (m_screenLayout == 2U) { sendCommand("t2.pco=0"); sendCommand("t2.font=4"); } + sendCommand("t2.txt=\"2 Listening\""); } else { - if (m_screenLayout==2U) { + if (m_screenLayout == 2U) { sendCommand("t0.pco=0"); sendCommand("t0.font=4"); } + sendCommand("t0.txt=\"1 Listening\""); } } @@ -263,20 +265,24 @@ void CNextion::writeDMRInt(unsigned int slotNo, const std::string& src, bool gro if (slotNo == 1U) { ::sprintf(text, "t0.txt=\"1 %s %s\"", type, src.c_str()); - if (m_screenLayout==2U) { + + if (m_screenLayout == 2U) { sendCommand("t0.pco=0"); sendCommand("t0.font=4"); } + sendCommand(text); ::sprintf(text, "t1.txt=\"%s%s\"", group ? "TG" : "", dst.c_str()); sendCommand(text); } else { ::sprintf(text, "t2.txt=\"2 %s %s\"", type, src.c_str()); - if (m_screenLayout==2U) { + + if (m_screenLayout == 2U) { sendCommand("t2.pco=0"); sendCommand("t2.font=4"); } + sendCommand(text); ::sprintf(text, "t3.txt=\"%s%s\"", group ? "TG" : "", dst.c_str()); @@ -339,40 +345,49 @@ void CNextion::writeDMRRSSIInt(unsigned int slotNo, unsigned char rssi) } } - -void CNextion::writeDMRTAInt(unsigned int slotNo, unsigned char* talkerAlias, const char* type) +void CNextion::writeDMRTAInt(unsigned int slotNo, unsigned char* talkerAlias, const char* type) { - char text[40U]; + if (m_screenLayout < 2U) + return; - if (m_screenLayout<2U) return; - - if (type[0]==' ') { - if (slotNo == 1U) { - sendCommand("t0.pco=33808"); - } else { - sendCommand("t2.pco=33808"); - } - return; + if (type[0] == ' ') { + if (slotNo == 1U) + sendCommand("t0.pco=33808"); + else + sendCommand("t2.pco=33808"); + return; } - if (slotNo == 1U) { - ::sprintf(text, "t0.txt=\"1 %s %s\"",type,talkerAlias); - if (m_screenLayout==2U) { - if (::strlen((char*)talkerAlias)>(16U-4U)) sendCommand("t0.font=3"); - if (::strlen((char*)talkerAlias)>(20U-4U)) sendCommand("t0.font=2"); - if (::strlen((char*)talkerAlias)>(24U-4U)) sendCommand("t0.font=1"); - } - sendCommand("t0.pco=1024"); - sendCommand(text); - } else { - ::sprintf(text, "t2.txt=\"2 %s %s\"",type,talkerAlias); - if (m_screenLayout==2U) { - if (::strlen((char*)talkerAlias)>(16U-4U)) sendCommand("t2.font=3"); - if (::strlen((char*)talkerAlias)>(20U-4U)) sendCommand("t2.font=2"); - if (::strlen((char*)talkerAlias)>(24U-4U)) sendCommand("t2.font=1"); - } - sendCommand("t2.pco=1024"); - sendCommand(text); + if (slotNo == 1U) { + char text[40U]; + ::sprintf(text, "t0.txt=\"1 %s %s\"", type, talkerAlias); + + if (m_screenLayout == 2U) { + if (::strlen((char*)talkerAlias) > (16U-4U)) + sendCommand("t0.font=3"); + if (::strlen((char*)talkerAlias) > (20U-4U)) + sendCommand("t0.font=2"); + if (::strlen((char*)talkerAlias) > (24U-4U)) + sendCommand("t0.font=1"); + } + + sendCommand("t0.pco=1024"); + sendCommand(text); + } else { + char text[40U]; + ::sprintf(text, "t2.txt=\"2 %s %s\"", type, talkerAlias); + + if (m_screenLayout == 2U) { + if (::strlen((char*)talkerAlias) > (16U-4U)) + sendCommand("t2.font=3"); + if (::strlen((char*)talkerAlias) > (20U-4U)) + sendCommand("t2.font=2"); + if (::strlen((char*)talkerAlias) > (24U-4U)) + sendCommand("t2.font=1"); + } + + sendCommand("t2.pco=1024"); + sendCommand(text); } } @@ -423,19 +438,23 @@ void CNextion::clearDMRInt(unsigned int slotNo) { if (slotNo == 1U) { sendCommand("t0.txt=\"1 Listening\""); - if (m_screenLayout==2U) { + + if (m_screenLayout == 2U) { sendCommand("t0.pco=0"); sendCommand("t0.font=4"); } + sendCommand("t1.txt=\"\""); sendCommand("t4.txt=\"\""); sendCommand("t6.txt=\"\""); } else { sendCommand("t2.txt=\"2 Listening\""); - if (m_screenLayout==2U) { + + if (m_screenLayout == 2U) { sendCommand("t2.pco=0"); sendCommand("t2.font=4"); } + sendCommand("t3.txt=\"\""); sendCommand("t5.txt=\"\""); sendCommand("t7.txt=\"\"");