blob: a9f488aed369f6ca29d7e213ee4ffed05c3888a0 [file] [log] [blame]
David Schleefb79a7a22008-11-14 15:58:23 -08001/*
2 kcomedilib/dio.c
3 implements comedi_dio_*() functions
4
5 COMEDI - Linux Control and Measurement Device Interface
6 Copyright (C) 2000 David A. Schleef <ds@schleef.org>
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21
22*/
23
24#include "../comedi.h"
25#include "../comedilib.h"
26
27#include <linux/string.h>
28
29int comedi_dio_config(comedi_t * dev, unsigned int subdev, unsigned int chan,
30 unsigned int io)
31{
32 comedi_insn insn;
33
34 memset(&insn, 0, sizeof(insn));
35 insn.insn = INSN_CONFIG;
36 insn.n = 1;
37 insn.data = &io;
38 insn.subdev = subdev;
39 insn.chanspec = CR_PACK(chan, 0, 0);
40
41 return comedi_do_insn(dev, &insn);
42}
43
44int comedi_dio_read(comedi_t * dev, unsigned int subdev, unsigned int chan,
45 unsigned int *val)
46{
47 comedi_insn insn;
48
49 memset(&insn, 0, sizeof(insn));
50 insn.insn = INSN_READ;
51 insn.n = 1;
52 insn.data = val;
53 insn.subdev = subdev;
54 insn.chanspec = CR_PACK(chan, 0, 0);
55
56 return comedi_do_insn(dev, &insn);
57}
58
59int comedi_dio_write(comedi_t * dev, unsigned int subdev, unsigned int chan,
60 unsigned int val)
61{
62 comedi_insn insn;
63
64 memset(&insn, 0, sizeof(insn));
65 insn.insn = INSN_WRITE;
66 insn.n = 1;
67 insn.data = &val;
68 insn.subdev = subdev;
69 insn.chanspec = CR_PACK(chan, 0, 0);
70
71 return comedi_do_insn(dev, &insn);
72}
73
74int comedi_dio_bitfield(comedi_t * dev, unsigned int subdev, unsigned int mask,
75 unsigned int *bits)
76{
77 comedi_insn insn;
78 lsampl_t data[2];
79 int ret;
80
81 memset(&insn, 0, sizeof(insn));
82 insn.insn = INSN_BITS;
83 insn.n = 2;
84 insn.data = data;
85 insn.subdev = subdev;
86
87 data[0] = mask;
88 data[1] = *bits;
89
90 ret = comedi_do_insn(dev, &insn);
91
92 *bits = data[1];
93
94 return ret;
95}