1 /* 2 * Copyright (C) 2005 Meilhaus Electronic GmbH (support@meilhaus.de) 3 * 4 * Source File : medriver.h 5 * Author : GG (Guenter Gebhardt) <g.gebhardt@meilhaus.de> 6 * Author: Krzysztof Gantzke <k.gantzke@meilhaus.de> 7 */ 8 9 #ifndef _MEDRIVER_H_ 10 #define _MEDRIVER_H_ 11 12 #include "metypes.h" 13 #include "meerror.h" 14 #include "medefines.h" 15 16 #ifdef __cplusplus 17 extern "C" { 18 #endif 19 20 /*=========================================================================== 21 Functions to access the driver system 22 =========================================================================*/ 23 24 int meOpen(int iFlags); 25 int meClose(int iFlags); 26 27 int meLockDriver(int iLock, int iFlags); 28 int meLockDevice(int iDevice, int iLock, int iFlags); 29 int meLockSubdevice(int iDevice, int iSubdevice, int iLock, int iFlags); 30 31 /*=========================================================================== 32 Error handling functions 33 =========================================================================*/ 34 35 int meErrorGetLastMessage(char *pcErrorMsg, int iCount); 36 int meErrorGetMessage(int iErrorCode, char *pcErrorMsg, int iCount); 37 int meErrorSetDefaultProc(int iSwitch); 38 int meErrorSetUserProc(meErrorCB_t pErrorProc); 39 40 41 /*=========================================================================== 42 Functions to perform I/O on a device 43 =========================================================================*/ 44 45 int meIOIrqSetCallback( 46 int iDevice, 47 int iSubdevice, 48 meIOIrqCB_t pCallback, 49 void *pCallbackContext, 50 int iFlags); 51 int meIOIrqStart( 52 int iDevice, 53 int iSubdevice, 54 int iChannel, 55 int iIrqSource, 56 int iIrqEdge, 57 int iIrqArg, 58 int iFlags); 59 int meIOIrqStop( 60 int iDevice, 61 int iSubdevice, 62 int iChannel, 63 int iFlags); 64 int meIOIrqWait( 65 int iDevice, 66 int iSubdevice, 67 int iChannel, 68 int *piIrqCount, 69 int *piValue, 70 int iTimeOut, 71 int iFlags); 72 73 int meIOResetDevice(int iDevice, int iFlags); 74 int meIOResetSubdevice(int iDevice, int iSubdevice, int iFlags); 75 76 int meIOStreamFrequencyToTicks( 77 int iDevice, 78 int iSubdevice, 79 int iTimer, 80 double *pdFrequency, 81 int *piTicksLow, 82 int *piTicksHigh, 83 int iFlags); 84 85 int meIOSingleConfig( 86 int iDevice, 87 int iSubdevice, 88 int iChannel, 89 int iSingleConfig, 90 int iRef, 91 int iTrigChan, 92 int iTrigType, 93 int iTrigEdge, 94 int iFlags); 95 int meIOSingle(meIOSingle_t *pSingleList, int iCount, int iFlags); 96 97 int meIOStreamConfig( 98 int iDevice, 99 int iSubdevice, 100 meIOStreamConfig_t *pConfigList, 101 int iCount, 102 meIOStreamTrigger_t *pTrigger, 103 int iFifoIrqThreshold, 104 int iFlags); 105 int meIOStreamNewValues( 106 int iDevice, 107 int iSubdevice, 108 int iTimeOut, 109 int *piCount, 110 int iFlags); 111 int meIOStreamRead( 112 int iDevice, 113 int iSubdevice, 114 int iReadMode, 115 int *piValues, 116 int *piCount, 117 int iFlags); 118 int meIOStreamWrite( 119 int iDevice, 120 int iSubdevice, 121 int iWriteMode, 122 int *piValues, 123 int *piCount, 124 int iFlags); 125 int meIOStreamStart(meIOStreamStart_t *pStartList, int iCount, int iFlags); 126 int meIOStreamStop(meIOStreamStop_t *pStopList, int iCount, int iFlags); 127 int meIOStreamStatus( 128 int iDevice, 129 int iSubdevice, 130 int iWait, 131 int *piStatus, 132 int *piCount, 133 int iFlags); 134 int meIOStreamSetCallbacks( 135 int iDevice, 136 int iSubdevice, 137 meIOStreamCB_t pStartCB, 138 void *pStartCBContext, 139 meIOStreamCB_t pNewValuesCB, 140 void *pNewValuesCBContext, 141 meIOStreamCB_t pEndCB, 142 void *pEndCBContext, 143 int iFlags); 144 int meIOStreamTimeToTicks( 145 int iDevice, 146 int iSubdevice, 147 int iTimer, 148 double *pdTime, 149 int *piTicksLow, 150 int *piTicksHigh, 151 int iFlags); 152 153 154 /*=========================================================================== 155 Functions to query the driver system 156 =========================================================================*/ 157 158 int meQueryDescriptionDevice(int iDevice, char *pcDescription, int iCount); 159 160 int meQueryInfoDevice( 161 int iDevice, 162 int *piVendorId, 163 int *piDeviceId, 164 int *piSerialNo, 165 int *piBusType, 166 int *piBusNo, 167 int *piDevNo, 168 int *piFuncNo, 169 int *piPlugged); 170 171 int meQueryNameDevice(int iDevice, char *pcName, int iCount); 172 int meQueryNameDeviceDriver(int iDevice, char *pcName, int iCount); 173 174 int meQueryNumberDevices(int *piNumber); 175 int meQueryNumberSubdevices(int iDevice, int *piNumber); 176 int meQueryNumberChannels(int iDevice, int iSubdevice, int *piNumber); 177 int meQueryNumberRanges( 178 int iDevice, 179 int iSubdevice, 180 int iUnit, 181 int *piNumber); 182 183 int meQueryRangeByMinMax( 184 int iDevice, 185 int iSubdevice, 186 int iUnit, 187 double *pdMin, 188 double *pdMax, 189 int *piMaxData, 190 int *piRange); 191 int meQueryRangeInfo( 192 int iDevice, 193 int iSubdevice, 194 int iRange, 195 int *piUnit, 196 double *pdMin, 197 double *pdMax, 198 int *piMaxData); 199 200 int meQuerySubdeviceByType( 201 int iDevice, 202 int iStartSubdevice, 203 int iType, 204 int iSubtype, 205 int *piSubdevice); 206 int meQuerySubdeviceType( 207 int iDevice, 208 int iSubdevice, 209 int *piType, 210 int *piSubtype); 211 int meQuerySubdeviceCaps( 212 int iDevice, 213 int iSubdevice, 214 int *piCaps); 215 int meQuerySubdeviceCapsArgs( 216 int iDevice, 217 int iSubdevice, 218 int iCap, 219 int *piArgs, 220 int iCount); 221 222 int meQueryVersionLibrary(int *piVersion); 223 int meQueryVersionMainDriver(int *piVersion); 224 int meQueryVersionDeviceDriver(int iDevice, int *piVersion); 225 226 227 /*=========================================================================== 228 Common utility functions 229 =========================================================================*/ 230 231 int meUtilityExtractValues( 232 int iChannel, 233 int *piAIBuffer, 234 int iAIBufferCount, 235 meIOStreamConfig_t *pConfigList, 236 int iConfigListCount, 237 int *piChanBuffer, 238 int *piChanBufferCount); 239 int meUtilityDigitalToPhysical( 240 double dMin, 241 double dMax, 242 int iMaxData, 243 int iData, 244 int iModuleType, 245 double dRefValue, 246 double *pdPhysical); 247 int meUtilityDigitalToPhysicalV( 248 double dMin, 249 double dMax, 250 int iMaxData, 251 int *piDataBuffer, 252 int iCount, 253 int iModuleType, 254 double dRefValue, 255 double *pdPhysicalBuffer); 256 int meUtilityPhysicalToDigital( 257 double dMin, 258 double dMax, 259 int iMaxData, 260 double dPhysical, 261 int *piData); 262 int meUtilityPWMStart( 263 int iDevice, 264 int iSubdevice1, 265 int iSubdevice2, 266 int iSubdevice3, 267 int iRef, 268 int iPrescaler, 269 int iDutyCycle, 270 int iFlag); 271 int meUtilityPWMStop(int iDevice, 272 int iSubdevice1); 273 int meUtilityPWMRestart( 274 int iDevice, 275 int iSubdevice1, 276 int iRef, 277 int iPrescaler); 278 279 280 /*=========================================================================== 281 Load configuration from file into driver system 282 =========================================================================*/ 283 284 int meConfigLoad(char *pcConfigFile); 285 286 287 /*=========================================================================== 288 Functions to query a remote driver system 289 =========================================================================*/ 290 291 int meRQueryDescriptionDevice( 292 char *location, 293 int iDevice, 294 char *pcDescription, 295 int iCount); 296 297 int meRQueryInfoDevice( 298 char *location, 299 int iDevice, 300 int *piVendorId, 301 int *piDeviceId, 302 int *piSerialNo, 303 int *piBusType, 304 int *piBusNo, 305 int *piDevNo, 306 int *piFuncNo, 307 int *piPlugged); 308 309 int meRQueryNameDevice( 310 char *location, 311 int iDevice, 312 char *pcName, 313 int iCount); 314 315 int meRQueryNumberDevices(char *location, int *piNumber); 316 int meRQueryNumberSubdevices(char *location, int iDevice, int *piNumber); 317 int meRQueryNumberChannels( 318 char *location, 319 int iDevice, 320 int iSubdevice, 321 int *piNumber); 322 int meRQueryNumberRanges( 323 char *location, 324 int iDevice, 325 int iSubdevice, 326 int iUnit, 327 int *piNumber); 328 329 int meRQueryRangeInfo( 330 char *location, 331 int iDevice, 332 int iSubdevice, 333 int iRange, 334 int *piUnit, 335 double *pdMin, 336 double *pdMax, 337 int *piMaxData); 338 339 int meRQuerySubdeviceType( 340 char *location, 341 int iDevice, 342 int iSubdevice, 343 int *piType, 344 int *piSubtype); 345 346 #ifdef __cplusplus 347 } 348 #endif 349 350 #endif 351