1 #include "wx/wxprec.h"
2 
3 #ifdef __BORLANDC__
4 #pragma hdrstop
5 #endif //__BORLANDC__
6 
7 #ifndef WX_PRECOMP
8 #include <wx/wx.h>
9 #endif //WX_PRECOMP
10 
11 #include "lms7002_mainPanel.h"
12 
13 #include "lms7suiteAppFrame.h"
14 #include "dlgAbout.h"
15 #include "dlgConnectionSettings.h"
16 #include "lms7suiteEvents.h"
17 #include "fftviewer_frFFTviewer.h"
18 #include "ADF4002_wxgui.h"
19 #include "Si5351C_wxgui.h"
20 #include "LMS_Programing_wxgui.h"
21 #include "pnlMiniLog.h"
22 #include "FPGAcontrols_wxgui.h"
23 #include "SPI_wxgui.h"
24 #include <wx/string.h>
25 #include "dlgDeviceInfo.h"
26 #include <functional>
27 #include "lms7002_pnlTRF_view.h"
28 #include "lms7002_pnlRFE_view.h"
29 #include "lms7002_pnlLimeLightPAD_view.h"
30 #include "pnlBoardControls.h"
31 #include "LMSBoards.h"
32 #include <sstream>
33 #include "pnlAPI.h"
34 #include "lms7_device.h"
35 #include "limeRFE_wxgui.h"
36 
37 using namespace std;
38 using namespace lime;
39 
40 ///////////////////////////////////////////////////////////////////////////
41 
42 LMS7SuiteAppFrame* LMS7SuiteAppFrame::obj_ptr=nullptr;
43 
44 const wxString LMS7SuiteAppFrame::cWindowTitle = _("LMS7Suite");
45 
46 int LMS7SuiteAppFrame::m_lmsSelection = 0;
47 
HandleLMSevent(wxCommandEvent & event)48 void LMS7SuiteAppFrame::HandleLMSevent(wxCommandEvent& event)
49 {
50     if (event.GetEventType() == CGEN_FREQUENCY_CHANGED)
51     {
52         if (fftviewer)
53             fftviewer->SetNyquistFrequency();
54     }
55 }
56 
OnGlobalLogEvent(const lime::LogLevel level,const char * message)57 void LMS7SuiteAppFrame::OnGlobalLogEvent(const lime::LogLevel level, const char *message)
58 {
59     if (obj_ptr == nullptr || obj_ptr->mMiniLog == nullptr)
60         return;
61     wxCommandEvent evt;
62     evt.SetString(wxString::FromAscii(message));
63     evt.SetEventType(LOG_MESSAGE);
64     evt.SetInt(int(level));
65     wxPostEvent(obj_ptr, evt);
66 }
67 
OnLogEvent(const char * text,unsigned int type)68 void LMS7SuiteAppFrame::OnLogEvent(const char* text, unsigned int type)
69 {
70     if (obj_ptr == nullptr || obj_ptr->mMiniLog == nullptr)
71         return;
72     wxCommandEvent evt;
73     evt.SetEventType(LOG_MESSAGE);
74     evt.SetInt(lime::LOG_LEVEL_INFO);
75     wxString msg;
76 
77     switch(type)
78     {
79     case 0:
80         msg = wxString::Format("INFO: %s", text);
81         break;
82     case 1:
83         msg = wxString::Format("Warning: %s", text);
84         break;
85     case 2:
86         msg = wxString::Format("ERROR: %s", text);
87         break;
88     }
89     evt.SetString(msg);
90     wxPostEvent(obj_ptr, evt);
91 }
92 
LMS7SuiteAppFrame(wxWindow * parent)93 LMS7SuiteAppFrame::LMS7SuiteAppFrame( wxWindow* parent ) :
94     AppFrame_view( parent ), lmsControl(nullptr)
95 {
96 #ifndef __unix__
97     SetIcon(wxIcon(_("aaaaAPPicon")));
98 #endif
99     programmer = nullptr;
100     fftviewer = nullptr;
101     adfGUI = nullptr;
102     si5351gui = nullptr;
103     fpgaControls = nullptr;
104     deviceInfo = nullptr;
105     spi = nullptr;
106     api = nullptr;
107     boardControlsGui = nullptr;
108 
109 	limeRFEwin = nullptr;
110 
111     lmsControl = new LMS7_Device();
112 
113     lime::registerLogHandler(&LMS7SuiteAppFrame::OnGlobalLogEvent);
114 
115     Connect(CGEN_FREQUENCY_CHANGED, wxCommandEventHandler(LMS7SuiteAppFrame::HandleLMSevent), NULL, this);
116     mMiniLog = new pnlMiniLog(this, wxNewId());
117     Connect(LOG_MESSAGE, wxCommandEventHandler(LMS7SuiteAppFrame::OnLogMessage), 0, this);
118 
119     bSizer6->Add(mMiniLog, 1, wxEXPAND, 5);
120     Layout();
121     Fit();
122     int x,y1,y2;
123     m_scrolledWindow1->GetVirtualSize(&x,&y1);
124     mMiniLog->GetSize(nullptr,&y2);
125     SetSize(x+8,y1+y2+8);
126     m_scrolledWindow1->SetMinSize(wxSize(wxDefaultCoord,160));
127     m_scrolledWindow1->SetMaxSize(wxSize(wxDefaultCoord,y1));
128     SetMinSize(wxSize(640,320));
129     obj_ptr = this;
130     wxCommandEvent event;
131     OnControlBoardConnect(event);
132 
133     UpdateConnections(lmsControl);
134 
135     mnuCacheValues->Check(false);
136     const int statusWidths[] = {-1, -3, -3};
137     statusBar->SetStatusWidths(3, statusWidths);
138     Bind(LMS_CHANGED, wxCommandEventHandler(LMS7SuiteAppFrame::OnLmsChanged), this);
139 
140 #ifndef LIMERFE
141 	mnuModules->Delete(ID_MENUITEM_LIMERFE);
142 #endif
143 }
144 
~LMS7SuiteAppFrame()145 LMS7SuiteAppFrame::~LMS7SuiteAppFrame()
146 {
147     wxCloseEvent evt;
148     OnFFTviewerClose(evt);
149     Disconnect(CGEN_FREQUENCY_CHANGED, wxCommandEventHandler(LMS7SuiteAppFrame::HandleLMSevent), NULL, this);
150     LMS_Close(lmsControl);
151 }
152 
OnClose(wxCloseEvent & event)153 void LMS7SuiteAppFrame::OnClose( wxCloseEvent& event )
154 {
155     Destroy();
156 }
157 
OnQuit(wxCommandEvent & event)158 void LMS7SuiteAppFrame::OnQuit( wxCommandEvent& event )
159 {
160     Destroy();
161 }
162 
OnShowConnectionSettings(wxCommandEvent & event)163 void LMS7SuiteAppFrame::OnShowConnectionSettings( wxCommandEvent& event )
164 {
165 	dlgConnectionSettings dlg(this);
166 
167     if (fftviewer)
168         fftviewer->StopStreaming();
169 
170     dlg.SetConnectionManagers(&lmsControl);
171     Bind(CONTROL_PORT_CONNECTED, wxCommandEventHandler(LMS7SuiteAppFrame::OnControlBoardConnect), this);
172     Bind(DATA_PORT_CONNECTED, wxCommandEventHandler(LMS7SuiteAppFrame::OnDataBoardConnect), this);
173     Bind(CONTROL_PORT_DISCONNECTED, wxCommandEventHandler(LMS7SuiteAppFrame::OnControlBoardConnect), this);
174     Bind(DATA_PORT_DISCONNECTED, wxCommandEventHandler(LMS7SuiteAppFrame::OnDataBoardConnect), this);
175 	dlg.ShowModal();
176 }
177 
OnAbout(wxCommandEvent & event)178 void LMS7SuiteAppFrame::OnAbout( wxCommandEvent& event )
179 {
180 	dlgAbout dlg(this);
181     dlg.ShowModal();
182 }
183 
UpdateConnections(lms_device_t * lms7controlPort)184 void LMS7SuiteAppFrame::UpdateConnections(lms_device_t* lms7controlPort)
185 {
186     mContent->Initialize(lmsControl);
187     if(si5351gui)
188         si5351gui->Initialize(lmsControl);
189     if(fftviewer)
190         fftviewer->Initialize(lmsControl);
191     if(adfGUI)
192         adfGUI->Initialize(lmsControl);
193     if(fpgaControls)
194         fpgaControls->Initialize(lmsControl);
195     if(deviceInfo)
196         deviceInfo->Initialize(lmsControl);
197     if(spi)
198         spi->Initialize(lmsControl);
199     if(boardControlsGui)
200         boardControlsGui->Initialize(lmsControl);
201     if(programmer)
202         programmer->SetConnection(lmsControl);
203     if(api)
204         api->Initialize(lmsControl);
205 
206 #ifdef LIMERFE
207     if (limeRFEwin)
208         limeRFEwin->Initialize(lmsControl);
209 #endif
210 }
211 
OnControlBoardConnect(wxCommandEvent & event)212 void LMS7SuiteAppFrame::OnControlBoardConnect(wxCommandEvent& event)
213 {
214     UpdateConnections(lmsControl);
215     const int controlCollumn = 1;
216     auto conn = ((LMS7_Device*)lmsControl)->GetConnection();
217     if (conn && conn->IsOpen())
218     {
219         //bind callback for spi data logging
220         obj_ptr = this;
221         const lms_dev_info_t* info;
222         conn->SetDataLogCallback(&LMS7SuiteAppFrame::OnLogDataTransfer);
223         if ((info = LMS_GetDeviceInfo(lmsControl)) == nullptr)
224                 return;
225         wxString controlDev = _("Control port: ");
226 
227         controlDev.Append(info->deviceName);
228         LMS7002M* lms = ((LMS7_Device*)lmsControl)->GetLMS();
229         double refClk = lms->GetReferenceClk_SX(lime::LMS7002M::Rx);
230         controlDev.Append(wxString::Format(_(" FW:%s HW:%s Protocol:%s GW:%s Ref Clk: %1.2f MHz"), info->firmwareVersion, info->hardwareVersion, info->protocolVersion, info->gatewareVersion, refClk/1e6));
231         statusBar->SetStatusText(controlDev, controlCollumn);
232 
233         LMS_EnableCache(lmsControl,mnuCacheValues->IsChecked());
234 
235         wxCommandEvent evt;
236         evt.SetEventType(LOG_MESSAGE);
237         evt.SetInt(lime::LOG_LEVEL_INFO);
238         evt.SetString(_("Connected ") + controlDev);
239         wxPostEvent(this, evt);
240         if (si5351gui)
241             si5351gui->ModifyClocksGUI(info->deviceName);
242         if (boardControlsGui)
243             boardControlsGui->SetupControls(info->deviceName);
244     }
245     else
246     {
247         statusBar->SetStatusText(_("Control port: Not Connected"), controlCollumn);
248         wxCommandEvent evt;
249         evt.SetEventType(LOG_MESSAGE);
250         evt.SetInt(lime::LOG_LEVEL_INFO);
251         evt.SetString(_("Disconnected control port"));
252         wxPostEvent(this, evt);
253     }
254 }
255 
OnDataBoardConnect(wxCommandEvent & event)256 void LMS7SuiteAppFrame::OnDataBoardConnect(wxCommandEvent& event)
257 {
258    /* UpdateConnections(lms7controlPort, streamBoardPort);
259     const int dataCollumn = 2;
260     if (streamBoardPort && streamBoardPort->IsOpen())
261     {
262         //bind callback for spi data logging
263         streamBoardPort->SetDataLogCallback(bind(&LMS7SuiteAppFrame::OnLogDataTransfer, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
264 
265         DeviceInfo info = streamBoardPort->GetDeviceInfo();
266         wxString controlDev = _("Data port: ");
267         controlDev.Append(info.deviceName);
268         controlDev.Append(wxString::Format(_(" FW:%s HW:%s Protocol:%s GW:%s GW_rev:%s"), info.firmwareVersion, info.hardwareVersion, info.protocolVersion, info.gatewareVersion, info.gatewareRevision));
269         statusBar->SetStatusText(controlDev, dataCollumn);
270 
271         wxCommandEvent evt;
272         evt.SetEventType(LOG_MESSAGE);
273         evt.SetString(_("Connected ") + controlDev);
274         wxPostEvent(this, evt);
275     }
276     else*/
277     {
278 //        statusBar->SetStatusText(_("Data port: Not Connected"), dataCollumn);
279         wxCommandEvent evt;
280         evt.SetEventType(LOG_MESSAGE);
281         evt.SetInt(lime::LOG_LEVEL_INFO);
282         evt.SetString(_("Disconnected data port"));
283         wxPostEvent(this, evt);
284     }
285 }
286 
OnFFTviewerClose(wxCloseEvent & event)287 void LMS7SuiteAppFrame::OnFFTviewerClose(wxCloseEvent& event)
288 {
289     if(fftviewer)
290     {
291         fftviewer->StopStreaming();
292         fftviewer->Destroy();
293         fftviewer = nullptr;
294     }
295 }
296 
OnShowFFTviewer(wxCommandEvent & event)297 void LMS7SuiteAppFrame::OnShowFFTviewer(wxCommandEvent& event)
298 {
299     if (fftviewer) //it's already opened
300     {
301         fftviewer->Show(true);
302         fftviewer->Iconize(false); // restore the window if minimized
303         fftviewer->SetFocus();  // focus on my window
304         fftviewer->Raise();  // bring window to front
305     }
306     else
307     {
308         fftviewer = new fftviewer_frFFTviewer(this);
309         fftviewer->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(LMS7SuiteAppFrame::OnFFTviewerClose), NULL, this);
310         fftviewer->Initialize(lmsControl);
311         fftviewer->Show(true);
312     }
313 }
314 
OnLmsChanged(wxCommandEvent & event)315 void LMS7SuiteAppFrame::OnLmsChanged(wxCommandEvent& event)
316 {
317     m_lmsSelection = event.GetInt();
318 }
319 
OnADF4002Close(wxCloseEvent & event)320 void LMS7SuiteAppFrame::OnADF4002Close(wxCloseEvent& event)
321 {
322     adfGUI->Destroy();
323     adfGUI = nullptr;
324 }
325 
OnShowADF4002(wxCommandEvent & event)326 void LMS7SuiteAppFrame::OnShowADF4002(wxCommandEvent& event)
327 {
328     if (adfGUI) //it's already opened
329     {
330         adfGUI->Show(true);
331         adfGUI->Iconize(false); // restore the window if minimized
332         adfGUI->SetFocus();  // focus on my window
333         adfGUI->Raise();  // bring window to front
334     }
335     else
336     {
337         adfGUI = new ADF4002_wxgui(this, wxNewId(), _("ADF4002"));
338         adfGUI->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(LMS7SuiteAppFrame::OnADF4002Close), NULL, this);
339         adfGUI->Initialize(lmsControl);
340         adfGUI->Show();
341     }
342 }
343 
OnSi5351Close(wxCloseEvent & event)344 void LMS7SuiteAppFrame::OnSi5351Close(wxCloseEvent& event)
345 {
346     si5351gui->Destroy();
347     si5351gui = nullptr;
348 }
349 
OnShowSi5351C(wxCommandEvent & event)350 void LMS7SuiteAppFrame::OnShowSi5351C(wxCommandEvent& event)
351 {
352     if (si5351gui) //it's already opened
353     {
354         si5351gui->Show(true);
355         si5351gui->Iconize(false); // restore the window if minimized
356         si5351gui->SetFocus();  // focus on my window
357         si5351gui->Raise();  // bring window to front
358     }
359     else
360     {
361         si5351gui = new Si5351C_wxgui(this, wxNewId(), _("Si5351C"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE);
362         si5351gui->Initialize(lmsControl);
363         const lms_dev_info_t *info = LMS_GetDeviceInfo(lmsControl);
364         si5351gui->ModifyClocksGUI(info ? info->deviceName : "UNKNOWN");
365         si5351gui->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(LMS7SuiteAppFrame::OnSi5351Close), NULL, this);
366         si5351gui->Show();
367     }
368 }
369 
OnProgramingClose(wxCloseEvent & event)370 void LMS7SuiteAppFrame::OnProgramingClose(wxCloseEvent& event)
371 {
372     programmer->Destroy();
373     programmer = nullptr;
374 }
375 
OnShowPrograming(wxCommandEvent & event)376 void LMS7SuiteAppFrame::OnShowPrograming(wxCommandEvent& event)
377 {
378     if (programmer) //it's already opened
379     {
380         programmer->Show(true);
381         programmer->Iconize(false); // restore the window if minimized
382         programmer->SetFocus();  // focus on my window
383         programmer->Raise();  // bring window to front
384     }
385     else
386     {
387         programmer = new LMS_Programing_wxgui(this, wxNewId(), _("Programming"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE);
388         programmer->SetConnection(lmsControl);
389         programmer->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(LMS7SuiteAppFrame::OnProgramingClose), NULL, this);
390         programmer->Show();
391     }
392 }
393 
OnLogMessage(wxCommandEvent & event)394 void LMS7SuiteAppFrame::OnLogMessage(wxCommandEvent &event)
395 {
396     if (mMiniLog)
397         mMiniLog->HandleMessage(event);
398 }
399 
OnFPGAcontrolsClose(wxCloseEvent & event)400 void LMS7SuiteAppFrame::OnFPGAcontrolsClose(wxCloseEvent& event)
401 {
402     fpgaControls->Destroy();
403     fpgaControls = nullptr;
404 }
OnShowFPGAcontrols(wxCommandEvent & event)405 void LMS7SuiteAppFrame::OnShowFPGAcontrols(wxCommandEvent& event)
406 {
407     if (fpgaControls) //it's already opened
408     {
409         fpgaControls->Show(true);
410         fpgaControls->Iconize(false); // restore the window if minimized
411         fpgaControls->SetFocus();  // focus on my window
412         fpgaControls->Raise();  // bring window to front
413     }
414     else
415     {
416         fpgaControls = new FPGAcontrols_wxgui(this, wxNewId(), _("FPGA Controls"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE);
417         fpgaControls->Initialize(lmsControl);
418         fpgaControls->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(LMS7SuiteAppFrame::OnFPGAcontrolsClose), NULL, this);
419         fpgaControls->Show();
420     }
421 }
422 
OnDeviceInfoClose(wxCloseEvent & event)423 void LMS7SuiteAppFrame::OnDeviceInfoClose(wxCloseEvent& event)
424 {
425     deviceInfo->Destroy();
426     deviceInfo = nullptr;
427 }
428 
OnShowDeviceInfo(wxCommandEvent & event)429 void LMS7SuiteAppFrame::OnShowDeviceInfo(wxCommandEvent& event)
430 {
431     if (deviceInfo) //it's already opened
432     {
433         deviceInfo->Show(true);
434         deviceInfo->Iconize(false); // restore the window if minimized
435         deviceInfo->SetFocus();  // focus on my window
436         deviceInfo->Raise();  // bring window to front
437     }
438     else
439     {
440         deviceInfo = new dlgDeviceInfo(this, wxNewId(), _("Device Info"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE);
441         deviceInfo->Initialize(lmsControl);
442         deviceInfo->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(LMS7SuiteAppFrame::OnDeviceInfoClose), NULL, this);
443         deviceInfo->Show();
444     }
445 }
446 
OnSPIClose(wxCloseEvent & event)447 void LMS7SuiteAppFrame::OnSPIClose(wxCloseEvent& event)
448 {
449     spi->Destroy();
450     spi = nullptr;
451 }
452 
OnShowSPI(wxCommandEvent & event)453 void LMS7SuiteAppFrame::OnShowSPI(wxCommandEvent& event)
454 {
455     if (spi) //it's already opened
456     {
457         spi->Show(true);
458         spi->Iconize(false); // restore the window if minimized
459         spi->SetFocus();  // focus on my window
460         spi->Raise();  // bring window to front
461     }
462     else
463     {
464         spi = new SPI_wxgui(this, wxNewId(), _("Device Info"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE);
465         spi->Initialize(lmsControl,0);
466         spi->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(LMS7SuiteAppFrame::OnSPIClose), NULL, this);
467         spi->Show();
468     }
469 }
470 
471 #include <iomanip>
OnLogDataTransfer(bool Tx,const unsigned char * data,const unsigned int length)472 void LMS7SuiteAppFrame::OnLogDataTransfer(bool Tx, const unsigned char* data, const unsigned int length)
473 {
474     if (obj_ptr->mMiniLog == nullptr || obj_ptr->mMiniLog->chkLogData->IsChecked() == false)
475         return;
476     std::stringstream ss;
477     ss << (Tx ? "Wr(" : "Rd(");
478     ss << length << "): ";
479     ss << std::hex << std::setfill('0');
480     int repeatedZeros = 0;
481     for (int i = length - 1; i >= 0; --i)
482         if (data[i] == 0)
483             ++repeatedZeros;
484         else
485             break;
486     if (repeatedZeros == 2)
487         repeatedZeros = 0;
488     repeatedZeros = repeatedZeros - (repeatedZeros & 0x1);
489     for (size_t i = 0; i<length - repeatedZeros; ++i)
490         //casting to short to print as numbers
491         ss << " " << std::setw(2) << (unsigned short)data[i];
492     if (repeatedZeros > 2)
493         ss << " (00 x " << std::dec << repeatedZeros << " times)";
494     cout << ss.str() << endl;
495     wxCommandEvent *evt = new wxCommandEvent();
496     evt->SetString(ss.str());
497     evt->SetEventObject(obj_ptr);
498     evt->SetEventType(LOG_MESSAGE);
499     evt->SetInt(lime::LOG_LEVEL_INFO);
500     wxQueueEvent(obj_ptr, evt);
501 }
502 
OnShowBoardControls(wxCommandEvent & event)503 void LMS7SuiteAppFrame::OnShowBoardControls(wxCommandEvent& event)
504 {
505     if (boardControlsGui) //it's already opened
506     {
507         boardControlsGui->Show(true);
508         boardControlsGui->Iconize(false); // restore the window if minimized
509         boardControlsGui->SetFocus();  // focus on my window
510         boardControlsGui->Raise();  // bring window to front
511     }
512     else
513     {
514         boardControlsGui = new pnlBoardControls(this, wxNewId(), _("Board related controls"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
515         boardControlsGui->Initialize(lmsControl);
516         boardControlsGui->UpdatePanel();
517         boardControlsGui->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(LMS7SuiteAppFrame::OnBoardControlsClose), NULL, this);
518         boardControlsGui->Show();
519     }
520 }
521 
OnShowAPICalls(wxCommandEvent & event)522 void LMS7SuiteAppFrame::OnShowAPICalls( wxCommandEvent& event )
523 {
524     if (api) //it's already opened
525     {
526         api->Show(true);
527         api->Iconize(false); // restore the window if minimized
528         api->SetFocus();  // focus on my window
529         api->Raise();  // bring window to front
530     }
531     else
532     {
533         api = new pnlAPI(this);
534         api->Initialize(lmsControl);
535         api->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(LMS7SuiteAppFrame::OnAPIClose), NULL, this);
536         api->Show();
537     }
538 }
539 
OnAPIClose(wxCloseEvent & event)540 void LMS7SuiteAppFrame::OnAPIClose(wxCloseEvent& event)
541 {
542     api->Destroy();
543     api = nullptr;
544 }
545 
OnBoardControlsClose(wxCloseEvent & event)546 void LMS7SuiteAppFrame::OnBoardControlsClose(wxCloseEvent& event)
547 {
548     boardControlsGui->Destroy();
549     boardControlsGui = nullptr;
550 }
551 
OnChangeCacheSettings(wxCommandEvent & event)552 void LMS7SuiteAppFrame::OnChangeCacheSettings(wxCommandEvent& event)
553 {
554     int checked = event.GetInt();
555     LMS_EnableCache(lmsControl,checked);
556 }
557 
UpdateVisiblePanel() const558 void LMS7SuiteAppFrame::UpdateVisiblePanel() const
559 {
560     mContent->UpdateVisiblePanel();
561 }
562 
OnShowLimeRFE(wxCommandEvent & event)563 void LMS7SuiteAppFrame::OnShowLimeRFE(wxCommandEvent& event) {
564 
565 #ifdef LIMERFE
566 	if (limeRFEwin) //it's already opened
567 	{
568 		limeRFEwin->Show(true);
569 		limeRFEwin->Iconize(false); // restore the window if minimized
570 		limeRFEwin->SetFocus();  // focus on my window
571 		limeRFEwin->Raise();  // bring window to front
572 	}
573 	else
574 	{
575 		limeRFEwin = new limeRFE_wxgui(this, wxNewId(), _("LimeRFE Controls"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);
576 		limeRFEwin->Initialize(lmsControl);
577 		limeRFEwin->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(LMS7SuiteAppFrame::OnLimeRFEClose), NULL, this);
578 		limeRFEwin->Show();
579 	}
580 #endif
581 }
582 
OnLimeRFEClose(wxCloseEvent & event)583 void LMS7SuiteAppFrame::OnLimeRFEClose(wxCloseEvent& event)
584 {
585 	limeRFEwin->Destroy();
586 	limeRFEwin = nullptr;
587 }
588