6713 is completely failing
[comedilib.git] / comedi_calibrate / ni.c
index bf2b7efa466de989d966d56d953fda12ad32f35b..c028fbd0603bfc161d48124ba4c39eac6df7233d 100644 (file)
@@ -53,6 +53,7 @@ static int cal_ni_at_mio_16e_2(calibration_setup_t *setup);
 static int cal_ni_daqcard_ai_16xe_50(calibration_setup_t *setup);
 static int cal_ni_at_mio_16e_1(calibration_setup_t *setup);
 static int cal_ni_pci_mio_16e_1(calibration_setup_t *setup);
+static int cal_ni_pci_6014(calibration_setup_t *setup);
 static int cal_ni_pci_6024e(calibration_setup_t *setup);
 static int cal_ni_pci_6025e(calibration_setup_t *setup);
 static int cal_ni_pci_6032e(calibration_setup_t *setup);
@@ -87,13 +88,13 @@ static struct board_struct boards[]={
        { "DAQCard-ai-16e-4", STATUS_DONE, cal_ni_daqcard_ai_16e_4, ni_setup_observables, 0x1b5, 0x1b6 },
        { "DAQCard-ai-16xe-50", STATUS_DONE, cal_ni_daqcard_ai_16xe_50, ni_setup_observables, 0x1be, 0x1bf },
        { "DAQCard-6024E", STATUS_SOME, cal_ni_daqcard_6024e, ni_setup_observables, -1, -1 },
-       { "DAQCard-6036E", STATUS_SOME, cal_ni_daqcard_6036e, ni_setup_observables, 0x1ab, 0x1ac },
+       { "DAQCard-6036E", STATUS_DONE, cal_ni_daqcard_6036e, ni_setup_observables, 0x1ab, 0x1ac },
        { "DAQCard-6062E", STATUS_DONE, cal_ni_daqcard_6062e, ni_setup_observables, 0x1a9, 0x1aa },
        { "pci-mio-16e-1", STATUS_DONE, cal_ni_pci_mio_16e_1, ni_setup_observables, 0x1a9, 0x1aa },
        { "pci-mio-16e-4", STATUS_SOME, cal_ni_pci_mio_16e_4, ni_setup_observables, 0x1a9, 0x1aa },
        { "pci-mio-16xe-10", STATUS_DONE,       cal_ni_pci_mio_16xe_10, ni_setup_observables, 0x1ae, 0x1af },
        { "pci-mio-16xe-50", STATUS_SOME, cal_ni_pci_mio_16xe_50, ni_setup_observables, 0x1b5, 0x1b6 },
-       { "pci-6014", STATUS_UNKNOWN, NULL, ni_setup_observables, -1, -1 },
+       { "pci-6014", STATUS_SOME, cal_ni_pci_6014, ni_setup_observables, 0x1ab, 0x1ac },
        { "pci-6023e", STATUS_DONE, cal_ni_pci_6023e, ni_setup_observables, 0x1bb, 0x1bc },
        { "pci-6024e", STATUS_SOME, cal_ni_pci_6024e, ni_setup_observables, 0x1af, 0x1b0 },
        { "pci-6025e", STATUS_SOME, cal_ni_pci_6025e, ni_setup_observables, 0x1af, 0x1b0 },
@@ -244,6 +245,7 @@ typedef struct
        int adc_unip_offset;
        int adc_unip_offset_fine;
        int dac_offset[ 2 ];
+       int dac_offset_fine[ 2 ];
        int dac_gain[ 2 ];
        int dac_gain_fine[ 2 ];
        int dac_linearity[ 2 ];
@@ -267,6 +269,7 @@ static inline void init_ni_caldac_layout( ni_caldac_layout_t *layout )
        for( i = 0; i < 2; i++ )
        {
                layout->dac_offset[ i ] = -1;
+               layout->dac_offset_fine[ i ] = -1;
                layout->dac_gain[ i ] = -1;
                layout->dac_gain_fine[ i ] = -1;
                layout->dac_linearity[ i ] = -1;
@@ -751,6 +754,26 @@ static int cal_ni_pci_mio_16e_1(calibration_setup_t *setup)
        return cal_ni_generic( setup, &layout );
 }
 
+static int cal_ni_pci_6014(calibration_setup_t *setup)
+{
+       ni_caldac_layout_t layout;
+
+       init_ni_caldac_layout( &layout );
+       layout.adc_pregain_offset = 0;
+       layout.adc_postgain_offset = 4;
+       layout.adc_pregain_offset_fine = 8;
+       layout.adc_gain = 2;
+       layout.dac_offset[0] = 6;
+       layout.dac_offset_fine[0] = 10;
+       layout.dac_gain[0] = 7;
+       layout.dac_gain_fine[0] = 11;
+       layout.dac_offset[1] = 9;
+       layout.dac_offset_fine[1] = 1;
+       layout.dac_gain[1] = 3;
+       layout.dac_gain_fine[1] = 5;
+       return cal_ni_generic( setup, &layout );
+}
+
 static int cal_ni_pci_6032e(calibration_setup_t *setup)
 {
        ni_caldac_layout_t layout;
@@ -1207,6 +1230,7 @@ static void prep_dac_caldacs_generic( calibration_setup_t *setup,
        if( setup->old_calibration == NULL )
        {
                reset_caldac( setup, layout->dac_offset[ channel ] );
+               reset_caldac( setup, layout->dac_offset_fine[ channel ] );
                reset_caldac( setup, layout->dac_gain[ channel ] );
                reset_caldac( setup, layout->dac_gain_fine[ channel ] );
                reset_caldac( setup, layout->dac_linearity[ channel ] );
@@ -1218,6 +1242,7 @@ static void prep_dac_caldacs_generic( calibration_setup_t *setup,
                {
                        DPRINT( 0, "Failed to apply existing calibration, reseting dac caldacs.\n" );
                        reset_caldac( setup, layout->dac_offset[ channel ] );
+                       reset_caldac( setup, layout->dac_offset_fine[ channel ] );
                        reset_caldac( setup, layout->dac_gain[ channel ] );
                        reset_caldac( setup, layout->dac_gain_fine[ channel ] );
                        reset_caldac( setup, layout->dac_linearity[ channel ] );
@@ -1345,8 +1370,11 @@ static int cal_ni_generic( calibration_setup_t *setup, const ni_caldac_layout_t
                        generic_do_linearity( setup, current_cal, ni_ao_zero_offset( channel ),
                                ni_ao_mid_linearity( channel ), ni_ao_reference( channel ),
                                layout->dac_linearity[ channel ] );
+                       reset_caldac(setup, layout->dac_offset_fine[channel]);
                        generic_do_cal( setup, current_cal, ni_ao_zero_offset( channel ),
                                layout->dac_offset[ channel ] );
+                       generic_do_cal( setup, current_cal, ni_ao_zero_offset( channel ),
+                               layout->dac_offset_fine[ channel ] );
                        reset_caldac( setup, layout->dac_gain_fine[ channel ] );
                        generic_do_cal( setup, current_cal, ni_ao_reference( channel ),
                                layout->dac_gain[ channel ] );
@@ -1369,8 +1397,12 @@ static int cal_ni_generic( calibration_setup_t *setup, const ni_caldac_layout_t
                                generic_do_linearity( setup, current_cal, ni_ao_unip_low_linearity( channel ),
                                        ni_ao_unip_mid_linearity( channel ), ni_ao_unip_reference( channel ),
                                        layout->dac_linearity[ channel ] );
+                               reset_caldac( setup, layout->dac_offset_fine[ channel ] );
                                generic_do_cal( setup, current_cal, ni_ao_unip_zero_offset( channel),
                                        layout->dac_offset[ channel ] );
+                               generic_do_cal( setup, current_cal, ni_ao_unip_zero_offset( channel),
+                                       layout->dac_offset_fine[ channel ] );
+                               reset_caldac( setup, layout->dac_gain_fine[ channel ] );
                                generic_do_cal( setup, current_cal, ni_ao_unip_reference( channel ),
                                        layout->dac_gain[ channel ] );
                                generic_do_cal( setup, current_cal, ni_ao_unip_reference( channel ),