Hi,

On Fri, Jul 29, 2011 at 3:44 PM,  <julien.dela...@esa.int> wrote:
> Hello,
>

Sorry for the late reply. I am currently on holidays.

> I try to use the RTDM API to communicate with my boards. In fact, I
> adapted a driver from comedi to RTDM ; the low-level aspects seem to work
> (meaning : when I send something on a channel, I see an output on this
> channel). However, now, I would like the analogy API to interact with my
> device. So, I'm wondering how the conversion functions work.
>
> For example, for the a4l_dtoraw function, if some arguments are easy to
> understand, some others need more explanations. In particular,what means
> the cnt argument of this function and how should we use it ?

The cnt argument means "count of double values to convert into raw
values" . Sorry, this was not very clear. I currently do not have time
to look back at the code and give you a detailed explanation. However,
I remember that:

If you want to use a4l_dtoraw, I think you have double float data you
want to inject in some output subdevice.
- Double value size is constant: let's say 64 bits.
- The size of a raw value to be injected depends on the subdevice you
use in your card, it can be 8bits, 16bits, 24bits or whatever.

I wanted a4l_dtoraw to be generic, so I decided that this function
should take as arguments the channel descriptor and the range
descriptor that the user will use. These descriptors can be retrieved
via a4l_get_chinfo and a4l_get_rnginfo (cf. examples in
src/utils/analogy/*.c) once the user has opened a device (with
a4l_open and a4l_fill_desc).

a4l_dtoraw takes also two more arguments an input buffer (src: the
double values) and an output buffer (dst: the raw values). Obviously,
these buffers do not have the same size but they are supposed to
contain the same count of values.

That is why I decided that the last argument was the count of values
to be converted (cnt). An alternative was to pass each buffer's size
but that implies using two arguments instead of one (two arguments to
pass a redundant piece of information because internally all I need is
the count of values to convert).

The user is, of course, in charge of passing large enough output
buffer. A helper function, a4l_sizeof_chan, is available to get the
size of a raw sample, if need be.

Thus, I think the user is able to develop generic user-space code
which does not depend on the acquisition board.

> Is there some
> example of the usage of the level 2 API of the analogy level ? It would
> really help in understanding how this API interacts with the boards.
>

In src/utils/analogy/cmd_read.c, I use a4l_rawtoul so as to correctly
display hexadecimal values (freshly acquired).
In src/utils/analogy/insn_read.c: I use a4l_rawtod if a range is
passed as argument.

> Thanks in advance for any help regarding the use of this API.
>
> Best regards,
>
>
> _______________________________________________
> Xenomai-help mailing list
> Xenomai-help@gna.org
> https://mail.gna.org/listinfo/xenomai-help
>

Alexis.

_______________________________________________
Xenomai-help mailing list
Xenomai-help@gna.org
https://mail.gna.org/listinfo/xenomai-help

Reply via email to