mmap works for output waveforms now.
[comedilib.git] / lib / calib.c
index b53a65dd29c20a220c553a1c0082cdfe299f0051..87fc6340484653692c58ecd8f2791a234de0b348 100644 (file)
@@ -148,8 +148,8 @@ static int set_calibration( comedi_t *dev, const comedi_calibration_t *parsed_fi
        return 0;
 }
 
-EXPORT_SYMBOL(comedi_apply_calibration,0.7.20);
-int comedi_apply_parsed_calibration( comedi_t *dev, unsigned int subdev, unsigned int channel,
+EXPORT_ALIAS_DEFAULT(_comedi_apply_parsed_calibration,comedi_apply_parsed_calibration,0.7.20);
+int _comedi_apply_parsed_calibration( comedi_t *dev, unsigned int subdev, unsigned int channel,
        unsigned int range, unsigned int aref, const comedi_calibration_t *calibration )
 {
        int retval;
@@ -161,12 +161,26 @@ int comedi_apply_parsed_calibration( comedi_t *dev, unsigned int subdev, unsigne
        return retval;
 }
 
-EXPORT_SYMBOL(comedi_get_default_calibration_path,0.7.20);
-char* comedi_get_default_calibration_path( comedi_t *dev )
+/* munge characters in board name that will cause problems with file paths */
+static void fixup_board_name( char *name )
+{
+       while( ( name = strchr( name, '/' ) ) )
+       {
+               if( name )
+               {
+                       *name = '-';
+                       name++;
+               }
+       }
+}
+
+EXPORT_ALIAS_DEFAULT(_comedi_get_default_calibration_path,comedi_get_default_calibration_path,0.7.20);
+char* _comedi_get_default_calibration_path( comedi_t *dev )
 {
        struct stat file_stats;
        char *file_path;
-       char *board_name;
+       char *board_name, *temp;
+       char *driver_name;
 
        if( fstat( comedi_fileno( dev ), &file_stats ) < 0 )
        {
@@ -174,19 +188,28 @@ char* comedi_get_default_calibration_path( comedi_t *dev )
                return NULL;
        }
 
-       board_name = comedi_get_board_name( dev );
-       if( board_name == NULL )
+       driver_name = comedi_get_driver_name( dev );
+       if( driver_name == NULL )
        {
                return NULL;
        }
-       asprintf( &file_path, "/etc/comedi/calibrations/%s_comedi%li",
-               board_name, ( unsigned long ) minor( file_stats.st_rdev ) );
+       temp = comedi_get_board_name( dev );
+       if( temp == NULL )
+       {
+               return NULL;
+       }
+       board_name = strdup( temp );
+
+       fixup_board_name( board_name );
+       asprintf( &file_path, LOCALSTATEDIR "/lib/comedi/calibrations/%s_%s_comedi%li",
+               driver_name, board_name, ( unsigned long ) minor( file_stats.st_rdev ) );
 
+       free( board_name );
        return file_path;
 }
 
-EXPORT_SYMBOL(comedi_apply_calibration,0.7.20);
-int comedi_apply_calibration( comedi_t *dev, unsigned int subdev, unsigned int channel,
+EXPORT_ALIAS_DEFAULT(_comedi_apply_calibration,comedi_apply_calibration,0.7.20);
+int _comedi_apply_calibration( comedi_t *dev, unsigned int subdev, unsigned int channel,
        unsigned int range, unsigned int aref, const char *cal_file_path )
 {
        char file_path[ 1024 ];