5 COMEDILIB - Linux Control and Measurement Device Interface Library
6 Copyright (C) 1997-2001 David A. Schleef <ds@schleef.org>
8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation, version 2.1
13 This library 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 GNU
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
27 #include <sys/types.h>
31 #include <sys/ioctl.h>
35 #include "libinternal.h"
37 INTERNAL int __comedi_init=0;
39 INTERNAL void initialize(void)
45 if( (s=getenv("COMEDILIB_LOGLEVEL")) ){
46 __comedi_loglevel=strtol(s,NULL,0);
47 COMEDILIB_DEBUG(3,"setting loglevel to %d\n",__comedi_loglevel);
51 EXPORT_ALIAS_DEFAULT(_comedi_open,comedi_open,0.7.18);
52 comedi_t* _comedi_open(const char *fn)
59 if(!(it=malloc(sizeof(comedi_t))))
61 memset(it,0,sizeof(comedi_t));
63 if((it->fd=open(fn,O_RDWR))<0){
68 if(comedi_ioctl(it->fd, COMEDI_DEVINFO, (unsigned long)&it->devinfo)<0)
71 it->n_subdevices=it->devinfo.n_subdevs;
75 it->magic=COMEDILIB_MAGIC;
85 EXPORT_ALIAS_DEFAULT(_comedi_close,comedi_close,0.7.18);
86 int _comedi_close(comedi_t *it)
93 for(i=0;i<it->n_subdevices;i++){
95 if(s->type==COMEDI_SUBD_UNUSED)
98 if(s->subd_flags&SDF_FLAGS){
101 if(s->subd_flags&SDF_MAXDATA){
102 free(s->maxdata_list);
104 if(s->subd_flags&SDF_RANGETYPE){
105 free(s->range_type_list);
106 free(s->rangeinfo_list);
110 if(s->cmd_mask)free(s->cmd_mask);
111 if(s->cmd_timed)free(s->cmd_timed);
114 free(it->subdevices);
121 EXPORT_ALIAS_DEFAULT(_comedi_cancel,comedi_cancel,0.7.18);
122 int _comedi_cancel(comedi_t *it,unsigned int subdevice)
124 return comedi_ioctl(it->fd,COMEDI_CANCEL,subdevice);
127 EXPORT_ALIAS_DEFAULT(_comedi_poll,comedi_poll,0.7.18);
128 int _comedi_poll(comedi_t *it,unsigned int subdevice)
130 return comedi_ioctl(it->fd,COMEDI_POLL,subdevice);
133 EXPORT_ALIAS_DEFAULT(_comedi_fileno,comedi_fileno,0.7.18);
134 int _comedi_fileno(comedi_t *it)
142 EXPORT_ALIAS_DEFAULT(_comedi_trigger,comedi_trigger,0.7.18);
143 int _comedi_trigger(comedi_t *it,comedi_trig *t)
148 return comedi_ioctl(it->fd, COMEDI_TRIG, (unsigned long)t);
151 EXPORT_ALIAS_DEFAULT(_comedi_command,comedi_command,0.7.18);
152 int _comedi_command(comedi_t *it,comedi_cmd *t)
155 ret = comedi_ioctl(it->fd, COMEDI_CMD, (unsigned long)t);
156 __comedi_errno = errno;
157 switch(__comedi_errno){
159 __comedi_errno = ECMDNOTSUPP;
165 EXPORT_ALIAS_DEFAULT(_comedi_command_test,comedi_command_test,0.7.18);
166 int _comedi_command_test(comedi_t *it,comedi_cmd *t)
169 ret = comedi_ioctl(it->fd, COMEDI_CMDTEST, (unsigned long)t);
170 __comedi_errno = errno;
171 switch(__comedi_errno){
173 __comedi_errno = ECMDNOTSUPP;
179 EXPORT_ALIAS_DEFAULT(_comedi_do_insnlist,comedi_do_insnlist,0.7.18);
180 int _comedi_do_insnlist(comedi_t *it,comedi_insnlist *il)
183 ret = comedi_ioctl(it->fd, COMEDI_INSNLIST, (unsigned long)il);
184 __comedi_errno = errno;
188 EXPORT_ALIAS_DEFAULT(_comedi_do_insn,comedi_do_insn,0.7.18);
189 int _comedi_do_insn(comedi_t *it,comedi_insn *insn)
191 if(it->has_insn_ioctl){
192 return comedi_ioctl(it->fd, COMEDI_INSN, (unsigned long)insn);
200 ret = comedi_ioctl(it->fd, COMEDI_INSNLIST, (unsigned long)&il);
207 EXPORT_ALIAS_DEFAULT(_comedi_lock,comedi_lock,0.7.18);
208 int _comedi_lock(comedi_t *it,unsigned int subdevice)
210 return comedi_ioctl(it->fd, COMEDI_LOCK, subdevice);
213 EXPORT_ALIAS_DEFAULT(_comedi_unlock,comedi_unlock,0.7.18);
214 int _comedi_unlock(comedi_t *it,unsigned int subdevice)
216 return comedi_ioctl(it->fd, COMEDI_UNLOCK, subdevice);