mirror of
https://github.com/ShaYmez/MMDVM_CM.git
synced 2025-06-02 06:12:24 -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
|
// Net frame counter
|
||||||
m_ysfFrame[34U] = (ysf_cnt & 0x7FU) << 1;
|
m_ysfFrame[34U] = (ysf_cnt & 0x7FU) << 1;
|
||||||
|
|
||||||
// Send data to MMDVMHost
|
// Send data
|
||||||
m_ysfNetwork->write(m_ysfFrame);
|
m_ysfNetwork->write(m_ysfFrame);
|
||||||
|
|
||||||
ysf_cnt++;
|
ysf_cnt++;
|
||||||
@ -769,6 +769,84 @@ std::string CDMR2YSF::getSrcYSF(const unsigned char* buffer)
|
|||||||
return trimmed;
|
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()
|
bool CDMR2YSF::createMMDVM()
|
||||||
{
|
{
|
||||||
std::string rptAddress = m_conf.getDMRRptAddress();
|
std::string rptAddress = m_conf.getDMRRptAddress();
|
||||||
|
@ -80,6 +80,8 @@ private:
|
|||||||
|
|
||||||
unsigned int findYSFID(std::string cs, bool showdst);
|
unsigned int findYSFID(std::string cs, bool showdst);
|
||||||
std::string getSrcYSF(const unsigned char* source);
|
std::string getSrcYSF(const unsigned char* source);
|
||||||
|
void sendYSFConn(unsigned int id);
|
||||||
|
void sendYSFDisc();
|
||||||
bool createMMDVM();
|
bool createMMDVM();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user