USB-VCP no OFF if internal RF module is set to CRSF (#1957)

* Do not list OFF on VCP menu if internal RF module is set to CRSF to allow pass-through flashing.
Set USB-VCP automatically to CLI when CRSF mode is selected for internal module and it was previously OFF. Activate CLI when iCRSF is selected.

* Companion part

Co-authored-by: elecpower <neilh713@tpg.com.au>
This commit is contained in:
Risto
2022-05-30 22:14:08 +02:00
committed by GitHub
co-authored by elecpower
parent cff819ea0e
commit 6b557e49ea
6 changed files with 54 additions and 9 deletions
+34 -8
View File
@@ -82,7 +82,8 @@ public:
HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels):
GeneralPanel(parent, generalSettings, firmware),
board(firmware->getBoard()),
editorItemModels(sharedItemModels)
editorItemModels(sharedItemModels),
serialPortUSBVCP(nullptr)
{
editorItemModels->registerItemModel(Boards::potTypeItemModel());
editorItemModels->registerItemModel(Boards::sliderTypeItemModel());
@@ -226,7 +227,7 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings
addLabel(tr("%1").arg(lbl), row, 0);
AutoComboBox *serialPortMode = new AutoComboBox(this);
serialPortMode->setModel(editorItemModels->getItemModel(auxmodelid));
serialPortMode->setField(generalSettings.serialPort[GeneralSettings::SP_AUX1]);
serialPortMode->setField(generalSettings.serialPort[GeneralSettings::SP_AUX1], this);
exclGroup->addCombo(serialPortMode);
AutoCheckBox *serialPortPower = new AutoCheckBox(this);
@@ -244,7 +245,7 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings
addLabel(tr("%1").arg(lbl), row, 0);
AutoComboBox *serialPortMode = new AutoComboBox(this);
serialPortMode->setModel(editorItemModels->getItemModel(auxmodelid));
serialPortMode->setField(generalSettings.serialPort[GeneralSettings::SP_AUX2]);
serialPortMode->setField(generalSettings.serialPort[GeneralSettings::SP_AUX2], this);
exclGroup->addCombo(serialPortMode);
AutoCheckBox *serialPortPower = new AutoCheckBox(this);
@@ -259,11 +260,13 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings
if (firmware->getCapability(HasVCPSerialMode)) {
addLabel(tr("USB-VCP"), row, 0);
AutoComboBox *serialPortMode = new AutoComboBox(this);
serialPortMode->setModel(editorItemModels->getItemModel(vcpmodelid));
serialPortMode->setField(generalSettings.serialPort[GeneralSettings::SP_VCP]);
exclGroup->addCombo(serialPortMode);
addParams(row, serialPortMode);
serialPortUSBVCP = new AutoComboBox(this);
serialPortUSBVCP->setModel(editorItemModels->getItemModel(vcpmodelid));
serialPortUSBVCP->setField(generalSettings.serialPort[GeneralSettings::SP_VCP], this);
exclGroup->addCombo(serialPortUSBVCP);
addParams(row, serialPortUSBVCP);
connect(this, &HardwarePanel::internalModuleChanged, this, &HardwarePanel::updateSerialPortUSBVCP);
updateSerialPortUSBVCP();
}
if (firmware->getCapability(HasADCJitterFilter)) {
@@ -326,6 +329,7 @@ void HardwarePanel::on_internalModuleChanged()
generalSettings.internalModuleBaudrate = 0;
internalModuleBaudRate->setVisible(false);
}
emit internalModuleChanged();
}
}
@@ -422,3 +426,25 @@ void HardwarePanel::addSection(QString text, int & row)
addLabel(QString("<b>%1</b>").arg(text), row, 0);
row++;
}
void HardwarePanel::updateSerialPortUSBVCP()
{
if (!serialPortUSBVCP)
return;
if (m_internalModule == MODULE_TYPE_CROSSFIRE &&
generalSettings.serialPort[GeneralSettings::SP_VCP] == GeneralSettings::AUX_SERIAL_OFF) {
generalSettings.serialPort[GeneralSettings::SP_VCP] = GeneralSettings::AUX_SERIAL_CLI;
serialPortUSBVCP->updateValue();
}
auto view = dynamic_cast<QListView*>(serialPortUSBVCP->view());
Q_ASSERT(view);
for (int i = 0; i < serialPortUSBVCP->count(); i++) {
if (m_internalModule == MODULE_TYPE_CROSSFIRE && i == GeneralSettings::AUX_SERIAL_OFF)
view->setRowHidden(i, true);
else
view->setRowHidden(i, false);
}
}
+3
View File
@@ -49,6 +49,7 @@ class HardwarePanel : public GeneralPanel
AutoComboBox *internalModule;
unsigned int m_internalModule = 0;
AutoComboBox *internalModuleBaudRate;
AutoComboBox *serialPortUSBVCP;
void addStick(int index, int & row);
void addPot(int index, int & row);
@@ -58,4 +59,6 @@ class HardwarePanel : public GeneralPanel
void addLine(int & row);
void addParams(int & row, QWidget * widget1, QWidget * widget2 = nullptr);
void addSection(QString text, int & row);
void updateSerialPortUSBVCP();
};
@@ -312,6 +312,11 @@ class InternalModuleWindow : public FormGroup {
restartModule(INTERNAL_MODULE);
});
grid.nextLine();
#if defined(USB_SERIAL)
// If USB-VCP was off, set it to CLI to enable passthrough flashing
if (serialGetMode(SP_VCP) == UART_MODE_NONE)
serialSetMode(SP_VCP, UART_MODE_CLI);
#endif
}
#endif
getParent()->moveWindowsTop(top() + 1, adjustHeight());
@@ -532,6 +532,11 @@ void menuRadioHardware(event_t event)
memclear(&g_model.moduleData[INTERNAL_MODULE], sizeof(ModuleData));
storageDirty(EE_MODEL);
storageDirty(EE_GENERAL);
#if defined(CROSSFIRE) && defined(USB_SERIAL)
// If USB-VCP was off, set it to CLI to enable passthrough flashing
if (isInternalModuleCrossfire() && serialGetMode(SP_VCP) == UART_MODE_NONE)
serialSetMode(SP_VCP, UART_MODE_CLI);
#endif
}
} break;
#endif
+6
View File
@@ -382,6 +382,12 @@ int hasSerialMode(int mode)
bool isSerialModeAvailable(uint8_t port_nr, int mode)
{
#if defined(USB_SERIAL)
// Do not list OFF on VCP if internal RF module is set to CROSSFIRE to allow pass-through flashing
if (port_nr == SP_VCP && mode == UART_MODE_NONE && isInternalModuleCrossfire())
return false;
#endif
if (mode == UART_MODE_NONE)
return true;
+1 -1
View File
@@ -89,7 +89,7 @@ void postRadioSettingsLoad()
#if defined(USB_SERIAL)
// default VCP to CLI if not configured
// to something else as NONE.
if (serialGetMode(SP_VCP) == UART_MODE_NONE) {
if (isInternalModuleCrossfire() && serialGetMode(SP_VCP) == UART_MODE_NONE) {
serialSetMode(SP_VCP, UART_MODE_CLI);
}
#endif