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