| /* |
| * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. |
| * |
| * ADDI-DATA GmbH |
| * Dieselstrasse 3 |
| * D-77833 Ottersweier |
| * Tel: +19(0)7223/9493-0 |
| * Fax: +49(0)7223/9493-92 |
| * http://www.addi-data-com |
| * info@addi-data.com |
| * |
| * This program is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License as published by the Free |
| * Software Foundation; either version 2 of the License, or (at your option) |
| * any later version. |
| */ |
| |
| /* Card Specific information */ |
| #define APCI3200_BOARD_VENDOR_ID 0x15B8 |
| /* #define APCI3200_ADDRESS_RANGE 264 */ |
| |
| int MODULE_NO; |
| struct { |
| int i_Gain; |
| int i_Polarity; |
| int i_OffsetRange; |
| int i_Coupling; |
| int i_SingleDiff; |
| int i_AutoCalibration; |
| unsigned int ui_ReloadValue; |
| unsigned int ui_TimeUnitReloadVal; |
| int i_Interrupt; |
| int i_ModuleSelection; |
| } Config_Parameters_Module1, Config_Parameters_Module2, |
| Config_Parameters_Module3, Config_Parameters_Module4; |
| |
| /* ANALOG INPUT RANGE */ |
| static const struct comedi_lrange range_apci3200_ai = { 8, { |
| BIP_RANGE(10), |
| BIP_RANGE(5), |
| BIP_RANGE(2), |
| BIP_RANGE(1), |
| UNI_RANGE(10), |
| UNI_RANGE(5), |
| UNI_RANGE(2), |
| UNI_RANGE(1) |
| } |
| }; |
| |
| static const struct comedi_lrange range_apci3300_ai = { 4, { |
| UNI_RANGE(10), |
| UNI_RANGE(5), |
| UNI_RANGE(2), |
| UNI_RANGE(1) |
| } |
| }; |
| |
| /* Analog Input related Defines */ |
| #define APCI3200_AI_OFFSET_GAIN 0 |
| #define APCI3200_AI_SC_TEST 4 |
| #define APCI3200_AI_IRQ 8 |
| #define APCI3200_AI_AUTOCAL 12 |
| #define APCI3200_RELOAD_CONV_TIME_VAL 32 |
| #define APCI3200_CONV_TIME_TIME_BASE 36 |
| #define APCI3200_RELOAD_DELAY_TIME_VAL 40 |
| #define APCI3200_DELAY_TIME_TIME_BASE 44 |
| #define APCI3200_AI_MODULE1 0 |
| #define APCI3200_AI_MODULE2 64 |
| #define APCI3200_AI_MODULE3 128 |
| #define APCI3200_AI_MODULE4 192 |
| #define TRUE 1 |
| #define FALSE 0 |
| #define APCI3200_AI_EOSIRQ 16 |
| #define APCI3200_AI_EOS 20 |
| #define APCI3200_AI_CHAN_ID 24 |
| #define APCI3200_AI_CHAN_VAL 28 |
| #define ANALOG_INPUT 0 |
| #define TEMPERATURE 1 |
| #define RESISTANCE 2 |
| |
| #define ENABLE_EXT_TRIG 1 |
| #define ENABLE_EXT_GATE 2 |
| #define ENABLE_EXT_TRIG_GATE 3 |
| |
| #define APCI3200_MAXVOLT 2.5 |
| #define ADDIDATA_GREATER_THAN_TEST 0 |
| #define ADDIDATA_LESS_THAN_TEST 1 |
| |
| #define ADDIDATA_UNIPOLAR 1 |
| #define ADDIDATA_BIPOLAR 2 |
| |
| /* BEGIN JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ |
| #define MAX_MODULE 4 |
| /* END JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ |
| |
| struct str_ADDIDATA_RTDStruct { |
| unsigned int ul_NumberOfValue; |
| unsigned int *pul_ResistanceValue; |
| unsigned int *pul_TemperatureValue; |
| }; |
| |
| /* BEGIN JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ |
| struct str_Module { |
| |
| /* Begin JK 05/08/2003 change for Linux */ |
| unsigned long ul_CurrentSourceCJC; |
| unsigned long ul_CurrentSource[5]; |
| /* End JK 05/08/2003 change for Linux */ |
| |
| /* Begin CG 15/02/02 Rev 1.0 -> Rev 1.1 : Add Header Type 1 */ |
| unsigned long ul_GainFactor[8]; /* Gain Factor */ |
| unsigned int w_GainValue[10]; |
| /* End CG 15/02/02 Rev 1.0 -> Rev 1.1 : Add Header Type 1 */ |
| }; |
| |
| /* END JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ |
| |
| /* BEGIN JK 06.07.04: Management of sevrals boards */ |
| struct str_BoardInfos { |
| |
| int i_CJCAvailable; |
| int i_CJCPolarity; |
| int i_CJCGain; |
| int i_InterruptFlag; |
| int i_ADDIDATAPolarity; |
| int i_ADDIDATAGain; |
| int i_AutoCalibration; |
| int i_ADDIDATAConversionTime; |
| int i_ADDIDATAConversionTimeUnit; |
| int i_ADDIDATAType; |
| int i_ChannelNo; |
| int i_ChannelCount; |
| int i_ScanType; |
| int i_FirstChannel; |
| int i_LastChannel; |
| int i_Sum; |
| int i_Offset; |
| unsigned int ui_Channel_num; |
| int i_Count; |
| int i_Initialised; |
| /* UINT ui_InterruptChannelValue[96]; //Buffer */ |
| unsigned int ui_InterruptChannelValue[144]; /* Buffer */ |
| unsigned char b_StructInitialized; |
| /* Begin JK 19.10.2004: APCI-3200 Driver update 0.7.57 -> 0.7.68 */ |
| unsigned int ui_ScanValueArray[7 + 12]; /* 7 is the maximal number of channels */ |
| /* End JK 19.10.2004: APCI-3200 Driver update 0.7.57 -> 0.7.68 */ |
| |
| /* Begin JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ |
| int i_ConnectionType; |
| int i_NbrOfModule; |
| struct str_Module s_Module[MAX_MODULE]; |
| /* End JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values */ |
| }; |
| |
| /* END JK 06.07.04: Management of sevrals boards */ |
| |
| /* Hardware Layer functions for Apci3200 */ |
| |
| /* AI */ |
| |
| int i_APCI3200_ConfigAnalogInput(struct comedi_device *dev, struct comedi_subdevice *s, |
| struct comedi_insn *insn, unsigned int *data); |
| int i_APCI3200_ReadAnalogInput(struct comedi_device *dev, struct comedi_subdevice *s, |
| struct comedi_insn *insn, unsigned int *data); |
| int i_APCI3200_InsnWriteReleaseAnalogInput(struct comedi_device *dev, |
| struct comedi_subdevice *s, |
| struct comedi_insn *insn, unsigned int *data); |
| int i_APCI3200_InsnBits_AnalogInput_Test(struct comedi_device *dev, |
| struct comedi_subdevice *s, |
| struct comedi_insn *insn, unsigned int *data); |
| int i_APCI3200_StopCyclicAcquisition(struct comedi_device *dev, struct comedi_subdevice *s); |
| int i_APCI3200_InterruptHandleEos(struct comedi_device *dev); |
| int i_APCI3200_CommandTestAnalogInput(struct comedi_device *dev, struct comedi_subdevice *s, |
| struct comedi_cmd *cmd); |
| int i_APCI3200_CommandAnalogInput(struct comedi_device *dev, struct comedi_subdevice *s); |
| int i_APCI3200_ReadDigitalInput(struct comedi_device *dev, struct comedi_subdevice *s, |
| struct comedi_insn *insn, unsigned int *data); |
| /* Interrupt */ |
| void v_APCI3200_Interrupt(int irq, void *d); |
| int i_APCI3200_InterruptHandleEos(struct comedi_device *dev); |
| /* Reset functions */ |
| int i_APCI3200_Reset(struct comedi_device *dev); |
| |
| int i_APCI3200_ReadCJCCalOffset(struct comedi_device *dev, unsigned int *data); |
| int i_APCI3200_ReadCJCValue(struct comedi_device *dev, unsigned int *data); |
| int i_APCI3200_ReadCalibrationGainValue(struct comedi_device *dev, unsigned int *data); |
| int i_APCI3200_ReadCalibrationOffsetValue(struct comedi_device *dev, unsigned int *data); |
| int i_APCI3200_Read1AnalogInputChannel(struct comedi_device *dev, |
| struct comedi_subdevice *s, struct comedi_insn *insn, |
| unsigned int *data); |
| int i_APCI3200_ReadCJCCalGain(struct comedi_device *dev, unsigned int *data); |