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

@@ -398,7 +398,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len)
} }
LogMessage("D-Star, received RF header from %8.8s/%4.4s to %8.8s", my1, my2, your); LogMessage("D-Star, received RF header from %8.8s/%4.4s to %8.8s", my1, my2, your);
writeJSONRF("header", my1, my2, your); writeJSONRF("start", my1, my2, your);
} else if (type == TAG_EOT) { } else if (type == TAG_EOT) {
if (m_rfState == RS_RF_REJECTED) { if (m_rfState == RS_RF_REJECTED) {
m_rfState = RS_RF_LISTENING; m_rfState = RS_RF_LISTENING;
@@ -759,11 +759,11 @@ void CDStarControl::writeNetwork()
if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) { if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) {
m_display->writeDStar((char*)my1, (char*)my2, (char*)your, "N", (char*) reflector); m_display->writeDStar((char*)my1, (char*)my2, (char*)your, "N", (char*) reflector);
LogMessage("D-Star, received network header from %8.8s/%4.4s to %8.8s via %8.8s", my1, my2, your, reflector); LogMessage("D-Star, received network header from %8.8s/%4.4s to %8.8s via %8.8s", my1, my2, your, reflector);
writeJSONNet("header", my1, my2, your, reflector); writeJSONNet("start", my1, my2, your, reflector);
} else { } else {
m_display->writeDStar((char*)my1, (char*)my2, (char*)your, "N", (char*) " "); m_display->writeDStar((char*)my1, (char*)my2, (char*)your, "N", (char*) " ");
LogMessage("D-Star, received network header from %8.8s/%4.4s to %8.8s", my1, my2, your); LogMessage("D-Star, received network header from %8.8s/%4.4s to %8.8s", my1, my2, your);
writeJSONNet("header", my1, my2, your); writeJSONNet("start", my1, my2, your);
} }
// Something just above here introduces a large delay forcing erroneous(?) insertion of silence packets. // Something just above here introduces a large delay forcing erroneous(?) insertion of silence packets.

View File

@@ -115,10 +115,10 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
if (type == TAG_LOST && (m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO)) { if (type == TAG_LOST && (m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO)) {
if (m_rssi != 0U) { if (m_rssi != 0U) {
LogMessage("M17, transmission lost from %s to %s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); LogMessage("M17, transmission lost from %s to %s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
writeJSON("lost", m_rfState, m_source, m_dest, float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); writeJSONRF("lost", m_rfState, m_source, m_dest, float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
} else { } else {
LogMessage("M17, transmission lost from %s to %s, %.1f seconds, BER: %.1f%%", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits)); LogMessage("M17, transmission lost from %s to %s, %.1f seconds, BER: %.1f%%", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits));
writeJSON("lost", m_rfState, m_source, m_dest, float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits)); writeJSONRF("lost", m_rfState, m_source, m_dest, float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits));
} }
writeEndRF(); writeEndRF();
return false; return false;
@@ -424,10 +424,10 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
if (m_rssi != 0U) { if (m_rssi != 0U) {
LogMessage("M17, received RF end of transmission from %s to %s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); LogMessage("M17, received RF end of transmission from %s to %s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
writeJSON("end", m_rfState, m_source, m_dest, float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits)); writeJSONRF("end", m_rfState, m_source, m_dest, float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits));
} else { } else {
LogMessage("M17, received RF end of transmission from %s to %s, %.1f seconds, BER: %.1f%%", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits)); LogMessage("M17, received RF end of transmission from %s to %s, %.1f seconds, BER: %.1f%%", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits));
writeJSON("end", m_rfState, m_source, m_dest, float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); writeJSONRF("end", m_rfState, m_source, m_dest, float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount);
} }
writeEndRF(); writeEndRF();
@@ -535,17 +535,17 @@ void CM17Control::writeNetwork()
case M17_DATA_TYPE_DATA: case M17_DATA_TYPE_DATA:
LogMessage("M17, received network data transmission from %s to %s", m_source.c_str(), m_dest.c_str()); LogMessage("M17, received network data transmission from %s to %s", m_source.c_str(), m_dest.c_str());
m_netState = RS_NET_DATA; m_netState = RS_NET_DATA;
writeJSON("header", m_netState, m_source, m_dest); writeJSONNet("start", m_netState, m_source, m_dest);
break; break;
case M17_DATA_TYPE_VOICE: case M17_DATA_TYPE_VOICE:
LogMessage("M17, received network voice transmission from %s to %s", m_source.c_str(), m_dest.c_str()); LogMessage("M17, received network voice transmission from %s to %s", m_source.c_str(), m_dest.c_str());
m_netState = RS_NET_AUDIO; m_netState = RS_NET_AUDIO;
writeJSON("header", m_netState, m_source, m_dest); writeJSONNet("start", m_netState, m_source, m_dest);
break; break;
case M17_DATA_TYPE_VOICE_DATA: case M17_DATA_TYPE_VOICE_DATA:
LogMessage("M17, received network voice + data transmission from %s to %s", m_source.c_str(), m_dest.c_str()); LogMessage("M17, received network voice + data transmission from %s to %s", m_source.c_str(), m_dest.c_str());
m_netState = RS_NET_DATA_AUDIO; m_netState = RS_NET_DATA_AUDIO;
writeJSON("header", m_netState, m_source, m_dest); writeJSONNet("start", m_netState, m_source, m_dest);
break; break;
default: default:
LogMessage("M17, received network unknown transmission from %s to %s", m_source.c_str(), m_dest.c_str()); LogMessage("M17, received network unknown transmission from %s to %s", m_source.c_str(), m_dest.c_str());
@@ -647,7 +647,7 @@ void CM17Control::writeNetwork()
uint16_t fn = (netData[28U] << 8) + (netData[29U] << 0); uint16_t fn = (netData[28U] << 8) + (netData[29U] << 0);
if ((fn & 0x8000U) == 0x8000U) { if ((fn & 0x8000U) == 0x8000U) {
LogMessage("M17, received network end of transmission from %s to %s, %.1f seconds", m_source.c_str(), m_dest.c_str(), float(m_netFrames) / 25.0F); LogMessage("M17, received network end of transmission from %s to %s, %.1f seconds", m_source.c_str(), m_dest.c_str(), float(m_netFrames) / 25.0F);
writeJSON("end", m_netState, m_source, m_dest, float(m_netFrames) / 25.0F); writeJSONNet("end", m_netState, m_source, m_dest, float(m_netFrames) / 25.0F);
unsigned char data[M17_FRAME_LENGTH_BYTES + 2U]; unsigned char data[M17_FRAME_LENGTH_BYTES + 2U];
@@ -683,7 +683,7 @@ bool CM17Control::processRFHeader(bool lateEntry)
if (type != M17_ENCRYPTION_TYPE_NONE) { if (type != M17_ENCRYPTION_TYPE_NONE) {
LogMessage("M17, access attempt with encryption from %s to %s", m_source.c_str(), m_dest.c_str()); LogMessage("M17, access attempt with encryption from %s to %s", m_source.c_str(), m_dest.c_str());
m_rfState = RS_RF_REJECTED; m_rfState = RS_RF_REJECTED;
writeJSON("rejected", RS_RF_AUDIO, m_source, m_dest); writeJSONRF("rejected", RS_RF_AUDIO, m_source, m_dest);
return true; return true;
} }
} }
@@ -693,7 +693,7 @@ bool CM17Control::processRFHeader(bool lateEntry)
if (!ret) { if (!ret) {
LogMessage("M17, invalid access attempt from %s to %s", m_source.c_str(), m_dest.c_str()); LogMessage("M17, invalid access attempt from %s to %s", m_source.c_str(), m_dest.c_str());
m_rfState = RS_RF_REJECTED; m_rfState = RS_RF_REJECTED;
writeJSON("rejected", RS_RF_AUDIO, m_source, m_dest); writeJSONRF("rejected", RS_RF_AUDIO, m_source, m_dest);
return true; return true;
} }
} }
@@ -703,17 +703,17 @@ bool CM17Control::processRFHeader(bool lateEntry)
case M17_DATA_TYPE_DATA: case M17_DATA_TYPE_DATA:
LogMessage("M17, received RF%sdata transmission from %s to %s", lateEntry ? " late entry " : " ", m_source.c_str(), m_dest.c_str()); LogMessage("M17, received RF%sdata transmission from %s to %s", lateEntry ? " late entry " : " ", m_source.c_str(), m_dest.c_str());
m_rfState = RS_RF_DATA; m_rfState = RS_RF_DATA;
writeJSON(lateEntry ? "late_entry" : "header", m_rfState, m_source, m_dest); writeJSONRF(lateEntry ? "late_entry" : "start", m_rfState, m_source, m_dest);
break; break;
case M17_DATA_TYPE_VOICE: case M17_DATA_TYPE_VOICE:
LogMessage("M17, received RF%svoice transmission from %s to %s", lateEntry ? " late entry " : " ", m_source.c_str(), m_dest.c_str()); LogMessage("M17, received RF%svoice transmission from %s to %s", lateEntry ? " late entry " : " ", m_source.c_str(), m_dest.c_str());
m_rfState = RS_RF_AUDIO; m_rfState = RS_RF_AUDIO;
writeJSON(lateEntry ? "late_entry" : "header", m_rfState, m_source, m_dest); writeJSONRF(lateEntry ? "late_entry" : "start", m_rfState, m_source, m_dest);
break; break;
case M17_DATA_TYPE_VOICE_DATA: case M17_DATA_TYPE_VOICE_DATA:
LogMessage("M17, received RF%svoice + data transmission from %s to %s", lateEntry ? " late entry " : " ", m_source.c_str(), m_dest.c_str()); LogMessage("M17, received RF%svoice + data transmission from %s to %s", lateEntry ? " late entry " : " ", m_source.c_str(), m_dest.c_str());
m_rfState = RS_RF_DATA_AUDIO; m_rfState = RS_RF_DATA_AUDIO;
writeJSON(lateEntry ? "late_entry" : "header", m_rfState, m_source, m_dest); writeJSONRF(lateEntry ? "late_entry" : "start", m_rfState, m_source, m_dest);
break; break;
default: default:
return false; return false;
@@ -782,7 +782,7 @@ void CM17Control::clock(unsigned int ms)
if (m_networkWatchdog.hasExpired()) { if (m_networkWatchdog.hasExpired()) {
LogMessage("M17, network watchdog has expired, %.1f seconds", float(m_netFrames) / 25.0F); LogMessage("M17, network watchdog has expired, %.1f seconds", float(m_netFrames) / 25.0F);
writeJSON("lost", m_netState, m_source, m_dest, float(m_netFrames) / 25.0F); writeJSONNet("lost", m_netState, m_source, m_dest, float(m_netFrames) / 25.0F);
writeEndNet(); writeEndNet();
} }
} }
@@ -926,35 +926,35 @@ void CM17Control::enable(bool enabled)
m_enabled = enabled; m_enabled = enabled;
} }
void CM17Control::writeJSON(const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest) void CM17Control::writeJSONRF(const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest)
{ {
assert(action != NULL); assert(action != NULL);
nlohmann::json json; nlohmann::json json;
writeJSON(json, action, state, source, dest); writeJSONRF(json, action, state, source, dest);
WriteJSON("M17", json); WriteJSON("M17", json);
} }
void CM17Control::writeJSON(const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest, float duration, float ber) void CM17Control::writeJSONRF(const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest, float duration, float ber)
{ {
assert(action != NULL); assert(action != NULL);
nlohmann::json json; nlohmann::json json;
writeJSON(json, action, state, source, dest, duration, ber); writeJSONRF(json, action, state, source, dest, duration, ber);
WriteJSON("M17", json); WriteJSON("M17", json);
} }
void CM17Control::writeJSON(const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest, float duration, float ber, unsigned char minRSSI, unsigned char maxRSSI, unsigned int aveRSSI) void CM17Control::writeJSONRF(const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest, float duration, float ber, unsigned char minRSSI, unsigned char maxRSSI, unsigned int aveRSSI)
{ {
assert(action != NULL); assert(action != NULL);
nlohmann::json json; nlohmann::json json;
writeJSON(json, action, state, source, dest, duration, ber); writeJSONRF(json, action, state, source, dest, duration, ber);
nlohmann::json rssi; nlohmann::json rssi;
rssi["min"] = -int(minRSSI); rssi["min"] = -int(minRSSI);
@@ -966,31 +966,31 @@ void CM17Control::writeJSON(const char* action, RPT_RF_STATE state, const std::s
WriteJSON("M17", json); WriteJSON("M17", json);
} }
void CM17Control::writeJSON(const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest) void CM17Control::writeJSONNet(const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest)
{ {
assert(action != NULL); assert(action != NULL);
nlohmann::json json; nlohmann::json json;
writeJSON(json, action, state, source, dest); writeJSONNet(json, action, state, source, dest);
WriteJSON("M17", json); WriteJSON("M17", json);
} }
void CM17Control::writeJSON(const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest, float duration) void CM17Control::writeJSONNet(const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest, float duration)
{ {
assert(action != NULL); assert(action != NULL);
nlohmann::json json; nlohmann::json json;
writeJSON(json, action, state, source, dest); writeJSONNet(json, action, state, source, dest);
json["duration"] = duration; json["duration"] = duration;
WriteJSON("M17", json); WriteJSON("M17", json);
} }
void CM17Control::writeJSON(nlohmann::json& json, const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest) void CM17Control::writeJSONRF(nlohmann::json& json, const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest)
{ {
assert(action != NULL); assert(action != NULL);
@@ -1018,17 +1018,17 @@ void CM17Control::writeJSON(nlohmann::json& json, const char* action, RPT_RF_STA
} }
} }
void CM17Control::writeJSON(nlohmann::json& json, const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest, float duration, float ber) void CM17Control::writeJSONRF(nlohmann::json& json, const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest, float duration, float ber)
{ {
assert(action != NULL); assert(action != NULL);
writeJSON(json, action, state, source, dest); writeJSONRF(json, action, state, source, dest);
json["duration"] = duration; json["duration"] = duration;
json["ber"] = ber; json["ber"] = ber;
} }
void CM17Control::writeJSON(nlohmann::json& json, const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest) void CM17Control::writeJSONNet(nlohmann::json& json, const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest)
{ {
assert(action != NULL); assert(action != NULL);

View File

@@ -105,15 +105,16 @@ private:
void writeEndRF(); void writeEndRF();
void writeEndNet(); void writeEndNet();
void writeJSON(const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest); void writeJSONRF(const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest);
void writeJSON(const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest, float duration, float ber); void writeJSONRF(const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest, float duration, float ber);
void writeJSON(const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest, float duration, float ber, unsigned char minRSSI, unsigned char maxRSSI, unsigned int aveRSSI); void writeJSONRF(const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest, float duration, float ber, unsigned char minRSSI, unsigned char maxRSSI, unsigned int aveRSSI);
void writeJSON(const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest);
void writeJSON(const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest, float duration);
void writeJSON(nlohmann::json& json, const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest); void writeJSONNet(const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest);
void writeJSON(nlohmann::json& json, const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest, float duration, float ber); void writeJSONNet(const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest, float duration);
void writeJSON(nlohmann::json& json, const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest);
void writeJSONRF(nlohmann::json& json, const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest);
void writeJSONRF(nlohmann::json& json, const char* action, RPT_RF_STATE state, const std::string& source, const std::string& dest, float duration, float ber);
void writeJSONNet(nlohmann::json& json, const char* action, RPT_NET_STATE state, const std::string& source, const std::string& dest);
bool openFile(); bool openFile();
bool writeFile(const unsigned char* data); bool writeFile(const unsigned char* data);

View File

@@ -300,7 +300,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne
std::string source = m_lookup->find(srcId); std::string source = m_lookup->find(srcId);
LogMessage("NXDN, received RF header from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId); LogMessage("NXDN, received RF header from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId);
writeJSONRF("header", srcId, source, grp, dstId); writeJSONRF("start", srcId, source, grp, dstId);
m_display->writeNXDN(source.c_str(), grp, dstId, "R"); m_display->writeNXDN(source.c_str(), grp, dstId, "R");
} }
@@ -616,7 +616,7 @@ bool CNXDNControl::processData(unsigned char option, unsigned char *data)
m_display->writeNXDNRSSI(m_rssi); m_display->writeNXDNRSSI(m_rssi);
LogMessage("NXDN, received RF data header from %s to %s%u, %u blocks", source.c_str(), grp ? "TG " : "", dstId, frames); LogMessage("NXDN, received RF data header from %s to %s%u, %u blocks", source.c_str(), grp ? "TG " : "", dstId, frames);
writeJSONNet("header", srcId, source, grp, dstId, frames); writeJSONNet("start", srcId, source, grp, dstId, frames);
m_rfLayer3 = layer3; m_rfLayer3 = layer3;
m_rfFrames = 0U; m_rfFrames = 0U;
@@ -790,7 +790,7 @@ void CNXDNControl::writeNetwork()
std::string source = m_lookup->find(srcId); std::string source = m_lookup->find(srcId);
m_display->writeNXDN(source.c_str(), grp, dstId, "N"); m_display->writeNXDN(source.c_str(), grp, dstId, "N");
LogMessage("NXDN, received network data header from %s to %s%u, %u blocks", source.c_str(), grp ? "TG " : "", dstId, frames); LogMessage("NXDN, received network data header from %s to %s%u, %u blocks", source.c_str(), grp ? "TG " : "", dstId, frames);
writeJSONNet("header", srcId, source, grp, dstId, frames); writeJSONNet("start", srcId, source, grp, dstId, frames);
m_netState = RS_NET_DATA; m_netState = RS_NET_DATA;
} else { } else {
@@ -818,7 +818,7 @@ void CNXDNControl::writeNetwork()
std::string source = m_lookup->find(srcId); std::string source = m_lookup->find(srcId);
LogMessage("NXDN, ended network data transmission from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId); LogMessage("NXDN, ended network data transmission from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId);
writeJSONNet("header", srcId, source, grp, dstId); writeJSONNet("start", srcId, source, grp, dstId);
writeEndNet(); writeEndNet();
} }
} }
@@ -862,7 +862,7 @@ void CNXDNControl::writeNetwork()
writeEndNet(); writeEndNet();
} else if (type == NXDN_MESSAGE_TYPE_VCALL) { } else if (type == NXDN_MESSAGE_TYPE_VCALL) {
LogMessage("NXDN, received network transmission from %s to %s%u", source.get(keyCALLSIGN).c_str(), grp ? "TG " : "", dstId); LogMessage("NXDN, received network transmission from %s to %s%u", source.get(keyCALLSIGN).c_str(), grp ? "TG " : "", dstId);
writeJSONNet("header", srcId, source.get(keyCALLSIGN), grp, dstId); writeJSONNet("start", srcId, source.get(keyCALLSIGN), grp, dstId);
m_display->writeNXDN(source, grp, dstId, "N"); m_display->writeNXDN(source, grp, dstId, "N");
m_netTimeoutTimer.start(); m_netTimeoutTimer.start();
@@ -915,7 +915,7 @@ void CNXDNControl::writeNetwork()
class CUserDBentry source; class CUserDBentry source;
m_lookup->findWithName(srcId, &source); m_lookup->findWithName(srcId, &source);
LogMessage("NXDN, received network transmission from %s to %s%u", source.get(keyCALLSIGN).c_str(), grp ? "TG " : "", dstId); LogMessage("NXDN, received network transmission from %s to %s%u", source.get(keyCALLSIGN).c_str(), grp ? "TG " : "", dstId);
writeJSONNet("header", srcId, source.get(keyCALLSIGN), grp, dstId); writeJSONNet("start", srcId, source.get(keyCALLSIGN), grp, dstId);
m_display->writeNXDN(source, grp, dstId, "N"); m_display->writeNXDN(source, grp, dstId, "N");
m_netTimeoutTimer.start(); m_netTimeoutTimer.start();

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 (type == TAG_LOST && m_rfState == RS_RF_AUDIO) {
if (m_rssi != 0U) { 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); 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 { } 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)); 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(); writeEndRF();
return false; return false;
@@ -236,7 +236,7 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
if (!ret) { if (!ret) {
LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid); LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid);
m_rfState = RS_RF_REJECTED; m_rfState = RS_RF_REJECTED;
writeJSON("rejected", "voice_vw", m_rfSource, dgid); writeJSONRF("rejected", "voice_vw", m_rfSource, dgid);
return true; return true;
} }
} }
@@ -262,7 +262,7 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
#endif #endif
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " "); 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); 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); CSync::addYSFSync(data + 2U);
@@ -324,10 +324,10 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data)
if (m_rssi != 0U) { 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); 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 { } 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)); 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(); writeEndRF();
@@ -410,7 +410,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
if (!ret) { if (!ret) {
LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid); LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid);
m_rfState = RS_RF_REJECTED; m_rfState = RS_RF_REJECTED;
writeJSON("rejected", "voice_dn", m_rfSource, dgid); writeJSONRF("rejected", "voice_dn", m_rfSource, dgid);
return true; return true;
} }
} }
@@ -436,7 +436,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
#endif #endif
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " "); 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); 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); CSync::addYSFSync(data + 2U);
@@ -498,10 +498,10 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
if (m_rssi != 0U) { 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); 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 { } 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)); 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(); writeEndRF();
@@ -611,7 +611,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
if (!ret) { if (!ret) {
LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid); LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid);
m_rfState = RS_RF_REJECTED; m_rfState = RS_RF_REJECTED;
writeJSON("rejected", "voice_dn", m_rfSource, dgid); writeJSONRF("rejected", "voice_dn", m_rfSource, dgid);
return true; return true;
} }
} }
@@ -667,7 +667,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data)
#endif #endif
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " "); 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); 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); CSync::addYSFSync(data + 2U);
@@ -719,7 +719,7 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
if (!ret) { if (!ret) {
LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid); LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid);
m_rfState = RS_RF_REJECTED; m_rfState = RS_RF_REJECTED;
writeJSON("rejected", "data_fr", m_rfSource, dgid); writeJSONRF("rejected", "data_fr", m_rfSource, dgid);
return true; return true;
} }
} }
@@ -742,7 +742,7 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
#endif #endif
m_display->writeFusion((char*)m_rfSource, (char*)m_rfDest, dgid, "R", " "); 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); 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); CSync::addYSFSync(data + 2U);
@@ -803,10 +803,10 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data)
if (m_rssi != 0U) { 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); 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 { } 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); 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(); writeEndRF();
@@ -951,7 +951,7 @@ void CYSFControl::writeNetwork()
if (::memcmp(m_netSource, " ", 10U) != 0 && ::memcmp(m_netDest, " ", 10U) != 0) { 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)); 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); 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(); m_netTimeoutTimer.start();
@@ -1064,7 +1064,7 @@ void CYSFControl::writeNetwork()
if (end) { 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); 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(); writeEndNet();
} }
} }
@@ -1083,7 +1083,7 @@ void CYSFControl::clock(unsigned int ms)
if (m_networkWatchdog.hasExpired()) { if (m_networkWatchdog.hasExpired()) {
unsigned char dgid = m_lastFICH.getDGId(); 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); 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(); 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) { 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)); 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); 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; 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(action != NULL);
assert(mode != NULL); assert(mode != NULL);
@@ -1256,12 +1256,12 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
nlohmann::json json; nlohmann::json json;
writeJSON(json, action, mode, source, dgid); writeJSONRF(json, action, mode, source, dgid);
WriteJSON("YSF", json); 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(action != NULL);
assert(mode != NULL); assert(mode != NULL);
@@ -1269,7 +1269,7 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
nlohmann::json json; nlohmann::json json;
writeJSON(json, action, mode, source, dgid); writeJSONRF(json, action, mode, source, dgid);
json["duration"] = duration; json["duration"] = duration;
json["ber"] = ber; json["ber"] = ber;
@@ -1277,7 +1277,7 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
WriteJSON("YSF", json); 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(action != NULL);
assert(mode != NULL); assert(mode != NULL);
@@ -1285,7 +1285,7 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
nlohmann::json json; nlohmann::json json;
writeJSON(json, action, mode, source, dgid); writeJSONRF(json, action, mode, source, dgid);
json["duration"] = duration; json["duration"] = duration;
json["ber"] = ber; json["ber"] = ber;
@@ -1300,7 +1300,7 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
WriteJSON("YSF", json); 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(action != NULL);
assert(mode != NULL); assert(mode != NULL);
@@ -1309,21 +1309,22 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
nlohmann::json json; nlohmann::json json;
writeJSON(json, action, mode, source, dgid, reflector); writeJSONNet(json, action, mode, source, dgid);
json["reflector"] = convertBuffer(reflector);
WriteJSON("YSF", json); 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(action != NULL);
assert(mode != NULL); assert(mode != NULL);
assert(source != NULL); assert(source != NULL);
assert(reflector != NULL);
nlohmann::json json; nlohmann::json json;
writeJSON(json, action, mode, source, dgid, reflector); writeJSONNet(json, action, mode, source, dgid);
json["duration"] = duration; json["duration"] = duration;
json["loss"] = loss; json["loss"] = loss;
@@ -1331,7 +1332,26 @@ void CYSFControl::writeJSON(const char* action, const char* mode, const unsigned
WriteJSON("YSF", json); 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(action != NULL);
assert(mode != NULL); assert(mode != NULL);
@@ -1347,12 +1367,11 @@ void CYSFControl::writeJSON(nlohmann::json& json, const char* action, const char
json["dg-id"] = int(dgid); 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(action != NULL);
assert(mode != NULL); assert(mode != NULL);
assert(source != NULL); assert(source != NULL);
assert(reflector != NULL);
json["timestamp"] = CUtils::createTimestamp(); json["timestamp"] = CUtils::createTimestamp();
@@ -1362,8 +1381,6 @@ void CYSFControl::writeJSON(nlohmann::json& json, const char* action, const char
json["action"] = action; json["action"] = action;
json["mode"] = mode; json["mode"] = mode;
json["dg-id"] = int(dgid); json["dg-id"] = int(dgid);
json["reflector"] = convertBuffer(reflector);
} }
std::string CYSFControl::convertBuffer(const unsigned char* buffer) const std::string CYSFControl::convertBuffer(const unsigned char* buffer) const

View File

@@ -102,14 +102,16 @@ private:
void writeEndRF(); void writeEndRF();
void writeEndNet(); void writeEndNet();
void writeJSON(const char* action, const char* mode, const unsigned char* source, unsigned char dgid); void writeJSONRF(const char* action, const char* mode, const unsigned char* source, unsigned char dgid);
void writeJSON(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, float duration, float ber); void writeJSONRF(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, float duration, float ber);
void 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 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);
void writeJSON(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, const unsigned char* reflector);
void writeJSON(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, const unsigned char* reflector, float duration, unsigned int loss);
void writeJSON(nlohmann::json& json, const char* action, const char* mode, const unsigned char* source, unsigned char dgid); void writeJSONNet(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, const unsigned char* reflector);
void writeJSON(nlohmann::json& json, const char* action, const char* mode, const unsigned char* source, unsigned char dgid, const unsigned char* reflector); void writeJSONNet(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, float duration, unsigned int loss);
void writeJSONNet(const char* action, const char* mode, const unsigned char* source, unsigned char dgid, const unsigned char* reflector, float duration, unsigned int loss);
void writeJSONRF(nlohmann::json& json, const char* action, const char* mode, const unsigned char* source, unsigned char dgid);
void writeJSONNet(nlohmann::json& json, const char* action, const char* mode, const unsigned char* source, unsigned char dgid);
std::string convertBuffer(const unsigned char* buffer) const; std::string convertBuffer(const unsigned char* buffer) const;

View File

@@ -21,7 +21,7 @@
"ax25_pid": {"type": "string"}, "ax25_pid": {"type": "string"},
"pocsag_source": {"type": "string", "enum": ["local", "network"]}, "pocsag_source": {"type": "string", "enum": ["local", "network"]},
"pocsag_functional": {"type": "string", "enum": ["numeric", "alphanumeric", "alert_1", "alert_2"]}, "pocsag_functional": {"type": "string", "enum": ["numeric", "alphanumeric", "alert_1", "alert_2"]},
"action": {"type": "string", "enum": ["invalid", "rejected", "header", "late_entry", "end", "lost"]}, "action": {"type": "string", "enum": ["invalid", "rejected", "start", "late_entry", "end", "lost"]},
"duration": {"type": "number", "minimum": 0.0}, "duration": {"type": "number", "minimum": 0.0},
"loss": {"type": "number", "minimum": 0.0}, "loss": {"type": "number", "minimum": 0.0},
"ber": {"type": "number", "minimum": 0.0}, "ber": {"type": "number", "minimum": 0.0},
@@ -127,7 +127,6 @@
"source": {"$ref": "#/$defs/source"}, "source": {"$ref": "#/$defs/source"},
"action": {"$ref": "#/$defs/action"}, "action": {"$ref": "#/$defs/action"},
"duration": {"$ref": "#/$defs/duration"}, "duration": {"$ref": "#/$defs/duration"},
"loss": {"$ref": "#/$defs/loss"},
"ber": {"$ref": "#/$defs/ber"}, "ber": {"$ref": "#/$defs/ber"},
"rssi": { "rssi": {
"min": {"$ref": "#/$defs/rssi"}, "min": {"$ref": "#/$defs/rssi"},