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