Add the optional DMR network options command.

This commit is contained in:
Jonathan Naylor
2016-11-03 19:27:52 +00:00
parent 2a5162d194
commit 34538d8b3f
6 changed files with 51 additions and 1 deletions

View File

@@ -135,6 +135,7 @@ m_dmrNetworkAddress(),
m_dmrNetworkPort(0U), m_dmrNetworkPort(0U),
m_dmrNetworkLocal(0U), m_dmrNetworkLocal(0U),
m_dmrNetworkPassword(), m_dmrNetworkPassword(),
m_dmrNetworkOptions(),
m_dmrNetworkDebug(false), m_dmrNetworkDebug(false),
m_dmrNetworkJitter(300U), m_dmrNetworkJitter(300U),
m_dmrNetworkSlot1(true), m_dmrNetworkSlot1(true),
@@ -506,6 +507,8 @@ bool CConf::read()
m_dmrNetworkLocal = (unsigned int)::atoi(value); m_dmrNetworkLocal = (unsigned int)::atoi(value);
else if (::strcmp(key, "Password") == 0) else if (::strcmp(key, "Password") == 0)
m_dmrNetworkPassword = value; m_dmrNetworkPassword = value;
else if (::strcmp(key, "Options") == 0)
m_dmrNetworkOptions = 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, "Jitter") == 0) else if (::strcmp(key, "Jitter") == 0)
@@ -590,7 +593,6 @@ bool CConf::read()
m_oledBrightness = (unsigned char)::atoi(value); m_oledBrightness = (unsigned char)::atoi(value);
else if (::strcmp(key, "Brightness") == 0) else if (::strcmp(key, "Brightness") == 0)
m_oledInvert = (unsigned char)::atoi(value); m_oledInvert = (unsigned char)::atoi(value);
} else if (section == SECTION_LCDPROC) { } else if (section == SECTION_LCDPROC) {
if (::strcmp(key, "Address") == 0) if (::strcmp(key, "Address") == 0)
m_lcdprocAddress = value; m_lcdprocAddress = value;
@@ -1017,6 +1019,11 @@ std::string CConf::getDMRNetworkPassword() const
return m_dmrNetworkPassword; return m_dmrNetworkPassword;
} }
std::string CConf::getDMRNetworkOptions() const
{
return m_dmrNetworkOptions;
}
bool CConf::getDMRNetworkDebug() const bool CConf::getDMRNetworkDebug() const
{ {
return m_dmrNetworkDebug; return m_dmrNetworkDebug;

2
Conf.h
View File

@@ -136,6 +136,7 @@ public:
unsigned int getDMRNetworkPort() const; unsigned int getDMRNetworkPort() const;
unsigned int getDMRNetworkLocal() const; unsigned int getDMRNetworkLocal() const;
std::string getDMRNetworkPassword() const; std::string getDMRNetworkPassword() const;
std::string getDMRNetworkOptions() const;
bool getDMRNetworkDebug() const; bool getDMRNetworkDebug() const;
unsigned int getDMRNetworkJitter() const; unsigned int getDMRNetworkJitter() const;
bool getDMRNetworkSlot1() const; bool getDMRNetworkSlot1() const;
@@ -288,6 +289,7 @@ private:
unsigned int m_dmrNetworkPort; unsigned int m_dmrNetworkPort;
unsigned int m_dmrNetworkLocal; unsigned int m_dmrNetworkLocal;
std::string m_dmrNetworkPassword; std::string m_dmrNetworkPassword;
std::string m_dmrNetworkOptions;
bool m_dmrNetworkDebug; bool m_dmrNetworkDebug;
unsigned int m_dmrNetworkJitter; unsigned int m_dmrNetworkJitter;
bool m_dmrNetworkSlot1; bool m_dmrNetworkSlot1;

View File

@@ -52,6 +52,7 @@ m_buffer(NULL),
m_salt(NULL), m_salt(NULL),
m_streamId(NULL), m_streamId(NULL),
m_rxData(1000U, "DMR Network"), m_rxData(1000U, "DMR Network"),
m_options(),
m_callsign(), m_callsign(),
m_rxFrequency(0U), m_rxFrequency(0U),
m_txFrequency(0U), m_txFrequency(0U),
@@ -97,6 +98,11 @@ CDMRNetwork::~CDMRNetwork()
delete[] m_id; delete[] m_id;
} }
void CDMRNetwork::setOptions(const std::string& options)
{
m_options = options;
}
void CDMRNetwork::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 CDMRNetwork::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)
{ {
m_callsign = callsign; m_callsign = callsign;
@@ -362,6 +368,17 @@ void CDMRNetwork::clock(unsigned int ms)
m_retryTimer.start(); m_retryTimer.start();
break; break;
case WAITING_AUTHORISATION: case WAITING_AUTHORISATION:
if (m_options.empty()) {
writeConfig();
m_status = WAITING_CONFIG;
} else {
writeOptions();
m_status = WAITING_OPTIONS;
}
m_timeoutTimer.start();
m_retryTimer.start();
break;
case WAITING_OPTIONS:
writeConfig(); writeConfig();
m_status = WAITING_CONFIG; m_status = WAITING_CONFIG;
m_timeoutTimer.start(); m_timeoutTimer.start();
@@ -398,6 +415,9 @@ void CDMRNetwork::clock(unsigned int ms)
case WAITING_AUTHORISATION: case WAITING_AUTHORISATION:
writeAuthorisation(); writeAuthorisation();
break; break;
case WAITING_OPTIONS:
writeOptions();
break;
case WAITING_CONFIG: case WAITING_CONFIG:
writeConfig(); writeConfig();
break; break;
@@ -450,6 +470,14 @@ bool CDMRNetwork::writeAuthorisation()
return write(out, 40U); return write(out, 40U);
} }
bool CDMRNetwork::writeOptions()
{
char buffer[300U];
::sprintf(buffer, "RPTO%s", m_options.c_str());
return write((unsigned char*)buffer, (unsigned int)::strlen(buffer));
}
bool CDMRNetwork::writeConfig() bool CDMRNetwork::writeConfig()
{ {
const char* software = "MMDVM"; const char* software = "MMDVM";

View File

@@ -34,6 +34,8 @@ public:
CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, bool duplex, const char* version, bool debug, bool slot1, bool slot2, bool rssi, HW_TYPE hwType); CDMRNetwork(const std::string& address, unsigned int port, unsigned int local, unsigned int id, const std::string& password, bool duplex, const char* version, bool debug, bool slot1, bool slot2, bool rssi, HW_TYPE hwType);
~CDMRNetwork(); ~CDMRNetwork();
void setOptions(const std::string& options);
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);
bool open(); bool open();
@@ -69,6 +71,7 @@ private:
WAITING_CONNECT, WAITING_CONNECT,
WAITING_LOGIN, WAITING_LOGIN,
WAITING_AUTHORISATION, WAITING_AUTHORISATION,
WAITING_OPTIONS,
WAITING_CONFIG, WAITING_CONFIG,
RUNNING RUNNING
}; };
@@ -82,6 +85,8 @@ private:
CRingBuffer<unsigned char> m_rxData; CRingBuffer<unsigned char> m_rxData;
std::string m_options;
std::string m_callsign; std::string m_callsign;
unsigned int m_rxFrequency; unsigned int m_rxFrequency;
unsigned int m_txFrequency; unsigned int m_txFrequency;
@@ -98,6 +103,7 @@ private:
bool writeLogin(); bool writeLogin();
bool writeAuthorisation(); bool writeAuthorisation();
bool writeOptions();
bool writeConfig(); bool writeConfig();
bool writePing(); bool writePing();

View File

@@ -113,6 +113,7 @@ Port=62031
Jitter=300 Jitter=300
# Local=3350 # Local=3350
Password=PASSWORD Password=PASSWORD
# Options=
RSSI=0 RSSI=0
Slot1=1 Slot1=1
Slot2=1 Slot2=1

View File

@@ -903,6 +903,12 @@ bool CMMDVMHost::createDMRNetwork()
m_dmrNetwork = new CDMRNetwork(address, port, local, id, password, m_duplex, VERSION, debug, slot1, slot2, rssi, hwType); m_dmrNetwork = new CDMRNetwork(address, port, local, id, password, m_duplex, VERSION, debug, slot1, slot2, rssi, hwType);
std::string options = m_conf.getDMRNetworkOptions();
if (!options.empty()) {
LogInfo(" Options: %s", options.c_str());
m_dmrNetwork->setOptions(options);
}
unsigned int rxFrequency = m_conf.getRxFrequency(); unsigned int rxFrequency = m_conf.getRxFrequency();
unsigned int txFrequency = m_conf.getTxFrequency(); unsigned int txFrequency = m_conf.getTxFrequency();
unsigned int power = m_conf.getPower(); unsigned int power = m_conf.getPower();