Refactor the JSON code and schema.

This commit is contained in:
Jonathan Naylor 2023-01-17 13:35:06 +00:00
parent d779b0d1e2
commit 82dab9a93f
7 changed files with 109 additions and 90 deletions

View file

@ -110,10 +110,10 @@ bool CYSFControl::writeModem(unsigned char *data, unsigned int len)
if (type == TAG_LOST && m_rfState == RS_RF_AUDIO) {
if (m_rssi != 0U) {
LogMessage("YSF, transmission lost from %10.10s to %10.10s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_rfSource, m_rfDest, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
writeJSON("lost", "voice_dn", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
writeJSONRF("lost", "voice_dn", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
} else {
LogMessage("YSF, transmission lost from %10.10s to %10.10s, %.1f seconds, BER: %.1f%%", m_rfSource, m_rfDest, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
writeJSON("lost", "voice_dn", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
writeJSONRF("lost", "voice_dn", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
}
writeEndRF();
return false;
@ -236,7 +236,7 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
if (!ret) {
LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid);
m_rfState = RS_RF_REJECTED;
writeJSON("rejected", "voice_vw", m_rfSource, dgid);
writeJSONRF("rejected", "voice_vw", m_rfSource, dgid);
return true;
}
}
@ -262,7 +262,7 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
#endif
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " ");
LogMessage("YSF, received RF header from %10.10s to DG-ID %u", m_rfSource, dgid);
writeJSON("header", "voice_vw", m_rfSource, dgid);
writeJSONRF("start", "voice_vw", m_rfSource, dgid);
CSync::addYSFSync(data + 2U);
@ -324,10 +324,10 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
if (m_rssi != 0U) {
LogMessage("YSF, received RF end of transmission from %10.10s to DG-ID %u, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
writeJSON("end", "voice_vw", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
writeJSONRF("end", "voice_vw", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
} else {
LogMessage("YSF, received RF end of transmission from %10.10s to DG-ID %u, %.1f seconds, BER: %.1f%%", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
writeJSON("end", "voice_vw", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
writeJSONRF("end", "voice_vw", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
}
writeEndRF();
@ -410,7 +410,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
if (!ret) {
LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid);
m_rfState = RS_RF_REJECTED;
writeJSON("rejected", "voice_dn", m_rfSource, dgid);
writeJSONRF("rejected", "voice_dn", m_rfSource, dgid);
return true;
}
}
@ -436,7 +436,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
#endif
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " ");
LogMessage("YSF, received RF header from %10.10s to DG-ID %u", m_rfSource, dgid);
writeJSON("header", "voice_dn", m_rfSource, dgid);
writeJSONRF("start", "voice_dn", m_rfSource, dgid);
CSync::addYSFSync(data + 2U);
@ -498,10 +498,10 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
if (m_rssi != 0U) {
LogMessage("YSF, received RF end of transmission from %10.10s to DG-ID %u, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
writeJSON("end", "voice_dn", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
writeJSONRF("end", "voice_dn", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
} else {
LogMessage("YSF, received RF end of transmission from %10.10s to DG-ID %u, %.1f seconds, BER: %.1f%%", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
writeJSON("end", "voice_dn", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
writeJSONRF("end", "voice_dn", m_rfSource, dgid, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits));
}
writeEndRF();
@ -611,7 +611,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
if (!ret) {
LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid);
m_rfState = RS_RF_REJECTED;
writeJSON("rejected", "voice_dn", m_rfSource, dgid);
writeJSONRF("rejected", "voice_dn", m_rfSource, dgid);
return true;
}
}
@ -667,7 +667,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
#endif
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " ");
LogMessage("YSF, received RF late entry from %10.10s to DG-ID %u", m_rfSource, dgid);
writeJSON("late_entry", "voice_dn", m_rfSource, dgid);
writeJSONRF("late_entry", "voice_dn", m_rfSource, dgid);
CSync::addYSFSync(data + 2U);
@ -719,7 +719,7 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
if (!ret) {
LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid);
m_rfState = RS_RF_REJECTED;
writeJSON("rejected", "data_fr", m_rfSource, dgid);
writeJSONRF("rejected", "data_fr", m_rfSource, dgid);
return true;
}
}
@ -742,7 +742,7 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
#endif
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " ");
LogMessage("YSF, received RF header from %10.10s to DG-ID %u", m_rfSource, dgid);
writeJSON("header", "data_fr", m_rfSource, dgid);
writeJSONRF("start", "data_fr", m_rfSource, dgid);
CSync::addYSFSync(data + 2U);
@ -803,10 +803,10 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
if (m_rssi != 0U) {
LogMessage("YSF, received RF end of transmission from %10.10s to DG-ID %u, %.1f seconds, RSSI: -%u/-%u/-%u dBm", m_rfSource, dgid, float(m_rfFrames) / 10.0F, m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
writeJSON("end", "data_fr", m_rfSource, dgid, float(m_rfFrames) / 10.0F, 0.0F, m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
writeJSONRF("end", "data_fr", m_rfSource, dgid, float(m_rfFrames) / 10.0F, 0.0F, m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
} else {
LogMessage("YSF, received RF end of transmission from %10.10s to DG-ID %u, %.1f seconds", m_rfSource, dgid, float(m_rfFrames) / 10.0F);
writeJSON("end", "data_fr", m_rfSource, dgid, float(m_rfFrames) / 10.0F, 0.0F);
writeJSONRF("end", "data_fr", m_rfSource, dgid, float(m_rfFrames) / 10.0F, 0.0F);
}
writeEndRF();
@ -951,7 +951,7 @@ void CYSFControl::writeNetwork()
if (::memcmp(m_netSource, " ", 10U) != 0 && ::memcmp(m_netDest, " ", 10U) != 0) {
m_display->writeFusion((char*)m_netSource, (char*)m_netDest, dgid, "N", (char*)(data + 4U));
LogMessage("YSF, received network data from %10.10s to DG-ID %u at %10.10s", m_netSource, dgid, data + 4U);
writeJSON("header", "voice_dn", m_netSource, dgid, data + 4U);
writeJSONNet("start", "voice_dn", m_netSource, dgid, data + 4U);
}
m_netTimeoutTimer.start();
@ -1064,7 +1064,7 @@ void CYSFControl::writeNetwork()
if (end) {
LogMessage("YSF, received network end of transmission from %10.10s to DG-ID %u at %10.10s, %.1f seconds, %u%% packet loss", m_netSource, dgid, data + 4U, float(m_netFrames) / 10.0F, (m_netLost * 100U) / m_netFrames);
writeJSON("end", "voice_dn", m_netSource, dgid, data + 4U, float(m_netFrames) / 10.0F, (m_netLost * 100U) / m_netFrames);
writeJSONNet("end", "voice_dn", m_netSource, dgid, data + 4U, float(m_netFrames) / 10.0F, (m_netLost * 100U) / m_netFrames);
writeEndNet();
}
}
@ -1083,7 +1083,7 @@ void CYSFControl::clock(unsigned int ms)
if (m_networkWatchdog.hasExpired()) {
unsigned char dgid = m_lastFICH.getDGId();
LogMessage("YSF, network watchdog has expired, %.1f seconds, %u%% packet loss", float(m_netFrames) / 10.0F, (m_netLost * 100U) / m_netFrames);
writeJSON("lost", "voice_dn", m_netSource, dgid, float(m_netFrames) / 10.0F, (m_netLost * 100U) / m_netFrames);
writeJSONNet("lost", "voice_dn", m_netSource, dgid, float(m_netFrames) / 10.0F, (m_netLost * 100U) / m_netFrames);
writeEndNet();
}
}
@ -1210,7 +1210,7 @@ void CYSFControl::processNetCallsigns(const unsigned char* data, unsigned char d
if (::memcmp(m_netSource, " ", 10U) != 0 && ::memcmp(m_netDest, " ", 10U) != 0) {
m_display->writeFusion((char*)m_netSource, (char*)m_netDest, dgid, "N", (char*)(data + 4U));
LogMessage("YSF, received network data from %10.10s to DG-ID %u at %10.10s", m_netSource, dgid, data + 4U);
writeJSON("header", "voice_dn", m_netSource, dgid, data + 4U);
writeJSONNet("start", "voice_dn", m_netSource, dgid, data + 4U);
}
}
}
@ -1248,7 +1248,7 @@ void CYSFControl::enable(bool enabled)
m_enabled = enabled;
}
void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned char* source, unsigned char dgid)
void CYSFControl::writeJSONRF(const char* action, const char* mode, const unsigned char* source, unsigned char dgid)
{
assert(action != NULL);
assert(mode != NULL);
@ -1256,12 +1256,12 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
nlohmann::json json;
writeJSON(json, action, mode, source, dgid);
writeJSONRF(json, action, mode, source, dgid);
WriteJSON("YSF", json);
}
void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, float duration, float ber)
void CYSFControl::writeJSONRF(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, float duration, float ber)
{
assert(action != NULL);
assert(mode != NULL);
@ -1269,7 +1269,7 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
nlohmann::json json;
writeJSON(json, action, mode, source, dgid);
writeJSONRF(json, action, mode, source, dgid);
json["duration"] = duration;
json["ber"] = ber;
@ -1277,7 +1277,7 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
WriteJSON("YSF", json);
}
void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, float duration, float ber, unsigned char minRSSI, unsigned char maxRSSI, unsigned int aveRSSI)
void CYSFControl::writeJSONRF(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, float duration, float ber, unsigned char minRSSI, unsigned char maxRSSI, unsigned int aveRSSI)
{
assert(action != NULL);
assert(mode != NULL);
@ -1285,7 +1285,7 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
nlohmann::json json;
writeJSON(json, action, mode, source, dgid);
writeJSONRF(json, action, mode, source, dgid);
json["duration"] = duration;
json["ber"] = ber;
@ -1300,7 +1300,7 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
WriteJSON("YSF", json);
}
void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, const unsigned char* reflector)
void CYSFControl::writeJSONNet(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, const unsigned char* reflector)
{
assert(action != NULL);
assert(mode != NULL);
@ -1309,21 +1309,22 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
nlohmann::json json;
writeJSON(json, action, mode, source, dgid, reflector);
writeJSONNet(json, action, mode, source, dgid);
json["reflector"] = convertBuffer(reflector);
WriteJSON("YSF", json);
}
void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, const unsigned char* reflector, float duration, unsigned int loss)
void CYSFControl::writeJSONNet(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, float duration, unsigned int loss)
{
assert(action != NULL);
assert(mode != NULL);
assert(source != NULL);
assert(reflector != NULL);
nlohmann::json json;
writeJSON(json, action, mode, source, dgid, reflector);
writeJSONNet(json, action, mode, source, dgid);
json["duration"] = duration;
json["loss"] = loss;
@ -1331,7 +1332,26 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
WriteJSON("YSF", json);
}
void CYSFControl::writeJSON(nlohmann::json& json, const char* action, const char* mode, const unsigned char* source, unsigned char dgid)
void CYSFControl::writeJSONNet(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, const unsigned char* reflector, float duration, unsigned int loss)
{
assert(action != NULL);
assert(mode != NULL);
assert(source != NULL);
assert(reflector != NULL);
nlohmann::json json;
writeJSONNet(json, action, mode, source, dgid);
json["reflector"] = convertBuffer(reflector);
json["duration"] = duration;
json["loss"] = loss;
WriteJSON("YSF", json);
}
void CYSFControl::writeJSONRF(nlohmann::json& json, const char* action, const char* mode, const unsigned char* source, unsigned char dgid)
{
assert(action != NULL);
assert(mode != NULL);
@ -1347,12 +1367,11 @@ void CYSFControl::writeJSON(nlohmann::json& json, const char* action, const char
json["dg-id"] = int(dgid);
}
void CYSFControl::writeJSON(nlohmann::json& json, const char* action, const char* mode, const unsigned char* source, unsigned char dgid, const unsigned char* reflector)
void CYSFControl::writeJSONNet(nlohmann::json& json, const char* action, const char* mode, const unsigned char* source, unsigned char dgid)
{
assert(action != NULL);
assert(mode != NULL);
assert(source != NULL);
assert(reflector != NULL);
json["timestamp"] = CUtils::createTimestamp();
@ -1362,8 +1381,6 @@ void CYSFControl::writeJSON(nlohmann::json& json, const char* action, const char
json["action"] = action;
json["mode"] = mode;
json["dg-id"] = int(dgid);
json["reflector"] = convertBuffer(reflector);
}
std::string CYSFControl::convertBuffer(const unsigned char* buffer) const