Hi,

On Wed, Oct 28, 2009 at 7:53 AM, Jonas Buchli <[email protected]> wrote:
> Dear all,
>
> we are trying to get a National Instruments DA/AD card (NI PCIe 6259,
> see link below) working with comedi/analogy.
>
> The drivers seem to be doing something, I can pull up the analog outputs
> to 10V (max voltage) using the example program cmd_write. So I think the
> issues I am having are stemming from not understanding and using the API
> correctly rather than driver issues (but I might be wrong).
>
> Thus, I am trying to understand how to actually write a waveform to the
> analog output and am so far not very successful and the comedi doc seems
> a bit cryptic and scarce to me in this respect.

You are right. There is not enough documentation.

You may already know but here are just a few lines to sum up:
1) Analogy is derivation of Comedi. So we get the same notions:
 - Driver attachment to comedi / analogy device
 - Synchronous acquisition: with instructions;
 - Asynchronous acquisitions: with commands, read, write, mmap, etc.;

Documentation on that point is clearly lacking. This issue will be
solved as soon as possible. In the meantime, you can have a look at
comedi.org documentations. These notions are detailed.

2) Analogy is not just a port, many things have been rewritten:
- We tried to adapt the driver API

- The User API provided by the library (the point in which you have
interest, I guess), has changed too. We have tried to clean-up the
layering, so you will find three layers:
- Level 0: Interface with the kernel side (not to be used);
- Level 1: Interface thanks to the "notions" above (*_snd_insn,
*_snd_cmd, *_cnd_cancel)
- Level 2: Easy access interface (*_sync_read, *_sync_write,
*_async_read, *_async_write + conversion functions)

So if you want to perform a synchronous acquisition,
-> you can just call *_sync_read() (level2), this function will be in
charge of managing the instructions

If you want to perform an asynchronous acquistion,
-> you have to call *_snd_command() (level1: it was difficult to
abstract this notion)
-> after you can call *_async_read() (level2), this function will be
in charge of calling, read(), poll(), etc.

Info on that point can be found in the Doxygen documentation in:
http://www.xenomai.org/documentation/xenomai-head/html/api/index.html

It is a snapshot anterior to the comedi -> analogy renaming; then you
still have to look for Comedi to get the doc.
Xenomai API
  -> Modules
    -> Comedi API
      -> Driver API (not interesting for you I suppose)
      -> Library API
        -> Level 0 API (Syscall API)
        -> Level 1 API
        -> Level 2 API

The "comedi_" prefixes have to be replaced by "a4l_" (that was why I
used "*_" as prefix in these few lines).

I will try to add more docs as soon as possible.

> - Does anyone have example code how this is done?

So far, the example code is located in our little test programs set
(cmd_read, cmd_write, insn_read). I tried to make them easy to read
(everything is linear).

Feel free to tell what you expect.

> - Is the correct procedure to issue first a command (comedi_snd_command)
> and then use the write command (comedi_sys_write) to achieve this?
>
> - Interestingly the write command (comedy_sys_write) is not the one
> responsible for pulling up the output, it seems to already happen in the
> comedi_snd_command.
>
> - My current approach was trying to modify the cmd_write example. Is
> this a good idea?

I think so.

> Any help and pointers would be greatly appreciated!
>
> Thanks a lot and best regards
> Jonas
>
>
> PS:
> Card being used NI PCIe 6259:
> http://sine.ni.com/nips/cds/view/p/lang/en/nid/14128
>
>

Alexis.

_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to