Add channel-specific arm, disarm, and reset wrappers.
The comedi_arm(), comedi_disarm(), and comedi_reset() functions always set the channel number in the corresponding configuration instructions to 0, as they assume the channel number will be ignored by the driver. Some drivers do in fact use the channel number in these configuration instructions. Add additional wrapper functions comedi_arm_channel(), comedi_disarm_channel(), and comedi_reset_channel() to allow the channel number to be specified.
This commit is contained in:
parent
2062d615ff
commit
ac2ce44520
4 changed files with 117 additions and 22 deletions
|
@ -6,14 +6,39 @@ Param: unsigned int subdevice
|
||||||
Param: unsigned int source
|
Param: unsigned int source
|
||||||
Status: alpha
|
Status: alpha
|
||||||
Description:
|
Description:
|
||||||
This function arms a subdevice. It may, for example, arm a counter
|
This function arms a subdevice. It may, for example, arm a counter to
|
||||||
to begin counting. The <parameter class="function">source</parameter>
|
begin counting. The <parameter class="function">source</parameter>
|
||||||
parameter specifies
|
parameter specifies what source should trigger the subdevice to begin.
|
||||||
what source should trigger the subdevice to begin. The possible
|
The possible sources are driver-dependant. This function is only
|
||||||
sources are driver-dependant. This function is only useable
|
useable on subdevices that provide support for the
|
||||||
on subdevices that provide support for the
|
<constant>INSN_CONFIG_ARM</constant> configuration instruction.
|
||||||
<constant>INSN_CONFIG_ARM</constant> configuration
|
Some subdevices treat this as an instruction to arm a specific channel.
|
||||||
instruction.
|
For those subdevices, this function will arm channel
|
||||||
|
<literal>0</literal> and <function><link
|
||||||
|
linkend="func-ref-comedi-arm-channel">comedi_arm_channel</link></function>
|
||||||
|
should be called instead of this one to specify the channel.
|
||||||
|
Returns:
|
||||||
|
<literal>0</literal> on success, <literal>-1</literal> on error.
|
||||||
|
|
||||||
|
Function: comedi_arm_channel -- arm a subdevice channel
|
||||||
|
Retval: int
|
||||||
|
Param: comedi_t * device
|
||||||
|
Param: unsigned int subdevice
|
||||||
|
Param: unsigned int channel
|
||||||
|
Param: unsigned int source
|
||||||
|
Status: alpha
|
||||||
|
Description:
|
||||||
|
This function arms a specified channel of a subdevice. It may, for
|
||||||
|
example, arm a counter to begin counting. The <parameter
|
||||||
|
class="function">source</parameter> parameter specifies what source
|
||||||
|
should trigger the subdevice to begin. The possible sources are
|
||||||
|
driver-dependant. This function is only useable on subdevices that
|
||||||
|
provide support for the <constant>INSN_CONFIG_ARM</constant>
|
||||||
|
configuration instruction. Some subdevices treat this as an
|
||||||
|
instruction to arm the whole subdevice and ignore the specified
|
||||||
|
channel. For such subdevices, <function><link
|
||||||
|
linkend="func-ref-comedi-arm">comedi_arm</link></function> is normally
|
||||||
|
called instead.
|
||||||
Returns:
|
Returns:
|
||||||
<literal>0</literal> on success, <literal>-1</literal> on error.
|
<literal>0</literal> on success, <literal>-1</literal> on error.
|
||||||
|
|
||||||
|
@ -26,7 +51,30 @@ Description:
|
||||||
This function disarms a subdevice. It may, for example, stop a counter
|
This function disarms a subdevice. It may, for example, stop a counter
|
||||||
counting. This function is only useable on subdevices that provide
|
counting. This function is only useable on subdevices that provide
|
||||||
support for the <constant>INSN_CONFIG_DISARM</constant> configuration
|
support for the <constant>INSN_CONFIG_DISARM</constant> configuration
|
||||||
instruction.
|
instruction. Some subdevices treat this as an instruction to disarm a
|
||||||
|
specific channel. For those subdevices, this function will disarm
|
||||||
|
channel <literal>0</literal> and <function><link
|
||||||
|
linkend="func-ref-comedi-disarm-channel">comedi_disarm_channel</link></function>
|
||||||
|
should be called instead of this one to specify the channel.
|
||||||
|
Returns:
|
||||||
|
<literal>0</literal> on success, <literal>-1</literal> on error.
|
||||||
|
|
||||||
|
Function: comedi_disarm_channel -- disarm a subdevice channel
|
||||||
|
Retval: int
|
||||||
|
Param: comedi_t * device
|
||||||
|
Param: unsigned int subdevice
|
||||||
|
Param: unsigned int channel
|
||||||
|
Status: alpha
|
||||||
|
Description:
|
||||||
|
This function disarms a specified channel of a subdevice. It may, for
|
||||||
|
example, stop a counter counting. This function is only useable on
|
||||||
|
subdevices that provide support for the
|
||||||
|
<constant>INSN_CONFIG_DISARM</constant> configuration instruction.
|
||||||
|
Some subdevices treat this as an instruction to disarm the whole
|
||||||
|
subdevice and ignore the specified channel. For such subdevices,
|
||||||
|
<function><link
|
||||||
|
linkend="func-ref-comedi-disarm">comedi_disarm</link></function> is
|
||||||
|
normally called instead.
|
||||||
Returns:
|
Returns:
|
||||||
<literal>0</literal> on success, <literal>-1</literal> on error.
|
<literal>0</literal> on success, <literal>-1</literal> on error.
|
||||||
|
|
||||||
|
@ -141,10 +189,30 @@ Param: comedi_t * device
|
||||||
Param: unsigned int subdevice
|
Param: unsigned int subdevice
|
||||||
Status: alpha
|
Status: alpha
|
||||||
Description:
|
Description:
|
||||||
This function resets a subdevice. It is only useable
|
This function resets a subdevice. It is only useable on subdevices
|
||||||
on subdevices that provide support for the
|
that provide support for the <constant>INSN_CONFIG_RESET</constant>
|
||||||
<constant>INSN_CONFIG_RESET</constant> configuration
|
configuration instruction. Some subdevices treat this as an
|
||||||
instruction.
|
instruction to reset a specific channel. For those subdevices, this
|
||||||
|
function will reset channel <literal>0</literal> and <function><link
|
||||||
|
linkend="func-ref-comedi-reset-channel">comedi_reset_channel</link></function>
|
||||||
|
should be called instead of this one to specify the channel.
|
||||||
|
Returns:
|
||||||
|
<literal>0</literal> on success, <literal>-1</literal> on error.
|
||||||
|
|
||||||
|
Function: comedi_reset_channel -- reset a subdevice channel
|
||||||
|
Retval: int
|
||||||
|
Param: comedi_t * device
|
||||||
|
Param: unsigned int subdevice
|
||||||
|
Param: unsigned int channel
|
||||||
|
Status: alpha
|
||||||
|
Description:
|
||||||
|
This function resets a specified channel of a subdevice. It is only
|
||||||
|
useable on subdevices that provide support for the
|
||||||
|
<constant>INSN_CONFIG_RESET</constant> configuration instruction. Some
|
||||||
|
subdevices treat this as an instruction to reset the whole subdevice
|
||||||
|
and ignore the specified channel. For such subdevices, <function><link
|
||||||
|
linkend="func-ref-comedi-reset">comedi_reset</link></function> is
|
||||||
|
normally called instead.
|
||||||
Returns:
|
Returns:
|
||||||
<literal>0</literal> on success, <literal>-1</literal> on error.
|
<literal>0</literal> on success, <literal>-1</literal> on error.
|
||||||
|
|
||||||
|
|
|
@ -286,8 +286,14 @@ lsampl_t comedi_from_physical(double data,
|
||||||
int comedi_internal_trigger(comedi_t *dev, unsigned subd, unsigned trignum);
|
int comedi_internal_trigger(comedi_t *dev, unsigned subd, unsigned trignum);
|
||||||
/* INSN_CONFIG wrappers */
|
/* INSN_CONFIG wrappers */
|
||||||
int comedi_arm(comedi_t *device, unsigned subdevice, unsigned source);
|
int comedi_arm(comedi_t *device, unsigned subdevice, unsigned source);
|
||||||
|
int comedi_arm_channel(comedi_t *device, unsigned subdevice, unsigned channel,
|
||||||
|
unsigned source);
|
||||||
int comedi_disarm(comedi_t *device, unsigned subdevice);
|
int comedi_disarm(comedi_t *device, unsigned subdevice);
|
||||||
|
int comedi_disarm_channel(comedi_t *device, unsigned subdevice,
|
||||||
|
unsigned channel);
|
||||||
int comedi_reset(comedi_t *device, unsigned subdevice);
|
int comedi_reset(comedi_t *device, unsigned subdevice);
|
||||||
|
int comedi_reset_channel(comedi_t *device, unsigned subdevice,
|
||||||
|
unsigned channel);
|
||||||
int comedi_get_clock_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned *SWIG_OUTPUT(clock), unsigned *SWIG_OUTPUT(period_ns));
|
int comedi_get_clock_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned *SWIG_OUTPUT(clock), unsigned *SWIG_OUTPUT(period_ns));
|
||||||
int comedi_get_gate_source(comedi_t *device, unsigned subdevice, unsigned channel,
|
int comedi_get_gate_source(comedi_t *device, unsigned subdevice, unsigned channel,
|
||||||
unsigned gate, unsigned *SWIG_OUTPUT(source));
|
unsigned gate, unsigned *SWIG_OUTPUT(source));
|
||||||
|
|
|
@ -26,8 +26,8 @@
|
||||||
|
|
||||||
#include "libinternal.h"
|
#include "libinternal.h"
|
||||||
|
|
||||||
EXPORT_ALIAS_DEFAULT(_comedi_reset,comedi_reset,0.9.0);
|
EXPORT_ALIAS_DEFAULT(_comedi_reset_channel,comedi_reset_channel,0.11.0);
|
||||||
int _comedi_reset(comedi_t *device, unsigned subdevice)
|
int _comedi_reset_channel(comedi_t *device, unsigned subdevice, unsigned channel)
|
||||||
{
|
{
|
||||||
comedi_insn insn;
|
comedi_insn insn;
|
||||||
lsampl_t data[1];
|
lsampl_t data[1];
|
||||||
|
@ -35,7 +35,7 @@ int _comedi_reset(comedi_t *device, unsigned subdevice)
|
||||||
memset(&insn, 0, sizeof(comedi_insn));
|
memset(&insn, 0, sizeof(comedi_insn));
|
||||||
insn.insn = INSN_CONFIG;
|
insn.insn = INSN_CONFIG;
|
||||||
insn.subdev = subdevice;
|
insn.subdev = subdevice;
|
||||||
insn.chanspec = 0;
|
insn.chanspec = channel;
|
||||||
insn.data = data;
|
insn.data = data;
|
||||||
insn.n = sizeof(data) / sizeof(data[0]);
|
insn.n = sizeof(data) / sizeof(data[0]);
|
||||||
data[0] = INSN_CONFIG_RESET;
|
data[0] = INSN_CONFIG_RESET;
|
||||||
|
@ -44,8 +44,14 @@ int _comedi_reset(comedi_t *device, unsigned subdevice)
|
||||||
else return -1;
|
else return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_ALIAS_DEFAULT(_comedi_arm,comedi_arm,0.9.0);
|
EXPORT_ALIAS_DEFAULT(_comedi_reset,comedi_reset,0.9.0);
|
||||||
int _comedi_arm(comedi_t *device, unsigned subdevice, unsigned target)
|
int _comedi_reset(comedi_t *device, unsigned subdevice)
|
||||||
|
{
|
||||||
|
return _comedi_reset_channel(device, subdevice, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT_ALIAS_DEFAULT(_comedi_arm_channel,comedi_arm_channel,0.11.0);
|
||||||
|
int _comedi_arm_channel(comedi_t *device, unsigned subdevice, unsigned channel, unsigned target)
|
||||||
{
|
{
|
||||||
comedi_insn insn;
|
comedi_insn insn;
|
||||||
lsampl_t data[2];
|
lsampl_t data[2];
|
||||||
|
@ -53,7 +59,7 @@ int _comedi_arm(comedi_t *device, unsigned subdevice, unsigned target)
|
||||||
memset(&insn, 0, sizeof(comedi_insn));
|
memset(&insn, 0, sizeof(comedi_insn));
|
||||||
insn.insn = INSN_CONFIG;
|
insn.insn = INSN_CONFIG;
|
||||||
insn.subdev = subdevice;
|
insn.subdev = subdevice;
|
||||||
insn.chanspec = 0;
|
insn.chanspec = channel;
|
||||||
insn.data = data;
|
insn.data = data;
|
||||||
insn.n = sizeof(data) / sizeof(data[0]);
|
insn.n = sizeof(data) / sizeof(data[0]);
|
||||||
data[0] = INSN_CONFIG_ARM;
|
data[0] = INSN_CONFIG_ARM;
|
||||||
|
@ -63,8 +69,14 @@ int _comedi_arm(comedi_t *device, unsigned subdevice, unsigned target)
|
||||||
else return -1;
|
else return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_ALIAS_DEFAULT(_comedi_disarm,comedi_disarm,0.11.0);
|
EXPORT_ALIAS_DEFAULT(_comedi_arm,comedi_arm,0.9.0);
|
||||||
int _comedi_disarm(comedi_t *device, unsigned subdevice)
|
int _comedi_arm(comedi_t *device, unsigned subdevice, unsigned target)
|
||||||
|
{
|
||||||
|
return _comedi_arm_channel(device, subdevice, 0, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT_ALIAS_DEFAULT(_comedi_disarm_channel,comedi_disarm_channel,0.11.0);
|
||||||
|
int _comedi_disarm_channel(comedi_t *device, unsigned subdevice, unsigned channel)
|
||||||
{
|
{
|
||||||
comedi_insn insn;
|
comedi_insn insn;
|
||||||
lsampl_t data[1];
|
lsampl_t data[1];
|
||||||
|
@ -72,7 +84,7 @@ int _comedi_disarm(comedi_t *device, unsigned subdevice)
|
||||||
memset(&insn, 0, sizeof(comedi_insn));
|
memset(&insn, 0, sizeof(comedi_insn));
|
||||||
insn.insn = INSN_CONFIG;
|
insn.insn = INSN_CONFIG;
|
||||||
insn.subdev = subdevice;
|
insn.subdev = subdevice;
|
||||||
insn.chanspec = 0;
|
insn.chanspec = channel;
|
||||||
insn.data = data;
|
insn.data = data;
|
||||||
insn.n = sizeof(data) / sizeof(data[0]);
|
insn.n = sizeof(data) / sizeof(data[0]);
|
||||||
data[0] = INSN_CONFIG_DISARM;
|
data[0] = INSN_CONFIG_DISARM;
|
||||||
|
@ -81,6 +93,12 @@ int _comedi_disarm(comedi_t *device, unsigned subdevice)
|
||||||
else return -1;
|
else return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORT_ALIAS_DEFAULT(_comedi_disarm,comedi_disarm,0.11.0);
|
||||||
|
int _comedi_disarm(comedi_t *device, unsigned subdevice)
|
||||||
|
{
|
||||||
|
return _comedi_disarm_channel(device, subdevice, 0);
|
||||||
|
}
|
||||||
|
|
||||||
EXPORT_ALIAS_DEFAULT(_comedi_get_clock_source,comedi_get_clock_source,0.10.0);
|
EXPORT_ALIAS_DEFAULT(_comedi_get_clock_source,comedi_get_clock_source,0.10.0);
|
||||||
int _comedi_get_clock_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned *clock, unsigned *period_ns)
|
int _comedi_get_clock_source(comedi_t *device, unsigned subdevice, unsigned channel, unsigned *clock, unsigned *period_ns)
|
||||||
{
|
{
|
||||||
|
|
|
@ -119,5 +119,8 @@ v0.10.0 {
|
||||||
|
|
||||||
v0.11.0 {
|
v0.11.0 {
|
||||||
global:
|
global:
|
||||||
|
comedi_arm_channel;
|
||||||
comedi_disarm;
|
comedi_disarm;
|
||||||
|
comedi_disarm_channel;
|
||||||
|
comedi_reset_channel;
|
||||||
} v0.10.0;
|
} v0.10.0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue