/************************************************************************
Segger JLink Programmer GUI API
Alle software in dit bestand is
Copyright 2013-2014 Hogeschool van Arnhem en Nijmegen
$Id: JLinkProgrammer.h 1833 2015-03-21 16:09:20Z ewout $
************************************************************************/
// -*- C++ -*- generated by wxGlade 0.6.5 (standalone edition) on Thu Oct 25 13:07:12 2012
#ifndef JLinkPROGRAMMER_H
#define JLinkPROGRAMMER_H
#include <wx/wx.h>
#include <wx/image.h>
#include <wx/listbox.h>
#include <wx/socket.h>
#include <wx/timer.h>
#include <wx/filehistory.h>
#include <wx/dnd.h>
// begin wxGlade: ::dependencies
#include <wx/spinctrl.h>
#include <wx/tglbtn.h>
#include <wx/treectrl.h>
// end wxGlade
// begin wxGlade: ::extracode
// end wxGlade
#include <desktopApp.h>
#include <wx/app.h>
#include <wx/filepicker.h>
#include <wx/filename.h>
#include <wx/stc/stc.h>
#include <wx/dir.h>
#include <wx/socket.h>
#include <wx/process.h>
#include <wx/dynarray.h>
#include <wx/hashmap.h>
#include <JLinkProcess.h>
#include <JLinkARMDLL.h>
WX_DECLARE_HASH_MAP_WITH_DECL( UInt32, wxString, wxIntegerHash, wxIntegerEqual,
wxSTM32HashMap, class WXDLLIMPEXP_BASE );
WX_DECLARE_HASH_MAP_WITH_DECL( UInt32, UInt32, wxIntegerHash, wxIntegerEqual,
wxSTM32UnIDHashMap, class WXDLLIMPEXP_BASE );
//WX_DECLARE_HASH_MAP_WITH_DECL( wxString, wxString, wxStringHash, wxStringEqual,
// wxObjCopyHashMap, class WXDLLIMPEXP_BASE );
class JLinkVensterKlasse: public wxFrame
{
public:
// begin wxGlade: JLinkVensterKlasse::ids
// end wxGlade
JLinkVensterKlasse(wxWindow* parent, int id, const wxString& title, const wxPoint& pos=wxDefaultPosition, const wxSize& size=wxDefaultSize, long style=wxDEFAULT_FRAME_STYLE);
~JLinkVensterKlasse();
bool schrijfFlash(const wxFileName &);
bool verbonden() const; /* geef aan of verbinding met target bestaat (voor drag and drop) */
protected:
// begin wxGlade: JLinkVensterKlasse::attributes
wxStaticBox* debugSizer_staticbox;
wxStaticBox* jlinkSWOSizer_staticbox;
wxStaticBox* sizer_26_staticbox;
wxStaticBox* jlinkGDBSizer_staticbox;
wxStaticBox* flashSizer_staticbox;
wxStaticBox* sizer_8_staticbox;
wxStaticBox* sizer_14_staticbox;
wxStaticBox* swoSizer_staticbox;
wxStaticBox* logSizer_staticbox;
wxStaticBox* sizer_10_staticbox;
wxStaticBox* sizer_12_staticbox;
wxStaticBox* gdbPickerCtrl_staticbox;
wxStaticBox* sizer_18_staticbox;
wxStaticBox* sizer_20_staticbox;
wxMenuBar* menubar;
wxStatusBar* statusbar;
wxRadioBox* jlinkConnectionRadioBox;
wxTextCtrl* USBSerialTextCtrl;
wxComboBox* targetNameComboBox;
wxButton* bewaarButton;
wxButton* vindDeviceButton;
wxButton* verwijderButton;
wxRadioBox* speedRadioBox;
wxSpinCtrl* cpuFreqSpinCtrl;
wxChoice* freqDimensieChoice;
wxChoice* interfaceKeuzeChoice;
wxChoice* endiannessChoice;
wxFilePickerCtrl* gdbScriptOpenPickerCtrl;
wxTextCtrl* statusTextCtrl;
wxScrolledWindow* logPaneel;
wxTextCtrl* swoTextCtrl;
wxScrolledWindow* swoPaneel;
wxFilePickerCtrl* openKnop;
wxToggleButton* verbindKnop;
wxButton* schrijfFlashKnop;
wxTextCtrl* flashLaadTextCtrl;
wxButton* veegUitKnop;
wxButton* haltButton;
wxButton* goButton;
wxButton* resetButton;
wxTreeCtrl* statusBoom;
wxStaticText* poortLabel;
wxSpinCtrl* gdbipPoortCtrl;
wxCheckBox* gdbVerifyDownloadCheckBox;
wxCheckBox* gdbServerSilentCheckBox;
wxCheckBox* gdbServerSingleRunCheckBox;
wxToggleButton* debugKnop;
wxToggleButton* gdbSwoKnop;
wxToggleButton* dddButton;
wxStaticText* poortLabel_copy;
wxSpinCtrl* swoPoortCtrl;
wxStaticText* swoSpeedLabel;
wxSpinCtrl* swoSpeedCtrl;
wxStaticText* swoDimLabel;
wxToggleButton* swoButton;
wxCheckListBox* swoCheckListBox;
wxButton* sluitKnop;
wxPanel* achtergrondPaneel;
// end wxGlade
DECLARE_EVENT_TABLE();
wxTimer timer;
private:
// begin wxGlade: JLinkVensterKlasse::methods
void set_properties();
void do_layout();
// end wxGlade
void stm32DeviceIDInit();
void verbind();
UInt32 leesUSBSerialID() const;
UInt32 leesLaadAdres() const;
UInt32 leesSWOMaskBits() const;
void haltTarget() const;
void getSetMaxSpeed();
void showDLLInfo() const;
void showFirmwareInfo() const;
void reset(const JLINKARM_RESET_TYPE,
const unsigned int delay) const;
bool JLinkExecCmd(const wxString &) const; /* voer een JLink Exec cmd uit */
void zetKnoppen(const DeviceConfig &); /* zet alle knoppen met deze config */
DeviceConfig leesKnoppen() const; /* lees de knoppen in een config */
/* boodschap formatting naar log venster */
void printGoed(const wxString &) const;
void printWaarschuwing(const wxString &) const;
void printFout(const wxString &) const;
void bestandGeschiedenisUpdater(); /* werk de bestandgeschiedenis bij */
/*! @brief Converteer een bin/elf/hex naar een ander formaat, en sla het op in een tijdelijke bestand
* @param Het brondbestand
* @param Het bestemmingbestand.
* @note de extensie van de bestandnamen geeft de typeconversie aan.
* @return Is de conversie geslaagd uitgevoerd of niet */
FoutCode converteerBestand(const wxFileName &,
const wxFileName &) const;
wxLog *log;
wxFileHistory bestandGeschiedenis;
wxFileName laatstePad; /* helper om in dialoog het laatste pad te gebruiken */
wxBitmap hanBitmap;
// wxString objCopyPad;
// wxString gdbPad;
wxString seggerDirPad;
wxString armDirPad;
wxString dddPad;
wxString swoBestandPad;
wxString favFabrikant;
UInt16 snelheid,echteSnelheid; /* snelheid keuze */
Int32 niceness; /* GDB server BSD/Sys5 niceness */
DebugServerProcess *debugServer;
DebuggerProcess *debugger;
wxSocketClient *gdbSwoClient; /* for receiving SWO data sent through GDB */
SWOViewerProcess *swoViewer;
wxMenu *tbRecenteBestandenMenu;
wxConfig * const appConfig;
DeviceConfigLijst configLijst;
Teller huidigTarget;
const wxTextAttr goedeStatusTextAttr,waarschuwingStatusTextAttr,fouteStatusTextAttr;
const wxString seggerStandaardPad,armStandaardPad,dddStandaardPad;
wxSTM32HashMap stm32Devices;
wxSTM32UnIDHashMap stm32UniqueIDs;
/* voor het ontdekken van SWD verbinding */
static const UInt8 aDir[33];
static const UInt8 aIn[33];
static const char *logo[];
static const UInt32 BestandGeschiedenisMax = 9;
typedef enum
{
elf=0,
bin,
hex
} ObjCopyBestandType;
//wxArrayString objCopyBestandCommando;
protected:
virtual void laadAdresHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void openBestandHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void schrijfFlashHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void eraseFlashHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void overHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void eindeHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void verbindHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void startDebugHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void kiesSeggerDirHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void resetTargetHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void targetInterfaceKeuzeHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void targetSpeedKeuzeHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void startSWOHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void saveSWOHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void clearLogWindowsHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void kiesARMDirHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void restartTargetHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void haltTargetHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void speedSettingHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void targetWisselHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void voegToeHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void verwijderHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void startGDBSwoHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void nicenessHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void vindDeviceHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void copySWOHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void freqDimensieHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void kiesDDDHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void startStopDDDHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void hanWebsiteHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void converteerBestandHandler(wxCommandEvent &event); // wxGlade: <event_handler>
virtual void verbindMenuHandler(wxCommandEvent &event); // wxGlade: <event_handler>
// void verbondenAanHandler(wxUpdateUIEvent &); /* alles dat aan mag tijdens verbinding */
void connectKnopAktiefHandler(wxUpdateUIEvent &); /* alles dat uit moet tijdens ontbreken van verbinding */
void knopMagAanHandler(wxUpdateUIEvent &); /* alles dat uit moet tijdens verbinding */
void magDeviceToevoegenHandler(wxUpdateUIEvent &); /* alles dat uit moet tijdens ontbreken van verbinding */
void magDeviceVerwijderenHandler(wxUpdateUIEvent &); /* alles dat uit moet tijdens verbinding */
// void opModeDebugAanHandler(wxUpdateUIEvent &);
// void opModeDebugUitHandler(); /* alles dat uit moet tijdens debuggen */
// void opModeSWOAanHandler(wxUpdateUIEvent &);
void connectStandHandler(wxUpdateUIEvent &);
void debugStandHandler(wxUpdateUIEvent &);
void dddStandHandler(wxUpdateUIEvent &);
void debugSWOStandHandler(wxUpdateUIEvent &); /* jlink debug server gerelateerd */
void swoStandHandler(wxUpdateUIEvent &); /* alles dat uit moet tijdens SWO view */
void swdStandHandler(wxUpdateUIEvent &);
void gdbServerSTDIOHandler(wxUpdateUIEvent &);
void swoServerSTDIOHandler(wxUpdateUIEvent &);
void nicenessUpdateHandler(wxUpdateUIEvent &);
void bestandGekozenHandler(wxFileDirPickerEvent &);
void gdbInitScriptGekozenHandler(wxFileDirPickerEvent &);
void onGDBServerProcessTerm(wxProcessEvent &); /* als de GDB server er mee ophoudt */
void onDDDProcessTerm(wxProcessEvent &); /* als DDD er mee ophoudt */
void onSWOProcessTerm(wxProcessEvent &); /* als de SWO server er mee ophoudt */
void gdbSwoSocketHandler(wxSocketEvent &); /* om socket start op te vangen */
void extProcessTimerPollingEventHandler(wxTimerEvent &);
void oudBestandLadenHandler(wxCommandEvent &);
}; // wxGlade: end class
class ProgrammeerDropTarget : public wxFileDropTarget
{
public:
ProgrammeerDropTarget(JLinkVensterKlasse * const );
wxDragResult OnDragOver(wxCoord ,
wxCoord ,
wxDragResult );
bool OnDropFiles(wxCoord ,
wxCoord ,
const wxArrayString &);
private:
JLinkVensterKlasse * const ouder;
};
class JLinkProgrammerKlasse : public DesktopApp
{
public:
JLinkProgrammerKlasse();
bool OnInit();
};
DECLARE_APP(JLinkProgrammerKlasse)
#endif // JLinkPROGRAMMER_H