mirror of
https://github.com/g4klx/MMDVMHost.git
synced 2025-12-06 05:32:00 +01:00
Merge pull request #459 from on7lds/devel
Process data from display to MMDVMHost
This commit is contained in:
commit
f6cd479117
|
|
@ -337,7 +337,9 @@ int CMMDVMHost::run()
|
||||||
LogWarning("Could not open the Transparent data socket, disabling");
|
LogWarning("Could not open the Transparent data socket, disabling");
|
||||||
delete transparentSocket;
|
delete transparentSocket;
|
||||||
transparentSocket = NULL;
|
transparentSocket = NULL;
|
||||||
|
sendFrameType=0;
|
||||||
}
|
}
|
||||||
|
m_modem->setTransparentDataParams(sendFrameType);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_conf.getCWIdEnabled()) {
|
if (m_conf.getCWIdEnabled()) {
|
||||||
|
|
@ -887,7 +889,7 @@ int CMMDVMHost::run()
|
||||||
unsigned int port = 0U;
|
unsigned int port = 0U;
|
||||||
len = transparentSocket->read(data, 200U, address, port);
|
len = transparentSocket->read(data, 200U, address, port);
|
||||||
if (len > 0U)
|
if (len > 0U)
|
||||||
m_modem->writeTransparentData(data, len, sendFrameType);
|
m_modem->writeTransparentData(data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int ms = stopWatch.elapsed();
|
unsigned int ms = stopWatch.elapsed();
|
||||||
|
|
|
||||||
33
Modem.cpp
33
Modem.cpp
|
|
@ -144,6 +144,7 @@ m_txNXDNData(1000U, "Modem TX NXDN"),
|
||||||
m_txPOCSAGData(1000U, "Modem TX POCSAG"),
|
m_txPOCSAGData(1000U, "Modem TX POCSAG"),
|
||||||
m_rxTransparentData(1000U, "Modem RX Transparent"),
|
m_rxTransparentData(1000U, "Modem RX Transparent"),
|
||||||
m_txTransparentData(1000U, "Modem TX Transparent"),
|
m_txTransparentData(1000U, "Modem TX Transparent"),
|
||||||
|
m_sendTransparentDataFrameType(0U),
|
||||||
m_statusTimer(1000U, 0U, 250U),
|
m_statusTimer(1000U, 0U, 250U),
|
||||||
m_inactivityTimer(1000U, 2U),
|
m_inactivityTimer(1000U, 2U),
|
||||||
m_playoutTimer(1000U, 0U, 10U),
|
m_playoutTimer(1000U, 0U, 10U),
|
||||||
|
|
@ -225,6 +226,11 @@ void CModem::setYSFParams(bool loDev, unsigned int txHang)
|
||||||
m_ysfTXHang = txHang;
|
m_ysfTXHang = txHang;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CModem::setTransparentDataParams(unsigned int sendFrameType)
|
||||||
|
{
|
||||||
|
m_sendTransparentDataFrameType = sendFrameType;
|
||||||
|
}
|
||||||
|
|
||||||
bool CModem::open()
|
bool CModem::open()
|
||||||
{
|
{
|
||||||
::LogMessage("Opening the MMDVM");
|
::LogMessage("Opening the MMDVM");
|
||||||
|
|
@ -553,10 +559,12 @@ void CModem::clock(unsigned int ms)
|
||||||
if (m_trace)
|
if (m_trace)
|
||||||
CUtils::dump(1U, "RX Transparent Data", m_buffer, m_length);
|
CUtils::dump(1U, "RX Transparent Data", m_buffer, m_length);
|
||||||
|
|
||||||
unsigned char data = m_length - 3U;
|
unsigned char offset = m_sendTransparentDataFrameType;
|
||||||
|
if (offset>1) offset=1;
|
||||||
|
unsigned char data = m_length - 3U + offset;
|
||||||
m_rxTransparentData.addData(&data, 1U);
|
m_rxTransparentData.addData(&data, 1U);
|
||||||
|
|
||||||
m_rxTransparentData.addData(m_buffer + 3U, m_length - 3U);
|
m_rxTransparentData.addData(m_buffer + 3U - offset, m_length - 3U + offset);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -577,6 +585,21 @@ void CModem::clock(unsigned int ms)
|
||||||
printDebug();
|
printDebug();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MMDVM_SERIAL:
|
||||||
|
//MMDVMHost does not process serial data from the display,
|
||||||
|
// so we send it to the transparent port if sendFrameType==1
|
||||||
|
if (m_sendTransparentDataFrameType) {
|
||||||
|
if (m_trace)
|
||||||
|
CUtils::dump(1U, "RX Serial Data", m_buffer, m_length);
|
||||||
|
|
||||||
|
unsigned char offset = m_sendTransparentDataFrameType;
|
||||||
|
if (offset>1) offset=1;
|
||||||
|
unsigned char data = m_length - 3U + offset;
|
||||||
|
m_rxTransparentData.addData(&data, 1U);
|
||||||
|
|
||||||
|
m_rxTransparentData.addData(m_buffer + 3U - offset, m_length - 3U + offset);
|
||||||
|
break; //only break when sendFrameType>0, else message is unknown
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
LogMessage("Unknown message, type: %02X", m_buffer[2U]);
|
LogMessage("Unknown message, type: %02X", m_buffer[2U]);
|
||||||
CUtils::dump("Buffer dump", m_buffer, m_length);
|
CUtils::dump("Buffer dump", m_buffer, m_length);
|
||||||
|
|
@ -1080,7 +1103,7 @@ bool CModem::writePOCSAGData(const unsigned char* data, unsigned int length)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CModem::writeTransparentData(const unsigned char* data, unsigned int length, unsigned int sendFrameType)
|
bool CModem::writeTransparentData(const unsigned char* data, unsigned int length)
|
||||||
{
|
{
|
||||||
assert(data != NULL);
|
assert(data != NULL);
|
||||||
assert(length > 0U);
|
assert(length > 0U);
|
||||||
|
|
@ -1091,14 +1114,14 @@ bool CModem::writeTransparentData(const unsigned char* data, unsigned int length
|
||||||
buffer[1U] = length + 3U;
|
buffer[1U] = length + 3U;
|
||||||
buffer[2U] = MMDVM_TRANSPARENT;
|
buffer[2U] = MMDVM_TRANSPARENT;
|
||||||
|
|
||||||
if (sendFrameType>0) {
|
if (m_sendTransparentDataFrameType>0) {
|
||||||
::memcpy(buffer + 2U, data, length);
|
::memcpy(buffer + 2U, data, length);
|
||||||
length--;
|
length--;
|
||||||
buffer[1U]--;
|
buffer[1U]--;
|
||||||
//when sendFrameType==1 , only 0x80 and 0x90 (MMDVM_SERIAL and MMDVM_TRANSPARENT) are allowed
|
//when sendFrameType==1 , only 0x80 and 0x90 (MMDVM_SERIAL and MMDVM_TRANSPARENT) are allowed
|
||||||
// and reverted to default (MMDVM_TRANSPARENT) for any other value
|
// and reverted to default (MMDVM_TRANSPARENT) for any other value
|
||||||
//when >1, frame type is not checked
|
//when >1, frame type is not checked
|
||||||
if (sendFrameType==1) {
|
if (m_sendTransparentDataFrameType==1) {
|
||||||
if ((buffer[2U] & 0xE0) != 0x80) buffer[2U] = MMDVM_TRANSPARENT;
|
if ((buffer[2U] & 0xE0) != 0x80) buffer[2U] = MMDVM_TRANSPARENT;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
4
Modem.h
4
Modem.h
|
|
@ -43,6 +43,7 @@ public:
|
||||||
void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagLevel);
|
void setLevels(float rxLevel, float cwIdTXLevel, float dstarTXLevel, float dmrTXLevel, float ysfTXLevel, float p25TXLevel, float nxdnTXLevel, float pocsagLevel);
|
||||||
void setDMRParams(unsigned int colorCode);
|
void setDMRParams(unsigned int colorCode);
|
||||||
void setYSFParams(bool loDev, unsigned int txHang);
|
void setYSFParams(bool loDev, unsigned int txHang);
|
||||||
|
void setTransparentDataParams(unsigned int sendFrameType);
|
||||||
|
|
||||||
bool open();
|
bool open();
|
||||||
|
|
||||||
|
|
@ -77,7 +78,7 @@ public:
|
||||||
bool writeP25Data(const unsigned char* data, unsigned int length);
|
bool writeP25Data(const unsigned char* data, unsigned int length);
|
||||||
bool writeNXDNData(const unsigned char* data, unsigned int length);
|
bool writeNXDNData(const unsigned char* data, unsigned int length);
|
||||||
bool writePOCSAGData(const unsigned char* data, unsigned int length);
|
bool writePOCSAGData(const unsigned char* data, unsigned int length);
|
||||||
bool writeTransparentData(const unsigned char* data, unsigned int length, unsigned int sendFrameType);
|
bool writeTransparentData(const unsigned char* data, unsigned int length);
|
||||||
|
|
||||||
bool writeDMRStart(bool tx);
|
bool writeDMRStart(bool tx);
|
||||||
bool writeDMRShortLC(const unsigned char* lc);
|
bool writeDMRShortLC(const unsigned char* lc);
|
||||||
|
|
@ -147,6 +148,7 @@ private:
|
||||||
CRingBuffer<unsigned char> m_txPOCSAGData;
|
CRingBuffer<unsigned char> m_txPOCSAGData;
|
||||||
CRingBuffer<unsigned char> m_rxTransparentData;
|
CRingBuffer<unsigned char> m_rxTransparentData;
|
||||||
CRingBuffer<unsigned char> m_txTransparentData;
|
CRingBuffer<unsigned char> m_txTransparentData;
|
||||||
|
unsigned int m_sendTransparentDataFrameType;
|
||||||
CTimer m_statusTimer;
|
CTimer m_statusTimer;
|
||||||
CTimer m_inactivityTimer;
|
CTimer m_inactivityTimer;
|
||||||
CTimer m_playoutTimer;
|
CTimer m_playoutTimer;
|
||||||
|
|
|
||||||
60
Nextion.cpp
60
Nextion.cpp
|
|
@ -111,8 +111,10 @@ void CNextion::setIdleInt()
|
||||||
sendCommand("page MMDVM");
|
sendCommand("page MMDVM");
|
||||||
sendCommandAction(1U);
|
sendCommandAction(1U);
|
||||||
|
|
||||||
::sprintf(command, "dim=%u", m_idleBrightness);
|
if (m_brightness>0) {
|
||||||
sendCommand(command);
|
::sprintf(command, "dim=%u", m_idleBrightness);
|
||||||
|
sendCommand(command);
|
||||||
|
}
|
||||||
|
|
||||||
::sprintf(command, "t0.txt=\"%s/%u\"", m_callsign.c_str(), m_dmrid);
|
::sprintf(command, "t0.txt=\"%s/%u\"", m_callsign.c_str(), m_dmrid);
|
||||||
sendCommand(command);
|
sendCommand(command);
|
||||||
|
|
@ -179,8 +181,10 @@ void CNextion::setErrorInt(const char* text)
|
||||||
sendCommandAction(1U);
|
sendCommandAction(1U);
|
||||||
|
|
||||||
char command[20];
|
char command[20];
|
||||||
::sprintf(command, "dim=%u", m_brightness);
|
if (m_brightness>0) {
|
||||||
sendCommand(command);
|
::sprintf(command, "dim=%u", m_brightness);
|
||||||
|
sendCommand(command);
|
||||||
|
}
|
||||||
|
|
||||||
::sprintf(command, "t0.txt=\"%s\"", text);
|
::sprintf(command, "t0.txt=\"%s\"", text);
|
||||||
sendCommandAction(13U);
|
sendCommandAction(13U);
|
||||||
|
|
@ -200,8 +204,10 @@ void CNextion::setLockoutInt()
|
||||||
sendCommandAction(1U);
|
sendCommandAction(1U);
|
||||||
|
|
||||||
char command[20];
|
char command[20];
|
||||||
::sprintf(command, "dim=%u", m_brightness);
|
if (m_brightness>0) {
|
||||||
sendCommand(command);
|
::sprintf(command, "dim=%u", m_brightness);
|
||||||
|
sendCommand(command);
|
||||||
|
}
|
||||||
|
|
||||||
sendCommand("t0.txt=\"LOCKOUT\"");
|
sendCommand("t0.txt=\"LOCKOUT\"");
|
||||||
sendCommandAction(15U);
|
sendCommandAction(15U);
|
||||||
|
|
@ -217,8 +223,10 @@ void CNextion::setQuitInt()
|
||||||
sendCommandAction(1U);
|
sendCommandAction(1U);
|
||||||
|
|
||||||
char command[100];
|
char command[100];
|
||||||
::sprintf(command, "dim=%u", m_idleBrightness);
|
if (m_brightness>0) {
|
||||||
sendCommand(command);
|
::sprintf(command, "dim=%u", m_idleBrightness);
|
||||||
|
sendCommand(command);
|
||||||
|
}
|
||||||
|
|
||||||
::sprintf(command, "t3.txt=\"%s\"", m_ipaddress.c_str());
|
::sprintf(command, "t3.txt=\"%s\"", m_ipaddress.c_str());
|
||||||
sendCommand(command);
|
sendCommand(command);
|
||||||
|
|
@ -246,8 +254,10 @@ void CNextion::writeDStarInt(const char* my1, const char* my2, const char* your,
|
||||||
}
|
}
|
||||||
|
|
||||||
char text[50U];
|
char text[50U];
|
||||||
::sprintf(text, "dim=%u", m_brightness);
|
if (m_brightness>0) {
|
||||||
sendCommand(text);
|
::sprintf(text, "dim=%u", m_brightness);
|
||||||
|
sendCommand(text);
|
||||||
|
}
|
||||||
|
|
||||||
::sprintf(text, "t0.txt=\"%s %.8s/%4.4s\"", type, my1, my2);
|
::sprintf(text, "t0.txt=\"%s %.8s/%4.4s\"", type, my1, my2);
|
||||||
sendCommand(text);
|
sendCommand(text);
|
||||||
|
|
@ -341,8 +351,10 @@ void CNextion::writeDMRInt(unsigned int slotNo, const std::string& src, bool gro
|
||||||
}
|
}
|
||||||
|
|
||||||
char text[50U];
|
char text[50U];
|
||||||
::sprintf(text, "dim=%u", m_brightness);
|
if (m_brightness>0) {
|
||||||
sendCommand(text);
|
::sprintf(text, "dim=%u", m_brightness);
|
||||||
|
sendCommand(text);
|
||||||
|
}
|
||||||
|
|
||||||
if (slotNo == 1U) {
|
if (slotNo == 1U) {
|
||||||
::sprintf(text, "t0.txt=\"1 %s %s\"", type, src.c_str());
|
::sprintf(text, "t0.txt=\"1 %s %s\"", type, src.c_str());
|
||||||
|
|
@ -542,8 +554,10 @@ void CNextion::writeFusionInt(const char* source, const char* dest, const char*
|
||||||
|
|
||||||
|
|
||||||
char text[30U];
|
char text[30U];
|
||||||
::sprintf(text, "dim=%u", m_brightness);
|
if (m_brightness>0) {
|
||||||
sendCommand(text);
|
::sprintf(text, "dim=%u", m_brightness);
|
||||||
|
sendCommand(text);
|
||||||
|
}
|
||||||
|
|
||||||
::sprintf(text, "t0.txt=\"%s %.10s\"", type, source);
|
::sprintf(text, "t0.txt=\"%s %.10s\"", type, source);
|
||||||
sendCommand(text);
|
sendCommand(text);
|
||||||
|
|
@ -618,8 +632,10 @@ void CNextion::writeP25Int(const char* source, bool group, unsigned int dest, co
|
||||||
}
|
}
|
||||||
|
|
||||||
char text[30U];
|
char text[30U];
|
||||||
::sprintf(text, "dim=%u", m_brightness);
|
if (m_brightness>0) {
|
||||||
sendCommand(text);
|
::sprintf(text, "dim=%u", m_brightness);
|
||||||
|
sendCommand(text);
|
||||||
|
}
|
||||||
|
|
||||||
::sprintf(text, "t0.txt=\"%s %.10s\"", type, source);
|
::sprintf(text, "t0.txt=\"%s %.10s\"", type, source);
|
||||||
sendCommand(text);
|
sendCommand(text);
|
||||||
|
|
@ -688,8 +704,10 @@ void CNextion::writeNXDNInt(const char* source, bool group, unsigned int dest, c
|
||||||
}
|
}
|
||||||
|
|
||||||
char text[30U];
|
char text[30U];
|
||||||
::sprintf(text, "dim=%u", m_brightness);
|
if (m_brightness>0) {
|
||||||
sendCommand(text);
|
::sprintf(text, "dim=%u", m_brightness);
|
||||||
|
sendCommand(text);
|
||||||
|
}
|
||||||
|
|
||||||
::sprintf(text, "t0.txt=\"%s %.10s\"", type, source);
|
::sprintf(text, "t0.txt=\"%s %.10s\"", type, source);
|
||||||
sendCommand(text);
|
sendCommand(text);
|
||||||
|
|
@ -755,8 +773,10 @@ void CNextion::writePOCSAGInt(uint32_t ric, const std::string& message)
|
||||||
}
|
}
|
||||||
|
|
||||||
char text[200U];
|
char text[200U];
|
||||||
::sprintf(text, "dim=%u", m_brightness);
|
if (m_brightness>0) {
|
||||||
sendCommand(text);
|
::sprintf(text, "dim=%u", m_brightness);
|
||||||
|
sendCommand(text);
|
||||||
|
}
|
||||||
|
|
||||||
::sprintf(text, "t0.txt=\"RIC: %u\"", ric);
|
::sprintf(text, "t0.txt=\"RIC: %u\"", ric);
|
||||||
sendCommand(text);
|
sendCommand(text);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue