mirror of
https://github.com/g4klx/MMDVMHost.git
synced 2026-02-25 17:04:35 +01:00
Merge branch 'master' into mqtt
This commit is contained in:
commit
76d4f0d1a1
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -3,6 +3,7 @@ Release
|
|||
x64
|
||||
MMDVMHost
|
||||
RemoteCommand
|
||||
Images
|
||||
*.o
|
||||
*.opendb
|
||||
*.bak
|
||||
|
|
@ -15,5 +16,6 @@ RemoteCommand
|
|||
*.user
|
||||
*.VC.db
|
||||
.vs
|
||||
.vscode
|
||||
*.ambe
|
||||
GitVersion.h
|
||||
|
|
|
|||
|
|
@ -27,20 +27,15 @@
|
|||
#include <cstring>
|
||||
|
||||
CDStarHeader::CDStarHeader(const unsigned char* header) :
|
||||
m_header(nullptr)
|
||||
m_header()
|
||||
{
|
||||
assert(header != nullptr);
|
||||
|
||||
m_header = new unsigned char[DSTAR_HEADER_LENGTH_BYTES];
|
||||
|
||||
::memcpy(m_header, header, DSTAR_HEADER_LENGTH_BYTES);
|
||||
}
|
||||
|
||||
CDStarHeader::CDStarHeader() :
|
||||
m_header(nullptr)
|
||||
m_header()
|
||||
{
|
||||
m_header = new unsigned char[DSTAR_HEADER_LENGTH_BYTES];
|
||||
|
||||
::memset(m_header, ' ', DSTAR_HEADER_LENGTH_BYTES);
|
||||
|
||||
m_header[0U] = 0x00U;
|
||||
|
|
@ -50,7 +45,6 @@ m_header(nullptr)
|
|||
|
||||
CDStarHeader::~CDStarHeader()
|
||||
{
|
||||
delete[] m_header;
|
||||
}
|
||||
|
||||
CDStarHeader& CDStarHeader::operator=(const CDStarHeader& header)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2016,2023 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2016,2023,2026 by Jonathan Naylor G4KLX
|
||||
*
|
||||
* 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
|
||||
|
|
@ -23,6 +23,8 @@
|
|||
|
||||
#if defined(USE_DSTAR)
|
||||
|
||||
#include "DStarDefines.h"
|
||||
|
||||
class CDStarHeader {
|
||||
public:
|
||||
CDStarHeader(const unsigned char* header);
|
||||
|
|
@ -56,7 +58,7 @@ public:
|
|||
CDStarHeader& operator=(const CDStarHeader& header);
|
||||
|
||||
private:
|
||||
unsigned char* m_header;
|
||||
unsigned char m_header[DSTAR_HEADER_LENGTH_BYTES];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
45
Modem.cpp
45
Modem.cpp
|
|
@ -311,7 +311,8 @@ m_fmMaxDevLevel(90.0F),
|
|||
m_fmExtEnable(false),
|
||||
#endif
|
||||
m_capabilities1(0x00U),
|
||||
m_capabilities2(0x00U)
|
||||
m_capabilities2(0x00U),
|
||||
m_serialDataLen(0U)
|
||||
{
|
||||
m_buffer = new unsigned char[BUFFER_LENGTH];
|
||||
}
|
||||
|
|
@ -988,6 +989,48 @@ void CModem::clock(unsigned int ms)
|
|||
|
||||
m_rxSerialData.addData(m_buffer + m_offset, m_length - m_offset);
|
||||
}
|
||||
|
||||
// NEW: Buffer serial data and forward complete commands as transparent data
|
||||
{
|
||||
// Add received bytes to our accumulation buffer
|
||||
for (unsigned int i = 0; i < (m_length - m_offset); i++) {
|
||||
if (m_serialDataLen < 256) {
|
||||
m_serialDataBuffer[m_serialDataLen++] = m_buffer[m_offset + i];
|
||||
|
||||
// Check for Nextion command terminator (0xFF 0xFF 0xFF)
|
||||
if (m_serialDataLen >= 3 &&
|
||||
m_serialDataBuffer[m_serialDataLen - 3] == 0xFF &&
|
||||
m_serialDataBuffer[m_serialDataLen - 2] == 0xFF &&
|
||||
m_serialDataBuffer[m_serialDataLen - 1] == 0xFF) {
|
||||
|
||||
// We have a complete command
|
||||
// Add it to the RX transparent data queue so it will be forwarded to NextionDriver
|
||||
// With sendFrameType=1, we need to include the frame type byte
|
||||
|
||||
// Create a buffer with frame type byte + command data
|
||||
unsigned char frameBuffer[260];
|
||||
frameBuffer[0] = 0x90; // Frame type: transparent data
|
||||
::memcpy(frameBuffer + 1, m_serialDataBuffer, m_serialDataLen);
|
||||
|
||||
// Add length byte and data with frame type to RX queue
|
||||
unsigned char len = m_serialDataLen + 1U; // +1 for frame type byte
|
||||
m_rxTransparentData.addData(&len, 1U);
|
||||
m_rxTransparentData.addData(frameBuffer, len);
|
||||
|
||||
if (m_trace) {
|
||||
CUtils::dump(1U, "Adding button command with frame type to RX Transparent queue", frameBuffer, len);
|
||||
}
|
||||
|
||||
// Reset buffer for next command
|
||||
m_serialDataLen = 0U;
|
||||
}
|
||||
} else {
|
||||
// Buffer overflow, reset
|
||||
LogWarning("Serial data buffer overflow, resetting");
|
||||
m_serialDataLen = 0U;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
|||
4
Modem.h
4
Modem.h
|
|
@ -403,6 +403,10 @@ private:
|
|||
void printDebug();
|
||||
|
||||
RESP_TYPE_MMDVM getResponse();
|
||||
|
||||
// Added these for buffering serial data from display:
|
||||
unsigned char m_serialDataBuffer[256];
|
||||
unsigned int m_serialDataLen;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2015-2025 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2015-2026 by Jonathan Naylor G4KLX
|
||||
*
|
||||
* 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
|
||||
|
|
@ -19,6 +19,6 @@
|
|||
#if !defined(VERSION_H)
|
||||
#define VERSION_H
|
||||
|
||||
const char* VERSION = "20250828";
|
||||
const char* VERSION = "20260218";
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue