release.
SONAME=libcomedi$(SONAME_SUFFIX).so.0
-libcomedi.a: $(OBJS)
+libcomedi.a: $(OBJS) version_script
#$(CC) -shared -Wl,-soname,libcomedi.so,-T,version_script -o libcomedi.so.${VERSION_CODE} $(OBJS) -lm
- $(CC) -shared -Wl,-soname,$(SONAME) -o libcomedi.so.${version} $(OBJS) -lm
+ $(CC) -shared -Wl,-soname,$(SONAME) -Wl,--version-script,version_script -o libcomedi.so.${version} $(OBJS) -lm
$(AR) rs libcomedi.a $(OBJS)
ln -sf libcomedi.so.${version} libcomedi.so
ln -sf libcomedi.so.${version} libcomedi.so.0
#include <libinternal.h>
+EXPORT_SYMBOL(comedi_set_buffer_size,0.7.18);
int comedi_set_buffer_size(comedi_t *it, unsigned int subdev, unsigned int size)
{
int ret;
return bc.size;
}
+EXPORT_SYMBOL(comedi_set_max_buffer_size,0.7.18);
int comedi_set_max_buffer_size(comedi_t *it, unsigned int subdev, unsigned int max_size)
{
int ret;
return bc.maximum_size;
}
+EXPORT_SYMBOL(comedi_get_max_buffer_size,0.7.18);
int comedi_get_max_buffer_size(comedi_t *it, unsigned int subdevice)
{
return comedi_set_max_buffer_size(it, subdevice, 0);
}
+EXPORT_SYMBOL(comedi_get_buffer_size,0.7.18);
int comedi_get_buffer_size(comedi_t *it, unsigned int subdev)
{
return comedi_set_buffer_size(it, subdev, 0);
}
+EXPORT_SYMBOL(comedi_get_buffer_contents,0.7.18);
int comedi_get_buffer_contents(comedi_t *it, unsigned int subdev)
{
return comedi_mark_buffer_read(it, subdev, 0);
}
+EXPORT_SYMBOL(comedi_mark_buffer_read,0.7.18);
int comedi_mark_buffer_read(comedi_t *it, unsigned int subdev, unsigned int bytes)
{
int ret;
return bi.buf_int_count - bi.buf_user_count;
}
+EXPORT_SYMBOL(comedi_get_buffer_offset,0.7.18);
int comedi_get_buffer_offset(comedi_t *it, unsigned int subdev)
{
int ret;
return bi.buf_user_ptr;
}
+EXPORT_SYMBOL(comedi_get_front_count,0.7.18);
int comedi_get_front_count(comedi_t *it, unsigned int subdev)
{
int ret;
#include <libinternal.h>
+EXPORT_SYMBOL(comedi_get_cmd_src_mask,0.7.18);
int comedi_get_cmd_src_mask(comedi_t *it,unsigned int subd,comedi_cmd *cmd)
{
subdevice *s;
return -1;
}
+EXPORT_SYMBOL(comedi_get_cmd_generic_timed,0.7.18);
int comedi_get_cmd_generic_timed(comedi_t *it,unsigned int subd,comedi_cmd *cmd,
unsigned int ns)
{
}
}
+EXPORT_SYMBOL(comedi_open,0.7.18);
comedi_t *comedi_open(const char *fn)
{
comedi_t *it;
return NULL;
}
-#if 0
-/* this is an example of how we do versioned symbols */
-__asm__(".symver comedi_open_0,comedi_open@");
-#endif
-
+EXPORT_SYMBOL(comedi_open,0.7.18);
int comedi_close(comedi_t *it)
{
subdevice *s;
return 0;
}
+EXPORT_SYMBOL(comedi_cancel,0.7.18);
int comedi_cancel(comedi_t *it,unsigned int subdevice)
{
return comedi_ioctl(it->fd,COMEDI_CANCEL,subdevice);
}
+EXPORT_SYMBOL(comedi_poll,0.7.18);
int comedi_poll(comedi_t *it,unsigned int subdevice)
{
return comedi_ioctl(it->fd,COMEDI_POLL,subdevice);
}
+EXPORT_SYMBOL(comedi_fileno,0.7.18);
int comedi_fileno(comedi_t *it)
{
if(!it)
return it->fd;
}
+EXPORT_SYMBOL(comedi_trigger,0.7.18);
int comedi_trigger(comedi_t *it,comedi_trig *t)
{
if(!it || !t)
return comedi_ioctl(it->fd, COMEDI_TRIG, (unsigned long)t);
}
+EXPORT_SYMBOL(comedi_command,0.7.18);
int comedi_command(comedi_t *it,comedi_cmd *t)
{
int ret;
return ret;
}
+EXPORT_SYMBOL(comedi_command_test,0.7.18);
int comedi_command_test(comedi_t *it,comedi_cmd *t)
{
int ret;
return ret;
}
+EXPORT_SYMBOL(comedi_do_insnlist,0.7.18);
int comedi_do_insnlist(comedi_t *it,comedi_insnlist *il)
{
int ret;
return ret;
}
+EXPORT_SYMBOL(comedi_do_insn,0.7.18);
int comedi_do_insn(comedi_t *it,comedi_insn *insn)
{
if(it->has_insn_ioctl){
}
}
+EXPORT_SYMBOL(comedi_lock,0.7.18);
int comedi_lock(comedi_t *it,unsigned int subdevice)
{
return comedi_ioctl(it->fd, COMEDI_LOCK, subdevice);
}
+EXPORT_SYMBOL(comedi_unlock,0.7.18);
int comedi_unlock(comedi_t *it,unsigned int subdevice)
{
return comedi_ioctl(it->fd, COMEDI_UNLOCK, subdevice);
#include <libinternal.h>
-
+EXPORT_SYMBOL(comedi_data_write,0.7.18);
int comedi_data_write(comedi_t *it,unsigned int subdev,unsigned int chan,unsigned int range,
unsigned int aref,lsampl_t data)
{
}
}
+EXPORT_SYMBOL(comedi_data_read_n,0.7.19);
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)
return 0;
}
+EXPORT_SYMBOL(comedi_data_read,0.7.18);
int comedi_data_read(comedi_t *it, unsigned int subdev, unsigned int chan,
unsigned int range, unsigned int aref, lsampl_t *data)
{
CR_PACK(chan, range, aref), data, 1);
}
+EXPORT_SYMBOL(comedi_data_read_hint,0.7.19);
int comedi_data_read_hint(comedi_t *it, unsigned int subdev,
unsigned int chan, unsigned int range, unsigned int aref)
{
CR_PACK(chan, range, aref), &dummy_data, 0);
}
+EXPORT_SYMBOL(comedi_data_read_delayed,0.7.19);
int comedi_data_read_delayed( comedi_t *it, unsigned int subdev,
unsigned int chan, unsigned int range, unsigned int aref,
lsampl_t *data, unsigned int nano_sec)
#include <libinternal.h>
+EXPORT_SYMBOL(comedi_dio_config,0.7.18);
int comedi_dio_config(comedi_t *it,unsigned int subdev,unsigned int chan,unsigned int io)
{
subdevice *s;
}
}
+EXPORT_SYMBOL(comedi_dio_read,0.7.18);
int comedi_dio_read(comedi_t *it,unsigned int subdev,unsigned int chan,
unsigned int *val)
{
}
}
+EXPORT_SYMBOL(comedi_dio_write,0.7.18);
int comedi_dio_write(comedi_t *it,unsigned int subdev,unsigned int chan,
unsigned int val)
{
}
}
+EXPORT_SYMBOL(comedi_dio_bitfield,0.7.18);
int comedi_dio_bitfield(comedi_t *it,unsigned int subdev,unsigned int mask,unsigned int *bits)
{
int ret;
int __comedi_loglevel=1;
int __comedi_errno=0;
+EXPORT_SYMBOL(comedi_loglevel,0.7.18);
int comedi_loglevel(int loglevel)
{
int old_loglevel=__comedi_loglevel;
return old_loglevel;
}
+EXPORT_SYMBOL(comedi_errno,0.7.18);
int comedi_errno(void)
{
return __comedi_errno;
}
+EXPORT_SYMBOL(comedi_strerr,0.7.18);
char *comedi_strerror(int errnum)
{
if(errnum<COMEDI_NOERROR || errnum>=COMEDI_NOERROR+n_errors)
return _(__comedilib_error_strings[errnum-COMEDI_NOERROR]);
}
+EXPORT_SYMBOL(comedi_perror,0.7.18);
void comedi_perror(const char *s)
{
if(__comedi_loglevel>=3){
#include <libinternal.h>
+EXPORT_SYMBOL(comedi_get_n_subdevices,0.7.18);
int comedi_get_n_subdevices(comedi_t *it)
{
if(!valid_dev(it))
return it->n_subdevices;
}
+EXPORT_SYMBOL(comedi_get_version_code,0.7.18);
int comedi_get_version_code(comedi_t *it)
{
if(!valid_dev(it))
return it->devinfo.version_code;
}
+EXPORT_SYMBOL(comedi_get_driver_name,0.7.18);
char *comedi_get_driver_name(comedi_t *it)
{
if(!valid_dev(it))
return it->devinfo.driver_name;
}
+EXPORT_SYMBOL(comedi_get_board_name,0.7.18);
char *comedi_get_board_name(comedi_t *it)
{
if(!valid_dev(it))
return it->devinfo.board_name;
}
+EXPORT_SYMBOL(comedi_get_subdevice_flags,0.7.18);
int comedi_get_subdevice_flags(comedi_t *it,unsigned int subd)
{
if(!valid_dev(it))
return it->subdevices[subd].subd_flags;
}
+EXPORT_SYMBOL(comedi_get_subdevice_type,0.7.18);
int comedi_get_subdevice_type(comedi_t *it,unsigned int subd)
{
if(!valid_dev(it))
return it->subdevices[subd].type;
}
+EXPORT_SYMBOL(comedi_get_subdevice_type,0.7.18);
int comedi_find_subdevice_by_type(comedi_t *it,int type,unsigned int subd)
{
if(!valid_subd(it,subd))
return -1;
}
+EXPORT_SYMBOL(comedi_get_read_subdevice,0.7.18);
int comedi_get_read_subdevice(comedi_t *dev)
{
if(!valid_dev(dev))
return dev->devinfo.read_subdevice;
}
+EXPORT_SYMBOL(comedi_get_write_subdevice,0.7.18);
int comedi_get_write_subdevice(comedi_t *dev)
{
if(!valid_dev(dev))
return dev->devinfo.write_subdevice;
}
+EXPORT_SYMBOL(comedi_get_n_channels,0.7.18);
int comedi_get_n_channels(comedi_t *it,unsigned int subd)
{
if(!valid_subd(it,subd))
/* */
+EXPORT_SYMBOL(comedi_get_maxdata,0.7.18);
lsampl_t comedi_get_maxdata(comedi_t *it,unsigned int subdevice,unsigned int chan)
{
if(!valid_chan(it,subdevice,chan))
return it->subdevices[subdevice].maxdata;
}
+EXPORT_SYMBOL(comedi_maxdata_is_chan_specific,0.7.18);
int comedi_maxdata_is_chan_specific(comedi_t *it,unsigned int subdevice)
{
if(it->subdevices[subdevice].maxdata_list)
return 0;
}
+EXPORT_SYMBOL(comedi_get_rangetype,0.7.18);
int comedi_get_rangetype(comedi_t *it,unsigned int subdevice,unsigned int chan)
{
if(!valid_chan(it,subdevice,chan))
}
+EXPORT_SYMBOL(comedi_get_range,0.7.18);
comedi_range * comedi_get_range(comedi_t *it,unsigned int subdevice,unsigned int chan,unsigned int range)
{
int range_type;
#define COMEDILIB_MAGIC 0xc001dafe
+/* handle versioning */
+
+#define EXPORT_SYMBOL(a,b) __asm__(".symver " #a "," #a "@v" #b )
+#define EXPORT_ALIAS_VER(a,b,c) __asm__(".symver " #a "," #b "@v" #c )
+#define EXPORT_ALIAS_DEFAULT(a,b,c) __asm__(".symver " #a "," #b "@@v" #c )
+
+
extern int __comedi_init;
extern int __comedi_loglevel;
extern int __comedi_errno;
static enum comedi_oor_behavior comedi_oor_is_nan = COMEDI_OOR_NAN;
+EXPORT_SYMBOL(comedi_set_global_oor_behavior,0.7.18);
enum comedi_oor_behavior comedi_set_global_oor_behavior(
enum comedi_oor_behavior behavior)
{
}
+EXPORT_SYMBOL(comedi_to_phys,0.7.18);
double comedi_to_phys(lsampl_t data,comedi_range *rng,lsampl_t maxdata)
{
double x;
return x;
}
+EXPORT_SYMBOL(comedi_from_phys,0.7.18);
lsampl_t comedi_from_phys(double data,comedi_range *rng,lsampl_t maxdata)
{
double s;
return (lsampl_t)(floor(s+0.5));
}
+EXPORT_SYMBOL(comedi_find_range,0.7.18);
int comedi_find_range(comedi_t *it,unsigned int subd,unsigned int chan,unsigned int unit,double min,double max)
{
unsigned int range_type;
return best;
}
+EXPORT_SYMBOL(comedi_get_n_ranges,0.7.18);
int comedi_get_n_ranges(comedi_t *it,unsigned int subd,unsigned int chan)
{
unsigned int range_type;
return RANGE_LENGTH(range_type);
}
+EXPORT_SYMBOL(comedi_range_is_chan_specific,0.7.18);
int comedi_range_is_chan_specific(comedi_t *it,unsigned int subd)
{
return (it->subdevices[subd].subd_flags&SDF_RANGETYPE)?1:0;
}
+EXPORT_SYMBOL(comedi_sampl_to_phys,0.7.19);
int comedi_sampl_to_phys(double *dest, int dst_stride, sampl_t *src,
int src_stride, comedi_range *rng, lsampl_t maxdata, int n)
{
return oor;
}
+EXPORT_SYMBOL(comedi_sampl_from_phys,0.7.19);
int comedi_sampl_from_phys(sampl_t *dest,int dst_stride,double *src,
int src_stride, comedi_range *rng, lsampl_t maxdata, int n)
{
int sv_measure_l(comedi_sv_t *it,double *data);
int sv_measure_s(comedi_sv_t *it,double *data);
-
+EXPORT_SYMBOL(comedi_sv_init,0.7.18);
int comedi_sv_init(comedi_sv_t *it,comedi_t *dev,unsigned int subd,unsigned int chan)
{
if(!valid_chan(dev,subd,chan))return -1;
return comedi_sv_update(it);
}
+EXPORT_SYMBOL(comedi_sv_update,0.7.18);
int comedi_sv_update(comedi_sv_t *it)
{
if(!it)return -1;
return 0;
}
+EXPORT_SYMBOL(comedi_sv_measure,0.7.18);
int comedi_sv_measure(comedi_sv_t *it,double *data)
{
if(it->dev->subdevices[it->subdevice].subd_flags & SDF_LSAMPL){
#define BUFSZ 100
+EXPORT_SYMBOL(comedi_timed_1chan,0.7.18);
int comedi_timed_1chan(comedi_t *dev,unsigned int subd,unsigned int chan,unsigned int range,
unsigned int aref,double freq,unsigned int n_samples,double *data)
{
};
#define N_TIMERTYPES 6
+EXPORT_SYMBOL(comedi_get_timer,0.7.18);
int comedi_get_timer(comedi_t *it,unsigned int subdev,double freq,
unsigned int *trigvar,double *actual_freq)
{
-VERSION{
-
-v0.7.0{
- global:
- comedi_*;
+v0.7.18 {
local:
- *;
+ _comedi_*;
+ get_rangeinfo;
+ get_subdevices;
+ initialize;
+ internal_error;
+ libc_error;
+ sv_measure_l;
+ sv_measure_s;
+ valid_chan;
+ valid_dev;
+ valid_subd;
};
-}
+v0.7.19 {
+
+} v0.7.18;
+