📄 transmdlg.cpp
字号:
void TransmDialog::OnComboBoxMSCInterleaverHighlighted(int iID)
{
switch (iID)
{
case 0:
TransThread.DRMTransmitter.GetParameters()->eSymbolInterlMode =
CParameter::SI_LONG;
break;
case 1:
TransThread.DRMTransmitter.GetParameters()->eSymbolInterlMode =
CParameter::SI_SHORT;
break;
}
}
void TransmDialog::OnComboBoxMSCConstellationHighlighted(int iID)
{
switch (iID)
{
case 0:
TransThread.DRMTransmitter.GetParameters()->eMSCCodingScheme =
CParameter::CS_2_SM;
break;
case 1:
TransThread.DRMTransmitter.GetParameters()->eMSCCodingScheme =
CParameter::CS_3_SM;
break;
case 2:
TransThread.DRMTransmitter.GetParameters()->eMSCCodingScheme =
CParameter::CS_3_HMSYM;
break;
case 3:
TransThread.DRMTransmitter.GetParameters()->eMSCCodingScheme =
CParameter::CS_3_HMMIX;
break;
}
/* Protection level must be re-adjusted when constelletion mode was
changed */
UpdateMSCProtLevCombo();
}
void TransmDialog::OnComboBoxMSCProtLevHighlighted(int iID)
{
TransThread.DRMTransmitter.GetParameters()->MSCPrLe.iPartB = iID;
}
void TransmDialog::UpdateMSCProtLevCombo()
{
if (TransThread.DRMTransmitter.GetParameters()->eMSCCodingScheme ==
CParameter::CS_2_SM)
{
/* Only two protection levels possible in 16 QAM mode */
ComboBoxMSCProtLev->clear();
ComboBoxMSCProtLev->insertItem("0", 0);
ComboBoxMSCProtLev->insertItem("1", 1);
}
else
{
/* Four protection levels defined */
ComboBoxMSCProtLev->clear();
ComboBoxMSCProtLev->insertItem("0", 0);
ComboBoxMSCProtLev->insertItem("1", 1);
ComboBoxMSCProtLev->insertItem("2", 2);
ComboBoxMSCProtLev->insertItem("3", 3);
}
/* Set protection level to 1 */
ComboBoxMSCProtLev->setCurrentItem(1);
TransThread.DRMTransmitter.GetParameters()->MSCPrLe.iPartB = 1;
}
void TransmDialog::OnComboBoxSDCConstellationHighlighted(int iID)
{
switch (iID)
{
case 0:
TransThread.DRMTransmitter.GetParameters()->eSDCCodingScheme =
CParameter::CS_1_SM;
break;
case 1:
TransThread.DRMTransmitter.GetParameters()->eSDCCodingScheme =
CParameter::CS_2_SM;
break;
}
}
void TransmDialog::OnComboBoxLanguageHighlighted(int iID)
{
TransThread.DRMTransmitter.GetParameters()->Service[0].iLanguage = iID;
}
void TransmDialog::OnComboBoxProgramTypeHighlighted(int iID)
{
TransThread.DRMTransmitter.GetParameters()->Service[0].iServiceDescr = iID;
}
void TransmDialog::OnRadioOutput(int iID)
{
switch (iID)
{
case 0:
/* Button "Real Valued" */
TransThread.DRMTransmitter.GetTransData()->
SetIQOutput(CTransmitData::OF_REAL_VAL);
break;
case 1:
/* Button "I / Q (pos)" */
TransThread.DRMTransmitter.GetTransData()->
SetIQOutput(CTransmitData::OF_IQ_POS);
break;
case 2:
/* Button "I / Q (neg)" */
TransThread.DRMTransmitter.GetTransData()->
SetIQOutput(CTransmitData::OF_IQ_NEG);
break;
case 3:
/* Button "E / P" */
TransThread.DRMTransmitter.GetTransData()->
SetIQOutput(CTransmitData::OF_EP);
break;
}
}
void TransmDialog::OnRadioRobustnessMode(int iID)
{
/* Check, which bandwith's are possible with this robustness mode */
switch (iID)
{
case 0:
/* All bandwidth modes are possible */
RadioButtonBandwidth45->setEnabled(TRUE);
RadioButtonBandwidth5->setEnabled(TRUE);
RadioButtonBandwidth9->setEnabled(TRUE);
RadioButtonBandwidth10->setEnabled(TRUE);
RadioButtonBandwidth18->setEnabled(TRUE);
RadioButtonBandwidth20->setEnabled(TRUE);
break;
case 1:
/* All bandwidth modes are possible */
RadioButtonBandwidth45->setEnabled(TRUE);
RadioButtonBandwidth5->setEnabled(TRUE);
RadioButtonBandwidth9->setEnabled(TRUE);
RadioButtonBandwidth10->setEnabled(TRUE);
RadioButtonBandwidth18->setEnabled(TRUE);
RadioButtonBandwidth20->setEnabled(TRUE);
break;
case 2:
/* Only 10 and 20 kHz possible in robustness mode C */
RadioButtonBandwidth45->setEnabled(FALSE);
RadioButtonBandwidth5->setEnabled(FALSE);
RadioButtonBandwidth9->setEnabled(FALSE);
RadioButtonBandwidth10->setEnabled(TRUE);
RadioButtonBandwidth18->setEnabled(FALSE);
RadioButtonBandwidth20->setEnabled(TRUE);
/* Set check on a default value to be sure we are "in range" */
RadioButtonBandwidth10->setChecked(TRUE);
OnRadioBandwidth(3); /* TODO better solution for that */
break;
case 3:
/* Only 10 and 20 kHz possible in robustness mode D */
RadioButtonBandwidth45->setEnabled(FALSE);
RadioButtonBandwidth5->setEnabled(FALSE);
RadioButtonBandwidth9->setEnabled(FALSE);
RadioButtonBandwidth10->setEnabled(TRUE);
RadioButtonBandwidth18->setEnabled(FALSE);
RadioButtonBandwidth20->setEnabled(TRUE);
/* Set check on a default value to be sure we are "in range" */
RadioButtonBandwidth10->setChecked(TRUE);
OnRadioBandwidth(3); /* TODO better solution for that */
break;
}
/* Set new parameters */
ERobMode eNewRobMode;
switch (iID)
{
case 0:
eNewRobMode = RM_ROBUSTNESS_MODE_A;
break;
case 1:
eNewRobMode = RM_ROBUSTNESS_MODE_B;
break;
case 2:
eNewRobMode = RM_ROBUSTNESS_MODE_C;
break;
case 3:
eNewRobMode = RM_ROBUSTNESS_MODE_D;
break;
}
/* Set new robustness mode. Spectrum occupancy is the same as before */
TransThread.DRMTransmitter.GetParameters()->InitCellMapTable(eNewRobMode,
TransThread.DRMTransmitter.GetParameters()->GetSpectrumOccup());
}
void TransmDialog::OnRadioBandwidth(int iID)
{
ESpecOcc eNewSpecOcc;
switch (iID)
{
case 0:
eNewSpecOcc = SO_0;
break;
case 1:
eNewSpecOcc = SO_1;
break;
case 2:
eNewSpecOcc = SO_2;
break;
case 3:
eNewSpecOcc = SO_3;
break;
case 4:
eNewSpecOcc = SO_4;
break;
case 5:
eNewSpecOcc = SO_5;
break;
}
/* Set new spectrum occupancy. Robustness mode is the same as before */
TransThread.DRMTransmitter.GetParameters()->InitCellMapTable(
TransThread.DRMTransmitter.GetParameters()->GetWaveMode(), eNewSpecOcc);
}
void TransmDialog::DisableAllControlsForSet()
{
GroupBoxChanParam->setEnabled(FALSE);
TabWidgetServices->setEnabled(FALSE);
ButtonGroupOutput->setEnabled(FALSE);
GroupInput->setEnabled(TRUE); /* For run-mode */
}
void TransmDialog::EnableAllControlsForSet()
{
GroupBoxChanParam->setEnabled(TRUE);
TabWidgetServices->setEnabled(TRUE);
ButtonGroupOutput->setEnabled(TRUE);
GroupInput->setEnabled(FALSE); /* For run-mode */
/* Reset status bars */
ProgrInputLevel->setValue(RET_VAL_LOG_0);
ProgressBarCurPict->setProgress(0);
TextLabelCurPict->setText("");
}
void TransmDialog::AddWhatsThisHelp()
{
/* Dream Logo */
QWhatsThis::add(PixmapLabelDreamLogo,
tr("<b>Dream Logo:</b> This is the official logo of "
"the Dream software."));
/* Input Level */
QWhatsThis::add(ProgrInputLevel,
tr("<b>Input Level:</b> The input level meter shows "
"the relative input signal peak level in dB. If the level is too high, "
"the meter turns from green to red."));
/* DRM Robustness Mode */
const QString strRobustnessMode =
tr("<b>DRM Robustness Mode:</b> In a DRM system, "
"four possible robustness modes are defined to adapt the system to "
"different channel conditions. According to the DRM standard:"
"<ul><li><i>Mode A:</i> Gaussian channels, with "
"minor fading</li><li><i>Mode B:</i> Time "
"and frequency selective channels, with longer delay spread"
"</li><li><i>Mode C:</i> As robustness mode B, "
"but with higher Doppler spread</li><li><i>Mode D:"
"</i> As robustness mode B, but with severe delay and "
"Doppler spread</li></ul>");
QWhatsThis::add(RadioButtonRMA, strRobustnessMode);
QWhatsThis::add(RadioButtonRMB, strRobustnessMode);
QWhatsThis::add(RadioButtonRMC, strRobustnessMode);
QWhatsThis::add(RadioButtonRMD, strRobustnessMode);
/* Bandwidth */
const QString strBandwidth =
tr("<b>DRM Bandwidth:</b> The bandwith is the gross "
"bandwidth of the generated DRM signal. Not all DRM robustness mode / "
"bandwidth constellations are possible, e.g., DRM robustness mode D "
"and C are only defined for the bandwidths 10 kHz and 20 kHz.");
QWhatsThis::add(RadioButtonBandwidth45, strBandwidth);
QWhatsThis::add(RadioButtonBandwidth5, strBandwidth);
QWhatsThis::add(RadioButtonBandwidth9, strBandwidth);
QWhatsThis::add(RadioButtonBandwidth10, strBandwidth);
QWhatsThis::add(RadioButtonBandwidth18, strBandwidth);
QWhatsThis::add(RadioButtonBandwidth20, strBandwidth);
/* Output intermediate frequency of DRM signal */
const QString strOutputIF =
tr("<b>Output intermediate frequency of DRM signal:</b> "
"Set the output intermediate frequency (IF) of generated DRM signal "
"in the 'sound-card pass-band'. In some DRM modes, the IF is located "
"at the edge of the DRM signal, in other modes it is centered. The IF "
"should be chosen that the DRM signal lies entirely inside the "
"sound-card bandwidth.");
QWhatsThis::add(TextLabelIF, strOutputIF);
QWhatsThis::add(LineEditSndCrdIF, strOutputIF);
QWhatsThis::add(TextLabelIFUnit, strOutputIF);
/* Output format */
const QString strOutputFormat =
tr("<b>Output format:</b> Since the sound-card "
"outputs signals in stereo format, it is possible to output the DRM "
"signal in three formats:<ul><li><b>real valued"
"</b> output on both, left and right, sound-card "
"channels</li><li><b>I / Q</b> output "
"which is the in-phase and quadrature component of the complex "
"base-band signal at the desired IF. In-phase is output on the "
"left channel and quadrature on the right channel."
"</li><li><b>E / P</b> output which is the "
"envelope and phase on separate channels. This output type cannot "
"be used if the Dream transmitter is regularly compiled with a "
"sound-card sample rate of 48 kHz since the spectrum of these "
"components exceed the bandwidth of 20 kHz.<br>The envelope signal "
"is output on the left channel and the phase is output on the right "
"channel.</li></ul>");
QWhatsThis::add(RadioButtonOutReal, strOutputFormat);
QWhatsThis::add(RadioButtonOutIQPos, strOutputFormat);
QWhatsThis::add(RadioButtonOutIQNeg, strOutputFormat);
QWhatsThis::add(RadioButtonOutEP, strOutputFormat);
/* MSC interleaver mode */
const QString strInterleaver =
tr("<b>MSC interleaver mode:</b> The symbol "
"interleaver depth can be either short (approx. 400 ms) or long "
"(approx. 2 s). The longer the interleaver the better the channel "
"decoder can correct errors from slow fading signals. But the longer "
"the interleaver length the longer the delay until (after a "
"re-synchronization) audio can be heard.");
QWhatsThis::add(TextLabelInterleaver, strInterleaver);
QWhatsThis::add(ComboBoxMSCInterleaver, strInterleaver);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -