AP_Menu: fixed double display of prompt

This commit is contained in:
Andrew Tridgell 2013-11-06 10:16:14 +11:00
parent 45381e5341
commit a86ec8c786
2 changed files with 24 additions and 8 deletions

View File

@ -80,10 +80,16 @@ Menu::_check_for_input(void)
return false; return false;
} }
// display the prompt
void
Menu::_display_prompt(void)
{
_port->printf_P(PSTR("%S] "), FPSTR(_prompt));
}
// run the menu // run the menu
bool bool
Menu::_run_command(void) Menu::_run_command(bool prompt_on_enter)
{ {
int8_t ret; int8_t ret;
uint8_t i; uint8_t i;
@ -109,7 +115,9 @@ Menu::_run_command(void)
if (_argv[0].str == NULL) { if (_argv[0].str == NULL) {
// we got a blank line, re-display the prompt // we got a blank line, re-display the prompt
_port->printf_P(PSTR("%S] "), FPSTR(_prompt)); if (prompt_on_enter) {
_display_prompt();
}
return false; return false;
} }
@ -167,16 +175,20 @@ Menu::run(void)
_allocate_buffers(); _allocate_buffers();
_display_prompt();
// loop performing commands // loop performing commands
for (;;) { for (;;) {
// run the pre-prompt function, if one is defined // run the pre-prompt function, if one is defined
if ((NULL != _ppfunc) && !_ppfunc()) if (NULL != _ppfunc) {
return; if (!_ppfunc())
return;
_display_prompt();
}
// loop reading characters from the input // loop reading characters from the input
_input_len = 0; _input_len = 0;
_port->printf_P(PSTR("%S] "), FPSTR(_prompt));
for (;; ) { for (;; ) {
if (_check_for_input()) { if (_check_for_input()) {
@ -186,7 +198,9 @@ Menu::run(void)
} }
// we have a full command to run // we have a full command to run
if (_run_command()) break; if (_run_command(false)) break;
_display_prompt();
} }
} }
@ -202,7 +216,7 @@ Menu::check_input(void)
_allocate_buffers(); _allocate_buffers();
if (_check_for_input()) { if (_check_for_input()) {
return _run_command(); return _run_command(true);
} }
return false; return false;

View File

@ -148,7 +148,9 @@ private:
// run one full entered command. // run one full entered command.
// return true if the menu loop should exit // return true if the menu loop should exit
bool _run_command(void); bool _run_command(bool prompt_on_enter);
void _display_prompt();
// port to run on // port to run on
static AP_HAL::BetterStream *_port; static AP_HAL::BetterStream *_port;