Re: [Xenomai-core] digital I/O with analgoy using ni_pcmcia

2009-12-21 Thread Alexis Berlemont
Hi,

Stefan Schaal wrote:
 Hi everybody,
 
 we have an NI6259 board working xenomai 2.5, using the analogy APIs.
 Read/write to analog channels is quite straightforward and can be
 inferred from the cmd_read and cmd_write source code. Now I would also
 like to use the digital I/O of this board (e.g., the 32 digital I/O
 lines). In Comedi, there are functions to set the DIO lines to
 input/output mode (comedi_dio_config), and then functions to read/write,
 like comedi_dio_read and comedi_dio_write. Does xenomai/analogy already
 have similar functionality?

Many thanks for this question, it is an issue I have been
keeping on postponing the resolution. Currently, the functions are not 
implemented but it could be quickly done.

Here is my understanding of the Comedi DIO features; please, correct
me if I am wrong.

In Comedi, here is the list of functions related with DIO:
- comedi_dio_read (insn_read or deprecated insn trigger)
- comedi_dio_write (insn_write or deprecated insn trigger)
- comedi_dio_config (insn_config or deprecated insn trigger)
- comedi_dio_get_config (insn_config or deprecated trigger)
- comedi_dio_bitfield (insn_bits or comedi_dio_read/write)
- comedi_dio_bitfield2 (insn_bits or comedi_dio_read/write)

The instruction insn_bits is a combination of a read operation and a
write operation (that is why, the function comedi_dio_bitfield* call
comedi_dio_read and comedi_dio_write if the driver does not provide an
insn-bits handler).

I had a look at many Comedi drivers and most of them register the
handler insn_bits for the DIO subdevice. The instructions insn_read
and insn_write are not oftenly used in DIO contexts.

comedi_dio_bitfield() uses the insn_bits instruction. However, it only
works with DIO subdevice limited to 32 channels; that was why
comedi_dio_bitfield2() was introduced, this latter function contains
one more argument so as to shift the bits.

Consequently, we may need a more limited set of functions:
  - a4l_sync_dio(dsc, idx_subd, mask, buf)
  - a4l_sizeof_subd(dsc, idx_subd)
  - a4l_config_subd(dsc, idx_subd, idx_chan, cfg_type, *val)

a4l_sync_dio() could work with any DIO subdevice (more or less than 32
channels). The last argument would be a pointer to a buffer which size
should be defined thanks to a4l_sizeof_subd() (8, 16, 32, 64 or more
bits).

a4l_config_subd() could be used to configure the polarity of the DIO
channels. The argument cfg_type could be set to DIO_INPUT, DIO_OUTPUT,
DIO_QUERY. And, we could even imagine that this function would not be
limited to DIO subdevice; so, the argument cfg_type could accept more
values (SERIAL_CLOCK, BIDIRECTIONAL_DATA, SET_CLOCK_SRC,
GET_CLOCK_SRC, etc.)

How do you see this approach ?

Do you (or anyone else) have a better solution in mind ?

Best regards,

 Thanks a lot,
 
 -Stefan
 ___
 Xenomai-core mailing list
 Xenomai-core@gna.org
 https://mail.gna.org/listinfo/xenomai-core
 
Alexis.

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] digital I/O with analgoy using ni_pcmcia

2009-12-21 Thread Stefan Schaal
Hi Alexis,

  thanks  a lot for all these suggestions. For my applications, the functions 
you listed below would be entirely sufficient. Essentially, I need to be able 
to put selected channels on the DIO in either read or write mode, and then 
simply read from them or write from them. The protocol I use requires 16 data 
bits, and 3 additional control lines. It was originally implemented under 
vxWorks. Nothing fancy at all.

Thanks a lot for your kind help!

-Stefan



On Dec 21, 2009, at 15:23, Alexis Berlemont wrote:

 Hi,
 
 Stefan Schaal wrote:
 Hi everybody,
 we have an NI6259 board working xenomai 2.5, using the analogy APIs.
 Read/write to analog channels is quite straightforward and can be
 inferred from the cmd_read and cmd_write source code. Now I would also
 like to use the digital I/O of this board (e.g., the 32 digital I/O
 lines). In Comedi, there are functions to set the DIO lines to
 input/output mode (comedi_dio_config), and then functions to read/write,
 like comedi_dio_read and comedi_dio_write. Does xenomai/analogy already
 have similar functionality?
 
 Many thanks for this question, it is an issue I have been
 keeping on postponing the resolution. Currently, the functions are not 
 implemented but it could be quickly done.
 
 Here is my understanding of the Comedi DIO features; please, correct
 me if I am wrong.
 
 In Comedi, here is the list of functions related with DIO:
 - comedi_dio_read (insn_read or deprecated insn trigger)
 - comedi_dio_write (insn_write or deprecated insn trigger)
 - comedi_dio_config (insn_config or deprecated insn trigger)
 - comedi_dio_get_config (insn_config or deprecated trigger)
 - comedi_dio_bitfield (insn_bits or comedi_dio_read/write)
 - comedi_dio_bitfield2 (insn_bits or comedi_dio_read/write)
 
 The instruction insn_bits is a combination of a read operation and a
 write operation (that is why, the function comedi_dio_bitfield* call
 comedi_dio_read and comedi_dio_write if the driver does not provide an
 insn-bits handler).
 
 I had a look at many Comedi drivers and most of them register the
 handler insn_bits for the DIO subdevice. The instructions insn_read
 and insn_write are not oftenly used in DIO contexts.
 
 comedi_dio_bitfield() uses the insn_bits instruction. However, it only
 works with DIO subdevice limited to 32 channels; that was why
 comedi_dio_bitfield2() was introduced, this latter function contains
 one more argument so as to shift the bits.
 
 Consequently, we may need a more limited set of functions:
 - a4l_sync_dio(dsc, idx_subd, mask, buf)
 - a4l_sizeof_subd(dsc, idx_subd)
 - a4l_config_subd(dsc, idx_subd, idx_chan, cfg_type, *val)
 
 a4l_sync_dio() could work with any DIO subdevice (more or less than 32
 channels). The last argument would be a pointer to a buffer which size
 should be defined thanks to a4l_sizeof_subd() (8, 16, 32, 64 or more
 bits).
 
 a4l_config_subd() could be used to configure the polarity of the DIO
 channels. The argument cfg_type could be set to DIO_INPUT, DIO_OUTPUT,
 DIO_QUERY. And, we could even imagine that this function would not be
 limited to DIO subdevice; so, the argument cfg_type could accept more
 values (SERIAL_CLOCK, BIDIRECTIONAL_DATA, SET_CLOCK_SRC,
 GET_CLOCK_SRC, etc.)
 
 How do you see this approach ?
 
 Do you (or anyone else) have a better solution in mind ?
 
 Best regards,
 
 Thanks a lot,
 -Stefan
 ___
 Xenomai-core mailing list
 Xenomai-core@gna.org
 https://mail.gna.org/listinfo/xenomai-core
 Alexis.
 


___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core