hwdrv_apci3200.h revision 82a6e2e7ab47b940d5d1d7c1d13498be27f238f8
1/* 2 * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. 3 * 4 * ADDI-DATA GmbH 5 * Dieselstrasse 3 6 * D-77833 Ottersweier 7 * Tel: +19(0)7223/9493-0 8 * Fax: +49(0)7223/9493-92 9 * http://www.addi-data-com 10 * info@addi-data.com 11 * 12 * This program is free software; you can redistribute it and/or modify it 13 * under the terms of the GNU General Public License as published by the Free 14 * Software Foundation; either version 2 of the License, or (at your option) 15 * any later version. 16 */ 17 18// Card Specific information 19#define APCI3200_BOARD_VENDOR_ID 0x15B8 20//#define APCI3200_ADDRESS_RANGE 264 21 22int MODULE_NO; 23struct { 24 int i_Gain; 25 int i_Polarity; 26 int i_OffsetRange; 27 int i_Coupling; 28 int i_SingleDiff; 29 int i_AutoCalibration; 30 unsigned int ui_ReloadValue; 31 unsigned int ui_TimeUnitReloadVal; 32 int i_Interrupt; 33 int i_ModuleSelection; 34} Config_Parameters_Module1, Config_Parameters_Module2, 35 Config_Parameters_Module3, Config_Parameters_Module4; 36 37//ANALOG INPUT RANGE 38static const struct comedi_lrange range_apci3200_ai = { 8, { 39 BIP_RANGE(10), 40 BIP_RANGE(5), 41 BIP_RANGE(2), 42 BIP_RANGE(1), 43 UNI_RANGE(10), 44 UNI_RANGE(5), 45 UNI_RANGE(2), 46 UNI_RANGE(1) 47 } 48}; 49 50static const struct comedi_lrange range_apci3300_ai = { 4, { 51 UNI_RANGE(10), 52 UNI_RANGE(5), 53 UNI_RANGE(2), 54 UNI_RANGE(1) 55 } 56}; 57 58//Analog Input related Defines 59#define APCI3200_AI_OFFSET_GAIN 0 60#define APCI3200_AI_SC_TEST 4 61#define APCI3200_AI_IRQ 8 62#define APCI3200_AI_AUTOCAL 12 63#define APCI3200_RELOAD_CONV_TIME_VAL 32 64#define APCI3200_CONV_TIME_TIME_BASE 36 65#define APCI3200_RELOAD_DELAY_TIME_VAL 40 66#define APCI3200_DELAY_TIME_TIME_BASE 44 67#define APCI3200_AI_MODULE1 0 68#define APCI3200_AI_MODULE2 64 69#define APCI3200_AI_MODULE3 128 70#define APCI3200_AI_MODULE4 192 71#define TRUE 1 72#define FALSE 0 73#define APCI3200_AI_EOSIRQ 16 74#define APCI3200_AI_EOS 20 75#define APCI3200_AI_CHAN_ID 24 76#define APCI3200_AI_CHAN_VAL 28 77#define ANALOG_INPUT 0 78#define TEMPERATURE 1 79#define RESISTANCE 2 80 81#define ENABLE_EXT_TRIG 1 82#define ENABLE_EXT_GATE 2 83#define ENABLE_EXT_TRIG_GATE 3 84 85#define APCI3200_MAXVOLT 2.5 86#define ADDIDATA_GREATER_THAN_TEST 0 87#define ADDIDATA_LESS_THAN_TEST 1 88 89#define ADDIDATA_UNIPOLAR 1 90#define ADDIDATA_BIPOLAR 2 91 92//BEGIN JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values 93#define MAX_MODULE 4 94//END JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values 95 96typedef struct { 97 unsigned int ul_NumberOfValue; 98 unsigned int *pul_ResistanceValue; 99 unsigned int *pul_TemperatureValue; 100} str_ADDIDATA_RTDStruct, *pstr_ADDIDATA_RTDStruct; 101 102//BEGIN JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values 103typedef struct { 104 // Begin JK 05/08/2003 change for Linux 105 unsigned long ul_CurrentSourceCJC; 106 unsigned long ul_CurrentSource[5]; 107 // End JK 05/08/2003 change for Linux 108 109 // Begin CG 15/02/02 Rev 1.0 -> Rev 1.1 : Add Header Type 1 110 unsigned long ul_GainFactor[8]; // Gain Factor 111 unsigned int w_GainValue[10]; 112 // End CG 15/02/02 Rev 1.0 -> Rev 1.1 : Add Header Type 1 113} str_Module; 114//END JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values 115 116//BEGIN JK 06.07.04: Management of sevrals boards 117typedef struct { 118 int i_CJCAvailable; 119 int i_CJCPolarity; 120 int i_CJCGain; 121 int i_InterruptFlag; 122 int i_ADDIDATAPolarity; 123 int i_ADDIDATAGain; 124 int i_AutoCalibration; 125 int i_ADDIDATAConversionTime; 126 int i_ADDIDATAConversionTimeUnit; 127 int i_ADDIDATAType; 128 int i_ChannelNo; 129 int i_ChannelCount; 130 int i_ScanType; 131 int i_FirstChannel; 132 int i_LastChannel; 133 int i_Sum; 134 int i_Offset; 135 unsigned int ui_Channel_num; 136 int i_Count; 137 int i_Initialised; 138 //UINT ui_InterruptChannelValue[96]; //Buffer 139 unsigned int ui_InterruptChannelValue[144]; //Buffer 140 unsigned char b_StructInitialized; 141 //Begin JK 19.10.2004: APCI-3200 Driver update 0.7.57 -> 0.7.68 142 unsigned int ui_ScanValueArray[7 + 12]; // 7 is the maximal number of channels 143 //End JK 19.10.2004: APCI-3200 Driver update 0.7.57 -> 0.7.68 144 145 //Begin JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values 146 int i_ConnectionType; 147 int i_NbrOfModule; 148 str_Module s_Module[MAX_MODULE]; 149 //End JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values 150} str_BoardInfos; 151//END JK 06.07.04: Management of sevrals boards 152 153// Hardware Layer functions for Apci3200 154 155//AI 156 157int i_APCI3200_ConfigAnalogInput(struct comedi_device *dev, struct comedi_subdevice *s, 158 struct comedi_insn *insn, unsigned int *data); 159int i_APCI3200_ReadAnalogInput(struct comedi_device *dev, struct comedi_subdevice *s, 160 struct comedi_insn *insn, unsigned int *data); 161int i_APCI3200_InsnWriteReleaseAnalogInput(struct comedi_device *dev, 162 struct comedi_subdevice *s, 163 struct comedi_insn *insn, unsigned int *data); 164int i_APCI3200_InsnBits_AnalogInput_Test(struct comedi_device *dev, 165 struct comedi_subdevice *s, 166 struct comedi_insn *insn, unsigned int *data); 167int i_APCI3200_StopCyclicAcquisition(struct comedi_device *dev, struct comedi_subdevice *s); 168int i_APCI3200_InterruptHandleEos(struct comedi_device *dev); 169int i_APCI3200_CommandTestAnalogInput(struct comedi_device *dev, struct comedi_subdevice *s, 170 struct comedi_cmd *cmd); 171int i_APCI3200_CommandAnalogInput(struct comedi_device *dev, struct comedi_subdevice *s); 172int i_APCI3200_ReadDigitalInput(struct comedi_device *dev, struct comedi_subdevice *s, 173 struct comedi_insn *insn, unsigned int *data); 174//Interrupt 175void v_APCI3200_Interrupt(int irq, void *d); 176int i_APCI3200_InterruptHandleEos(struct comedi_device *dev); 177//Reset functions 178int i_APCI3200_Reset(struct comedi_device *dev); 179 180int i_APCI3200_ReadCJCCalOffset(struct comedi_device *dev, unsigned int *data); 181int i_APCI3200_ReadCJCValue(struct comedi_device *dev, unsigned int *data); 182int i_APCI3200_ReadCalibrationGainValue(struct comedi_device *dev, unsigned int *data); 183int i_APCI3200_ReadCalibrationOffsetValue(struct comedi_device *dev, unsigned int *data); 184int i_APCI3200_Read1AnalogInputChannel(struct comedi_device *dev, 185 struct comedi_subdevice *s, struct comedi_insn *insn, 186 unsigned int *data); 187int i_APCI3200_ReadCJCCalGain(struct comedi_device *dev, unsigned int *data); 188