mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-24 01:25:41 +08:00
Add RSSI logging to D-Star and YSF.
This commit is contained in:
@@ -36,7 +36,7 @@ bool CallsignCompare(const std::string& arg, const unsigned char* my)
|
|||||||
|
|
||||||
// #define DUMP_DSTAR
|
// #define DUMP_DSTAR
|
||||||
|
|
||||||
CDStarControl::CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, const std::vector<std::string>& blackList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex) :
|
CDStarControl::CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, const std::vector<std::string>& blackList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, int rssiMultiplier, int rssiOffset) :
|
||||||
m_callsign(NULL),
|
m_callsign(NULL),
|
||||||
m_gateway(NULL),
|
m_gateway(NULL),
|
||||||
m_selfOnly(selfOnly),
|
m_selfOnly(selfOnly),
|
||||||
@@ -70,6 +70,8 @@ m_rfErrs(0U),
|
|||||||
m_netErrs(0U),
|
m_netErrs(0U),
|
||||||
m_lastFrame(NULL),
|
m_lastFrame(NULL),
|
||||||
m_lastFrameValid(false),
|
m_lastFrameValid(false),
|
||||||
|
m_rssiMultiplier(rssiMultiplier),
|
||||||
|
m_rssiOffset(rssiOffset),
|
||||||
m_fp(NULL)
|
m_fp(NULL)
|
||||||
{
|
{
|
||||||
assert(display != NULL);
|
assert(display != NULL);
|
||||||
@@ -121,6 +123,15 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Have we got RSSI bytes on the end?
|
||||||
|
if (len == (DSTAR_FRAME_LENGTH_BYTES + 3U) && m_rssiMultiplier != 0) {
|
||||||
|
uint16_t rssi = 0U;
|
||||||
|
rssi |= (data[13U] << 8) & 0xFF00U;
|
||||||
|
rssi |= (data[14U] << 0) & 0x00FFU;
|
||||||
|
signed char m_rssi = (rssi - m_rssiOffset) / m_rssiMultiplier;
|
||||||
|
LogDebug("D-Star, raw RSSI: %u, reported RSSI: %d dBm", rssi, m_rssi);
|
||||||
|
}
|
||||||
|
|
||||||
if (type == TAG_HEADER) {
|
if (type == TAG_HEADER) {
|
||||||
CDStarHeader header(data + 1U);
|
CDStarHeader header(data + 1U);
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
class CDStarControl {
|
class CDStarControl {
|
||||||
public:
|
public:
|
||||||
CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, const std::vector<std::string>& blackList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex);
|
CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, const std::vector<std::string>& blackList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, int rssiMultiplier, int rssiOffset);
|
||||||
~CDStarControl();
|
~CDStarControl();
|
||||||
|
|
||||||
bool writeModem(unsigned char* data, unsigned int len);
|
bool writeModem(unsigned char* data, unsigned int len);
|
||||||
@@ -79,6 +79,8 @@ private:
|
|||||||
unsigned int m_netErrs;
|
unsigned int m_netErrs;
|
||||||
unsigned char* m_lastFrame;
|
unsigned char* m_lastFrame;
|
||||||
bool m_lastFrameValid;
|
bool m_lastFrameValid;
|
||||||
|
int m_rssiMultiplier;
|
||||||
|
int m_rssiOffset;
|
||||||
FILE* m_fp;
|
FILE* m_fp;
|
||||||
|
|
||||||
void writeNetwork();
|
void writeNetwork();
|
||||||
|
|||||||
@@ -273,14 +273,22 @@ int CMMDVMHost::run()
|
|||||||
std::string module = m_conf.getDStarModule();
|
std::string module = m_conf.getDStarModule();
|
||||||
bool selfOnly = m_conf.getDStarSelfOnly();
|
bool selfOnly = m_conf.getDStarSelfOnly();
|
||||||
std::vector<std::string> blackList = m_conf.getDStarBlackList();
|
std::vector<std::string> blackList = m_conf.getDStarBlackList();
|
||||||
|
int rssiMultiplier = m_conf.getModemRSSIMultiplier();
|
||||||
|
int rssiOffset = m_conf.getModemRSSIOffset();
|
||||||
|
|
||||||
LogInfo("D-Star Parameters");
|
LogInfo("D-Star Parameters");
|
||||||
LogInfo(" Module: %s", module.c_str());
|
LogInfo(" Module: %s", module.c_str());
|
||||||
LogInfo(" Self Only: %s", selfOnly ? "yes" : "no");
|
LogInfo(" Self Only: %s", selfOnly ? "yes" : "no");
|
||||||
|
|
||||||
if (blackList.size() > 0U)
|
if (blackList.size() > 0U)
|
||||||
LogInfo(" Black List: %u", blackList.size());
|
LogInfo(" Black List: %u", blackList.size());
|
||||||
|
|
||||||
dstar = new CDStarControl(m_callsign, module, selfOnly, blackList, m_dstarNetwork, m_display, m_timeout, m_duplex);
|
if (rssiMultiplier != 0) {
|
||||||
|
LogInfo(" RSSI Multiplier: %d", rssiMultiplier);
|
||||||
|
LogInfo(" RSSI Offset: %d", rssiOffset);
|
||||||
|
}
|
||||||
|
|
||||||
|
dstar = new CDStarControl(m_callsign, module, selfOnly, blackList, m_dstarNetwork, m_display, m_timeout, m_duplex, rssiMultiplier, rssiOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
CDMRControl* dmr = NULL;
|
CDMRControl* dmr = NULL;
|
||||||
@@ -352,8 +360,19 @@ int CMMDVMHost::run()
|
|||||||
}
|
}
|
||||||
|
|
||||||
CYSFControl* ysf = NULL;
|
CYSFControl* ysf = NULL;
|
||||||
if (m_ysfEnabled)
|
if (m_ysfEnabled) {
|
||||||
ysf = new CYSFControl(m_callsign, m_ysfNetwork, m_display, m_timeout, m_duplex);
|
int rssiMultiplier = m_conf.getModemRSSIMultiplier();
|
||||||
|
int rssiOffset = m_conf.getModemRSSIOffset();
|
||||||
|
|
||||||
|
LogInfo("YSF Parameters");
|
||||||
|
|
||||||
|
if (rssiMultiplier != 0) {
|
||||||
|
LogInfo(" RSSI Multiplier: %d", rssiMultiplier);
|
||||||
|
LogInfo(" RSSI Offset: %d", rssiOffset);
|
||||||
|
}
|
||||||
|
|
||||||
|
ysf = new CYSFControl(m_callsign, m_ysfNetwork, m_display, m_timeout, m_duplex, rssiMultiplier, rssiOffset);
|
||||||
|
}
|
||||||
|
|
||||||
setMode(MODE_IDLE);
|
setMode(MODE_IDLE);
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
// #define DUMP_YSF
|
// #define DUMP_YSF
|
||||||
|
|
||||||
CYSFControl::CYSFControl(const std::string& callsign, CYSFNetwork* network, CDisplay* display, unsigned int timeout, bool duplex) :
|
CYSFControl::CYSFControl(const std::string& callsign, CYSFNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, int rssiMultiplier, int rssiOffset) :
|
||||||
m_network(network),
|
m_network(network),
|
||||||
m_display(display),
|
m_display(display),
|
||||||
m_duplex(duplex),
|
m_duplex(duplex),
|
||||||
@@ -53,6 +53,8 @@ m_lastMode(YSF_DT_VOICE_FR_MODE),
|
|||||||
m_netN(0U),
|
m_netN(0U),
|
||||||
m_rfPayload(),
|
m_rfPayload(),
|
||||||
m_netPayload(),
|
m_netPayload(),
|
||||||
|
m_rssiMultiplier(rssiMultiplier),
|
||||||
|
m_rssiOffset(rssiOffset),
|
||||||
m_fp(NULL)
|
m_fp(NULL)
|
||||||
{
|
{
|
||||||
assert(display != NULL);
|
assert(display != NULL);
|
||||||
@@ -90,6 +92,15 @@ bool CYSFControl::writeModem(unsigned char *data, unsigned int len)
|
|||||||
if (type == TAG_LOST)
|
if (type == TAG_LOST)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// Have we got RSSI bytes on the end?
|
||||||
|
if (len == (YSF_FRAME_LENGTH_BYTES + 4U) && m_rssiMultiplier != 0) {
|
||||||
|
uint16_t rssi = 0U;
|
||||||
|
rssi |= (data[122U] << 8) & 0xFF00U;
|
||||||
|
rssi |= (data[123U] << 0) & 0x00FFU;
|
||||||
|
signed char m_rssi = (rssi - m_rssiOffset) / m_rssiMultiplier;
|
||||||
|
LogDebug("YSF, raw RSSI: %u, reported RSSI: %d dBm", rssi, m_rssi);
|
||||||
|
}
|
||||||
|
|
||||||
CYSFFICH fich;
|
CYSFFICH fich;
|
||||||
bool valid = fich.decode(data + 2U);
|
bool valid = fich.decode(data + 2U);
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
class CYSFControl {
|
class CYSFControl {
|
||||||
public:
|
public:
|
||||||
CYSFControl(const std::string& callsign, CYSFNetwork* network, CDisplay* display, unsigned int timeout, bool duplex);
|
CYSFControl(const std::string& callsign, CYSFNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, int rssiMultiplier, int rssiOffset);
|
||||||
~CYSFControl();
|
~CYSFControl();
|
||||||
|
|
||||||
bool writeModem(unsigned char* data, unsigned int len);
|
bool writeModem(unsigned char* data, unsigned int len);
|
||||||
@@ -71,6 +71,8 @@ private:
|
|||||||
unsigned char m_netN;
|
unsigned char m_netN;
|
||||||
CYSFPayload m_rfPayload;
|
CYSFPayload m_rfPayload;
|
||||||
CYSFPayload m_netPayload;
|
CYSFPayload m_netPayload;
|
||||||
|
int m_rssiMultiplier;
|
||||||
|
int m_rssiOffset;
|
||||||
FILE* m_fp;
|
FILE* m_fp;
|
||||||
|
|
||||||
void writeQueueRF(const unsigned char* data);
|
void writeQueueRF(const unsigned char* data);
|
||||||
|
|||||||
Reference in New Issue
Block a user