2 #include "../drv/b15f.h" 4 std::vector<View*> win_stack;
10 view->setTitle(
"B15F - Command Line Interface");
11 view->addChoice(
"[ Monitor - Eingaben beobachten ]", &show_monitor);
12 view->addChoice(
"[ Digitale Ausgabe BE0 ]", &show_digital_output0);
13 view->addChoice(
"[ Digitale Ausgabe BE1 ]", &show_digital_output1);
14 view->addChoice(
"[ Analoge Ausgabe AA0 ]", &show_analog_output0);
15 view->addChoice(
"[ Analoge Ausgabe AA1 ]", &show_analog_output1);
16 view->addChoice(
"[ Selbsttest des B15 ]", &show_selftest_info);
17 view->addChoice(
"[ Informationen ]", &show_info);
18 view->addChoice(
"",
nullptr);
19 view->addChoice(
"[ Beenden ]", &finish);
22 win_stack.push_back(view);
32 key = wgetch(View::getWinContext());
33 win_stack.back()->repaint();
34 nextCall = win_stack.back()->keypress(key);
42 while(win_stack.size());
49 delete win_stack.back();
53 win_stack.back()->repaint();
64 if(t_refresh.joinable())
74 view->setTitle(
"Info");
75 view->setText(
"Informationen zu Board 15 Famulus Edition\nEs war einmal...");
76 view->setLabelClose(
"[ Zurueck ]");
79 win_stack.push_back(view);
83 void show_monitor(
int)
86 view->setTitle(
"Monitor");
87 view->setText(
"\nErfasse Messwerte...");
88 view->setLabelClose(
"[ Zurueck ]");
91 win_stack.push_back(view);
95 void show_invalid_port_input(
int)
98 view->setTitle(
"Falsche Eingabe");
99 view->setText(
"Bitte geben Sie einen Wert aus dem Intervall [0, FF] an.");
100 view->setLabelClose(
"[ Schliessen ]");
103 win_stack.push_back(view);
107 void show_invalid_dac_input(
int)
110 view->setTitle(
"Falsche Eingabe");
111 view->setText(
"Bitte geben Sie einen Wert aus dem Intervall [0, 1023] an.");
112 view->setLabelClose(
"[ Schliessen ]");
115 win_stack.push_back(view);
119 void write_digital_output0(
int)
123 int d = std::stoi(static_cast<ViewPromt*>(win_stack.back())->getInput(), 0, 16);
125 throw std::invalid_argument(
"bad value");
126 uint8_t port = static_cast<uint8_t>(d);
132 catch(std::invalid_argument& ex)
134 show_invalid_port_input(0);
138 void write_digital_output1(
int)
142 int d = std::stoi(static_cast<ViewPromt*>(win_stack.back())->getInput(), 0, 16);
144 throw std::invalid_argument(
"bad value");
145 uint8_t port = static_cast<uint8_t>(d);
151 catch(std::invalid_argument& ex)
153 show_invalid_port_input(0);
157 void write_analog_output0(
int)
161 uint16_t port = std::stoi(static_cast<ViewPromt*>(win_stack.back())->getInput());
163 throw std::invalid_argument(
"bad value");
169 catch(std::invalid_argument& ex)
171 show_invalid_dac_input(0);
175 void write_analog_output1(
int)
179 uint16_t port = std::stoi(static_cast<ViewPromt*>(win_stack.back())->getInput());
181 throw std::invalid_argument(
"bad value");
187 catch(std::invalid_argument& ex)
189 show_invalid_dac_input(0);
193 void show_digital_output0(
int)
196 view->setTitle(
"Digitale Ausgabe BE0");
197 view->setMessage(
"\nAusgabe Port-Wert (hex): 0x");
198 view->setCancel(
"[ Zurueck ]",
true);
199 view->setConfirm(
"[ OK ]", &write_digital_output0);
202 win_stack.push_back(view);
206 void show_digital_output1(
int)
209 view->setTitle(
"Digitale Ausgabe BE1");
210 view->setMessage(
"\nAusgabe Port-Wert (hex): 0x");
211 view->setCancel(
"[ Zurueck ]",
true);
212 view->setConfirm(
"[ OK ]", &write_digital_output1);
215 win_stack.push_back(view);
219 void show_analog_output0(
int)
222 view->setTitle(
"Analoge Ausgabe AA0");
223 view->setMessage(
"\nAusgabe 10-Bit-Wert (0...1023): ");
224 view->setCancel(
"[ Zurueck ]",
true);
225 view->setConfirm(
"[ OK ]", &write_analog_output0);
228 win_stack.push_back(view);
232 void show_analog_output1(
int)
235 view->setTitle(
"Analoge Ausgabe AA1");
236 view->setMessage(
"\nAusgabe 10-Bit-Wert (0...1023): ");
237 view->setCancel(
"[ Zurueck ]",
true);
238 view->setConfirm(
"[ OK ]", &write_analog_output1);
241 win_stack.push_back(view);
245 void start_selftest(
int)
251 view->setTitle(
"Selbsttest aktiv");
252 view->setText(
"Das B15 befindet sich jetzt im Selbsttestmodus.\n \nSelbsttest:\nZu Beginn geht der Reihe nach jede LED von BA0 bis BA1 an.\nDanach leuchten die LEDs an AA0 und AA1 kurz auf.\nZum Schluss spiegelt in einer Endlosschleife:\n* BA0 Port BE0\n* BA1 die DIP-Schalter S7\n* AA0 ADC0\n* AA1 ADC1");
253 view->setLabelClose(
"[ Selbsttest Beenden ]");
254 view->setCall(&stop_selftest);
257 win_stack.push_back(view);
261 void stop_selftest(
int)
271 void show_selftest_info(
int)
274 view->setTitle(
"Selbsttest");
275 view->setText(
"Bitte entfernen Sie jetzt alle Draehte von den Anschlussklemmen und bestaetigen\nmit Enter.");
276 view->setLabelClose(
"[ Weiter ]");
277 view->setCall(&start_selftest);
280 win_stack.push_back(view);