diff --git a/src/fe/map.c b/src/fe/map.c index b721b6483efaf9756534c4694ddb8e699a322df6..21de46baa496ade6e54b1b3a5be31aca19c28905 100644 --- a/src/fe/map.c +++ b/src/fe/map.c @@ -105,6 +105,11 @@ mapPciModules( CDS_HARDWARE* pCds ) dacdev = NULL; status = 0; + // initialize dac duotone multipliers/divisors in case + // we don't have one or the other of DAC or ADC cards + pCds->adcDuoToneDivisor[ 0 ] = 1; + pCds->dacDuoToneMultiplier[ 0 ] = 1; + modCount = map_cards_2_slots ( &cdsPciModules ) ; // Map and Initialize ADC and DAC modules diff --git a/src/include/drv/cdsHardware.h b/src/include/drv/cdsHardware.h index 0adea57f0418f95c837e97ac7b9e1a966be40553..031204a88744781d53b1832b3ef0c9b1cfdcd0f6 100644 --- a/src/include/drv/cdsHardware.h +++ b/src/include/drv/cdsHardware.h @@ -209,6 +209,7 @@ typedef struct CDS_HARDWARE{ int dacCount; /* Number of DAC modules found */ long pci_dac[MAX_DAC_MODULES]; /* Remapped addresses of DAC modules */ int dacType[MAX_DAC_MODULES]; + int dacDuoToneMultiplier[MAX_DAC_MODULES]; /* scale amplitude of duotone up for higher bit DACs */ int dacInstance[MAX_DAC_MODULES]; int dacSlot[MAX_DAC_MODULES]; int dacConfig[MAX_DAC_MODULES]; @@ -217,6 +218,7 @@ typedef struct CDS_HARDWARE{ int adcCount; /* Number of ADC modules found */ long pci_adc[MAX_ADC_MODULES]; /* Remapped addresses of ADC modules */ int adcType[MAX_ADC_MODULES]; + int adcDuoToneDivisor[MAX_ADC_MODULES]; /* scale amplitude of duotone down for higher bit ADCs */ int adcInstance[MAX_ADC_MODULES]; int adcSlot[MAX_ADC_MODULES]; int adcChannels[MAX_ADC_MODULES]; diff --git a/src/include/drv/gsc16ai64.c b/src/include/drv/gsc16ai64.c index 4ed938afa6c98eb2cd5b5352337af21eeae22a21..43d7e848d3d5fdcb98ddc39ba3252717f7e5a69f 100644 --- a/src/include/drv/gsc16ai64.c +++ b/src/include/drv/gsc16ai64.c @@ -121,6 +121,7 @@ gsc16ai64Init( CDS_HARDWARE* pHardware, struct pci_dev* adcdev ) pHardware->pci_adc[ devNum ] = (long)pci_alloc_consistent( adcdev, 0x2000, &adc_dma_handle[ devNum ] ); pHardware->adcType[ devNum ] = GSC_16AI64SSA; + pHardware->adcDuoToneDivisor[ devNum ] = 1; pHardware->adcInstance[ devNum ] = pHardware->card_count[ GSC_16AI64SSA ]; pHardware->card_count[ GSC_16AI64SSA ] ++; pHardware->adcChannels[ devNum ] = GSAI_CHAN_COUNT; diff --git a/src/include/drv/gsc16ao16.c b/src/include/drv/gsc16ao16.c index 7bc79a5a4412aa72893f4d43357cd75dfaa7a08f..db7618560689e7c375a48b6d6a7c33913582bf44 100644 --- a/src/include/drv/gsc16ao16.c +++ b/src/include/drv/gsc16ao16.c @@ -80,6 +80,7 @@ gsc16ao16Init( CDS_HARDWARE* pHardware, struct pci_dev* dacdev ) (long)pci_alloc_consistent( dacdev, 0x200, &dac_dma_handle[ devNum ] ); pHardware->dacAcr[ devNum ] = (int)( _dacPtr[ devNum ]->ASSC ); pHardware->dacType[ devNum ] = GSC_16AO16; + pHardware->dacDuoToneMultiplier[ devNum ] = 1; pHardware->dacCount++; pHardware->dacInstance[ devNum ] = pHardware->card_count[ GSC_16AO16 ]; pHardware->card_count[ GSC_16AO16 ] ++; diff --git a/src/include/drv/gsc18ai32.c b/src/include/drv/gsc18ai32.c index 54bfb14b715c26b1948f3e1eae9358da9ff28db2..0ef1130e3a142feede24e43984ff3a2bebe92d36 100644 --- a/src/include/drv/gsc18ai32.c +++ b/src/include/drv/gsc18ai32.c @@ -135,6 +135,7 @@ gsc18ai32Init( CDS_HARDWARE* pHardware, struct pci_dev* adcdev ) pHardware->pci_adc[ devNum ] = (long)pci_alloc_consistent( adcdev, 0x2000, &adc_dma_handle[ devNum ] ); pHardware->adcType[ devNum ] = GSC_18AI32SSC1M; + pHardware->adcDuoToneDivisor[ devNum ] = 4; pHardware->adcInstance[ devNum ] = pHardware->card_count[ GSC_18AI32SSC1M ]; pHardware->card_count[ GSC_18AI32SSC1M ] ++; pHardware->adcConfig[ devNum ] |= autocal; diff --git a/src/include/drv/gsc18ai64.c b/src/include/drv/gsc18ai64.c index a1acc278447b1aa8500cc17aed14ed80c35a6d9c..0815bbe3cfbdfac0f1411a1f1073feb32b84036b 100644 --- a/src/include/drv/gsc18ai64.c +++ b/src/include/drv/gsc18ai64.c @@ -126,6 +126,7 @@ gsc18ai64Init( CDS_HARDWARE* pHardware, struct pci_dev* adcdev ) pHardware->pci_adc[ devNum ] = (long)pci_alloc_consistent( adcdev, 0x2000, &adc_dma_handle[ devNum ] ); pHardware->adcType[ devNum ] = GSC_18AI64SSC; + pHardware->adcDuoToneDivisor[ devNum ] = 4; pHardware->adcInstance[ devNum ] = pHardware->card_count[ GSC_18AI64SSC ]; pHardware->card_count[ GSC_18AI64SSC ] ++; pHardware->adcConfig[ devNum ] = adc18Ptr->ASSC; diff --git a/src/include/drv/gsc18ao8.c b/src/include/drv/gsc18ao8.c index 9031b0a9884f92fb3d496c3b1888e4a8e5522be4..e1442150e66c40f3d3c6ec7675422f768c9c1120 100644 --- a/src/include/drv/gsc18ao8.c +++ b/src/include/drv/gsc18ao8.c @@ -115,6 +115,7 @@ gsc18ao8Init( CDS_HARDWARE* pHardware, struct pci_dev* dacdev ) (long)pci_alloc_consistent( dacdev, 0x200, &dac_dma_handle[ devNum ] ); pHardware->dacAcr[ devNum ] |= ((int)( dac18bitPtr->ASY_CONFIG ) & DAC_ACR_MASK); pHardware->dacType[ devNum ] = GSC_18AO8; + pHardware->dacDuoToneMultiplier[ devNum ] = 4; pHardware->dacCount++; pHardware->dacInstance[ devNum ] = pHardware->card_count[ GSC_18AO8 ]; pHardware->card_count[ GSC_18AO8 ] ++; diff --git a/src/include/drv/gsc20ao8.c b/src/include/drv/gsc20ao8.c index 2b22bd4dbf3ebf7242fac3470ae19fc36e88d528..04e7bf8c2bf375cffaee82f33fdf2fab86273311 100644 --- a/src/include/drv/gsc20ao8.c +++ b/src/include/drv/gsc20ao8.c @@ -135,6 +135,7 @@ gsc20ao8Init( CDS_HARDWARE* pHardware, struct pci_dev* dacdev ) // Return the device type to main code. pHardware->dacType[ devNum ] = GSC_20AO8; + pHardware->dacDuoToneMultiplier[ devNum ] = 8; pHardware->dacCount++; pHardware->dacInstance[ devNum ] = pHardware->card_count[ GSC_20AO8 ]; pHardware->card_count[ GSC_20AO8 ] ++; diff --git a/src/include/drv/iop_dac_functions.c b/src/include/drv/iop_dac_functions.c index e6537656b665699a4f3429ffd9861f4bcc4fa16a..ed46935d3ca620183bc69383277f97b435edf1de 100644 --- a/src/include/drv/iop_dac_functions.c +++ b/src/include/drv/iop_dac_functions.c @@ -156,7 +156,8 @@ iop_dac_write( ) if ( ( dt_diag.dacDuoEnable ) && ( chan == ( num_outs - 1 ) ) && ( card == 0 ) ) { - dac_out = adcinfo.adcData[ 0 ][ ADC_DUOTONE_CHAN ]; + dac_out = adcinfo.adcData[ 0 ][ ADC_DUOTONE_CHAN ] + * cdsPciModules.dacDuoToneMultiplier[0] / cdsPciModules.adcDuoToneDivisor[0]; } // Code below is only for use in DAQ test system. #ifdef DIAG_TEST