linux/drivers/staging/comedi/drivers/comedi_fc.h
<<
>>
Prefs
   1/*
   2    comedi_fc.h
   3
   4    This is a place for code driver writers wish to share between
   5    two or more drivers. These functions are meant to be used only
   6    by drivers, they are NOT part of the kcomedilib API!
   7
   8    Author:  Frank Mori Hess <fmhess@users.sourceforge.net>
   9    Copyright (C) 2002 Frank Mori Hess
  10
  11    This program is free software; you can redistribute it and/or modify
  12    it under the terms of the GNU General Public License as published by
  13    the Free Software Foundation; either version 2 of the License, or
  14    (at your option) any later version.
  15
  16    This program is distributed in the hope that it will be useful,
  17    but WITHOUT ANY WARRANTY; without even the implied warranty of
  18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19    GNU General Public License for more details.
  20
  21    You should have received a copy of the GNU General Public License
  22    along with this program; if not, write to the Free Software
  23    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  24
  25************************************************************************/
  26
  27#ifndef _COMEDI_FC_H
  28#define _COMEDI_FC_H
  29
  30#include "../comedidev.h"
  31
  32/* Writes an array of data points to comedi's buffer */
  33extern unsigned int cfc_write_array_to_buffer(struct comedi_subdevice *subd,
  34                                              void *data,
  35                                              unsigned int num_bytes);
  36
  37static inline unsigned int cfc_write_to_buffer(struct comedi_subdevice *subd,
  38                                               short data)
  39{
  40        return cfc_write_array_to_buffer(subd, &data, sizeof(data));
  41};
  42
  43static inline unsigned int cfc_write_long_to_buffer(struct comedi_subdevice
  44                                                    *subd, unsigned int data)
  45{
  46        return cfc_write_array_to_buffer(subd, &data, sizeof(data));
  47};
  48
  49extern unsigned int cfc_read_array_from_buffer(struct comedi_subdevice *subd,
  50                                               void *data,
  51                                               unsigned int num_bytes);
  52
  53extern unsigned int cfc_handle_events(struct comedi_device *dev,
  54                                      struct comedi_subdevice *subd);
  55
  56static inline unsigned int cfc_bytes_per_scan(struct comedi_subdevice *subd)
  57{
  58        int num_samples;
  59        int bits_per_sample;
  60
  61        switch (subd->type) {
  62        case COMEDI_SUBD_DI:
  63        case COMEDI_SUBD_DO:
  64        case COMEDI_SUBD_DIO:
  65                bits_per_sample = 8 * bytes_per_sample(subd);
  66                num_samples = (subd->async->cmd.chanlist_len +
  67                               bits_per_sample - 1) / bits_per_sample;
  68                break;
  69        default:
  70                num_samples = subd->async->cmd.chanlist_len;
  71                break;
  72        }
  73        return num_samples * bytes_per_sample(subd);
  74}
  75
  76#endif /* _COMEDI_FC_H */
  77