Get the mode switching right.
This commit is contained in:
parent
810c167a20
commit
2f8c8fbba3
1 changed files with 56 additions and 43 deletions
|
@ -162,22 +162,20 @@ int CMMDVMHost::run()
|
||||||
|
|
||||||
len = m_modem->readDStarData(data);
|
len = m_modem->readDStarData(data);
|
||||||
if (dstar != NULL && len > 0U) {
|
if (dstar != NULL && len > 0U) {
|
||||||
if (mode == MODE_IDLE && (data[0U] == TAG_HEADER || data[0U] == TAG_DATA)) {
|
if (mode == MODE_IDLE) {
|
||||||
LogMessage("Mode set to D-Star");
|
LogMessage("Mode set to D-Star");
|
||||||
mode = MODE_DSTAR;
|
mode = MODE_DSTAR;
|
||||||
m_display->setDStar();
|
m_display->setDStar();
|
||||||
m_modem->setMode(MODE_DSTAR);
|
m_modem->setMode(MODE_DSTAR);
|
||||||
modeTimer.start();
|
if (m_dmrNetwork != NULL)
|
||||||
|
m_dmrNetwork->enable(false);
|
||||||
}
|
}
|
||||||
if (mode != MODE_DSTAR) {
|
|
||||||
LogWarning("D-Star data received when in mode %u", mode);
|
if (mode == MODE_DSTAR) {
|
||||||
} else {
|
|
||||||
if (data[0U] == TAG_HEADER || data[0U] == TAG_DATA || data[0U] == TAG_EOT) {
|
|
||||||
dstar->writeData(data, len);
|
dstar->writeData(data, len);
|
||||||
modeTimer.start();
|
modeTimer.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
len = m_modem->readDMRData1(data);
|
len = m_modem->readDMRData1(data);
|
||||||
if (dmr != NULL && len > 0U) {
|
if (dmr != NULL && len > 0U) {
|
||||||
|
@ -195,8 +193,6 @@ int CMMDVMHost::run()
|
||||||
dmr->writeModemSlot1(data);
|
dmr->writeModemSlot1(data);
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconTimer.stop();
|
||||||
modeTimer.start();
|
modeTimer.start();
|
||||||
} else {
|
|
||||||
LogWarning("DMR data received when in mode %u", mode);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,30 +212,25 @@ int CMMDVMHost::run()
|
||||||
dmr->writeModemSlot2(data);
|
dmr->writeModemSlot2(data);
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconTimer.stop();
|
||||||
modeTimer.start();
|
modeTimer.start();
|
||||||
} else {
|
|
||||||
LogWarning("DMR data received when in mode %u", mode);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
len = m_modem->readYSFData(data);
|
len = m_modem->readYSFData(data);
|
||||||
if (ysf != NULL && len > 0U) {
|
if (ysf != NULL && len > 0U) {
|
||||||
if (mode == MODE_IDLE && data[0U] == TAG_DATA) {
|
if (mode == MODE_IDLE) {
|
||||||
LogMessage("Mode set to System Fusion");
|
LogMessage("Mode set to System Fusion");
|
||||||
mode = MODE_YSF;
|
mode = MODE_YSF;
|
||||||
m_display->setFusion();
|
m_display->setFusion();
|
||||||
m_modem->setMode(MODE_YSF);
|
m_modem->setMode(MODE_YSF);
|
||||||
modeTimer.start();
|
if (m_dmrNetwork != NULL)
|
||||||
|
m_dmrNetwork->enable(false);
|
||||||
}
|
}
|
||||||
if (mode != MODE_YSF) {
|
|
||||||
LogWarning("System Fusion data received when in mode %u", mode);
|
if (mode == MODE_YSF) {
|
||||||
} else {
|
|
||||||
if (data[0U] == TAG_DATA) {
|
|
||||||
data[1U] = 0x00U; // FICH digest
|
|
||||||
ysf->writeData(data, len);
|
ysf->writeData(data, len);
|
||||||
modeTimer.start();
|
modeTimer.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (modeTimer.isRunning() && modeTimer.hasExpired()) {
|
if (modeTimer.isRunning() && modeTimer.hasExpired()) {
|
||||||
LogMessage("Mode set to Idle");
|
LogMessage("Mode set to Idle");
|
||||||
|
@ -250,33 +241,46 @@ int CMMDVMHost::run()
|
||||||
mode = MODE_IDLE;
|
mode = MODE_IDLE;
|
||||||
m_display->setIdle();
|
m_display->setIdle();
|
||||||
m_modem->setMode(MODE_IDLE);
|
m_modem->setMode(MODE_IDLE);
|
||||||
|
|
||||||
|
if (m_dmrNetwork != NULL)
|
||||||
|
m_dmrNetwork->enable(true);
|
||||||
|
|
||||||
modeTimer.stop();
|
modeTimer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dstar != NULL) {
|
if (dstar != NULL) {
|
||||||
ret = dstar->hasData();
|
|
||||||
if (ret) {
|
|
||||||
ret = m_modem->hasDStarSpace();
|
ret = m_modem->hasDStarSpace();
|
||||||
if (ret) {
|
if (ret) {
|
||||||
len = dstar->readData(data);
|
len = dstar->readData(data);
|
||||||
if (mode != MODE_DSTAR) {
|
|
||||||
LogWarning("D-Star echo data received when in mode %u", mode);
|
if (len > 0U && mode != MODE_DSTAR) {
|
||||||
} else {
|
LogMessage("Mode set to D-Star");
|
||||||
|
mode = MODE_DSTAR;
|
||||||
|
m_display->setDStar();
|
||||||
|
m_modem->setMode(MODE_DSTAR);
|
||||||
|
if (m_dmrNetwork != NULL)
|
||||||
|
m_dmrNetwork->enable(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len > 0U && mode == MODE_DSTAR) {
|
||||||
m_modem->writeDStarData(data, len);
|
m_modem->writeDStarData(data, len);
|
||||||
modeTimer.start();
|
modeTimer.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (dmr != NULL) {
|
if (dmr != NULL) {
|
||||||
ret = m_modem->hasDMRSpace1();
|
ret = m_modem->hasDMRSpace1();
|
||||||
if (ret) {
|
if (ret) {
|
||||||
len = dmr->readModemSlot1(data);
|
len = dmr->readModemSlot1(data);
|
||||||
|
|
||||||
if (len > 0U && mode == MODE_IDLE) {
|
if (len > 0U && mode == MODE_IDLE) {
|
||||||
|
LogMessage("Mode set to DMR");
|
||||||
|
m_modem->setMode(MODE_DMR);
|
||||||
m_display->setDMR();
|
m_display->setDMR();
|
||||||
mode = MODE_DMR;
|
mode = MODE_DMR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (len > 0U && mode == MODE_DMR) {
|
if (len > 0U && mode == MODE_DMR) {
|
||||||
m_modem->writeDMRData1(data, len);
|
m_modem->writeDMRData1(data, len);
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconTimer.stop();
|
||||||
|
@ -287,10 +291,14 @@ int CMMDVMHost::run()
|
||||||
ret = m_modem->hasDMRSpace2();
|
ret = m_modem->hasDMRSpace2();
|
||||||
if (ret) {
|
if (ret) {
|
||||||
len = dmr->readModemSlot2(data);
|
len = dmr->readModemSlot2(data);
|
||||||
|
|
||||||
if (len > 0U && mode == MODE_IDLE) {
|
if (len > 0U && mode == MODE_IDLE) {
|
||||||
|
LogMessage("Mode set to DMR");
|
||||||
|
m_modem->setMode(MODE_DMR);
|
||||||
m_display->setDMR();
|
m_display->setDMR();
|
||||||
mode = MODE_DMR;
|
mode = MODE_DMR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (len > 0U && mode == MODE_DMR) {
|
if (len > 0U && mode == MODE_DMR) {
|
||||||
m_modem->writeDMRData2(data, len);
|
m_modem->writeDMRData2(data, len);
|
||||||
dmrBeaconTimer.stop();
|
dmrBeaconTimer.stop();
|
||||||
|
@ -300,20 +308,25 @@ int CMMDVMHost::run()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ysf != NULL) {
|
if (ysf != NULL) {
|
||||||
ret = ysf->hasData();
|
|
||||||
if (ret) {
|
|
||||||
ret = m_modem->hasYSFSpace();
|
ret = m_modem->hasYSFSpace();
|
||||||
if (ret) {
|
if (ret) {
|
||||||
len = ysf->readData(data);
|
len = ysf->readData(data);
|
||||||
if (mode != MODE_YSF) {
|
|
||||||
LogWarning("System Fusion echo data received when in mode %u", mode);
|
if (len > 0U && mode != MODE_YSF) {
|
||||||
} else {
|
LogMessage("Mode set to System Fusion");
|
||||||
|
mode = MODE_YSF;
|
||||||
|
m_display->setFusion();
|
||||||
|
m_modem->setMode(MODE_YSF);
|
||||||
|
if (m_dmrNetwork != NULL)
|
||||||
|
m_dmrNetwork->enable(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len > 0U && mode == MODE_YSF) {
|
||||||
m_modem->writeYSFData(data, len);
|
m_modem->writeYSFData(data, len);
|
||||||
modeTimer.start();
|
modeTimer.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (m_dmrNetwork != NULL) {
|
if (m_dmrNetwork != NULL) {
|
||||||
bool run = m_dmrNetwork->wantsBeacon();
|
bool run = m_dmrNetwork->wantsBeacon();
|
||||||
|
|
Loading…
Reference in a new issue