mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-21 15:09:23 +08:00
Allow for the disabling of individual slots from the network.
This commit is contained in:
16
Conf.cpp
16
Conf.cpp
@@ -85,6 +85,8 @@ m_dmrNetworkAddress(),
|
|||||||
m_dmrNetworkPort(0U),
|
m_dmrNetworkPort(0U),
|
||||||
m_dmrNetworkPassword(),
|
m_dmrNetworkPassword(),
|
||||||
m_dmrNetworkDebug(false),
|
m_dmrNetworkDebug(false),
|
||||||
|
m_dmrNetworkSlot1(true),
|
||||||
|
m_dmrNetworkSlot2(true),
|
||||||
m_fusionNetworkEnabled(false),
|
m_fusionNetworkEnabled(false),
|
||||||
m_fusionNetworkAddress(),
|
m_fusionNetworkAddress(),
|
||||||
m_fusionNetworkPort(0U),
|
m_fusionNetworkPort(0U),
|
||||||
@@ -241,6 +243,10 @@ bool CConf::read()
|
|||||||
m_dmrNetworkPassword = value;
|
m_dmrNetworkPassword = value;
|
||||||
else if (::strcmp(key, "Debug") == 0)
|
else if (::strcmp(key, "Debug") == 0)
|
||||||
m_dmrNetworkDebug = ::atoi(value) == 1;
|
m_dmrNetworkDebug = ::atoi(value) == 1;
|
||||||
|
else if (::strcmp(key, "Slot1") == 0)
|
||||||
|
m_dmrNetworkSlot1 = ::atoi(value) == 1;
|
||||||
|
else if (::strcmp(key, "Slot2") == 0)
|
||||||
|
m_dmrNetworkSlot2 = ::atoi(value) == 1;
|
||||||
} else if (section == SECTION_FUSION_NETWORK) {
|
} else if (section == SECTION_FUSION_NETWORK) {
|
||||||
if (::strcmp(key, "Enable") == 0)
|
if (::strcmp(key, "Enable") == 0)
|
||||||
m_fusionNetworkEnabled = ::atoi(value) == 1;
|
m_fusionNetworkEnabled = ::atoi(value) == 1;
|
||||||
@@ -476,6 +482,16 @@ bool CConf::getDMRNetworkDebug() const
|
|||||||
return m_dmrNetworkDebug;
|
return m_dmrNetworkDebug;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CConf::getDMRNetworkSlot1() const
|
||||||
|
{
|
||||||
|
return m_dmrNetworkSlot1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CConf::getDMRNetworkSlot2() const
|
||||||
|
{
|
||||||
|
return m_dmrNetworkSlot2;
|
||||||
|
}
|
||||||
|
|
||||||
bool CConf::getFusionNetworkEnabled() const
|
bool CConf::getFusionNetworkEnabled() const
|
||||||
{
|
{
|
||||||
return m_fusionNetworkEnabled;
|
return m_fusionNetworkEnabled;
|
||||||
|
|||||||
4
Conf.h
4
Conf.h
@@ -89,6 +89,8 @@ public:
|
|||||||
unsigned int getDMRNetworkPort() const;
|
unsigned int getDMRNetworkPort() const;
|
||||||
std::string getDMRNetworkPassword() const;
|
std::string getDMRNetworkPassword() const;
|
||||||
bool getDMRNetworkDebug() const;
|
bool getDMRNetworkDebug() const;
|
||||||
|
bool getDMRNetworkSlot1() const;
|
||||||
|
bool getDMRNetworkSlot2() const;
|
||||||
|
|
||||||
// The System Fusion Network section
|
// The System Fusion Network section
|
||||||
bool getFusionNetworkEnabled() const;
|
bool getFusionNetworkEnabled() const;
|
||||||
@@ -152,6 +154,8 @@ private:
|
|||||||
unsigned int m_dmrNetworkPort;
|
unsigned int m_dmrNetworkPort;
|
||||||
std::string m_dmrNetworkPassword;
|
std::string m_dmrNetworkPassword;
|
||||||
bool m_dmrNetworkDebug;
|
bool m_dmrNetworkDebug;
|
||||||
|
bool m_dmrNetworkSlot1;
|
||||||
|
bool m_dmrNetworkSlot2;
|
||||||
|
|
||||||
bool m_fusionNetworkEnabled;
|
bool m_fusionNetworkEnabled;
|
||||||
std::string m_fusionNetworkAddress;
|
std::string m_fusionNetworkAddress;
|
||||||
|
|||||||
17
DMRIPSC.cpp
17
DMRIPSC.cpp
@@ -30,7 +30,7 @@ const unsigned int BUFFER_LENGTH = 500U;
|
|||||||
const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 53U;
|
const unsigned int HOMEBREW_DATA_PACKET_LENGTH = 53U;
|
||||||
|
|
||||||
|
|
||||||
CDMRIPSC::CDMRIPSC(const std::string& address, unsigned int port, unsigned int id, const std::string& password, const char* software, const char* version, bool debug) :
|
CDMRIPSC::CDMRIPSC(const std::string& address, unsigned int port, unsigned int id, const std::string& password, const char* software, const char* version, bool debug, bool slot1, bool slot2) :
|
||||||
m_address(),
|
m_address(),
|
||||||
m_port(port),
|
m_port(port),
|
||||||
m_id(NULL),
|
m_id(NULL),
|
||||||
@@ -40,6 +40,8 @@ m_software(software),
|
|||||||
m_version(version),
|
m_version(version),
|
||||||
m_socket(),
|
m_socket(),
|
||||||
m_enabled(false),
|
m_enabled(false),
|
||||||
|
m_slot1(slot1),
|
||||||
|
m_slot2(slot2),
|
||||||
m_status(DISCONNECTED),
|
m_status(DISCONNECTED),
|
||||||
m_retryTimer(1000U, 10U),
|
m_retryTimer(1000U, 10U),
|
||||||
m_timeoutTimer(1000U, 600U),
|
m_timeoutTimer(1000U, 600U),
|
||||||
@@ -159,6 +161,12 @@ bool CDMRIPSC::read(CDMRData& data)
|
|||||||
|
|
||||||
unsigned int slotNo = (m_buffer[15U] & 0x80U) == 0x80U ? 2U : 1U;
|
unsigned int slotNo = (m_buffer[15U] & 0x80U) == 0x80U ? 2U : 1U;
|
||||||
|
|
||||||
|
// Individual slot disabling
|
||||||
|
if (slotNo == 1U && !m_slot1)
|
||||||
|
return false;
|
||||||
|
if (slotNo == 2U && !m_slot2)
|
||||||
|
return false;
|
||||||
|
|
||||||
FLCO flco = (m_buffer[15U] & 0x40U) == 0x40U ? FLCO_USER_USER : FLCO_GROUP;
|
FLCO flco = (m_buffer[15U] & 0x40U) == 0x40U ? FLCO_USER_USER : FLCO_GROUP;
|
||||||
|
|
||||||
data.setSeqNo(seqNo);
|
data.setSeqNo(seqNo);
|
||||||
@@ -215,6 +223,13 @@ bool CDMRIPSC::write(const CDMRData& data)
|
|||||||
::memcpy(buffer + 11U, m_id, 4U);
|
::memcpy(buffer + 11U, m_id, 4U);
|
||||||
|
|
||||||
unsigned int slotNo = data.getSlotNo();
|
unsigned int slotNo = data.getSlotNo();
|
||||||
|
|
||||||
|
// Individual slot disabling
|
||||||
|
if (slotNo == 1U && !m_slot1)
|
||||||
|
return false;
|
||||||
|
if (slotNo == 2U && !m_slot2)
|
||||||
|
return false;
|
||||||
|
|
||||||
buffer[15U] = slotNo == 1U ? 0x00U : 0x80U;
|
buffer[15U] = slotNo == 1U ? 0x00U : 0x80U;
|
||||||
|
|
||||||
FLCO flco = data.getFLCO();
|
FLCO flco = data.getFLCO();
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
class CDMRIPSC
|
class CDMRIPSC
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CDMRIPSC(const std::string& address, unsigned int port, unsigned int id, const std::string& password, const char* software, const char* version, bool debug);
|
CDMRIPSC(const std::string& address, unsigned int port, unsigned int id, const std::string& password, const char* software, const char* version, bool debug, bool slot1, bool slot2);
|
||||||
~CDMRIPSC();
|
~CDMRIPSC();
|
||||||
|
|
||||||
void setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url);
|
void setConfig(const std::string& callsign, unsigned int rxFrequency, unsigned int txFrequency, unsigned int power, unsigned int colorCode, float latitude, float longitude, int height, const std::string& location, const std::string& description, const std::string& url);
|
||||||
@@ -59,6 +59,8 @@ private:
|
|||||||
const char* m_version;
|
const char* m_version;
|
||||||
CUDPSocket m_socket;
|
CUDPSocket m_socket;
|
||||||
bool m_enabled;
|
bool m_enabled;
|
||||||
|
bool m_slot1;
|
||||||
|
bool m_slot2;
|
||||||
|
|
||||||
enum STATUS {
|
enum STATUS {
|
||||||
DISCONNECTED,
|
DISCONNECTED,
|
||||||
|
|||||||
@@ -59,6 +59,8 @@ Enable=1
|
|||||||
Address=44.131.4.1
|
Address=44.131.4.1
|
||||||
Port=62031
|
Port=62031
|
||||||
Password=PASSWORD
|
Password=PASSWORD
|
||||||
|
Slot1=1
|
||||||
|
Slot2=1
|
||||||
Debug=1
|
Debug=1
|
||||||
|
|
||||||
[System Fusion Network]
|
[System Fusion Network]
|
||||||
|
|||||||
@@ -441,12 +441,16 @@ bool CMMDVMHost::createDMRNetwork()
|
|||||||
unsigned int id = m_conf.getDMRId();
|
unsigned int id = m_conf.getDMRId();
|
||||||
std::string password = m_conf.getDMRNetworkPassword();
|
std::string password = m_conf.getDMRNetworkPassword();
|
||||||
bool debug = m_conf.getDMRNetworkDebug();
|
bool debug = m_conf.getDMRNetworkDebug();
|
||||||
|
bool slot1 = m_conf.getDMRNetworkSlot1();
|
||||||
|
bool slot2 = m_conf.getDMRNetworkSlot2();
|
||||||
|
|
||||||
LogInfo("DMR Network Parameters");
|
LogInfo("DMR Network Parameters");
|
||||||
LogInfo(" Address: %s", address.c_str());
|
LogInfo(" Address: %s", address.c_str());
|
||||||
LogInfo(" Port: %u", port);
|
LogInfo(" Port: %u", port);
|
||||||
|
LogInfo(" Slot 1: %s", slot1 ? "enabled" : "disabled");
|
||||||
|
LogInfo(" Slot 2: %s", slot2 ? "enabled" : "disabled");
|
||||||
|
|
||||||
m_dmrNetwork = new CDMRIPSC(address, port, id, password, VERSION, "MMDVM", debug);
|
m_dmrNetwork = new CDMRIPSC(address, port, id, password, VERSION, "MMDVM", debug, slot1, slot2);
|
||||||
|
|
||||||
std::string callsign = m_conf.getCallsign();
|
std::string callsign = m_conf.getCallsign();
|
||||||
unsigned int rxFrequency = m_conf.getRxFrequency();
|
unsigned int rxFrequency = m_conf.getRxFrequency();
|
||||||
|
|||||||
Reference in New Issue
Block a user