1 #include "../comedidev.h"
2 #include "pcm_common.h"
5 * 'do_cmdtest' function for an 'INTERRUPT' subdevice. This is for
8 int comedi_pcm_cmdtest(struct comedi_device
*dev
,
9 struct comedi_subdevice
*s
, struct comedi_cmd
*cmd
)
14 /* step 1: make sure trigger sources are trivially valid */
17 cmd
->start_src
&= (TRIG_NOW
| TRIG_INT
);
18 if (!cmd
->start_src
|| tmp
!= cmd
->start_src
)
21 tmp
= cmd
->scan_begin_src
;
22 cmd
->scan_begin_src
&= TRIG_EXT
;
23 if (!cmd
->scan_begin_src
|| tmp
!= cmd
->scan_begin_src
)
26 tmp
= cmd
->convert_src
;
27 cmd
->convert_src
&= TRIG_NOW
;
28 if (!cmd
->convert_src
|| tmp
!= cmd
->convert_src
)
31 tmp
= cmd
->scan_end_src
;
32 cmd
->scan_end_src
&= TRIG_COUNT
;
33 if (!cmd
->scan_end_src
|| tmp
!= cmd
->scan_end_src
)
37 cmd
->stop_src
&= (TRIG_COUNT
| TRIG_NONE
);
38 if (!cmd
->stop_src
|| tmp
!= cmd
->stop_src
)
44 /* step 2: make sure trigger sources are unique and
45 * mutually compatible */
47 /* these tests are true if more than one _src bit is set */
48 if ((cmd
->start_src
& (cmd
->start_src
- 1)) != 0)
50 if ((cmd
->scan_begin_src
& (cmd
->scan_begin_src
- 1)) != 0)
52 if ((cmd
->convert_src
& (cmd
->convert_src
- 1)) != 0)
54 if ((cmd
->scan_end_src
& (cmd
->scan_end_src
- 1)) != 0)
56 if ((cmd
->stop_src
& (cmd
->stop_src
- 1)) != 0)
62 /* step 3: make sure arguments are trivially compatible */
64 /* cmd->start_src == TRIG_NOW || cmd->start_src == TRIG_INT */
65 if (cmd
->start_arg
!= 0) {
70 /* cmd->scan_begin_src == TRIG_EXT */
71 if (cmd
->scan_begin_arg
!= 0) {
72 cmd
->scan_begin_arg
= 0;
76 /* cmd->convert_src == TRIG_NOW */
77 if (cmd
->convert_arg
!= 0) {
82 /* cmd->scan_end_src == TRIG_COUNT */
83 if (cmd
->scan_end_arg
!= cmd
->chanlist_len
) {
84 cmd
->scan_end_arg
= cmd
->chanlist_len
;
88 switch (cmd
->stop_src
) {
90 /* any count allowed */
93 if (cmd
->stop_arg
!= 0) {
105 /* step 4: fix up any arguments */
107 /* if (err) return 4; */
111 EXPORT_SYMBOL(comedi_pcm_cmdtest
);
113 MODULE_AUTHOR("Comedi http://www.comedi.org");
114 MODULE_DESCRIPTION("Comedi low-level driver");
115 MODULE_LICENSE("GPL");