added comedi_data_read_n()

This commit is contained in:
Frank Mori Hess 2002-04-29 21:13:13 +00:00
parent bf5d20bb9f
commit e73c24b951
2 changed files with 27 additions and 3 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_n(comedi_t *it,unsigned int subd,unsigned int chan,
unsigned int range,unsigned int aref,lsampl_t *data, unsigned int n);
int comedi_data_read_hint(comedi_t *it,unsigned int subd,unsigned int chan,
unsigned int range,unsigned int aref);
int comedi_data_read_delayed(comedi_t *it,unsigned int subd,unsigned int chan,

View file

@ -85,7 +85,7 @@ int comedi_data_write(comedi_t *it,unsigned int subdev,unsigned int chan,unsigne
}
}
int comedi_data_read_n(comedi_t *it, unsigned int subdev, unsigned int chan, unsigned int range,
static inline int comedi_internal_data_read_n(comedi_t *it, unsigned int subdev, unsigned int chan, unsigned int range,
unsigned int aref, lsampl_t *data, unsigned int n)
{
subdevice *s;
@ -144,17 +144,39 @@ int comedi_data_read_n(comedi_t *it, unsigned int subdev, unsigned int chan, uns
}
}
int comedi_data_read_n(comedi_t *it, unsigned int subdev, unsigned int chan, unsigned int range,
unsigned int aref, lsampl_t *data, unsigned int n)
{
static const int max_chunk_size = 100;
unsigned int chunk_size;
unsigned int sample_count = 0;
int retval;
while( n )
{
if( n > max_chunk_size)
chunk_size = max_chunk_size;
else
chunk_size = n;
retval = comedi_internal_data_read_n( it, subdev, chan, range, aref, &data[sample_count], chunk_size);
if( retval < 0 ) return retval;
n -= chunk_size;
sample_count += chunk_size;
}
return 0;
}
int comedi_data_read(comedi_t *it, unsigned int subdev, unsigned int chan, unsigned int range,
unsigned int aref, lsampl_t *data)
{
return comedi_data_read_n(it, subdev, chan, range, aref, data, 1);
return comedi_internal_data_read_n(it, subdev, chan, range, aref, data, 1);
}
int comedi_data_read_hint(comedi_t *it,unsigned int subdev,unsigned int chan,unsigned int range,
unsigned int aref)
{
lsampl_t dummy_data;
return comedi_data_read_n(it, subdev, chan, range, aref, &dummy_data, 0);
return comedi_internal_data_read_n(it, subdev, chan, range, aref, &dummy_data, 0);
}
int comedi_data_read_delayed( comedi_t *it, unsigned int subdev, unsigned int chan, unsigned int range,