📄 fucdapp.cpp
字号:
#include "FucdApp.h"IMPLEMENT_APP( FucdApp )bool FucdApp::OnInit( ){ FucdFrame *frame = new FucdFrame(NULL, -1, _("Firmware Upgrade Configuration Dialog")); FucdPanel *panel = new FucdPanel(frame, ID_PL_ONEPANEL); SetExitOnFrameDelete(true); frame->Show(true); SetTopWindow(frame); return true;}FucdFrame::FucdFrame(wxWindow* parent, wxWindowID id, const wxString &title) : wxFrame(parent, id, title, wxDefaultPosition, wxSize(350,220)){ smf = new FucdLayer; smf->FindDevices(); just4gg = new wxTimer(this, ID_TIMER);};FucdPanel::FucdPanel(wxWindow* parent, wxWindowID id) : wxPanel(parent, id){ // Create Box Sizers: 2 for buttons, 1 for the gauge, 1 for the text control and globs to rule them all! wxBoxSizer *globs = new wxBoxSizer(wxVERTICAL); wxBoxSizer *btbs1= new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *btbs2= new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *txtbs= new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *pgsbs= new wxBoxSizer(wxHORIZONTAL); wxButton *bt_rescan= new wxButton(this, ID_BT_RESCAN, _("Re-Scan")); btbs1->Add(bt_rescan, 0, wxALL | wxALIGN_BOTTOM, 15); wxChoice *bt_select= new wxChoice(this, ID_CH_DEVICES, wxDefaultPosition, wxSize(191,24)); ((FucdFrame*)parent)->GetLayer()->GetDevNames(bt_select); bt_select->SetSelection(0); btbs1->Add(bt_select, 0, wxALL | wxALIGN_BOTTOM, 15); wxButton *bt_exit= new wxButton(this, wxID_EXIT, _("E&xit")); btbs2->Add(bt_exit, 0, wxALL | wxALIGN_BOTTOM, 15); wxButton *bt_ok= new wxButton(this, ID_BT_FILE, _("Select File")); btbs2->Add(bt_ok, 0, wxALL| wxALIGN_BOTTOM, 15); wxButton *bt_dload= new wxButton(this, ID_BT_DLOAD, _("Upgrade &FW")); bt_dload->Disable(); btbs2->Add(bt_dload, 0, wxALL| wxALIGN_BOTTOM, 15); wxTextCtrl *txtctrl = new wxTextCtrl(this, ID_TXT_OSTREAM, _(""), wxDefaultPosition, wxSize(200,200), wxTE_READONLY | wxTE_MULTILINE); //Associate the stdout->wxTextCtrl redirector with a wxTextCtrl //Stdout2TxtCtrl *mestdout = new Stdout2TxtCtrl("logger.txt", txtctrl); //((FucdFrame*)parent)->SetFT(txtctrl); //((FucdFrame*)parent)->SetOut(mestdout); txtbs->Add(((FucdFrame*)parent)->GetFT(), 1, wxEXPAND | wxALL); ((FucdFrame*)parent)->SetGG(new wxGauge(this, ID_GG_DLOAD, GG_TOTAL)); pgsbs->Add(((FucdFrame*)parent)->GetGG(), 1, wxALL | wxALIGN_CENTER, 10); globs->Add(txtbs, 2, wxEXPAND); globs->Add(pgsbs, 1, wxEXPAND); globs->Add(btbs1, 1, wxEXPAND); globs->Add(btbs2, 1, wxEXPAND); SetSizer(globs); SetAutoLayout(true); Layout();}BEGIN_EVENT_TABLE(FucdFrame, wxFrame)EVT_TIMER(ID_TIMER, FucdFrame::OnTimer)EVT_BUTTON(ID_BT_FILE, FucdFrame::OnBtFile)EVT_BUTTON(wxID_EXIT, FucdFrame::OnBtClose)EVT_BUTTON(ID_BT_DLOAD, FucdFrame::OnUpgradeFW)EVT_BUTTON(ID_BT_RESCAN, FucdFrame::OnRescan)EVT_CHOICE(ID_CH_DEVICES, FucdFrame::OnSelectDevice)EVT_IDLE(FucdFrame::OnIdle)EVT_CLOSE(FucdFrame::OnClose)END_EVENT_TABLE()void FucdFrame::OnRescan(){ wxChoice *devchoice = (wxChoice*)FindWindowById(ID_CH_DEVICES); smf->FindDevices(); smf->GetDevNames(devchoice); devchoice->SetSelection(0); if(smf->GetActive() != -1 && *(smf->GetFw()) != NULL) FindWindowById(ID_BT_DLOAD)->Enable();}void FucdFrame::OnSelectDevice(wxCommandEvent &event){ event.Skip(); smf->SetActive( ((wxChoice*)FindWindowById(ID_CH_DEVICES))->GetSelection() ); if(smf->GetActive() != -1 && *(smf->GetFw()) != NULL) FindWindowById(ID_BT_DLOAD)->Enable();}void FucdFrame::OnUpgradeFW(){ wxString fw_ver; gg_dload->SetValue(0); // Initialize GG smf->SetActive( ((wxChoice*)FindWindowById(ID_CH_DEVICES))->GetSelection() ); smf->Prepare(); smf->AtmelGetModeOfOperation(); if(!smf->AtmelGetFwVersion(fw_ver)) { // FAILURE: exiting... fucdtxt->AppendText(fw_ver); // fw_ver used as an error logger return; } fucdtxt->AppendText("Old Firmware Version: "+ fw_ver); fucdtxt->SetDefaultStyle(wxTextAttr(*wxGREEN)); fucdtxt->AppendText("\nFirmware Download is Starting ...\n"); fucdtxt->SetDefaultStyle(wxTextAttr(*wxRED)); fucdtxt->AppendText("DO NOT, by all means, unplug your device until it's over!\n"); fucdtxt->SetDefaultStyle(wxTextAttr(*wxBLACK)); if(!smf->AtmelFirmwareUpgrade(gg_dload)) fucdtxt->AppendText("ATMEL - DFU: Non Flash Device ( EEPROM )- Aborting\n"); else if (!smf->AtmelGetModeOfOperation()) { fucdtxt->AppendText("Life is Hard. Hardware is harder. Sorry...\n"); // Paei to device. } else { fucdtxt->SetDefaultStyle(wxTextAttr(*wxGREEN)); fucdtxt->AppendText("Firmware Upgrade Completed Successfully!\n"); fucdtxt->SetDefaultStyle(wxTextAttr(*wxBLACK)); smf->AtmelGetFwVersion(fw_ver); fucdtxt->AppendText("New Firmware Version: " + fw_ver); } gg_dload->SetValue(gg_dload->GetRange()); // Set GG to Max Value even if not reached yet. // Finalize procedure smf->Close(); FindWindowById(ID_BT_DLOAD)->Disable();}void FucdFrame::OnTimer(wxTimerEvent &event){ if(gg_dload->GetValue() < gg_dload->GetRange()) gg_dload->SetValue(gg_dload->GetValue()+4);}void FucdFrame::OnClose(wxCloseEvent &event){ just4gg->Stop(); Show(false); event.Skip(); return;}void FucdFrame::OnBtClose(wxCommandEvent &event){ Close(); return;}void FucdFrame::OnBtFile(){ wxString filename, fullpath; wxFileDialog fwfd(this, _("Choose a firmware image"), wxT("../"), wxT(""), wxT("Firmware Images|*.rom"), wxOPEN); fwfd.ShowModal(); filename = fwfd.GetFilename(); fullpath = fwfd.GetPath(); if(filename != "") { fucdtxt->SetDefaultStyle(wxTextAttr(*wxBLACK)); fucdtxt->AppendText("Selected file: "); fucdtxt->SetDefaultStyle(wxTextAttr(*wxGREEN)); fucdtxt->AppendText(filename + "\n"); fucdtxt->SetDefaultStyle(wxTextAttr(*wxBLACK)); smf->SetFilename(fullpath); if(smf->ReadFirmware()) { fucdtxt->AppendText("Firmware File Loaded Succesfully "); fucdtxt->AppendText(wxString::Format("(Size = %d)\n", smf->GetFwSize())); //fucdtxt->AppendText(wxString::Format("%x, %x", smf->GetFw(), *(smf->GetFw()))); if(smf->GetActive() != -1) FindWindowById(ID_BT_DLOAD)->Enable(); } else { fucdtxt->AppendText(filename + " has improper size (>64k) \n"); FindWindowById(ID_BT_DLOAD)->Disable(); } } return;}void FucdFrame::OnIdle(wxIdleEvent &event){ event.Skip();}/*Stdout2TxtCtrl::Stdout2TxtCtrl(const char* filename, wxTextCtrl *txtctrl) { logfile = freopen(filename, "w+t", ::stdout); mystdout = txtctrl; readpos = 0;};Stdout2TxtCtrl::~Stdout2TxtCtrl(){ fclose(logfile);}bool Stdout2TxtCtrl::Echo(){ buff[0] = 0; fseek(logfile, readpos, SEEK_SET); fgets(buff, 255, logfile); readpos = ftell(logfile); if(buff[0]) { mystdout->AppendText(buff); return true; } else return false;}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -