From: Stephan Linz <linz@li-pro.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/3 v2] common: add possibility for readline_into_buffer timeout
Date: Fri, 17 Feb 2012 22:33:32 +0100 [thread overview]
Message-ID: <1329514412.18038.35.camel@keto> (raw)
In-Reply-To: <1326784385-4759-1-git-send-email-hs@denx.de>
Hello Heiko,
it seems there is a problem with this patch for some architectures. On
Microblaze I run into linker errors:
common/libcommon.o: In function `cread_line':
u-boot-bref/common/main.c:717: undefined reference to `get_ticks'
u-boot-mbref/common/main.c:717: undefined reference to `get_tbclk'
u-boot-mbref/common/main.c:720: undefined reference to `get_ticks'
AFAICS some architectures lacking these symbols. What is the default
U-Boot design line here. Should we implement the missing symbols for
Microblaze or can you introduce a CONFIG_ option to disable this new
feature?
br,
Stephan
Am Dienstag, den 17.01.2012, 08:13 +0100 schrieb Heiko Schocher:
> add possibility to add a timeout when reading a line
> into a buffer.
>
> Signed-off-by: Heiko Schocher <hs@denx.de>
> Cc: Mike Frysinger <vapier@gentoo.org>
>
> ---
> - changes for v2:
> - add comments from Mike Frysinger <vapier@gentoo.org>:
> - remove useless inner parens
> - rework timeout handling in readline_into_buffer():
> use endtick(), drop CONIG_SYS_HZ usage
>
> common/cmd_nvedit.c | 2 +-
> common/main.c | 20 ++++++++++++++++----
> common/menu.c | 3 ++-
> include/common.h | 3 ++-
> 4 files changed, 21 insertions(+), 7 deletions(-)
>
> diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
> index 63afc82..20080dc 100644
> --- a/common/cmd_nvedit.c
> +++ b/common/cmd_nvedit.c
> @@ -502,7 +502,7 @@ int do_env_edit(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> else
> buffer[0] = '\0';
>
> - readline_into_buffer("edit: ", buffer);
> + readline_into_buffer("edit: ", buffer, 0);
>
> return setenv(argv[1], buffer);
> }
> diff --git a/common/main.c b/common/main.c
> index e96c95a..248744b 100644
> --- a/common/main.c
> +++ b/common/main.c
> @@ -685,7 +685,8 @@ static void cread_add_str(char *str, int strsize, int insert, unsigned long *num
> }
> }
>
> -static int cread_line(const char *const prompt, char *buf, unsigned int *len)
> +static int cread_line(const char *const prompt, char *buf, unsigned int *len,
> + int timeout)
> {
> unsigned long num = 0;
> unsigned long eol_num = 0;
> @@ -695,6 +696,7 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len)
> int esc_len = 0;
> char esc_save[8];
> int init_len = strlen(buf);
> + int first = 1;
>
> if (init_len)
> cread_add_str(buf, init_len, 1, &num, &eol_num, buf, *len);
> @@ -707,6 +709,16 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len)
> WATCHDOG_RESET();
> }
> #endif
> + if (first && timeout) {
> + uint64_t etime = endtick(timeout);
> +
> + while (!tstc()) { /* while no incoming data */
> + if (get_ticks() >= etime)
> + return -2; /* timed out */
> + WATCHDOG_RESET();
> + }
> + first = 0;
> + }
>
> ichar = getcmd_getch();
>
> @@ -922,11 +934,11 @@ int readline (const char *const prompt)
> */
> console_buffer[0] = '\0';
>
> - return readline_into_buffer(prompt, console_buffer);
> + return readline_into_buffer(prompt, console_buffer, 0);
> }
>
>
> -int readline_into_buffer (const char *const prompt, char * buffer)
> +int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
> {
> char *p = buffer;
> #ifdef CONFIG_CMDLINE_EDITING
> @@ -949,7 +961,7 @@ int readline_into_buffer (const char *const prompt, char * buffer)
> if (prompt)
> puts (prompt);
>
> - rc = cread_line(prompt, p, &len);
> + rc = cread_line(prompt, p, &len, timeout);
> return rc < 0 ? rc : len;
>
> } else {
> diff --git a/common/menu.c b/common/menu.c
> index 5e0817c..3b1e0d0 100644
> --- a/common/menu.c
> +++ b/common/menu.c
> @@ -222,7 +222,8 @@ static inline int menu_interactive_choice(struct menu *m, void **choice)
>
> menu_display(m);
>
> - readret = readline_into_buffer("Enter choice: ", cbuf);
> + readret = readline_into_buffer("Enter choice: ", cbuf,
> + m->timeout);
>
> if (readret >= 0) {
> choice_item = menu_item_by_key(m, cbuf);
> diff --git a/include/common.h b/include/common.h
> index 3df1def..7a9b3a2 100644
> --- a/include/common.h
> +++ b/include/common.h
> @@ -265,7 +265,8 @@ int run_command (const char *cmd, int flag);
> int run_command2(const char *cmd, int flag);
> #endif
> int readline (const char *const prompt);
> -int readline_into_buffer (const char *const prompt, char * buffer);
> +int readline_into_buffer(const char *const prompt, char *buffer,
> + int timeout);
> int parse_line (char *, char *[]);
> void init_cmd_timeout(void);
> void reset_cmd_timeout(void);
next prev parent reply other threads:[~2012-02-17 21:33 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-15 7:53 [U-Boot] [PATCH 0/3] common, menu: enhancements Heiko Schocher
2012-01-15 7:53 ` [U-Boot] [PATCH 1/3] common: add possibility for readline_into_buffer timeout Heiko Schocher
2012-01-15 17:35 ` Mike Frysinger
2012-01-16 6:43 ` Heiko Schocher
2012-01-17 7:13 ` [U-Boot] [PATCH 1/3 v2] " Heiko Schocher
2012-01-17 19:14 ` Mike Frysinger
2012-02-17 21:33 ` Stephan Linz [this message]
2012-02-17 23:18 ` Mike Frysinger
2012-01-15 7:53 ` [U-Boot] [PATCH 2/3] common, menu: add statusline support Heiko Schocher
2012-01-15 17:36 ` Mike Frysinger
2012-01-16 6:54 ` Heiko Schocher
2012-01-17 7:13 ` [U-Boot] [PATCH 2/3 v2] " Heiko Schocher
2012-01-17 19:14 ` Mike Frysinger
2012-01-15 7:53 ` [U-Boot] [PATCH 3/3] common, menu: show menu on startup if CONFIG_MENU_SHOW is defined Heiko Schocher
2012-01-15 17:38 ` Mike Frysinger
2012-01-16 6:55 ` Heiko Schocher
2012-01-17 7:13 ` [U-Boot] [PATCH 3/3 v2] " Heiko Schocher
2012-01-17 12:55 ` Jason Hobbs
2012-01-18 6:05 ` [U-Boot] [PATCH 3/3 v3] " Heiko Schocher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1329514412.18038.35.camel@keto \
--to=linz@li-pro.net \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.