#include #include #include #include #include #include #include #include #include #include #include int comedi_get_cmd_src_mask(comedi_t *it,unsigned int s,comedi_cmd *cmd) { memset(cmd,0,sizeof(*cmd)); cmd->subdev = s; cmd->flags = 0; cmd->start_src = TRIG_ANY; cmd->scan_begin_src = TRIG_ANY; cmd->convert_src = TRIG_ANY; cmd->scan_end_src = TRIG_ANY; cmd->stop_src = TRIG_ANY; return comedi_command_test(it,cmd); } int comedi_get_cmd_generic_timed(comedi_t *it,unsigned int s,comedi_cmd *cmd) { int ret; ret = comedi_get_cmd_src_mask(it,s,cmd); if(ret<0)return ret; if(cmd->start_src&TRIG_NOW){ cmd->start_src=TRIG_NOW; cmd->start_arg=0; }else if(cmd->start_src&TRIG_FOLLOW){ cmd->start_src=TRIG_FOLLOW; cmd->start_arg=0; }else{ /* hmmm... don't know what to do */ return -1; } if(cmd->convert_src&TRIG_TIMER){ if(cmd->scan_begin_src&TRIG_FOLLOW){ cmd->convert_src = TRIG_TIMER; cmd->scan_begin_src = TRIG_FOLLOW; }else{ cmd->convert_src = TRIG_TIMER; cmd->scan_begin_src = TRIG_TIMER; } }else if(cmd->convert_src & TRIG_NOW && cmd->scan_begin_src & TRIG_TIMER) { cmd->convert_src = TRIG_NOW; cmd->scan_begin_src = TRIG_TIMER; }else{ //printf("can't do timed?!?\n"); return -1; } cmd->scan_end_src = TRIG_COUNT; cmd->scan_end_arg = 1; if(cmd->stop_src&TRIG_COUNT){ cmd->stop_src=TRIG_COUNT; cmd->stop_arg=2; }else if(cmd->stop_src&TRIG_NONE){ cmd->stop_src=TRIG_NONE; cmd->stop_arg=0; }else{ printf("can't find a good stop_src\n"); return -1; } cmd->chanlist_len = 1; ret=comedi_command_test(it,cmd); if(ret==3){ /* good */ ret=comedi_command_test(it,cmd); } if(ret==4 || ret==0){ return 0; } return -1; }