Chris, we are using 4.10, and this redirector does not appear in that.

Isaac, our system is a bit more complicated than just a shell, as we have a menu driven maintenance system on top of the shell.

Basically we create a task with the device name (such as "/dev/com1" or /dev/usb" or "/dev/pty0"), which we use for the in and out directions for our IO, then when we drill down to the shell we use the following commands to start the shell:

The device name is stored in the structure "ptUsrApp->devname"

FILE             *ostd[3];

   /* Save old environment */
   ostd[0] = stdin;
   ostd[1] = stdout;
   ostd[2] = stderr;


   stdin  = fopen(ptUserApp->devname, "r");
   stdout = fopen(ptUserApp->devname, "w");
   stderr = fopen(ptUserApp->devname, "w");

   rtems_shell_main_loop( &ptDispShell->env );

   /* Upon exit from the shell */
   fclose(stdin);
   fclose(stdout);
   fclose(stderr);

   stderr = ostd[2];
   stdout = ostd[1];
   stdin  = ostd[0];

This works fine for us on 4.10.

regards,

Ian Caddy



On 5/10/2015 9:20 PM, Isaac Gutekunst wrote:
Hi Ian,

That's exciting! I clearly should have looked a bit harder before
posting. Is there any special config? Or is it sufficient to instantiate
another shell with a different file descriptor for IO?

Isaac

On 10/04/2015 09:22 PM, Ian Caddy wrote:
Hi Isaac,

On 3/10/2015 4:24 AM, Isaac Gutekunst wrote:
Hey,


The hack would be that file descriptors 0,1 and 2 are not part of a
global namespace of file descriptors, and potentially refer to different
actual IO devices on a per task basis.

The motivation here would be creating a more functional shell and
support easy IO redirection for logging, and running multiple shell
instances, perhaps via multiple telnet and serial sessions.


Maybe I am missing something, but we do all this currently with the
shell.

We have a serial port access, and we have multiple telnet / ssh access
to our devices providing
multiple shells with no problems.

We also redirect the stdio for all the application tasks to print to
an application log instead
on the shell.  This is all completely doable now, as as far as I know
newlib provides a per
task stdin, etc.

Just start your task and point them where you want them to go.

regards,

Ian Caddy

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


--
Ian Caddy
Goanna Technologies Pty Ltd
+61 8 9444 2634


_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to