Added logs and check with trad RM we are working ok
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user