mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-20 22:45:44 +08:00
Page alert commands
This commit is contained in:
@@ -2653,7 +2653,24 @@ void CMMDVMHost::remoteControl()
|
|||||||
m_pocsag->sendPageBCD(ric, text);
|
m_pocsag->sendPageBCD(ric, text);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case RCD_PAGE_A1:
|
||||||
|
if (m_pocsag != NULL) {
|
||||||
|
unsigned int ric = m_remoteControl->getArgUInt(0U);
|
||||||
|
m_pocsag->sendPageAlert1(ric);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RCD_PAGE_A2:
|
||||||
|
if (m_pocsag != NULL) {
|
||||||
|
unsigned int ric = m_remoteControl->getArgUInt(0U);
|
||||||
|
std::string text;
|
||||||
|
for (unsigned int i = 1U; i < m_remoteControl->getArgCount(); i++) {
|
||||||
|
if (i > 1U)
|
||||||
|
text += " ";
|
||||||
|
text += m_remoteControl->getArgString(i);
|
||||||
|
}
|
||||||
|
m_pocsag->sendPageAlert2(ric, text);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case RCD_CW:
|
case RCD_CW:
|
||||||
setMode(MODE_IDLE); // Force the modem to go idle so that we can send the CW text.
|
setMode(MODE_IDLE); // Force the modem to go idle so that we can send the CW text.
|
||||||
if (!m_modem->hasTX()) {
|
if (!m_modem->hasTX()) {
|
||||||
|
|||||||
@@ -148,6 +148,50 @@ void CPOCSAGControl::sendPageBCD(unsigned int ric, const std::string& text)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPOCSAGControl::sendPageAlert1(unsigned int ric)
|
||||||
|
{
|
||||||
|
if (!m_enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
POCSAGData* output = new POCSAGData;
|
||||||
|
|
||||||
|
output->m_ric = ric;
|
||||||
|
|
||||||
|
addAddress(FUNCTIONAL_ALERT1, ric, output->m_buffer);
|
||||||
|
|
||||||
|
LogDebug("Local message to %07u, func Alert1", ric);
|
||||||
|
|
||||||
|
// Ensure data is an even number of words
|
||||||
|
if ((output->m_buffer.size() % 2U) == 1U)
|
||||||
|
output->m_buffer.push_back(POCSAG_IDLE_WORD);
|
||||||
|
|
||||||
|
m_data.push_back(output);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CPOCSAGControl::sendPageAlert2(unsigned int ric, const std::string& text)
|
||||||
|
{
|
||||||
|
if (!m_enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
POCSAGData* output = new POCSAGData;
|
||||||
|
|
||||||
|
output->m_ric = ric;
|
||||||
|
output->m_text = text;
|
||||||
|
|
||||||
|
addAddress(FUNCTIONAL_ALERT2, ric, output->m_buffer);
|
||||||
|
|
||||||
|
LogDebug("Local message to %07u, func Alert2: \"%s\"", ric, text.c_str());
|
||||||
|
|
||||||
|
packASCII(text, output->m_buffer);
|
||||||
|
|
||||||
|
// Ensure data is an even number of words
|
||||||
|
if ((output->m_buffer.size() % 2U) == 1U)
|
||||||
|
output->m_buffer.push_back(POCSAG_IDLE_WORD);
|
||||||
|
|
||||||
|
m_data.push_back(output);
|
||||||
|
}
|
||||||
|
|
||||||
bool CPOCSAGControl::readNetwork()
|
bool CPOCSAGControl::readNetwork()
|
||||||
{
|
{
|
||||||
if (m_network == NULL)
|
if (m_network == NULL)
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ public:
|
|||||||
|
|
||||||
void sendPage(unsigned int ric, const std::string& text);
|
void sendPage(unsigned int ric, const std::string& text);
|
||||||
void sendPageBCD(unsigned int ric, const std::string& text);
|
void sendPageBCD(unsigned int ric, const std::string& text);
|
||||||
|
void sendPageAlert1(unsigned int ric);
|
||||||
|
void sendPageAlert2(unsigned int ric, const std::string& text);
|
||||||
|
|
||||||
unsigned int readModem(unsigned char* data);
|
unsigned int readModem(unsigned char* data);
|
||||||
|
|
||||||
|
|||||||
@@ -140,6 +140,12 @@ REMOTE_COMMAND CRemoteControl::getCommand()
|
|||||||
} else if (m_args.at(0U) == "page_bcd" && m_args.size() >= PAGE_ARGS) {
|
} else if (m_args.at(0U) == "page_bcd" && m_args.size() >= PAGE_ARGS) {
|
||||||
// BCD page command is in the form of "page_bcd <ric> <bcd message>"
|
// BCD page command is in the form of "page_bcd <ric> <bcd message>"
|
||||||
m_command = RCD_PAGE_BCD;
|
m_command = RCD_PAGE_BCD;
|
||||||
|
} else if (m_args.at(0U) == "page_a1" && m_args.size() == 2) {
|
||||||
|
// Alert1 page command is in the form of "page_a1 <ric>"
|
||||||
|
m_command = RCD_PAGE_A1;
|
||||||
|
} else if (m_args.at(0U) == "page_a2" && m_args.size() >= PAGE_ARGS) {
|
||||||
|
// Alert2 page command is in the form of "page_a2 <ric> <message>"
|
||||||
|
m_command = RCD_PAGE_A2;
|
||||||
} else if (m_args.at(0U) == "cw" && m_args.size() >= CW_ARGS) {
|
} else if (m_args.at(0U) == "cw" && m_args.size() >= CW_ARGS) {
|
||||||
// CW command is in the form of "cw <message>"
|
// CW command is in the form of "cw <message>"
|
||||||
m_command = RCD_CW;
|
m_command = RCD_CW;
|
||||||
@@ -196,6 +202,8 @@ unsigned int CRemoteControl::getArgCount() const
|
|||||||
return m_args.size() - SET_MODE_ARGS;
|
return m_args.size() - SET_MODE_ARGS;
|
||||||
case RCD_PAGE:
|
case RCD_PAGE:
|
||||||
case RCD_PAGE_BCD:
|
case RCD_PAGE_BCD:
|
||||||
|
case RCD_PAGE_A1:
|
||||||
|
case RCD_PAGE_A2:
|
||||||
return m_args.size() - 1U;
|
return m_args.size() - 1U;
|
||||||
case RCD_CW:
|
case RCD_CW:
|
||||||
return m_args.size() - 1U;
|
return m_args.size() - 1U;
|
||||||
@@ -219,6 +227,8 @@ std::string CRemoteControl::getArgString(unsigned int n) const
|
|||||||
break;
|
break;
|
||||||
case RCD_PAGE:
|
case RCD_PAGE:
|
||||||
case RCD_PAGE_BCD:
|
case RCD_PAGE_BCD:
|
||||||
|
case RCD_PAGE_A1:
|
||||||
|
case RCD_PAGE_A2:
|
||||||
n += 1U;
|
n += 1U;
|
||||||
break;
|
break;
|
||||||
case RCD_CW:
|
case RCD_CW:
|
||||||
|
|||||||
@@ -55,6 +55,8 @@ enum REMOTE_COMMAND {
|
|||||||
RCD_DISABLE_AX25,
|
RCD_DISABLE_AX25,
|
||||||
RCD_PAGE,
|
RCD_PAGE,
|
||||||
RCD_PAGE_BCD,
|
RCD_PAGE_BCD,
|
||||||
|
RCD_PAGE_A1,
|
||||||
|
RCD_PAGE_A2,
|
||||||
RCD_CW,
|
RCD_CW,
|
||||||
RCD_RELOAD,
|
RCD_RELOAD,
|
||||||
RCD_CONNECTION_STATUS,
|
RCD_CONNECTION_STATUS,
|
||||||
|
|||||||
Reference in New Issue
Block a user