int new_sv_measure(comedi_t *dev, new_sv_t *sv);
int new_sv_init(new_sv_t *sv,comedi_t *dev,int subdev,unsigned int chanspec);
+/* saving calibrations to file */
+#define CAL_MAX_CHANNELS_LENGTH 128
+#define CAL_MAX_RANGES_LENGTH 128
+#define CAL_MAX_AREFS_LENGTH 16
+typedef struct
+{
+ unsigned int subdevice;
+ caldac_t caldacs[ N_CALDACS ];
+ unsigned int caldacs_length;
+ /* channels that caldac settings are restricted to */
+ int channels[ CAL_MAX_CHANNELS_LENGTH ];
+ /* number of elements in channels array, 0 means allow all channels */
+ unsigned int channels_length;
+ /* ranges that caldac settings are restricted to */
+ int ranges[ CAL_MAX_RANGES_LENGTH ];
+ /* number of elements in ranges array, 0 means allow all ranges */
+ unsigned int ranges_length;
+ /* arefs that caldac settings are used restricted to */
+ int arefs[ CAL_MAX_AREFS_LENGTH ];
+ /* number of elements in arefs array, 0 means allow any aref */
+ unsigned int arefs_length;
+} saved_calibration_t;
+
+int write_calibration_file( comedi_t *dev, saved_calibration_t settings[],
+ unsigned int num_settings );
#endif
#include "calib.h"
-#define CAL_MAX_CHANNELS_LENGTH 1024
-#define CAL_MAX_RANGES_LENGTH 128
-#define CAL_MAX_AREFS_LENGTH 16
-
-struct calibration_setting
-{
- unsigned int subdevice;
- caldac_t caldacs[ N_CALDACS ];
- unsigned int caldacs_length;
- int channels[ CAL_MAX_CHANNELS_LENGTH ]; /* channels that caldac settings are restricted to */
- unsigned int channels_length; /* number of elements in channels array, 0 means allow all channels */
- int ranges[ CAL_MAX_RANGES_LENGTH ]; /* ranges that caldac settings are restricted to */
- unsigned int ranges_length;/* number of elements in ranges array, 0 means allow all ranges */
- int arefs[ CAL_MAX_AREFS_LENGTH ]; /* arefs that caldac settings are used restricted to */
- unsigned int arefs_length; /* number of elements in arefs array, 0 means allow any aref */
-};
-
int get_inode( comedi_t *dev, ino_t *inode )
{
struct stat file_stats;
fprintf( file, "}" );
}
-void write_calibration_setting( FILE *file, struct calibration_setting setting )
+void write_calibration_setting( FILE *file, saved_calibration_t setting )
{
static const char *indent = "\t\t";
int i;
fprintf( file, "}" );
}
-int write_calibration_file( FILE *file, comedi_t *dev,
- struct calibration_setting settings[], unsigned int num_settings )
+int write_calibration_perl_hash( FILE *file, comedi_t *dev,
+ saved_calibration_t settings[], unsigned int num_settings )
{
ino_t inode;
int retval;
return 0;
}
+
+int write_calibration_file( comedi_t *dev, saved_calibration_t settings[],
+ unsigned int num_settings )
+{
+ FILE *file;
+ int retval;
+ static const char *save_dir = "/etc/comedi/calibrations";
+ char file_path[ 100 ];
+ char command[ 100 ];
+ struct stat file_stats;
+
+ if( fstat( comedi_fileno( dev ), &file_stats ) < 0 )
+ {
+ fprintf( stderr, "failed to get dev_t of comedi device file\n" );
+ return -1;
+ }
+
+ snprintf( command, sizeof( command ), "install -d %s", save_dir );
+ if( system( command ) )
+ {
+ fprintf( stderr, "failed to create directory %s\n", save_dir );
+ return -1;
+ }
+
+ snprintf( file_path, sizeof( file_path ), "%s/comedi_0x%lx",
+ save_dir, ( unsigned long ) file_stats.st_dev );
+ file = fopen( file_path, "w" );
+ if( file == NULL )
+ {
+ fprintf( stderr, "failed to open file %s for writing\n", file_path );
+ return -1;
+ }
+
+ retval = write_calibration_perl_hash( file, dev, settings, num_settings );
+
+ fclose( file );
+
+ return retval;
+}