Added logs and check with trad RM we are working ok

This commit is contained in:
Jon ESA
2026-04-01 19:42:20 +01:00
parent a21b5415fb
commit 9f0f870e6d
9 changed files with 508 additions and 427 deletions

View File

@@ -1,5 +1,7 @@
#include "WebSocketController.h"
#include "GamesPanel.h"
#include "LogPanel.h"
#include "PowerPanel.h"
#include "SettingsTree.h"
#include "VersionsPanel.h"
@@ -15,6 +17,7 @@ WebSocketController::WebSocketController(QLineEdit *urlEdit,
{}
QWebSocket *WebSocketController::socket() { return &m_socket; }
void WebSocketController::addLogView(QTextEdit *log) { m_logs.append(log); }
void WebSocketController::setSettingsTree(SettingsTree *tree)
@@ -26,49 +29,14 @@ void WebSocketController::setSettingsTree(SettingsTree *tree)
void WebSocketController::setGamesPanel(GamesPanel *panel) { m_gamesPanel = panel; }
void WebSocketController::setVersionsPanel(VersionsPanel *panel) { m_versionsPanel = panel; }
void WebSocketController::setPowerPanel(PowerPanel *panel) { m_powerPanel = panel; }
void WebSocketController::setLogPanel(LogPanel *panel) { m_logPanel = panel; }
bool WebSocketController::isConnected() const
{
return m_socket.state() == QAbstractSocket::ConnectedState;
}
// ----------------------------------------------------------------
// Lazy loaders — called ONLY when user clicks a tab for first time
// ----------------------------------------------------------------
void WebSocketController::requestGamesData()
{
if (!isConnected() || m_gamesRequested) return;
m_gamesRequested = true;
broadcast("-- Loading games tab --");
sendCommand(QStringLiteral("GAM list"));
}
void WebSocketController::requestVersionsData()
{
if (!isConnected() || m_versionsRequested) return;
m_versionsRequested = true;
broadcast("-- Loading versions tab --");
sendCommand(QStringLiteral("NAM"));
sendCommand(QStringLiteral("VER"));
sendCommand(QStringLiteral("UID"));
sendCommand(QStringLiteral("RNP"));
// Slave VER/UID loop fires in handleProtocol when RNP reply arrives
}
void WebSocketController::requestSettingsData()
{
if (!isConnected() || m_settingsRequested) return;
m_settingsRequested = true;
broadcast("-- Loading settings tab --");
sendCommand(QStringLiteral("GBL List"));
// Individual GBL <key> loop fires in handleProtocol when List reply arrives
}
// ----------------------------------------------------------------
// Connection
// ----------------------------------------------------------------
void WebSocketController::startConnection()
{
const QUrl url(m_urlEdit->text().trimmed());
@@ -82,11 +50,9 @@ void WebSocketController::closeConnection()
{
broadcast("Closing connection");
m_settingsKeys.clear();
m_rnpCount = -1;
m_gamesRequested = false;
m_versionsRequested = false;
m_settingsRequested = false;
m_rnpCount = -1;
if (m_versionsPanel) m_versionsPanel->reset();
if (m_powerPanel) m_powerPanel->reset();
m_socket.close();
}
@@ -99,13 +65,20 @@ void WebSocketController::sendCommand(const QString &cmd)
void WebSocketController::onConnected()
{
// Send NOTHING here — all data is lazy-loaded on tab click
broadcast("Connected");
m_statusLabel->setText("Connected");
m_rnpCount = -1;
m_gamesRequested = false;
m_versionsRequested = false;
m_settingsRequested = false;
m_rnpCount = -1;
sendCommand(QStringLiteral("GBL List"));
sendCommand(QStringLiteral("GAM list"));
sendCommand(QStringLiteral("NAM"));
sendCommand(QStringLiteral("VER"));
sendCommand(QStringLiteral("UID"));
sendCommand(QStringLiteral("RNP"));
sendCommand(QStringLiteral("#P0-P STA"));
sendCommand(QStringLiteral("#P0-P RTV"));
sendCommand(QStringLiteral("#P0-P VTG"));
sendCommand(QStringLiteral("LOG"));
}
void WebSocketController::onDisconnected()
@@ -113,10 +86,7 @@ void WebSocketController::onDisconnected()
broadcast("Disconnected");
m_statusLabel->setText("Disconnected");
m_settingsKeys.clear();
m_rnpCount = -1;
m_gamesRequested = false;
m_versionsRequested = false;
m_settingsRequested = false;
m_rnpCount = -1;
}
void WebSocketController::onTextMessageReceived(const QString &msg)
@@ -137,37 +107,54 @@ void WebSocketController::onValueEdited(const QString &key, const QString &newVa
sendCommand(QString("GBL %1").arg(key));
}
// ----------------------------------------------------------------
// Protocol handler
// ----------------------------------------------------------------
void WebSocketController::handleProtocol(const QString &msg)
{
const QStringList tokens = msg.split(' ', Qt::SkipEmptyParts);
if (tokens.isEmpty()) return;
const QString cmd = tokens[0];
// NAM <name>
// ---- Power: #P0-P STA/RTV/VTG ----
if (cmd == "#P0-P" && tokens.size() >= 2 && m_powerPanel) {
const QString sub = tokens[1];
if (sub == "STA" && tokens.size() >= 3) m_powerPanel->setStatus(tokens[2]);
else if (sub == "RTV" && tokens.size() >= 3) m_powerPanel->setRatedVoltage(tokens[2]);
else if (sub == "VTG" && tokens.size() >= 3) m_powerPanel->setVoltages(tokens.mid(2));
return;
}
// ---- LOG channel list ----
// Response: LOG name1 name2* name3 ... (* = enabled)
if (cmd == "LOG" && tokens.size() > 1 && m_logPanel) {
// Only handle the full list response (no '=' in any token)
bool isList = true;
for (int i = 1; i < tokens.size(); ++i) {
if (tokens[i].contains('=')) { isList = false; break; }
}
if (isList) m_logPanel->applyLogResponse(msg);
return;
}
// NAM
if (cmd == "NAM" && tokens.size() >= 2) {
if (m_versionsPanel) m_versionsPanel->setDeviceName(tokens[1]);
return;
}
// VER M <fw> or VER <n> <fw>
// VER
if (cmd == "VER" && tokens.size() >= 3) {
if (m_versionsPanel)
m_versionsPanel->setVersion(tokens[1], tokens.mid(2).join(' '));
return;
}
// UID M <hex> or UID <n> <hex>
// UID
if (cmd == "UID" && tokens.size() >= 3) {
if (m_versionsPanel)
m_versionsPanel->setUid(tokens[1], tokens.mid(2).join(' '));
return;
}
// RNP <count> — triggers the slave loop
// RNP
if (cmd == "RNP" && tokens.size() >= 2) {
bool ok = false;
const int count = tokens[1].toInt(&ok);
@@ -182,7 +169,7 @@ void WebSocketController::handleProtocol(const QString &msg)
return;
}
// GAM list ...
// GAM list
if (cmd == "GAM" && tokens.size() >= 2 && tokens[1] == "list") {
if (m_gamesPanel) m_gamesPanel->loadFromResponse(msg);
return;
@@ -204,8 +191,8 @@ void WebSocketController::handleProtocol(const QString &msg)
const QString payload = tokens[1];
const int eqIdx = payload.indexOf('=');
if (eqIdx > 0) {
const QString key = payload.left(eqIdx);
QString value = payload.mid(eqIdx + 1);
const QString key = payload.left(eqIdx);
QString value = payload.mid(eqIdx + 1);
if (tokens.size() > 2) value += ' ' + tokens.mid(2).join(' ');
m_settingsTree->setValue(key, value);
}