From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Pass a serial port as user data in a GTK callback handler?
Date: Sun, 16 Feb 2014 09:45:05 +0200
Date: 2014-02-16T09:45:05+02:00 [thread overview]
Message-ID: <bmb8k0F13aiU1@mid.individual.net> (raw)
In-Reply-To: <bmabpcFq9c8U1@mid.individual.net>
On 14-02-16 01:32 , hreba wrote:
> Hi,
>
> I am new to Ada and still overwhelmed by the complexity of the language.
>
> My actual programming exercise has a GTK GUI, and I want a callback
> handler to communicate through a serial port, so I need to pass the port
> in my user data, which must be of
>
> type User_Type (<>) is private;
>
> which means it must be nonlimited.
>
> But GNAT.Serial_Communications.Serial_Port is limited:
>
> type Serial_Port is new Ada.Streams.Root_Stream_Type with private;
> type Root_Stream_Type is abstract tagged limited private;
>
> I tried to pass a reference to the port, and it must be an "access all"
> (because it is not allocated by my, but a preexisting variable (hardware
> resource), as I understand it):
On my machine (Win 7), the type Serial_Port is declared in
GNAT.Serial_Communications by deriving from
Ada.Streams.Root_Stream_Type, adding a component which refers AIUI to a
Windows "handle". This is definitely a SW object; the HW resource is
hidden beind Windows.
On some bare-machine GNAT port, Serial_Port might be closer to the HW,
but it is no doubt still a stream class, so it will not itself be mapped
to some HW register. It might contain the address of (i.e. a reference
to) a HW register.
Therefore, you should be able to create your own Serial_Port objects on
the stack, on the heap, or statically.
> port: access all GNAT.Serial_Communications.Serial_Port;
>
> But then I get an error message
>
> "all" is not permitted for anonymous access types.
>
> Is there a solution?
Give the type a name so that it isn't "anonymous":
type Port_Ref is access all GNAT.Serial_Communications.Serial_Port;
port : Port_Ref;
Also remember to mark the actual Serial_Port object as "aliased" so that
you can take its 'Access.
--
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
. @ .
next prev parent reply other threads:[~2014-02-16 7:45 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-15 23:32 Pass a serial port as user data in a GTK callback handler? hreba
2014-02-16 0:35 ` Jeffrey Carter
2014-02-16 16:18 ` hreba
2014-02-16 7:45 ` Niklas Holsti [this message]
2014-02-16 16:14 ` hreba
2014-02-16 9:20 ` Dmitry A. Kazakov
2014-02-16 16:57 ` hreba
2014-02-16 18:02 ` Dmitry A. Kazakov
2014-02-17 16:13 ` adambeneschan
2014-02-17 16:20 ` adambeneschan
2014-02-17 21:31 ` Robert A Duff
2014-02-19 0:53 ` Randy Brukardt
2014-02-19 22:22 ` Robert A Duff
2014-02-20 0:34 ` Randy Brukardt
2014-02-20 11:07 ` Simon Wright
2014-02-20 16:11 ` Robert A Duff
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox