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