1 /**
2 @file	Si5351C_wxgui.cpp
3 @author	Lime Microsystems
4 @brief 	panel for configuring Si5351C
5 */
6 
7 #include "Si5351C_wxgui.h"
8 #include "Si5351C.h"
9 #include "lms7_device.h"
10 #include <LMSBoards.h>
11 
12 //(*InternalHeaders(Si5351C_wxgui)
13 #include <wx/intl.h>
14 #include <wx/string.h>
15 //*)
16 
17 #include <wx/filedlg.h>
18 #include <wx/wx.h>
19 
20 using namespace lime;
21 
22 //(*IdInit(Si5351C_wxgui)
23 const long Si5351C_wxgui::ID_BUTTON2 = wxNewId();
24 const long Si5351C_wxgui::ID_BUTTON4 = wxNewId();
25 const long Si5351C_wxgui::ID_STATICTEXT1 = wxNewId();
26 const long Si5351C_wxgui::ID_TEXTCTRL1 = wxNewId();
27 const long Si5351C_wxgui::ID_STATICTEXT14 = wxNewId();
28 const long Si5351C_wxgui::ID_BUTTON1 = wxNewId();
29 const long Si5351C_wxgui::ID_BUTTON5 = wxNewId();
30 const long Si5351C_wxgui::ID_STATICTEXT2 = wxNewId();
31 const long Si5351C_wxgui::ID_STATICTEXT11 = wxNewId();
32 const long Si5351C_wxgui::ID_STATICTEXT12 = wxNewId();
33 const long Si5351C_wxgui::ID_STATICTEXT13 = wxNewId();
34 const long Si5351C_wxgui::ID_STATICTEXT3 = wxNewId();
35 const long Si5351C_wxgui::ID_CHECKBOX1 = wxNewId();
36 const long Si5351C_wxgui::ID_TEXTCTRL2 = wxNewId();
37 const long Si5351C_wxgui::ID_CHECKBOX9 = wxNewId();
38 const long Si5351C_wxgui::ID_STATICTEXT4 = wxNewId();
39 const long Si5351C_wxgui::ID_CHECKBOX2 = wxNewId();
40 const long Si5351C_wxgui::ID_TEXTCTRL3 = wxNewId();
41 const long Si5351C_wxgui::ID_CHECKBOX10 = wxNewId();
42 const long Si5351C_wxgui::ID_STATICTEXT5 = wxNewId();
43 const long Si5351C_wxgui::ID_CHECKBOX3 = wxNewId();
44 const long Si5351C_wxgui::ID_TEXTCTRL4 = wxNewId();
45 const long Si5351C_wxgui::ID_CHECKBOX11 = wxNewId();
46 const long Si5351C_wxgui::ID_STATICTEXT6 = wxNewId();
47 const long Si5351C_wxgui::ID_CHECKBOX4 = wxNewId();
48 const long Si5351C_wxgui::ID_TEXTCTRL5 = wxNewId();
49 const long Si5351C_wxgui::ID_CHECKBOX12 = wxNewId();
50 const long Si5351C_wxgui::ID_STATICTEXT7 = wxNewId();
51 const long Si5351C_wxgui::ID_CHECKBOX5 = wxNewId();
52 const long Si5351C_wxgui::ID_TEXTCTRL6 = wxNewId();
53 const long Si5351C_wxgui::ID_CHECKBOX13 = wxNewId();
54 const long Si5351C_wxgui::ID_STATICTEXT8 = wxNewId();
55 const long Si5351C_wxgui::ID_CHECKBOX6 = wxNewId();
56 const long Si5351C_wxgui::ID_TEXTCTRL7 = wxNewId();
57 const long Si5351C_wxgui::ID_CHECKBOX14 = wxNewId();
58 const long Si5351C_wxgui::ID_STATICTEXT9 = wxNewId();
59 const long Si5351C_wxgui::ID_CHECKBOX7 = wxNewId();
60 const long Si5351C_wxgui::ID_TEXTCTRL8 = wxNewId();
61 const long Si5351C_wxgui::ID_CHECKBOX15 = wxNewId();
62 const long Si5351C_wxgui::ID_STATICTEXT10 = wxNewId();
63 const long Si5351C_wxgui::ID_CHECKBOX8 = wxNewId();
64 const long Si5351C_wxgui::ID_TEXTCTRL9 = wxNewId();
65 const long Si5351C_wxgui::ID_CHECKBOX16 = wxNewId();
66 const long Si5351C_wxgui::ID_BUTTON3 = wxNewId();
67 //*)
68 
BEGIN_EVENT_TABLE(Si5351C_wxgui,wxFrame)69 BEGIN_EVENT_TABLE(Si5351C_wxgui, wxFrame)
70 //(*EventTable(Si5351C_wxgui)
71 //*)
72 END_EVENT_TABLE()
73 #include <vector>
74 
75 Si5351C_wxgui::Si5351C_wxgui(wxWindow* parent, wxWindowID id, const wxString &title, const wxPoint& pos, const wxSize& size, int styles, wxString idname)
76 {
77     lmsControl = NULL;
78 
79     wxFlexGridSizer* FlexGridSizer4;
80     wxFlexGridSizer* FlexGridSizer3;
81     wxFlexGridSizer* FlexGridSizer5;
82     wxFlexGridSizer* FlexGridSizer9;
83     wxFlexGridSizer* FlexGridSizer2;
84     wxFlexGridSizer* FlexGridSizer6;
85     wxStaticBoxSizer* StaticBoxSizer1;
86     wxFlexGridSizer* FlexGridSizer1;
87 
88     Create(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, styles, _T("wxID_ANY"));
89     SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
90     FlexGridSizer1 = new wxFlexGridSizer(0, 1, 0, 0);
91     FlexGridSizer3 = new wxFlexGridSizer(0, 3, 0, 0);
92     StaticBoxSizer1 = new wxStaticBoxSizer(wxVERTICAL, this, _("Si5351C"));
93     btnLoadFile = new wxButton(this, ID_BUTTON2, _("Upload register map from file"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON2"));
94     StaticBoxSizer1->Add(btnLoadFile, 1, wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
95     btnResetToDefaults = new wxButton(this, ID_BUTTON4, _("Reset register map to default"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON4"));
96     StaticBoxSizer1->Add(btnResetToDefaults, 1, wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
97     FlexGridSizer3->Add(StaticBoxSizer1, 1, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
98     FlexGridSizer2 = new wxFlexGridSizer(0, 2, 5, 5);
99     StaticText1 = new wxStaticText(this, ID_STATICTEXT1, _("CLKIN Frequency (MHz)"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1"));
100     FlexGridSizer2->Add(StaticText1, 1, wxTOP | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
101     txtCLKIN_MHz = new wxTextCtrl(this, ID_TEXTCTRL1, _("30.72"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL1"));
102     FlexGridSizer2->Add(txtCLKIN_MHz, 1, wxTOP | wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
103 
104     const wxString clksrcChoices[] = { _("XTAL"), _("CLKIN") };
105     rgrClkSrc = new wxRadioBox(this, wxNewId(), _("PLL src"), wxDefaultPosition, wxDefaultSize, 2, clksrcChoices, 2, wxRA_SPECIFY_COLS, wxDefaultValidator, _T("ID_RADIOBOX1"));
106     FlexGridSizer2->Add(rgrClkSrc, 1, wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 0);
107 
108     const wxString xtalfreqChoices[] = { _("25 MHz"), _("27 MHz") };
109     rgrXTALfreq = new wxRadioBox(this, wxNewId(), _("XTAL freq"), wxDefaultPosition, wxDefaultSize, 2, xtalfreqChoices, 2, wxRA_SPECIFY_COLS, wxDefaultValidator, _T("ID_RADIOBOX1"));
110     FlexGridSizer2->Add(rgrXTALfreq, 1, wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 0);
111 
112     FlexGridSizer3->Add(FlexGridSizer2, 1, wxLEFT | wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
113     FlexGridSizer6 = new wxFlexGridSizer(0, 1, 0, 0);
114     lblStatus = new wxStaticText(this, ID_STATICTEXT14, _("SYS_INIT:\t\? \t SYS_INIT_STKY:\t\?\nLOL_B:\t\?  \tLOL_B_STKY:\t\?\nLOL_A:\t\?  \tLOL_A_STKY:\t\?\nLOS:\t\?  \tLOS_STKY:\t\?"), wxDefaultPosition, wxSize(282, 59), 0, _T("ID_STATICTEXT14"));
115     FlexGridSizer6->Add(lblStatus, 1, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
116     FlexGridSizer5 = new wxFlexGridSizer(0, 3, 0, 0);
117     btnReadStatus = new wxButton(this, ID_BUTTON1, _("Read Status"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1"));
118     FlexGridSizer5->Add(btnReadStatus, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
119     btnClearStatus = new wxButton(this, ID_BUTTON5, _("Clear"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON5"));
120     FlexGridSizer5->Add(btnClearStatus, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
121     FlexGridSizer6->Add(FlexGridSizer5, 1, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
122     FlexGridSizer3->Add(FlexGridSizer6, 1, wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
123     FlexGridSizer1->Add(FlexGridSizer3, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 5);
124     FlexGridSizer4 = new wxFlexGridSizer(0, 5, 0, 0);
125     FlexGridSizer9 = new wxFlexGridSizer(0, 4, 0, 0);
126     StaticText2 = new wxStaticText(this, ID_STATICTEXT2, _("Pin Name"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT2"));
127     FlexGridSizer9->Add(StaticText2, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
128     StaticText11 = new wxStaticText(this, ID_STATICTEXT11, _("Enable channel"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT11"));
129     FlexGridSizer9->Add(StaticText11, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
130     StaticText12 = new wxStaticText(this, ID_STATICTEXT12, _("Output frequency (MHz)"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT12"));
131     FlexGridSizer9->Add(StaticText12, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
132     StaticText13 = new wxStaticText(this, ID_STATICTEXT13, _("Invert output"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT13"));
133     FlexGridSizer9->Add(StaticText13, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
134     lblCLK0 = new wxStaticText(this, ID_STATICTEXT3, _("CLK0"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT3"));
135     FlexGridSizer9->Add(lblCLK0, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
136     chkEN_CLK0 = new wxCheckBox(this, ID_CHECKBOX1, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX1"));
137     chkEN_CLK0->SetValue(true);
138     FlexGridSizer9->Add(chkEN_CLK0, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
139     txtFreq_CLK0 = new wxTextCtrl(this, ID_TEXTCTRL2, _("27.0"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL2"));
140     FlexGridSizer9->Add(txtFreq_CLK0, 1, wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
141     chkInvert_CLK0 = new wxCheckBox(this, ID_CHECKBOX9, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX9"));
142     chkInvert_CLK0->SetValue(false);
143     FlexGridSizer9->Add(chkInvert_CLK0, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
144     lblCLK1 = new wxStaticText(this, ID_STATICTEXT4, _("CLK1"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT4"));
145     FlexGridSizer9->Add(lblCLK1, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
146     chkEN_CLK1 = new wxCheckBox(this, ID_CHECKBOX2, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX2"));
147     chkEN_CLK1->SetValue(true);
148     FlexGridSizer9->Add(chkEN_CLK1, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
149     txtFreq_CLK1 = new wxTextCtrl(this, ID_TEXTCTRL3, _("27.0"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL3"));
150     FlexGridSizer9->Add(txtFreq_CLK1, 1, wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
151     chkInvert_CLK1 = new wxCheckBox(this, ID_CHECKBOX10, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX10"));
152     chkInvert_CLK1->SetValue(false);
153     FlexGridSizer9->Add(chkInvert_CLK1, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
154     lblCLK2 = new wxStaticText(this, ID_STATICTEXT5, _("CLK2"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT5"));
155     FlexGridSizer9->Add(lblCLK2, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
156     chkEN_CLK2 = new wxCheckBox(this, ID_CHECKBOX3, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX3"));
157     chkEN_CLK2->SetValue(true);
158     FlexGridSizer9->Add(chkEN_CLK2, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
159     txtFreq_CLK2 = new wxTextCtrl(this, ID_TEXTCTRL4, _("27.0"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL4"));
160     FlexGridSizer9->Add(txtFreq_CLK2, 1, wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
161     chkInvert_CLK2 = new wxCheckBox(this, ID_CHECKBOX11, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX11"));
162     chkInvert_CLK2->SetValue(false);
163     FlexGridSizer9->Add(chkInvert_CLK2, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
164     lblCLK3 = new wxStaticText(this, ID_STATICTEXT6, _("CLK3"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT6"));
165     FlexGridSizer9->Add(lblCLK3, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
166     chkEN_CLK3 = new wxCheckBox(this, ID_CHECKBOX4, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX4"));
167     chkEN_CLK3->SetValue(true);
168     FlexGridSizer9->Add(chkEN_CLK3, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
169     txtFreq_CLK3 = new wxTextCtrl(this, ID_TEXTCTRL5, _("27.0"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL5"));
170     FlexGridSizer9->Add(txtFreq_CLK3, 1, wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
171     chkInvert_CLK3 = new wxCheckBox(this, ID_CHECKBOX12, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX12"));
172     chkInvert_CLK3->SetValue(false);
173     FlexGridSizer9->Add(chkInvert_CLK3, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
174     lblCLK4 = new wxStaticText(this, ID_STATICTEXT7, _("CLK4"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT7"));
175     FlexGridSizer9->Add(lblCLK4, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
176     chkEN_CLK4 = new wxCheckBox(this, ID_CHECKBOX5, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX5"));
177     chkEN_CLK4->SetValue(true);
178     FlexGridSizer9->Add(chkEN_CLK4, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
179     txtFreq_CLK4 = new wxTextCtrl(this, ID_TEXTCTRL6, _("27.0"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL6"));
180     FlexGridSizer9->Add(txtFreq_CLK4, 1, wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
181     chkInvert_CLK4 = new wxCheckBox(this, ID_CHECKBOX13, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX13"));
182     chkInvert_CLK4->SetValue(false);
183     FlexGridSizer9->Add(chkInvert_CLK4, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
184     lblCLK5 = new wxStaticText(this, ID_STATICTEXT8, _("CLK5"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT8"));
185     FlexGridSizer9->Add(lblCLK5, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
186     chkEN_CLK5 = new wxCheckBox(this, ID_CHECKBOX6, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX6"));
187     chkEN_CLK5->SetValue(true);
188     FlexGridSizer9->Add(chkEN_CLK5, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
189     txtFreq_CLK5 = new wxTextCtrl(this, ID_TEXTCTRL7, _("27.0"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL7"));
190     FlexGridSizer9->Add(txtFreq_CLK5, 1, wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
191     chkInvert_CLK5 = new wxCheckBox(this, ID_CHECKBOX14, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX14"));
192     chkInvert_CLK5->SetValue(false);
193     FlexGridSizer9->Add(chkInvert_CLK5, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
194     lblCLK6 = new wxStaticText(this, ID_STATICTEXT9, _("CLK6"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT9"));
195     FlexGridSizer9->Add(lblCLK6, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
196     chkEN_CLK6 = new wxCheckBox(this, ID_CHECKBOX7, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX7"));
197     chkEN_CLK6->SetValue(true);
198     FlexGridSizer9->Add(chkEN_CLK6, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
199     txtFreq_CLK6 = new wxTextCtrl(this, ID_TEXTCTRL8, _("27.0"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL8"));
200     FlexGridSizer9->Add(txtFreq_CLK6, 1, wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
201     chkInvert_CLK6 = new wxCheckBox(this, ID_CHECKBOX15, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX15"));
202     chkInvert_CLK6->SetValue(false);
203     FlexGridSizer9->Add(chkInvert_CLK6, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
204     lblCLK7 = new wxStaticText(this, ID_STATICTEXT10, _("CLK7"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT10"));
205     FlexGridSizer9->Add(lblCLK7, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
206     chkEN_CLK7 = new wxCheckBox(this, ID_CHECKBOX8, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX8"));
207     chkEN_CLK7->SetValue(true);
208     FlexGridSizer9->Add(chkEN_CLK7, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
209     txtFreq_CLK7 = new wxTextCtrl(this, ID_TEXTCTRL9, _("27.0"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL9"));
210     FlexGridSizer9->Add(txtFreq_CLK7, 1, wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
211     chkInvert_CLK7 = new wxCheckBox(this, ID_CHECKBOX16, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX16"));
212     chkInvert_CLK7->SetValue(false);
213     FlexGridSizer9->Add(chkInvert_CLK7, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
214     FlexGridSizer4->Add(FlexGridSizer9, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
215     btnConfigure = new wxButton(this, ID_BUTTON3, _("Configure Clocks"), wxDefaultPosition, wxSize(113, 61), 0, wxDefaultValidator, _T("ID_BUTTON3"));
216     FlexGridSizer4->Add(btnConfigure, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
217     FlexGridSizer1->Add(FlexGridSizer4, 1, wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
218     SetSizer(FlexGridSizer1);
219     FlexGridSizer1->Fit(this);
220     FlexGridSizer1->SetSizeHints(this);
221 
222     Connect(ID_BUTTON2, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&Si5351C_wxgui::OnbtnLoadFileClick);
223     Connect(ID_BUTTON4, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&Si5351C_wxgui::OnbtnResetToDefaultsClick);
224     Connect(ID_BUTTON1, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&Si5351C_wxgui::OnbtnReadStatusClick);
225     Connect(ID_BUTTON5, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&Si5351C_wxgui::OnbtnClearStatusClick);
226     Connect(ID_BUTTON3, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&Si5351C_wxgui::OnbtnConfigureClockClick);
227 }
228 
Initialize(lms_device_t * pModule)229 void Si5351C_wxgui::Initialize(lms_device_t* pModule)
230 {
231     lmsControl = pModule;
232 }
233 
BuildContent(wxWindow * parent,wxWindowID id,const wxPoint & pos,const wxSize & size)234 void Si5351C_wxgui::BuildContent(wxWindow* parent,wxWindowID id,const wxPoint& pos,const wxSize& size)
235 {
236 }
237 
~Si5351C_wxgui()238 Si5351C_wxgui::~Si5351C_wxgui()
239 {
240 }
241 
OnbtnLoadFileClick(wxCommandEvent & event)242 void Si5351C_wxgui::OnbtnLoadFileClick(wxCommandEvent& event)
243 {
244    wxFileDialog openFileDialog(this, _("Open project file"), "", "", "Register Files (*.h)|*.h|Text files (*.txt)|*.TXT", wxFD_OPEN|wxFD_FILE_MUST_EXIST);
245     if (openFileDialog.ShowModal() == wxID_CANCEL)
246         return;
247 
248     lime::Si5351C obj;
249     obj.Initialize(((LMS7_Device*)lmsControl)->GetConnection());
250     obj.LoadRegValuesFromFile(std::string(openFileDialog.GetPath().ToStdString()));
251     if (obj.UploadConfiguration()!=0)
252         wxMessageBox(wxString::Format(_("Configuration failed"), _("Error")));
253 }
254 
OnbtnConfigureClockClick(wxCommandEvent & event)255 void Si5351C_wxgui::OnbtnConfigureClockClick(wxCommandEvent& event)
256 {
257     double refFreq;
258     if (rgrClkSrc->GetSelection() == 0)
259         refFreq = (rgrXTALfreq->GetSelection() == 0 ? 25 : 27);
260     else
261         txtCLKIN_MHz->GetValue().ToDouble(&refFreq);
262     double freq[8];
263     double clkin = refFreq * 1000000;
264     txtFreq_CLK0->GetValue().ToDouble(&freq[0]);
265     txtFreq_CLK1->GetValue().ToDouble(&freq[1]);
266     txtFreq_CLK2->GetValue().ToDouble(&freq[2]);
267     txtFreq_CLK3->GetValue().ToDouble(&freq[3]);
268     txtFreq_CLK4->GetValue().ToDouble(&freq[4]);
269     txtFreq_CLK5->GetValue().ToDouble(&freq[5]);
270     txtFreq_CLK6->GetValue().ToDouble(&freq[6]);
271     txtFreq_CLK7->GetValue().ToDouble(&freq[7]);
272 
273     for (int i = 0; i < 8 ; i++)
274         freq[i] *= 1e6;
275 
276     if (!chkEN_CLK0->GetValue()) freq[0]  = 0;
277     if (!chkEN_CLK1->GetValue()) freq[1]  = 0;
278     if (!chkEN_CLK2->GetValue()) freq[2]  = 0;
279     if (!chkEN_CLK3->GetValue()) freq[3]  = 0;
280     if (!chkEN_CLK4->GetValue()) freq[4]  = 0;
281     if (!chkEN_CLK5->GetValue()) freq[5]  = 0;
282     if (!chkEN_CLK6->GetValue()) freq[6]  = 0;
283     if (!chkEN_CLK7->GetValue()) freq[7]  = 0;
284 
285     if (chkInvert_CLK0->GetValue()) freq[0] *= -1;
286     if (chkInvert_CLK1->GetValue()) freq[1] *= -1;
287     if (chkInvert_CLK2->GetValue()) freq[2] *= -1;
288     if (chkInvert_CLK3->GetValue()) freq[3] *= -1;
289     if (chkInvert_CLK4->GetValue()) freq[4] *= -1;
290     if (chkInvert_CLK5->GetValue()) freq[5] *= -1;
291     if (chkInvert_CLK6->GetValue()) freq[6] *= -1;
292     if (chkInvert_CLK7->GetValue()) freq[7] *= -1;
293 
294     lime::Si5351C obj;
295     obj.Initialize(((LMS7_Device*)lmsControl)->GetConnection());
296 
297     obj.SetPLL(0,clkin,rgrClkSrc->GetSelection());
298     obj.SetPLL(1,clkin,rgrClkSrc->GetSelection());
299 
300     for (int i = 0; i < 8;i++)
301     {
302         unsigned clock = abs(freq[i]);
303         obj.SetClock(i,clock,clock!=0,freq[i]<0);
304     }
305 
306     if (obj.ConfigureClocks()!=0 || obj.UploadConfiguration()!=0)
307        wxMessageBox(wxString::Format(_("Configuration failed"), _("Error")));
308 }
309 
OnbtnResetToDefaultsClick(wxCommandEvent & event)310 void Si5351C_wxgui::OnbtnResetToDefaultsClick(wxCommandEvent& event)
311 {
312     lime::Si5351C obj;
313     obj.Initialize(((LMS7_Device*)lmsControl)->GetConnection());
314     obj.Reset();
315     obj.UploadConfiguration();
316 }
317 
ModifyClocksGUI(const std::string & board)318 void Si5351C_wxgui::ModifyClocksGUI(const std::string &board)
319 {
320     for(int i=0; i<8; ++i)
321         ClockEnable(i, true);
322     if(board == GetDeviceName(LMS_DEV_STREAM))
323     {
324         lblCLK0->SetLabel(_("CLK0 - CLK_IN"));
325         lblCLK1->SetLabel(_("CLK1"));
326         ClockEnable(1, false);
327         lblCLK2->SetLabel(_("CLK2 - FCLK2"));
328         lblCLK3->SetLabel(_("CLK3"));
329         ClockEnable(3, false);
330         lblCLK4->SetLabel(_("CLK4 - FCLK1"));
331         lblCLK5->SetLabel(_("CLK5"));
332         ClockEnable(5, false);
333         lblCLK6->SetLabel(_("CLK6 - CLK_FPGA0"));
334         lblCLK7->SetLabel(_("CLK7 - CLK_FPGA1"));
335         rgrClkSrc->SetSelection(1);
336     }
337     else
338     {
339         lblCLK0->SetLabel(_("CLK0"));
340         lblCLK1->SetLabel(_("CLK1"));
341         lblCLK2->SetLabel(_("CLK2"));
342         lblCLK3->SetLabel(_("CLK3"));
343         lblCLK4->SetLabel(_("CLK4"));
344         lblCLK5->SetLabel(_("CLK5"));
345         lblCLK6->SetLabel(_("CLK6"));
346         lblCLK7->SetLabel(_("CLK7"));
347         rgrClkSrc->SetSelection(0);
348     }
349     Layout();
350 }
351 
ClockEnable(unsigned int i,bool enabled)352 void Si5351C_wxgui::ClockEnable(unsigned int i, bool enabled)
353 {
354     switch(i)
355     {
356     case 0:
357         lblCLK0->Enable(enabled);
358         chkEN_CLK0->Enable(enabled);
359         txtFreq_CLK0->Enable(enabled);
360         chkInvert_CLK0->Enable(enabled);
361         break;
362     case 1:
363         lblCLK1->Enable(enabled);
364         chkEN_CLK1->Enable(enabled);
365         txtFreq_CLK1->Enable(enabled);
366         chkInvert_CLK1->Enable(enabled);
367         break;
368     case 2:
369         lblCLK2->Enable(enabled);
370         chkEN_CLK2->Enable(enabled);
371         txtFreq_CLK2->Enable(enabled);
372         chkInvert_CLK2->Enable(enabled);
373         break;
374     case 3:
375         lblCLK3->Enable(enabled);
376         chkEN_CLK3->Enable(enabled);
377         txtFreq_CLK3->Enable(enabled);
378         chkInvert_CLK3->Enable(enabled);
379         break;
380     case 4:
381         lblCLK4->Enable(enabled);
382         chkEN_CLK4->Enable(enabled);
383         txtFreq_CLK4->Enable(enabled);
384         chkInvert_CLK4->Enable(enabled);
385         break;
386     case 5:
387         lblCLK5->Enable(enabled);
388         chkEN_CLK5->Enable(enabled);
389         txtFreq_CLK5->Enable(enabled);
390         chkInvert_CLK5->Enable(enabled);
391         break;
392     case 6:
393         lblCLK6->Enable(enabled);
394         chkEN_CLK6->Enable(enabled);
395         txtFreq_CLK6->Enable(enabled);
396         chkInvert_CLK6->Enable(enabled);
397         break;
398     case 7:
399         lblCLK7->Enable(enabled);
400         chkEN_CLK7->Enable(enabled);
401         txtFreq_CLK7->Enable(enabled);
402         chkInvert_CLK7->Enable(enabled);
403         break;
404     default:
405         break;
406     }
407 }
408 
OnbtnReadStatusClick(wxCommandEvent & event)409 void Si5351C_wxgui::OnbtnReadStatusClick(wxCommandEvent& event)
410 {
411     lime::Si5351C obj;
412     obj.Initialize(((LMS7_Device*)lmsControl)->GetConnection());
413     lime::Si5351C::StatusBits stat = obj.GetStatusBits();
414     wxString text = wxString::Format("\
415 SYS_INIT:	%i 	 SYS_INIT_STKY:	%i\n\
416 LOL_B:	%i  	LOL_B_STKY:	%i\n\
417 LOL_A:	%i  	LOL_A_STKY:	%i\n\
418 LOS:	%i  	LOS_STKY:	%i", stat.sys_init, stat.sys_init_stky, stat.lol_b, stat.lol_b_stky, stat.lol_a, stat.lol_a_stky, stat.los, stat.los_stky);
419 lblStatus->SetLabel(text);
420 }
421 
OnbtnClearStatusClick(wxCommandEvent & event)422 void Si5351C_wxgui::OnbtnClearStatusClick(wxCommandEvent& event)
423 {
424     lime::Si5351C obj;
425     obj.Initialize(((LMS7_Device*)lmsControl)->GetConnection());
426     obj.ClearStatus();
427     wxString text = wxString::Format("\
428 SYS_INIT:	%i 	 SYS_INIT_STKY:	%i\n\
429 LOL_B:	%i  	LOL_B_STKY:	%i\n\
430 LOL_A:	%i  	LOL_A_STKY:	%i\n\
431 LOS:	%i  	LOS_STKY:	%i", 0,0,0,0,0,0,0,0);
432     lblStatus->SetLabel(text);
433 }
434