mirror of
https://github.com/ShaYmez/MMDVM_CM.git
synced 2025-05-29 04:22:26 -04:00
Add support functions for TG<->YSF list mapping (WIP), DMR2YSF
This commit is contained in:
parent
49e32db403
commit
b9da3df816
@ -677,7 +677,7 @@ int CDMR2YSF::run()
|
||||
// Net frame counter
|
||||
m_ysfFrame[34U] = (ysf_cnt & 0x7FU) << 1;
|
||||
|
||||
// Send data to MMDVMHost
|
||||
// Send data
|
||||
m_ysfNetwork->write(m_ysfFrame);
|
||||
|
||||
ysf_cnt++;
|
||||
@ -769,6 +769,84 @@ std::string CDMR2YSF::getSrcYSF(const unsigned char* buffer)
|
||||
return trimmed;
|
||||
}
|
||||
|
||||
void CDMR2YSF::sendYSFConn(unsigned int id)
|
||||
{
|
||||
unsigned char data[] = {0x00U, 0x5DU, 0x23U, 0x5FU, 0x24U, 0x20U, 0x20U, 0x20U, 0x20U,
|
||||
0x20U, 0x20U, 0x20U, 0x20U, 0x20U, 0x20U, 0x03U, 0x00U, 0x00U,
|
||||
0x00U, 0x00U};
|
||||
|
||||
if (id > 99999U)
|
||||
return;
|
||||
|
||||
sprintf((char*) (data + 5U), "%05u", id);
|
||||
data[16U] = CCRC::addCRC(data, 16U);
|
||||
|
||||
// Setup net header
|
||||
::memcpy(m_ysfFrame + 0U, "YSFD", 4U);
|
||||
::memcpy(m_ysfFrame + 4U, m_ysfNetwork->getCallsign().c_str(), YSF_CALLSIGN_LENGTH);
|
||||
::memcpy(m_ysfFrame + 14U, m_netSrc.c_str(), YSF_CALLSIGN_LENGTH);
|
||||
::memcpy(m_ysfFrame + 24U, "ALL ", YSF_CALLSIGN_LENGTH);
|
||||
m_ysfFrame[34U] = 0U;
|
||||
|
||||
CSync::addYSFSync(m_ysfFrame + 35U);
|
||||
|
||||
// Set the FICH
|
||||
CYSFFICH fich;
|
||||
fich.setFI(YSF_FI_COMMUNICATIONS);
|
||||
fich.setCS(2U);
|
||||
fich.setFN(1U);
|
||||
fich.setFT(1U);
|
||||
fich.setDev(0U);
|
||||
fich.setMR(2U);
|
||||
fich.setDT(YSF_DT_DATA_FR_MODE);
|
||||
fich.setSQL(0U);
|
||||
fich.setSQ(0U);
|
||||
fich.encode(m_ysfFrame + 35U);
|
||||
|
||||
CYSFPayload payload;
|
||||
payload.writeDataFRModeData2(data, m_ysfFrame + 35U);
|
||||
|
||||
m_ysfNetwork->write(m_ysfFrame);
|
||||
|
||||
LogMessage("Sending YSF connect command to reflector ID: %u", id);
|
||||
}
|
||||
|
||||
void CDMR2YSF::sendYSFDisc()
|
||||
{
|
||||
unsigned char data[] = {0x00U, 0x5DU, 0x2AU, 0x5FU, 0x24U, 0x20U, 0x20U, 0x20U, 0x20U,
|
||||
0x20U, 0x20U, 0x20U, 0x20U, 0x20U, 0x20U, 0x03U, 0x4DU, 0x00U,
|
||||
0x00U, 0x00U};
|
||||
|
||||
// Setup net header
|
||||
::memcpy(m_ysfFrame + 0U, "YSFD", 4U);
|
||||
::memcpy(m_ysfFrame + 4U, m_ysfNetwork->getCallsign().c_str(), YSF_CALLSIGN_LENGTH);
|
||||
::memcpy(m_ysfFrame + 14U, m_netSrc.c_str(), YSF_CALLSIGN_LENGTH);
|
||||
::memcpy(m_ysfFrame + 24U, "ALL ", YSF_CALLSIGN_LENGTH);
|
||||
m_ysfFrame[34U] = 0U;
|
||||
|
||||
CSync::addYSFSync(m_ysfFrame + 35U);
|
||||
|
||||
// Set the FICH
|
||||
CYSFFICH fich;
|
||||
fich.setFI(YSF_FI_COMMUNICATIONS);
|
||||
fich.setCS(2U);
|
||||
fich.setFN(1U);
|
||||
fich.setFT(1U);
|
||||
fich.setDev(0U);
|
||||
fich.setMR(2U);
|
||||
fich.setDT(YSF_DT_DATA_FR_MODE);
|
||||
fich.setSQL(0U);
|
||||
fich.setSQ(0U);
|
||||
fich.encode(m_ysfFrame + 35U);
|
||||
|
||||
CYSFPayload payload;
|
||||
payload.writeDataFRModeData2(data, m_ysfFrame + 35U);
|
||||
|
||||
m_ysfNetwork->write(m_ysfFrame);
|
||||
|
||||
LogMessage("Sending YSF disconnect command");
|
||||
}
|
||||
|
||||
bool CDMR2YSF::createMMDVM()
|
||||
{
|
||||
std::string rptAddress = m_conf.getDMRRptAddress();
|
||||
|
@ -80,6 +80,8 @@ private:
|
||||
|
||||
unsigned int findYSFID(std::string cs, bool showdst);
|
||||
std::string getSrcYSF(const unsigned char* source);
|
||||
void sendYSFConn(unsigned int id);
|
||||
void sendYSFDisc();
|
||||
bool createMMDVM();
|
||||
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user