еще мелкие исправления

This commit is contained in:
Vladislav Ostapov 2024-10-31 17:52:30 +03:00
parent 0a4ac1f32a
commit 8cb2e88ba5
2 changed files with 108 additions and 51 deletions

View File

@ -1,6 +1,7 @@
#include "terminal_api_driver.h" #include "terminal_api_driver.h"
#include "terminal_api/ControlProtoCInterface.h" #include "terminal_api/ControlProtoCInterface.h"
#include <sstream> #include <sstream>
#include <cmath>
/* /*
timer_->timeout().connect([=]{ timer_->timeout().connect([=]{
@ -42,12 +43,18 @@ static bool DriverCP_GetLevelDemod(TSID sid, const char* param) {
return variable_dbl == 0; return variable_dbl == 0;
} }
static bool DriverCP_GetGain(TSID sid, const char* param) { static bool DriverCP_GetTxPower(TSID sid) {
double variable_dbl = 0; double variable_dbl = 0;
CP_GetGain(sid, param, &variable_dbl); CP_GetGain(sid, "TXPWD", &variable_dbl);
return variable_dbl != 0; return variable_dbl != 0;
} }
static bool DriverCp_GetIsCinC(TSID sid) {
uint32_t mode_demod = 0;
CP_GetDemodulatorParams(sid, "mode_demod", &mode_demod);
return mode_demod == 1;
}
static const char* boolAsStr(bool value) { static const char* boolAsStr(bool value) {
return value ? "true" : "false"; return value ? "true" : "false";
} }
@ -56,13 +63,16 @@ std::string api_driver::ApiDriver::loadTerminalState() {
std::stringstream result; std::stringstream result;
result << "{"; result << "{";
{ const auto txEnable = DriverCP_GetTxPower(sid);
// формируем структуру TX const auto isCinC = DriverCp_GetIsCinC(sid);
result << "\"isCinC\":" << boolAsStr(isCinC);
result << "\"tx.state\":" << boolAsStr(DriverCP_GetGain(sid, "TXPWD")); // формируем структуру для TX
{
result << ",\"tx.state\":" << boolAsStr(txEnable);
double tmp = 0; double tmp = 0;
char tmpStr[64]; char tmpStr[32];
CP_GetLevelDemod(sid, "snr_acm", &tmp); CP_GetLevelDemod(sid, "snr_acm", &tmp);
sprintf(tmpStr, "%.2f", tmp); sprintf(tmpStr, "%.2f", tmp);
@ -93,9 +103,8 @@ std::string api_driver::ApiDriver::loadTerminalState() {
result << ",\"tx.speedOnIifKbit\":" << tmpStr; result << ",\"tx.speedOnIifKbit\":" << tmpStr;
} }
// формируем структуру для RX
{ {
// формируем структуру RX
const auto sym_sync_lock = DriverCP_GetLevelDemod(sid, "sym_sync_lock"); // захват символьной const auto sym_sync_lock = DriverCP_GetLevelDemod(sid, "sym_sync_lock"); // захват символьной
const auto freq_search_lock = DriverCP_GetLevelDemod(sid, "freq_lock"); // Захват поиска по частоте const auto freq_search_lock = DriverCP_GetLevelDemod(sid, "freq_lock"); // Захват поиска по частоте
const auto afc_lock = DriverCP_GetLevelDemod(sid, "afc_lock"); // захват ФАПЧ const auto afc_lock = DriverCP_GetLevelDemod(sid, "afc_lock"); // захват ФАПЧ
@ -109,36 +118,7 @@ std::string api_driver::ApiDriver::loadTerminalState() {
result << ",\"rx.pkt_sync\":" << boolAsStr(pkt_sync); result << ",\"rx.pkt_sync\":" << boolAsStr(pkt_sync);
double tmpd = 0; uint32_t tmpu32 = 0; double tmpd = 0; uint32_t tmpu32 = 0;
char tmpStr[64]; char tmpStr[32];
/*
rx: {
// индикаторы
state: '?', // общее состояние
sym_sync_lock: '?', // захват символьной
freq_search_lock: '?', // Захват поиска по частоте
afc_lock: '?', // захват ФАПЧ
pkt_sync: '?', // захват пакетной синхронизации
// куча других параметров, идет в том же порядке, что и в таблице
snr: 0, rssi: -105,
modcod: 0, frameSize: 0,
pilots: '?',
symError: 0.0,
freqErr: 0, freqErrAcc: 0,
inputSignalLevel: 0,
pllError: 0,
speedOnRxKbit: 0,
speedOnIifKbit: 0,
// статистика пакетов
packetsOk: 0,
packetsBad: 0,
packetsDummy: 0,
},
testState: '?'
*/
CP_GetLevelDemod(sid, "snr", &tmpd); CP_GetLevelDemod(sid, "snr", &tmpd);
sprintf(tmpStr, "%.2f", tmpd); sprintf(tmpStr, "%.2f", tmpd);
@ -211,6 +191,64 @@ std::string api_driver::ApiDriver::loadTerminalState() {
// }); // });
} }
/*
stat_cinc: {
occ: '?',
correlator: '?',
correlatorFails: '?',
freqErr: '?', freqErrAcc: '?',
channelDelay: '?'
},
*/
// формируем структуру для CinC
{
std::string tmps;
char tmpbuff[32];
CP_GetDmaDebug(sid, "ratio_signal_signal", &tmps);
sprintf(tmpbuff, "%.3f", std::atof(tmps.c_str()));
result << ",\"cinc.occ\":" << tmpbuff;
const bool carrierOk = DriverCP_GetLevelDemod(sid, "carrier_lock");
if (isCinC && txEnable) {
if (carrierOk) {
result << R"(,"cinc.correlator":true)";
} else {
result << R"(,"cinc.correlator":false)";
}
} else {
result << R"(,"cinc.correlator":null)";
}
uint32_t tmpu32 = 0;
CP_GetDemodulatorParams(sid, "cnt_bad_lock_cinc", &tmpu32);
result << ",\"cinc.correlatorFails\":" << tmpu32;
tmps.clear(); CP_GetDmaDebug(sid, "freq_error_offset", &tmps);
// тут так сделано из-за приколов со знаками...
result << ",\"cinc.freqErr\":" << std::to_string(static_cast<int32_t>(std::atol(tmps.c_str())));
tmps.clear(); CP_GetDmaDebug(sid, "freq_fine_estimate", &tmps);
result << ",\"cinc.freqErrAcc\":" << tmps;
tmps.clear(); CP_GetDmaDebug(sid, "delay_dpdi", &tmps);
result << ",\"cinc.channelDelay\":" << std::to_string(static_cast<uint32_t>(std::round(std::atof(tmps.c_str()) * 1000)));
}
// структура температур девайса
{
char tmp[32];
double tmp_adrv_c = 0;
double tmp_ps = 0;
double tmp_pl = 0;
CP_ZynqParams(sid,"adrv-c_temper_celsius", &tmp_adrv_c);
CP_ZynqParams(sid,"pl_temper_celsius", &tmp_pl);
CP_ZynqParams(sid,"ps_temper_celsius", &tmp_ps);
sprintf(tmp, "%.1f", tmp_adrv_c / 1000); result << ",\"device.adrv\":" << tmp;
sprintf(tmp, "%.1f", tmp_pl / 1000); result << ",\"device.fpga\":" << tmp;
sprintf(tmp, "%.1f", tmp_ps / 1000); result << ",\"device.zync\":" << tmp;
}
result << "}"; result << "}";

View File

@ -133,15 +133,15 @@
</tbody> </tbody>
</table> </table>
</div> </div>
<div> <div v-if="isCinC === true">
<h2>Статистика режима CinC</h2> <h2>Статистика режима CinC</h2>
<table> <table>
<tbody> <tbody>
<tr><th>ОСС</th><td class="value-bad">indcator</td></tr> <tr><th>ОСС</th><td>{{ stat_cinc.occ }}</td></tr>
<tr><th>Захват коррелятора</th><td class="value-bad"><span :class="{ indicator: true }"></span> bool</td></tr> <tr><th>Захват коррелятора</th><td><span :class="{ indicator_bad: stat_cinc.correlator === true, indicator_good: stat_cinc.correlator === false, indicator: true }"></span></td></tr>
<tr><th>Кол-во срывов коррелятора</th><td class="value-bad">indcator</td></tr> <tr><th>Кол-во срывов коррелятора</th><td>{{ stat_cinc.correlatorFails }}</td></tr>
<tr><th>Грубая/точная част. ошибка, Гц</th><td class="value-bad">indcator/indicator</td></tr> <tr><th>Грубая/точная част. ошибка, Гц</th><td>{{ stat_cinc.freqErr }} / {{ stat_cinc.freqErrAcc }}</td></tr>
<tr><th>Задержка в канале, мс</th><td class="value-bad">indcator</td></tr> <tr><th>Задержка в канале, мс</th><td>{{ stat_cinc.channelDelay }}</td></tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -149,9 +149,9 @@
<h2>Состояние устройства</h2> <h2>Состояние устройства</h2>
<table> <table>
<tbody> <tbody>
<tr><th>Температура ADRV</th><td class="value-bad">indcator °C</td></tr> <tr><th>Температура ADRV</th><td>{{ stat_device.adrv }} °C</td></tr>
<tr><th>Температура ZYNC</th><td class="value-bad">indcator °C</td></tr> <tr><th>Температура ZYNC</th><td>{{ stat_device.zync }} °C</td></tr>
<tr><th>Температура FPGA</th><td class="value-bad">indcator °C</td></tr> <tr><th>Температура FPGA</th><td>{{ stat_device.fpga }} °C</td></tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@ -214,6 +214,8 @@
const app = new Vue({ const app = new Vue({
el: '#app', el: '#app',
data: { data: {
isCinC: null,
stat_rx: { stat_rx: {
// индикаторы // индикаторы
state: '?', // общее состояние state: '?', // общее состояние
@ -245,7 +247,10 @@
}, },
stat_cinc: { stat_cinc: {
occ: '?', occ: '?',
correlator: null,
correlatorFails: '?',
freqErr: '?', freqErrAcc: '?',
channelDelay: '?'
}, },
stat_device: { // температурные датчики stat_device: { // температурные датчики
adrv: 0, zync: 0, fpga: 0 adrv: 0, zync: 0, fpga: 0
@ -258,6 +263,7 @@
methods: { methods: {
updateMainState(vals) { updateMainState(vals) {
this.lastUpdateTime = new Date(); this.lastUpdateTime = new Date();
this.isCinC = vals["mainState"]["isCinC"]
this.stat_rx.state = vals["mainState"]["rx.state"] this.stat_rx.state = vals["mainState"]["rx.state"]
this.stat_rx.sym_sync_lock = vals["mainState"]["rx.sym_sync_lock"] this.stat_rx.sym_sync_lock = vals["mainState"]["rx.sym_sync_lock"]
@ -288,6 +294,17 @@
this.stat_tx.speedOnTxKbit = vals["mainState"]["tx.speedOnTxKbit"] this.stat_tx.speedOnTxKbit = vals["mainState"]["tx.speedOnTxKbit"]
this.stat_tx.speedOnIifKbit = vals["mainState"]["rx.speedOnIifKbit"] this.stat_tx.speedOnIifKbit = vals["mainState"]["rx.speedOnIifKbit"]
this.stat_cinc.occ = vals["mainState"]["cinc.occ"]
this.stat_cinc.correlator = vals["mainState"]["cinc.correlator"]
this.stat_cinc.correlatorFails = vals["mainState"]["cinc.correlatorFails"]
this.stat_cinc.freqErr = vals["mainState"]["cinc.freqErr"]
this.stat_cinc.freqErrAcc = vals["mainState"]["cinc.freqErrAcc"]
this.stat_cinc.channelDelay = vals["mainState"]["cinc.channelDelay"]
this.stat_device.adrv = vals["mainState"]["device.adrv"]
this.stat_device.zync = vals["mainState"]["device.zync"]
this.stat_device.fpga = vals["mainState"]["device.fpga"]
this.testState = vals["mainState"]["testState"] this.testState = vals["mainState"]["testState"]
} }
}, },
@ -295,11 +312,13 @@
const doFetch = async () => { const doFetch = async () => {
let d = await fetch("/api/mainStatistics") let d = await fetch("/api/mainStatistics")
this.updateMainState(await d.json()) this.updateMainState(await d.json())
setTimeout(() => {
doFetch()
}, 1000)
} }
doFetch().then(() => { doFetch().then(() => {})
setInterval(() => { doFetch().then(() => {}) }, 1000);
});
document.getElementById("app").removeAttribute("hidden") document.getElementById("app").removeAttribute("hidden")
} }