gm2
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Gm2] two versions of DeviceTablePtrValue


From: Breeden, Thomas (tmb)
Subject: RE: [Gm2] two versions of DeviceTablePtrValue
Date: Mon, 7 Jun 2010 09:20:43 -0400

Martin,

I think only one DeviceId for your stream "device", obtained in your module's
initialization code, IOLink.AllocateDeviceId(xxxxxx)

A new "DeviceTable" for each opened channel. Seems like the IOLink TYPE
would be better named "ChannelTable".

Tom
address@hidden

> -----Original Message-----
> From: address@hidden [mailto:gm2-
> address@hidden On Behalf Of Martin Kalbfuß
> Sent: June 05, 2010 6:17 PM
> To: GNU Modula-2
> Subject: RE: [Gm2] two versions of DeviceTablePtrValue
> 
> I only need one did for all channels of my module? I thought every
> channel needs its own did.
> 
> Am Samstag, den 05.06.2010, 10:04 -0400 schrieb Breeden, Thomas (tmb):
> > Yes, the "CAST(IOLink.DeviceTablePtr, cid)" does not look so good.
> >
> > Using "IOLink.DeviceTablePtrValue (cid, MyDid)" to get the pointer should
> not be
> > a problem in your custom stream implementation, since your module is the
> > one that does the "IOLink.AllocateDeviceId (MyDid)" on initialization, and
> knows
> > what the value of MyDid is.
> >
> > However, I don't see how one could implement IOChan procedures without
> > using the CAST(), since something like IOChan's
> >  PROCEDURE RawWrite(cid:ChanId; from:ADDRESS; locsToWrite:CARDINAL);
> > does not have the DeviceId associated with the passed ChanId.
> >
> > If seems like it must assume that the ChanId is the DeviceTablePtr in order
> to find the
> > correct device callback routine:
> >     did := CAST(IOLink.DeviceTablePtr, cid);
> >     did^.doRawWrite(did, from, locsToWrite);
> >
> > I suspect that Rick Sutcliffe would be the best person to explain the
> architecture
> > here.
> >
> > regards,
> >
> > Tom
> > address@hidden
> >
> > > From: gm2-bounces On Behalf Of Martin Kalbfuß address@hidden
> > > Sent: Saturday, June 05, 2010 7:30 AM
> > > To: GNU Modula-2
> > > Subject: Re: [Gm2] two versions of DeviceTablePtrValue
> > >
> > > I still wonder how to implement your own channel the right way. There's
> > > no ISO conform way. to obtain the did out of the cid, because
> > > DeviceTablePtrValue needs the did as parameter.
> > >
> > > To implement an open/close pair for your custom stream like
> > >
> > > OpenMyChannel(VAR cid : IOChan.ChanId);
> > > CloseMyCannel(VAR cid : IOChan.ChanId);
> > >
> > > you have to store the did externally in an array or something similar.
> > > Do you think that's the right way to do it?
> >
> > > From: gm2-bounces On Behalf Of Martin Kalbfuß address@hidden
> > > Sent: Friday, June 04, 2010 6:32 PM
> > > To: GNU Modula-2
> > > Subject: RE: [Gm2] iso streams
> > >
> > > Many thanks,
> > >
> > > I wonder, that there's no default implementation of
> > > such a stream.
> > >
> > > I had a look at your code. I've seen, that you did a cast
> > >
> >  > p := SYSTEM.CAST(IOLink.DeviceTablePtr, cid);
> > >
> > > Is this standard conform? There is a function to get the table.
> >
> > _______________________________________________
> > gm2 mailing list
> > address@hidden
> > http://lists.nongnu.org/mailman/listinfo/gm2
> 
> 
> 
> _______________________________________________
> gm2 mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/gm2

reply via email to

[Prev in Thread] Current Thread [Next in Thread]