
return i;
+#else /* Try assigning specified device */ if (console_assign (console, argv[2]) < 0) return 1; @@ -221,6 +226,7 @@ int _do_setenv (int flag, int argc, char *argv[]) if (serial_assign (argv[2]) < 0) return 1; #endif +#endif /* CONFIG_IO_MUX */ }
/*
diff --git a/common/console.c b/common/console.c index 56d9118..6158af9 100644 --- a/common/console.c +++ b/common/console.c @@ -93,6 +93,78 @@ static int console_setfile (int file, device_t * dev) return error; }
+#if defined(CONFIG_IO_MUX) +/** Console I/O multiplexing *******************************************/
+static device_t *tstcdev; +device_t *console_devices[MAX_FILES][MAX_CONSARGS];
please use a list_head instead
+/*
- This depends on tstc() always being called before getc().
- No attempt is made to demultiplex multiple input sources.
- */
+static int iomux_getc(void) +{
- unsigned char ret;
- ret = tstcdev->getc();
- tstcdev = NULL;
- return ret;
+}
#ifdef CONFIG_STATUS_LED
diff --git a/include/iomux.h b/include/iomux.h new file mode 100644 index 0000000..1310a75 --- /dev/null +++ b/include/iomux.h @@ -0,0 +1,48 @@ +/*
- (C) Copyright 2008
- Gary Jennejohn, DENX Software Engineering GmbH, garyj@denx.de.
- See file CREDITS for list of people who contributed to this
- project.
- This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
please fix
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- MA 02111-1307 USA
- */
+#ifndef _IO_MUX_H +#define _IO_MUX_H
+#include <devices.h>
+/*
- Stuff required to support console multiplexing.
- */
+/* Only allow this many devices in the comma separated list of consoles */ +#define MAX_CONSARGS 6
No more need if you use list_head
+/*
- Avoid invoking WATCHDOG via udelayy() on every pass through the loop
- in fgetc(). Note this is all based on guesswork.
- */
+#define COUNT_TIL_UDELAY 10000
+/*
- Pointers to devices used for each file type. Defined in console.c.
- */
+extern device_t *console_devices[MAX_FILES][MAX_CONSARGS];
ditto
+#define CONSDEVS_LINE_SIZE (sizeof(device_t *) * MAX_CONSARGS)
ditto
Best Regards, J.