1 /****************************************************************/
\r
3 * Description: Empty implementation of API layer. *
\r
5 * Copyright 2006-2007 Humusoft s.r.o. *
\r
6 ****************************************************************/
\r
7 #if defined(_WIN32) || defined(_WIN64)
\r
13 #include "hudaqlib.h"
\r
14 #include "hudaq_internal.h"
\r
18 /////////////EMPTY/DUMMY IMPLEMENTATION STUBS///////////////////
\r
20 /** Prototype for any Get Parameter function */
\r
22 int DummyInit(DeviceRecord *DevRecord, int IniOptions)
\r
28 void DummyDone(DeviceRecord *DevRecord)
\r
34 //////////////////GENERIC PROCEDURES//////////////////////////////
\r
37 /** Device independent implementation for all devices. */
\r
38 int GenericDIReadBit(const DeviceRecord *DevRecord, unsigned channel, unsigned bit)
\r
40 if((DevRecord->pCT->HudaqDIRead(DevRecord,channel) & (1<<bit)) == 0)
\r
46 /** Get data from multiple digital input channels from devices that supports only one channel. */
\r
47 HUDAQSTATUS GenericOneDIReadMultiple(const DeviceRecord *DevRecord, unsigned number, const unsigned* channels, unsigned* values)
\r
52 if (number==0 || channels==NULL || values==NULL) return HUDAQBADARG;
\r
53 if(DevRecord->pCT->HudaqDIRead==NULL) return HUDAQFAILURE;
\r
55 InWord = DevRecord->pCT->HudaqDIRead(DevRecord,0);
\r
72 if(Flag==3) return HUDAQPARTIAL; //several values are valid and several are not
\r
73 if(Flag==2) return HUDAQFAILURE; //no valid value returned
\r
74 return HUDAQSUCCESS; //all values are valid (or no channel asked)
\r
78 /** Device independent implementation for all devices.
\r
79 If at least one call succeeds, HUDAQPARTIAL is returned. */
\r
80 HUDAQSTATUS GenericDOWriteMultiple(const DeviceRecord *DevRecord, unsigned number, const unsigned* channels, const unsigned* values)
\r
83 HUDAQSTATUS r2, ret=HUDAQSUCCESS;
\r
86 if(DevRecord==NULL) return HUDAQBADARG;
\r
87 if(DevRecord->pCT->HudaqDOWrite==NULL) return HUDAQFAILURE;
\r
89 if(number==0 || channels==NULL || values==NULL) return HUDAQBADARG;
\r
93 r2 = DevRecord->pCT->HudaqDOWrite(DevRecord,*channels,*values);
\r
94 if (r2==HUDAQSUCCESS)
\r
97 ret=r2; // store last failure in ret
\r
99 channels++; values++;
\r
102 if (ret==HUDAQSUCCESS || success==0) return ret;
\r
103 return HUDAQPARTIAL;
\r
107 /** Multiple AI reads for devices that do not support this feature. */
\r
108 HUDAQSTATUS GenericAIReadMultiple(const DeviceRecord *DevRecord, unsigned number, const unsigned *channels, double *values)
\r
110 unsigned MaxChannels;
\r
113 if (channels==NULL || values==NULL || number==0) return HUDAQBADARG;
\r
114 if (DevRecord->pCT->HudaqAIRead==NULL) return HUDAQFAILURE; //Wrong internal table, should not occur.
\r
116 MaxChannels = (unsigned)DevRecord->pCT->HudaqGetParameter(DevRecord,0,HudaqAINUMCHANNELS);
\r
119 if(MaxChannels>*channels)
\r
122 *values = DevRecord->pCT->HudaqAIRead(DevRecord,*channels);
\r
126 *values = UNDEFINED_VALUE;
\r
133 if(Flag==3) return HUDAQPARTIAL; //several values are valid and several are not
\r
134 if(Flag==2) return HUDAQFAILURE; //no valid value returned
\r
135 return HUDAQSUCCESS; //all values are valid (or no channel asked)
\r
139 /** Encoder reset generic caller. */
\r
140 void HUDAQAPI HudaqEncReset(HUDAQHANDLE handle, unsigned channel)
\r
142 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
143 if(DevRecord==NULL) return;
\r
144 if(DevRecord->pCT->HudaqEncReset==NULL) return;
\r
145 DevRecord->pCT->HudaqEncReset(DevRecord,channel);
\r
149 /** Counter reset generic caller. */
\r
150 void HUDAQAPI HudaqCtrReset(HUDAQHANDLE handle, unsigned channel)
\r
152 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
153 if(DevRecord==NULL) return;
\r
154 if(DevRecord->pCT->HudaqCtrReset==NULL) return;
\r
155 DevRecord->pCT->HudaqCtrReset(DevRecord,channel);
\r
159 //////////////////////////////////////////////////////////////////////////
\r
160 /** Generic function callers for all supported devices. */
\r
162 double HUDAQAPI HudaqGetParameter(HUDAQHANDLE handle, unsigned channel, HudaqParameter param)
\r
164 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
165 if(DevRecord==NULL) return 0;
\r
166 if(DevRecord->pCT->HudaqGetParameter==NULL) return 0;
\r
167 return DevRecord->pCT->HudaqGetParameter(DevRecord,channel,param);
\r
170 HUDAQSTATUS HUDAQAPI HudaqSetParameter(HUDAQHANDLE handle, unsigned channel, HudaqParameter param, double value)
\r
172 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
173 if(DevRecord==NULL) return HUDAQBADARG;
\r
174 if(DevRecord->pCT->HudaqSetParameter==NULL) return HUDAQFAILURE;
\r
175 return DevRecord->pCT->HudaqSetParameter(DevRecord,channel,param,value);
\r
178 const HudaqRange* HUDAQAPI HudaqQueryRange(HUDAQHANDLE handle, HudaqSubsystem S, unsigned item)
\r
180 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
181 if(DevRecord==NULL) return NULL;
\r
182 if(DevRecord->pCT->HudaqQueryRange==NULL) return NULL;
\r
183 return DevRecord->pCT->HudaqQueryRange(DevRecord,S,item);
\r
186 //////////////////////////////////////////////
\r
188 int HUDAQAPI HudaqDIRead(HUDAQHANDLE handle, unsigned channel)
\r
190 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
191 if(DevRecord==NULL) return HUDAQBADARG;
\r
192 if(DevRecord->pCT->HudaqDIRead==NULL) return 0;
\r
193 return DevRecord->pCT->HudaqDIRead(DevRecord,channel);
\r
196 int HUDAQAPI HudaqDIReadBit(HUDAQHANDLE handle, unsigned channel, unsigned bit)
\r
198 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
199 if(DevRecord==NULL) return 0;
\r
200 if(DevRecord->pCT->HudaqDIReadBit==NULL) return 0;
\r
201 return DevRecord->pCT->HudaqDIReadBit(DevRecord,channel,bit);
\r
204 HUDAQSTATUS HUDAQAPI HudaqDIReadMultiple(HUDAQHANDLE handle, unsigned number, const unsigned* channels, unsigned* values)
\r
206 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
207 if(DevRecord==NULL) return HUDAQBADARG;
\r
208 if(DevRecord->pCT->HudaqDIReadMultiple==NULL) return HUDAQNOTSUPPORTED;
\r
209 return DevRecord->pCT->HudaqDIReadMultiple(DevRecord,number,channels,values);
\r
213 HUDAQSTATUS HUDAQAPI HudaqDOWriteMultiple(HUDAQHANDLE handle, unsigned number, const unsigned* channels, const unsigned* values)
\r
215 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
216 if(DevRecord==NULL) return HUDAQBADARG;
\r
217 if(DevRecord->pCT->HudaqDOWrite==NULL) return HUDAQNOTSUPPORTED;
\r
218 return DevRecord->pCT->HudaqDOWriteMultiple(DevRecord,number,channels,values);
\r
221 HUDAQSTATUS HUDAQAPI HudaqDOWrite(HUDAQHANDLE handle, unsigned channel, unsigned value)
\r
223 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
224 if(DevRecord==NULL) return HUDAQBADARG;
\r
225 if(DevRecord->pCT->HudaqDOWrite==NULL) return HUDAQFAILURE;
\r
226 return DevRecord->pCT->HudaqDOWrite(DevRecord,channel,value);
\r
229 void HUDAQAPI HudaqDOWriteBit(HUDAQHANDLE handle, unsigned channel, unsigned bit, int value)
\r
231 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
232 if(DevRecord==NULL) return;
\r
233 if(DevRecord->pCT->HudaqDOWriteBit==NULL) return;
\r
234 DevRecord->pCT->HudaqDOWriteBit(DevRecord,channel,bit,value);
\r
237 void HUDAQAPI HudaqDOWriteMultipleBits(HUDAQHANDLE handle, unsigned channel, unsigned mask, unsigned value)
\r
239 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
240 if(DevRecord==NULL) return;
\r
241 if(DevRecord->pCT->HudaqDOWriteMultipleBits==NULL) return; // HUDAQNOTSUPPORTED;
\r
242 DevRecord->pCT->HudaqDOWriteMultipleBits(DevRecord,channel,mask,value);
\r
246 double HUDAQAPI HudaqAIRead(HUDAQHANDLE handle, unsigned channel)
\r
248 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
249 if(DevRecord==NULL) return UNDEFINED_VALUE;
\r
250 if(DevRecord->pCT->HudaqAIRead==NULL) return UNDEFINED_VALUE;
\r
251 return DevRecord->pCT->HudaqAIRead(DevRecord,channel);
\r
254 HUDAQSTATUS HUDAQAPI HudaqAIReadMultiple(HUDAQHANDLE handle, unsigned number, const unsigned *channels, double *values)
\r
256 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
257 if(DevRecord==NULL) return HUDAQBADARG;
\r
258 if(DevRecord->pCT->HudaqAIReadMultiple==NULL) return HUDAQNOTSUPPORTED;
\r
259 return DevRecord->pCT->HudaqAIReadMultiple(DevRecord,number,channels,values);
\r
263 void HUDAQAPI HudaqAOWrite(HUDAQHANDLE handle, unsigned channel, double value)
\r
265 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
266 if(DevRecord==NULL) return;
\r
267 if(DevRecord->pCT->HudaqAOWrite==NULL) return;
\r
268 DevRecord->pCT->HudaqAOWrite(DevRecord,channel,value);
\r
271 HUDAQSTATUS HUDAQAPI HudaqAOWriteMultiple(HUDAQHANDLE handle, unsigned number, const unsigned* channels, const double* values)
\r
273 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
274 if(DevRecord==NULL) return HUDAQBADARG;
\r
275 if(DevRecord->pCT->HudaqAOWriteMultiple==NULL) return HUDAQNOTSUPPORTED;
\r
276 return DevRecord->pCT->HudaqAOWriteMultiple(DevRecord,number,channels,values);
\r
280 int HUDAQAPI HudaqEncRead(HUDAQHANDLE handle, unsigned channel)
\r
282 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
283 if(DevRecord==NULL) return 0;
\r
284 if(DevRecord->pCT->HudaqEncRead==NULL) return 0;
\r
285 return DevRecord->pCT->HudaqEncRead(DevRecord,channel);
\r
289 int HUDAQAPI HudaqCtrRead(HUDAQHANDLE handle, unsigned channel)
\r
291 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
292 if(DevRecord==NULL) return 0;
\r
293 if(DevRecord->pCT->HudaqCtrRead==NULL) return 0;
\r
294 return DevRecord->pCT->HudaqCtrRead(DevRecord,channel);
\r
298 HUDAQSTATUS HUDAQAPI HudaqPWMWrite(HUDAQHANDLE handle, unsigned channel, double frequency, double dutycycle)
\r
300 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
301 if(DevRecord==NULL) return HUDAQBADARG;
\r
302 if(DevRecord->pCT->HudaqPWMWrite==NULL) return HUDAQNOTSUPPORTED;
\r
303 return DevRecord->pCT->HudaqPWMWrite(DevRecord,channel,frequency,dutycycle);
\r
307 HUDAQSTATUS HUDAQAPI HudaqPWM3Write(HUDAQHANDLE handle, unsigned channel, double frequency, double duty1, double duty2, double duty3)
\r
309 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
310 if(DevRecord==NULL) return HUDAQBADARG;
\r
311 if(DevRecord->pCT->HudaqPWM3Write==NULL) return HUDAQNOTSUPPORTED;
\r
312 return DevRecord->pCT->HudaqPWM3Write(DevRecord,channel,frequency,duty1,duty2,duty3);
\r
316 HUDAQSTATUS HudaqPWMWriteMultiphase(HUDAQHANDLE handle, unsigned channel, unsigned phasenum, const unsigned *phases, double frequency, const double *duties)
\r
318 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
319 if(DevRecord==NULL) return HUDAQBADARG;
\r
320 if(DevRecord->pCT->HudaqPWMWriteMultiphase==NULL) return HUDAQNOTSUPPORTED;
\r
321 return DevRecord->pCT->HudaqPWMWriteMultiphase(DevRecord,channel,phasenum,phases,frequency,duties);
\r
325 HUDAQSTATUS HUDAQAPI HudaqStepWrite(HUDAQHANDLE handle, unsigned channel, int position)
\r
327 const DeviceRecord *DevRecord = HudaqGetDeviceRecord(handle);
\r
328 if(DevRecord==NULL) return HUDAQBADARG;
\r
329 if(DevRecord->pCT->HudaqStepWrite==NULL) return HUDAQNOTSUPPORTED;
\r
330 return DevRecord->pCT->HudaqStepWrite(DevRecord,channel,position);
\r
334 static double GenericGetParameter(const DeviceRecord *DevRecord, unsigned channel, HudaqParameter param)
\r
336 switch(param & HudaqSubsystemMASK)
\r
350 return ((UserDataHeader *)DevRecord->DrvRes.DriverData)->IRQcounter;
\r
354 return WRONG_VALUE;
\r
359 /** Empty call table. */
\r
360 const CallTable CtDummy =
\r
366 NULL, // Not available
\r
367 GenericGetParameter,
\r
368 NULL, // Not available
\r
370 // INITIALIZE DI callers
\r
374 // INITIALIZE DO callers
\r
379 // INITIALIZE AI callers
\r
382 // INITIALIZE AO callers
\r
385 // INITIALIZE Enc callers
\r
386 NULL, // Not available
\r
388 // INITIALIZE Ctr callers
\r
389 NULL, // Not available
\r
391 // INITIALIZE PWM callers
\r
392 NULL, // Not available
\r
395 // INITIALIZE Step callers
\r
396 NULL, // Not available
\r