Firmware updater: Fix MMU flashing in GUI
This commit is contained in:
parent
09da7a84b5
commit
8208da0a7b
1 changed files with 20 additions and 14 deletions
|
@ -107,7 +107,7 @@ struct FirmwareDialog::priv
|
||||||
|
|
||||||
// GUI elements
|
// GUI elements
|
||||||
wxComboBox *port_picker;
|
wxComboBox *port_picker;
|
||||||
wxStaticText *port_autodetect;
|
wxStaticText *txt_port_autodetect;
|
||||||
wxFilePickerCtrl *hex_picker;
|
wxFilePickerCtrl *hex_picker;
|
||||||
wxStaticText *txt_status;
|
wxStaticText *txt_status;
|
||||||
wxGauge *progressbar;
|
wxGauge *progressbar;
|
||||||
|
@ -134,6 +134,7 @@ struct FirmwareDialog::priv
|
||||||
// Data
|
// Data
|
||||||
std::vector<SerialPortInfo> ports;
|
std::vector<SerialPortInfo> ports;
|
||||||
optional<SerialPortInfo> port;
|
optional<SerialPortInfo> port;
|
||||||
|
bool port_autodetect;
|
||||||
HexFile hex_file;
|
HexFile hex_file;
|
||||||
|
|
||||||
// This is a shared pointer holding the background AvrDude task
|
// This is a shared pointer holding the background AvrDude task
|
||||||
|
@ -150,6 +151,7 @@ struct FirmwareDialog::priv
|
||||||
btn_flash_label_flashing(_(L("Cancel"))),
|
btn_flash_label_flashing(_(L("Cancel"))),
|
||||||
label_status_flashing(_(L("Flashing in progress. Please do not disconnect the printer!"))),
|
label_status_flashing(_(L("Flashing in progress. Please do not disconnect the printer!"))),
|
||||||
timer_pulse(q),
|
timer_pulse(q),
|
||||||
|
port_autodetect(false),
|
||||||
progress_tasks_done(0),
|
progress_tasks_done(0),
|
||||||
progress_tasks_bar(0),
|
progress_tasks_bar(0),
|
||||||
user_cancelled(false),
|
user_cancelled(false),
|
||||||
|
@ -161,7 +163,7 @@ struct FirmwareDialog::priv
|
||||||
void set_txt_status(const wxString &label);
|
void set_txt_status(const wxString &label);
|
||||||
void flashing_start(unsigned tasks);
|
void flashing_start(unsigned tasks);
|
||||||
void flashing_done(AvrDudeComplete complete);
|
void flashing_done(AvrDudeComplete complete);
|
||||||
void enable_port_picker(bool enable);
|
void set_autodetect(bool autodetect);
|
||||||
void update_flash_enabled();
|
void update_flash_enabled();
|
||||||
void load_hex_file(const wxString &path);
|
void load_hex_file(const wxString &path);
|
||||||
void queue_event(AvrdudeEvent aevt, wxString message);
|
void queue_event(AvrdudeEvent aevt, wxString message);
|
||||||
|
@ -216,8 +218,10 @@ void FirmwareDialog::priv::find_serial_ports()
|
||||||
idx = i;
|
idx = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (idx != -1)
|
if (idx != -1) {
|
||||||
port_picker->SetSelection(idx);
|
port_picker->SetSelection(idx);
|
||||||
|
update_flash_enabled();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -282,11 +286,13 @@ void FirmwareDialog::priv::flashing_done(AvrDudeComplete complete)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FirmwareDialog::priv::enable_port_picker(bool enable)
|
void FirmwareDialog::priv::set_autodetect(bool autodetect)
|
||||||
{
|
{
|
||||||
port_picker->Show(enable);
|
port_autodetect = autodetect;
|
||||||
btn_rescan->Show(enable);
|
|
||||||
port_autodetect->Show(! enable);
|
port_picker->Show(!autodetect);
|
||||||
|
btn_rescan->Show(!autodetect);
|
||||||
|
txt_port_autodetect->Show(autodetect);
|
||||||
q->Layout();
|
q->Layout();
|
||||||
fit_no_shrink();
|
fit_no_shrink();
|
||||||
}
|
}
|
||||||
|
@ -294,7 +300,7 @@ void FirmwareDialog::priv::enable_port_picker(bool enable)
|
||||||
void FirmwareDialog::priv::update_flash_enabled()
|
void FirmwareDialog::priv::update_flash_enabled()
|
||||||
{
|
{
|
||||||
const bool hex_exists = wxFileExists(hex_picker->GetPath());
|
const bool hex_exists = wxFileExists(hex_picker->GetPath());
|
||||||
const bool port_valid = get_serial_port();
|
const bool port_valid = port_autodetect || get_serial_port();
|
||||||
|
|
||||||
btn_flash->Enable(hex_exists && port_valid);
|
btn_flash->Enable(hex_exists && port_valid);
|
||||||
}
|
}
|
||||||
|
@ -302,8 +308,8 @@ void FirmwareDialog::priv::update_flash_enabled()
|
||||||
void FirmwareDialog::priv::load_hex_file(const wxString &path)
|
void FirmwareDialog::priv::load_hex_file(const wxString &path)
|
||||||
{
|
{
|
||||||
hex_file = HexFile(path.wx_str());
|
hex_file = HexFile(path.wx_str());
|
||||||
const bool auto_lookup = hex_file.device == HexFile::DEV_MM_CONTROL || hex_file.device == HexFile::DEV_CW1;
|
const bool autodetect = hex_file.device == HexFile::DEV_MM_CONTROL || hex_file.device == HexFile::DEV_CW1;
|
||||||
enable_port_picker(! auto_lookup);
|
set_autodetect(autodetect);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FirmwareDialog::priv::queue_event(AvrdudeEvent aevt, wxString message)
|
void FirmwareDialog::priv::queue_event(AvrdudeEvent aevt, wxString message)
|
||||||
|
@ -598,7 +604,7 @@ void FirmwareDialog::priv::perform_upload()
|
||||||
|
|
||||||
load_hex_file(filename); // Might already be loaded, but we want to make sure it's fresh
|
load_hex_file(filename); // Might already be loaded, but we want to make sure it's fresh
|
||||||
|
|
||||||
if (! get_serial_port()) {
|
if (!port_autodetect && !get_serial_port()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -801,13 +807,13 @@ FirmwareDialog::FirmwareDialog(wxWindow *parent) :
|
||||||
|
|
||||||
auto *label_port_picker = new wxStaticText(panel, wxID_ANY, _(L("Serial port:")));
|
auto *label_port_picker = new wxStaticText(panel, wxID_ANY, _(L("Serial port:")));
|
||||||
p->port_picker = new wxComboBox(panel, wxID_ANY);
|
p->port_picker = new wxComboBox(panel, wxID_ANY);
|
||||||
p->port_autodetect = new wxStaticText(panel, wxID_ANY, _(L("Autodetected")));
|
p->txt_port_autodetect = new wxStaticText(panel, wxID_ANY, _(L("Autodetected")));
|
||||||
p->btn_rescan = new wxButton(panel, wxID_ANY, _(L("Rescan")));
|
p->btn_rescan = new wxButton(panel, wxID_ANY, _(L("Rescan")));
|
||||||
auto *port_sizer = new wxBoxSizer(wxHORIZONTAL);
|
auto *port_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
port_sizer->Add(p->port_picker, 1, wxEXPAND | wxRIGHT, SPACING);
|
port_sizer->Add(p->port_picker, 1, wxEXPAND | wxRIGHT, SPACING);
|
||||||
port_sizer->Add(p->btn_rescan, 0);
|
port_sizer->Add(p->btn_rescan, 0);
|
||||||
port_sizer->Add(p->port_autodetect, 1, wxEXPAND);
|
port_sizer->Add(p->txt_port_autodetect, 1, wxEXPAND);
|
||||||
p->enable_port_picker(true);
|
p->set_autodetect(false);
|
||||||
|
|
||||||
auto *label_progress = new wxStaticText(panel, wxID_ANY, _(L("Progress:")));
|
auto *label_progress = new wxStaticText(panel, wxID_ANY, _(L("Progress:")));
|
||||||
p->progressbar = new wxGauge(panel, wxID_ANY, 1, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL | wxGA_SMOOTH);
|
p->progressbar = new wxGauge(panel, wxID_ANY, 1, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL | wxGA_SMOOTH);
|
||||||
|
|
Loading…
Reference in a new issue