From: "Alex Mentis" <foo@invalid.invalid>
Subject: Re: GNAT.Serial_Communications
Date: Tue, 19 Apr 2011 19:57:06 +0000 (UTC)
Date: 2011-04-19T19:57:06+00:00 [thread overview]
Message-ID: <iokpeg$scf$1@dont-email.me> (raw)
In-Reply-To: fd63e24c-59fb-4b7a-bf4a-f49447d31ed1@v11g2000prb.googlegroups.com
Ludovic Brenta wrote:
> I think you'll have to create a task-specific binding to ioctl(2) to
> set the flow control options before writing to the port.
...
> If you're not sure what arguments to pass to ioctl, maybe you can try:
>
> strace stty --file=/dev/ttyUSB0 -crtscts
Does anyone know if the code below would work? I don't have a Linux box
handy here, so I can't test it myself. I'm just going off of some notes
on forking Linux child processes I acquired -- I've never actually done
this, myself....
** begin code **
with Ada.Text_IO; use Ada.Text_IO;
with Interfaces.C;
with Interfaces.C.Strings;
procedure Main is
procedure Config_Stty is
package C renames Interfaces.C;
-- create an array that contains each portion of the command
-- to be executed
-- array must contain a null pointer in the last element
Stty_Cmd : C.Strings.Chars_Ptr_Array :=
(C.Strings.New_String ("stty"),
C.Strings.New_String ("--file=/dev/ttyUSB0"),
C.Strings.New_String ("-crtscts"),
C.Strings.Null_Ptr);
-- create an Ada-style prototype as an interface to the C execvp
-- function and associate the two with an Import pragma
procedure Execvp (File : C.Strings.Chars_Ptr;
Args : C.Strings.Chars_Ptr_Array);
pragma Import (C, Execvp, "execvp");
-- create an Ada-style prototype to the C fork function so
-- you can call execvp then resume this program's execution
function Fork return Long_Integer;
pragma Import (C, Fork, "fork");
-- create an Ada-style prototype to the C waitpid function so
-- the parent will wait until the forked process completes
procedure Waitpid (Pid : Long_Integer; Stat_Loc, Options :
Integer);
pragma Import (C, Waitpid, "waitpid");
Pid : Long_Integer;
begin -- Config_Stty
Put_Line ("Configuring serial port...");
-- create child process
Pid := Fork;
if Pid = 0 then -- I'm the child process
-- call execvp with the stty command
Execvp (Stty_Cmd (Stty_Cmd'First), Stty_Cmd);
-- Execvp does not return unless there's an error;
-- should probably check for that here and raise exception on
error
elsif Pid > 0 then -- I'm the parent process
Waitpid (Pid, 0, 0);
Put_Line ("Continuing execution...");
else -- if Fork returns -1, then it was unsuccessful
Put_Line ("Unable to create new process.");
end if;
end Config_Stty;
begin -- Main
Config_Stty;
-- serial port's ready to go; do the rest of your stuff here...
end Main;
next prev parent reply other threads:[~2011-04-19 19:57 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-11 10:26 GNAT.Serial_Communications tonyg
2011-04-11 11:11 ` GNAT.Serial_Communications Brian Drummond
2011-04-13 7:49 ` GNAT.Serial_Communications tonyg
2011-04-13 14:12 ` GNAT.Serial_Communications Alex Mentis
2011-04-13 21:12 ` GNAT.Serial_Communications tonyg
2011-04-14 13:15 ` GNAT.Serial_Communications Alex Mentis
2011-04-14 17:52 ` GNAT.Serial_Communications Chris Moore
2011-04-15 13:58 ` GNAT.Serial_Communications tonyg
2011-04-15 16:32 ` GNAT.Serial_Communications tonyg
2011-04-15 17:12 ` GNAT.Serial_Communications Simon Clubley
2011-04-15 17:32 ` GNAT.Serial_Communications tonyg
2011-04-15 18:49 ` GNAT.Serial_Communications Simon Clubley
2011-04-16 0:07 ` GNAT.Serial_Communications tonyg
2011-04-16 8:29 ` GNAT.Serial_Communications Simon Clubley
2011-04-16 10:19 ` GNAT.Serial_Communications tonyg
2011-04-16 10:33 ` GNAT.Serial_Communications tonyg
2011-04-16 11:15 ` GNAT.Serial_Communications Brian Drummond
2011-04-16 12:03 ` GNAT.Serial_Communications tonyg
2011-04-16 15:12 ` GNAT.Serial_Communications Simon Clubley
2011-04-18 20:31 ` GNAT.Serial_Communications tonyg
2011-04-18 20:43 ` GNAT.Serial_Communications tonyg
2011-04-19 11:46 ` GNAT.Serial_Communications tonyg
2011-04-19 12:09 ` GNAT.Serial_Communications Ludovic Brenta
2011-04-19 13:53 ` GNAT.Serial_Communications tonyg
2011-04-19 19:06 ` GNAT.Serial_Communications Ludovic Brenta
2011-04-19 19:57 ` Alex Mentis [this message]
2011-04-20 11:37 ` GNAT.Serial_Communications tonyg
2011-04-20 14:22 ` GNAT.Serial_Communications Alex Mentis
2011-04-21 9:00 ` GNAT.Serial_Communications tonyg
2011-04-21 13:28 ` GNAT.Serial_Communications Alex Mentis
2011-04-22 13:55 ` GNAT.Serial_Communications Alex Mentis
2011-04-22 15:52 ` GNAT.Serial_Communications Brian Drummond
2011-04-19 13:32 ` GNAT.Serial_Communications Simon Clubley
2011-04-19 16:59 ` GNAT.Serial_Communications Simon Clubley
2011-04-20 10:17 ` GNAT.Serial_Communications Brian Drummond
2011-04-20 20:46 ` GNAT.Serial_Communications Brian Drummond
2011-04-21 4:28 ` GNAT.Serial_Communications Simon Wright
2011-04-21 9:12 ` GNAT.Serial_Communications tonyg
2011-04-21 10:14 ` GNAT.Serial_Communications tonyg
2011-04-22 15:54 ` GNAT.Serial_Communications Brian Drummond
2011-04-22 16:14 ` GNAT.Serial_Communications Simon Wright
2011-04-21 11:56 ` GNAT.Serial_Communications Simon Clubley
2011-04-15 18:01 ` GNAT.Serial_Communications Jeffrey Carter
2011-04-16 10:21 ` GNAT.Serial_Communications tonyg
2016-12-01 19:58 ` GNAT.Serial_Communications mario.blunk.gplus
2017-03-20 15:20 ` GNAT.Serial_Communications Jacob Sparre Andersen
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox