2 * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
7 * Tel: +19(0)7223/9493-0
8 * Fax: +49(0)7223/9493-92
9 * http://www.addi-data-com
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)
18 #define APCI1710_16BIT_COUNTER 0x10
19 #define APCI1710_32BIT_COUNTER 0x0
20 #define APCI1710_QUADRUPLE_MODE 0x0
21 #define APCI1710_DOUBLE_MODE 0x3
22 #define APCI1710_SIMPLE_MODE 0xF
23 #define APCI1710_DIRECT_MODE 0x80
24 #define APCI1710_HYSTERESIS_ON 0x60
25 #define APCI1710_HYSTERESIS_OFF 0x0
26 #define APCI1710_INCREMENT 0x60
27 #define APCI1710_DECREMENT 0x0
28 #define APCI1710_LATCH_COUNTER 0x1
29 #define APCI1710_CLEAR_COUNTER 0x0
30 #define APCI1710_LOW 0x0
31 #define APCI1710_HIGH 0x1
33 /*********************/
34 /* Version 0600-0229 */
35 /*********************/
36 #define APCI1710_HIGH_EDGE_CLEAR_COUNTER 0x0
37 #define APCI1710_HIGH_EDGE_LATCH_COUNTER 0x1
38 #define APCI1710_LOW_EDGE_CLEAR_COUNTER 0x2
39 #define APCI1710_LOW_EDGE_LATCH_COUNTER 0x3
40 #define APCI1710_HIGH_EDGE_LATCH_AND_CLEAR_COUNTER 0x4
41 #define APCI1710_LOW_EDGE_LATCH_AND_CLEAR_COUNTER 0x5
42 #define APCI1710_SOURCE_0 0x0
43 #define APCI1710_SOURCE_1 0x1
45 #define APCI1710_30MHZ 30
46 #define APCI1710_33MHZ 33
47 #define APCI1710_40MHZ 40
49 #define APCI1710_ENABLE_LATCH_INT 0x80
50 #define APCI1710_DISABLE_LATCH_INT (~APCI1710_ENABLE_LATCH_INT)
52 #define APCI1710_INDEX_LATCH_COUNTER 0x10
53 #define APCI1710_INDEX_AUTO_MODE 0x8
54 #define APCI1710_ENABLE_INDEX 0x4
55 #define APCI1710_DISABLE_INDEX (~APCI1710_ENABLE_INDEX)
56 #define APCI1710_ENABLE_LATCH_AND_CLEAR 0x8
57 #define APCI1710_DISABLE_LATCH_AND_CLEAR (~APCI1710_ENABLE_LATCH_AND_CLEAR)
58 #define APCI1710_SET_LOW_INDEX_LEVEL 0x4
59 #define APCI1710_SET_HIGH_INDEX_LEVEL (~APCI1710_SET_LOW_INDEX_LEVEL)
60 #define APCI1710_INVERT_INDEX_RFERENCE 0x2
61 #define APCI1710_DEFAULT_INDEX_RFERENCE (~APCI1710_INVERT_INDEX_RFERENCE)
63 #define APCI1710_ENABLE_INDEX_INT 0x1
64 #define APCI1710_DISABLE_INDEX_INT (~APCI1710_ENABLE_INDEX_INT)
66 #define APCI1710_ENABLE_FREQUENCY 0x4
67 #define APCI1710_DISABLE_FREQUENCY (~APCI1710_ENABLE_FREQUENCY)
69 #define APCI1710_ENABLE_FREQUENCY_INT 0x8
70 #define APCI1710_DISABLE_FREQUENCY_INT (~APCI1710_ENABLE_FREQUENCY_INT)
72 #define APCI1710_ENABLE_40MHZ_FREQUENCY 0x40
73 #define APCI1710_DISABLE_40MHZ_FREQUENCY (~APCI1710_ENABLE_40MHZ_FREQUENCY)
75 #define APCI1710_ENABLE_40MHZ_FILTER 0x80
76 #define APCI1710_DISABLE_40MHZ_FILTER (~APCI1710_ENABLE_40MHZ_FILTER)
78 #define APCI1710_ENABLE_COMPARE_INT 0x2
79 #define APCI1710_DISABLE_COMPARE_INT (~APCI1710_ENABLE_COMPARE_INT)
81 #define APCI1710_ENABLE_INDEX_ACTION 0x20
82 #define APCI1710_DISABLE_INDEX_ACTION (~APCI1710_ENABLE_INDEX_ACTION)
83 #define APCI1710_REFERENCE_HIGH 0x40
84 #define APCI1710_REFERENCE_LOW (~APCI1710_REFERENCE_HIGH)
86 #define APCI1710_TOR_GATE_LOW 0x40
87 #define APCI1710_TOR_GATE_HIGH (~APCI1710_TOR_GATE_LOW)
90 #define APCI1710_INCCPT_INITCOUNTER 100
91 #define APCI1710_INCCPT_COUNTERAUTOTEST 101
92 #define APCI1710_INCCPT_INITINDEX 102
93 #define APCI1710_INCCPT_INITREFERENCE 103
94 #define APCI1710_INCCPT_INITEXTERNALSTROBE 104
95 #define APCI1710_INCCPT_INITCOMPARELOGIC 105
96 #define APCI1710_INCCPT_INITFREQUENCYMEASUREMENT 106
99 #define APCI1710_INCCPT_READLATCHREGISTERSTATUS 200
100 #define APCI1710_INCCPT_READLATCHREGISTERVALUE 201
101 #define APCI1710_INCCPT_READ16BITCOUNTERVALUE 202
102 #define APCI1710_INCCPT_READ32BITCOUNTERVALUE 203
103 #define APCI1710_INCCPT_GETINDEXSTATUS 204
104 #define APCI1710_INCCPT_GETREFERENCESTATUS 205
105 #define APCI1710_INCCPT_GETUASSTATUS 206
106 #define APCI1710_INCCPT_GETCBSTATUS 207
107 #define APCI1710_INCCPT_GET16BITCBSTATUS 208
108 #define APCI1710_INCCPT_GETUDSTATUS 209
109 #define APCI1710_INCCPT_GETINTERRUPTUDLATCHEDSTATUS 210
110 #define APCI1710_INCCPT_READFREQUENCYMEASUREMENT 211
111 #define APCI1710_INCCPT_READINTERRUPT 212
114 #define APCI1710_INCCPT_CLEARCOUNTERVALUE 300
115 #define APCI1710_INCCPT_CLEARALLCOUNTERVALUE 301
116 #define APCI1710_INCCPT_SETINPUTFILTER 302
117 #define APCI1710_INCCPT_LATCHCOUNTER 303
118 #define APCI1710_INCCPT_SETINDEXANDREFERENCESOURCE 304
119 #define APCI1710_INCCPT_SETDIGITALCHLON 305
120 #define APCI1710_INCCPT_SETDIGITALCHLOFF 306
123 #define APCI1710_INCCPT_ENABLELATCHINTERRUPT 400
124 #define APCI1710_INCCPT_DISABLELATCHINTERRUPT 401
125 #define APCI1710_INCCPT_WRITE16BITCOUNTERVALUE 402
126 #define APCI1710_INCCPT_WRITE32BITCOUNTERVALUE 403
127 #define APCI1710_INCCPT_ENABLEINDEX 404
128 #define APCI1710_INCCPT_DISABLEINDEX 405
129 #define APCI1710_INCCPT_ENABLECOMPARELOGIC 406
130 #define APCI1710_INCCPT_DISABLECOMPARELOGIC 407
131 #define APCI1710_INCCPT_ENABLEFREQUENCYMEASUREMENT 408
132 #define APCI1710_INCCPT_DISABLEFREQUENCYMEASUREMENT 409
134 /************ Main Functions *************/
135 INT
i_APCI1710_InsnConfigINCCPT(struct comedi_device
*dev
, struct comedi_subdevice
*s
,
136 comedi_insn
*insn
, unsigned int * data
);
138 INT
i_APCI1710_InsnBitsINCCPT(struct comedi_device
*dev
, struct comedi_subdevice
* s
,
139 comedi_insn
*insn
, unsigned int * data
);
141 INT
i_APCI1710_InsnWriteINCCPT(struct comedi_device
*dev
, struct comedi_subdevice
* s
,
142 comedi_insn
*insn
, unsigned int * data
);
144 INT
i_APCI1710_InsnReadINCCPT(struct comedi_device
*dev
, struct comedi_subdevice
* s
,
145 comedi_insn
*insn
, unsigned int * data
);
147 /*********** Supplementary Functions********/
150 INT
i_APCI1710_InitCounter(struct comedi_device
*dev
,
153 BYTE b_FirstCounterModus
,
154 BYTE b_FirstCounterOption
,
155 BYTE b_SecondCounterModus
,
156 BYTE b_SecondCounterOption
);
158 INT
i_APCI1710_CounterAutoTest(struct comedi_device
*dev
, PBYTE pb_TestStatus
);
160 INT
i_APCI1710_InitIndex(struct comedi_device
*dev
,
162 BYTE b_ReferenceAction
,
163 BYTE b_IndexOperation
, BYTE b_AutoMode
,
164 BYTE b_InterruptEnable
);
166 INT
i_APCI1710_InitReference(struct comedi_device
*dev
,
167 BYTE b_ModulNbr
, BYTE b_ReferenceLevel
);
169 INT
i_APCI1710_InitExternalStrobe(struct comedi_device
*dev
,
170 BYTE b_ModulNbr
, BYTE b_ExternalStrobe
,
171 BYTE b_ExternalStrobeLevel
);
173 INT
i_APCI1710_InitCompareLogic(struct comedi_device
*dev
,
174 BYTE b_ModulNbr
, UINT ui_CompareValue
);
176 INT
i_APCI1710_InitFrequencyMeasurement(struct comedi_device
*dev
,
178 BYTE b_PCIInputClock
,
180 ULONG ul_TimingInterval
,
181 PULONG pul_RealTimingInterval
);
184 INT
i_APCI1710_ClearCounterValue(struct comedi_device
*dev
, BYTE b_ModulNbr
);
186 INT
i_APCI1710_ClearAllCounterValue(struct comedi_device
*dev
);
188 INT
i_APCI1710_SetInputFilter(struct comedi_device
*dev
,
189 BYTE b_ModulNbr
, BYTE b_PCIInputClock
,
192 INT
i_APCI1710_LatchCounter(struct comedi_device
*dev
,
193 BYTE b_ModulNbr
, BYTE b_LatchReg
);
195 INT
i_APCI1710_SetIndexAndReferenceSource(struct comedi_device
*dev
,
197 BYTE b_SourceSelection
);
199 INT
i_APCI1710_SetDigitalChlOn(struct comedi_device
*dev
, BYTE b_ModulNbr
);
201 INT
i_APCI1710_SetDigitalChlOff(struct comedi_device
*dev
, BYTE b_ModulNbr
);
204 INT
i_APCI1710_EnableLatchInterrupt(struct comedi_device
*dev
, BYTE b_ModulNbr
);
206 INT
i_APCI1710_DisableLatchInterrupt(struct comedi_device
*dev
, BYTE b_ModulNbr
);
208 INT
i_APCI1710_Write16BitCounterValue(struct comedi_device
*dev
,
209 BYTE b_ModulNbr
, BYTE b_SelectedCounter
,
212 INT
i_APCI1710_Write32BitCounterValue(struct comedi_device
*dev
,
213 BYTE b_ModulNbr
, ULONG ul_WriteValue
);
215 INT
i_APCI1710_EnableIndex(struct comedi_device
*dev
, BYTE b_ModulNbr
);
217 INT
i_APCI1710_DisableIndex(struct comedi_device
*dev
, BYTE b_ModulNbr
);
219 INT
i_APCI1710_EnableCompareLogic(struct comedi_device
*dev
, BYTE b_ModulNbr
);
221 INT
i_APCI1710_DisableCompareLogic(struct comedi_device
*dev
, BYTE b_ModulNbr
);
223 INT
i_APCI1710_EnableFrequencyMeasurement(struct comedi_device
*dev
,
225 BYTE b_InterruptEnable
);
227 INT
i_APCI1710_DisableFrequencyMeasurement(struct comedi_device
*dev
,
231 INT
i_APCI1710_ReadLatchRegisterStatus(struct comedi_device
*dev
,
232 BYTE b_ModulNbr
, BYTE b_LatchReg
,
233 PBYTE pb_LatchStatus
);
235 INT
i_APCI1710_ReadLatchRegisterValue(struct comedi_device
*dev
,
236 BYTE b_ModulNbr
, BYTE b_LatchReg
,
237 PULONG pul_LatchValue
);
239 INT
i_APCI1710_Read16BitCounterValue(struct comedi_device
*dev
,
240 BYTE b_ModulNbr
, BYTE b_SelectedCounter
,
241 PUINT pui_CounterValue
);
243 INT
i_APCI1710_Read32BitCounterValue(struct comedi_device
*dev
,
244 BYTE b_ModulNbr
, PULONG pul_CounterValue
);
246 INT
i_APCI1710_GetIndexStatus(struct comedi_device
*dev
,
247 BYTE b_ModulNbr
, PBYTE pb_IndexStatus
);
249 INT
i_APCI1710_GetReferenceStatus(struct comedi_device
*dev
,
250 BYTE b_ModulNbr
, PBYTE pb_ReferenceStatus
);
252 INT
i_APCI1710_GetUASStatus(struct comedi_device
*dev
,
253 BYTE b_ModulNbr
, PBYTE pb_UASStatus
);
255 INT
i_APCI1710_GetCBStatus(struct comedi_device
*dev
,
256 BYTE b_ModulNbr
, PBYTE pb_CBStatus
);
258 INT
i_APCI1710_Get16BitCBStatus(struct comedi_device
*dev
,
259 BYTE b_ModulNbr
, PBYTE pb_CBStatusCounter0
,
260 PBYTE pb_CBStatusCounter1
);
262 INT
i_APCI1710_GetUDStatus(struct comedi_device
*dev
,
263 BYTE b_ModulNbr
, PBYTE pb_UDStatus
);
265 INT
i_APCI1710_GetInterruptUDLatchedStatus(struct comedi_device
*dev
,
266 BYTE b_ModulNbr
, PBYTE pb_UDStatus
);
268 INT
i_APCI1710_ReadFrequencyMeasurement(struct comedi_device
*dev
,
270 PBYTE pb_Status
, PBYTE pb_UDStatus
,
271 PULONG pul_ReadValue
);