added comedi_data_read_delayed()

This commit is contained in:
Frank Mori Hess 2002-04-29 18:22:41 +00:00
parent 7762442abd
commit 4a9dd8e9d3
2 changed files with 40 additions and 0 deletions

View file

@ -118,6 +118,8 @@ lsampl_t comedi_from_phys(double data,comedi_range *rng,lsampl_t maxdata);
/* syncronous stuff */
int comedi_data_read(comedi_t *it,unsigned int subd,unsigned int chan,
unsigned int range,unsigned int aref,lsampl_t *data);
int comedi_data_read_delayed(comedi_t *it,unsigned int subd,unsigned int chan,
unsigned int range,unsigned int aref,lsampl_t *data, unsigned int micro_sec);
int comedi_data_write(comedi_t *it,unsigned int subd,unsigned int chan,
unsigned int range,unsigned int aref,lsampl_t data);
int comedi_dio_config(comedi_t *it,unsigned int subd,unsigned int chan,

View file

@ -173,3 +173,41 @@ int comedi_data_read(comedi_t *it,unsigned int subdev,unsigned int chan,unsigned
}
}
int comedi_data_read_delayed( comedi_t *it, unsigned int subdev, unsigned int chan, unsigned int range,
unsigned int aref, lsampl_t *data, unsigned int nano_sec)
{
subdevice *s;
comedi_insnlist ilist;
comedi_insn insn[3];
lsampl_t delay = nano_sec;
if( !valid_chan( it, subdev, chan ) )
return -1;
s = it->subdevices + subdev;
memset(&insn,0,sizeof(insn));
// setup, no conversions
insn[0].insn = INSN_READ;
insn[0].n = 0;
insn[0].data = data;
insn[0].subdev = subdev;
insn[0].chanspec = CR_PACK( chan, range, aref );
// delay
insn[1].insn = INSN_WAIT;
insn[1].n = 1;
insn[1].data = &delay;
// take conversion
insn[2].insn = INSN_READ;
insn[2].n = 1;
insn[2].data = data;
insn[2].subdev = subdev;
insn[2].chanspec = CR_PACK( chan, range, aref );
ilist.insns = insn;
ilist.n_insns = sizeof(insn) / sizeof(insn[0]);
return comedi_do_insnlist(it, &ilist);
}