Page alert commands

This commit is contained in:
Max Lapan
2022-11-26 11:04:01 +01:00
parent 8f5ff4ca05
commit 55ba1233a8
5 changed files with 76 additions and 1 deletions

View File

@@ -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()) {

View File

@@ -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)

View File

@@ -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);

View File

@@ -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:

View File

@@ -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,