Scope
NiFpga.c
1 /*
2  * FPGA Interface C API 12.0 source file.
3  *
4  * Copyright (c) 2012,
5  * National Instruments Corporation.
6  * All rights reserved.
7  */
8 
9 #include "NiFpga.h"
10 
11 /*
12  * Platform specific includes.
13  */
14 #if NiFpga_Windows
15  #include <windows.h>
16 #elif NiFpga_VxWorks
17  #include <vxWorks.h>
18  #include <symLib.h>
19  #include <loadLib.h>
20  #include <sysSymTbl.h>
21  MODULE_ID VxLoadLibraryFromPath(const char* path, int flags);
22  STATUS VxFreeLibrary(MODULE_ID library, int flags);
23 #elif NiFpga_Linux
24  #include <stdlib.h>
25  #include <stdio.h>
26  #include <dlfcn.h>
27 #else
28  #error
29 #endif
30 
31 /*
32  * Platform specific defines.
33  */
34 #if NiFpga_Windows
35  #define NiFpga_CCall __cdecl
36  #define NiFpga_StdCall __stdcall
37 #else
38  #define NiFpga_CCall
39  #define NiFpga_StdCall
40 #endif
41 
42 /*
43  * Global library handle, or NULL if the library isn't loaded.
44  */
45 #if NiFpga_Windows
46  static HMODULE NiFpga_library = NULL;
47 #elif NiFpga_VxWorks
48  static MODULE_ID NiFpga_library = NULL;
49 #elif NiFpga_Linux
50  static void* NiFpga_library = NULL;
51 #else
52  #error
53 #endif
54 
55 /*
56  * CVI Resource Tracking functions.
57  */
58 #if NiFpga_Cvi && NiFpga_Windows
59 #define NiFpga_CviResourceTracking 1
60 
61 static char* const NiFpga_cviResourceType = "FPGA Interface C API";
62 
63 typedef void* (NiFpga_CCall *NiFpga_AcquireCviResource)(void* resource,
64  char* type,
65  char* description,
66  ...);
67 
68 static NiFpga_AcquireCviResource NiFpga_acquireCviResource = NULL;
69 
70 typedef void* (NiFpga_StdCall *NiFpga_ReleaseCviResource)(void* resource);
71 
72 static NiFpga_ReleaseCviResource NiFpga_releaseCviResource = NULL;
73 #endif
74 
75 /*
76  * Session management functions.
77  */
78 static NiFpga_Status (NiFpga_CCall *NiFpga_open)(
79  const char* path,
80  const char* signature,
81  const char* resource,
82  uint32_t attribute,
83  NiFpga_Session* session) = NULL;
84 
85 NiFpga_Status NiFpga_Open(const char* path,
86  const char* signature,
87  const char* resource,
88  uint32_t attribute,
89  NiFpga_Session* session)
90 {
91  const NiFpga_Status result = NiFpga_open
92  ? NiFpga_open(path,
93  signature,
94  resource,
95  attribute,
96  session)
97  : NiFpga_Status_ResourceNotInitialized;
98  #if NiFpga_CviResourceTracking
99  if (NiFpga_acquireCviResource
100  && NiFpga_IsNotError(result))
101  NiFpga_acquireCviResource((void*)*session,
102  NiFpga_cviResourceType,
103  "NiFpga_Session %#08x",
104  *session);
105  #endif
106  return result;
107 }
108 
109 static NiFpga_Status (NiFpga_CCall *NiFpga_close)(
110  NiFpga_Session session,
111  uint32_t attribute) = NULL;
112 
113 NiFpga_Status NiFpga_Close(NiFpga_Session session,
114  uint32_t attribute)
115 {
116  if (!NiFpga_close)
117  return NiFpga_Status_ResourceNotInitialized;
118  #if NiFpga_CviResourceTracking
119  if (NiFpga_releaseCviResource)
120  NiFpga_releaseCviResource((void*)session);
121  #endif
122  return NiFpga_close(session, attribute);
123 }
124 
125 /*
126  * FPGA state functions.
127  */
128 static NiFpga_Status (NiFpga_CCall *NiFpga_run)(
129  NiFpga_Session session,
130  uint32_t attribute) = NULL;
131 
132 NiFpga_Status NiFpga_Run(NiFpga_Session session,
133  uint32_t attribute)
134 {
135  return NiFpga_run
136  ? NiFpga_run(session, attribute)
137  : NiFpga_Status_ResourceNotInitialized;
138 }
139 
140 static NiFpga_Status (NiFpga_CCall *NiFpga_abort)(
141  NiFpga_Session session) = NULL;
142 
143 NiFpga_Status NiFpga_Abort(NiFpga_Session session)
144 {
145  return NiFpga_abort
146  ? NiFpga_abort(session)
147  : NiFpga_Status_ResourceNotInitialized;
148 }
149 
150 static NiFpga_Status (NiFpga_CCall *NiFpga_reset)(
151  NiFpga_Session session) = NULL;
152 
153 NiFpga_Status NiFpga_Reset(NiFpga_Session session)
154 {
155  return NiFpga_reset
156  ? NiFpga_reset(session)
157  : NiFpga_Status_ResourceNotInitialized;
158 }
159 
160 static NiFpga_Status (NiFpga_CCall *NiFpga_download)(
161  NiFpga_Session session) = NULL;
162 
163 NiFpga_Status NiFpga_Download(NiFpga_Session session)
164 {
165  return NiFpga_download
166  ? NiFpga_download(session)
167  : NiFpga_Status_ResourceNotInitialized;
168 }
169 
170 /*
171  * Functions to read from scalar indicators and controls.
172  */
173 static NiFpga_Status (NiFpga_CCall *NiFpga_readBool)(
174  NiFpga_Session session,
175  uint32_t indicator,
176  NiFpga_Bool* value) = NULL;
177 
178 NiFpga_Status NiFpga_ReadBool(NiFpga_Session session,
179  uint32_t indicator,
180  NiFpga_Bool* value)
181 {
182  return NiFpga_readBool
183  ? NiFpga_readBool(session, indicator, value)
184  : NiFpga_Status_ResourceNotInitialized;
185 }
186 
187 static NiFpga_Status (NiFpga_CCall *NiFpga_readI8)(
188  NiFpga_Session session,
189  uint32_t indicator,
190  int8_t* value) = NULL;
191 
192 NiFpga_Status NiFpga_ReadI8(NiFpga_Session session,
193  uint32_t indicator,
194  int8_t* value)
195 {
196  return NiFpga_readI8
197  ? NiFpga_readI8(session, indicator, value)
198  : NiFpga_Status_ResourceNotInitialized;
199 }
200 
201 static NiFpga_Status (NiFpga_CCall *NiFpga_readU8)(
202  NiFpga_Session session,
203  uint32_t indicator,
204  uint8_t* value) = NULL;
205 
206 NiFpga_Status NiFpga_ReadU8(NiFpga_Session session,
207  uint32_t indicator,
208  uint8_t* value)
209 {
210  return NiFpga_readU8
211  ? NiFpga_readU8(session, indicator, value)
212  : NiFpga_Status_ResourceNotInitialized;
213 }
214 
215 static NiFpga_Status (NiFpga_CCall *NiFpga_readI16)(
216  NiFpga_Session session,
217  uint32_t indicator,
218  int16_t* value) = NULL;
219 
220 NiFpga_Status NiFpga_ReadI16(NiFpga_Session session,
221  uint32_t indicator,
222  int16_t* value)
223 {
224  return NiFpga_readI16
225  ? NiFpga_readI16(session, indicator, value)
226  : NiFpga_Status_ResourceNotInitialized;
227 }
228 
229 static NiFpga_Status (NiFpga_CCall *NiFpga_readU16)(
230  NiFpga_Session session,
231  uint32_t indicator,
232  uint16_t* value) = NULL;
233 
234 NiFpga_Status NiFpga_ReadU16(NiFpga_Session session,
235  uint32_t indicator,
236  uint16_t* value)
237 {
238  return NiFpga_readU16
239  ? NiFpga_readU16(session, indicator, value)
240  : NiFpga_Status_ResourceNotInitialized;
241 }
242 
243 static NiFpga_Status (NiFpga_CCall *NiFpga_readI32)(
244  NiFpga_Session session,
245  uint32_t indicator,
246  int32_t* value) = NULL;
247 
248 NiFpga_Status NiFpga_ReadI32(NiFpga_Session session,
249  uint32_t indicator,
250  int32_t* value)
251 {
252  return NiFpga_readI32
253  ? NiFpga_readI32(session, indicator, value)
254  : NiFpga_Status_ResourceNotInitialized;
255 }
256 
257 static NiFpga_Status (NiFpga_CCall *NiFpga_readU32)(
258  NiFpga_Session session,
259  uint32_t indicator,
260  uint32_t* value) = NULL;
261 
262 NiFpga_Status NiFpga_ReadU32(NiFpga_Session session,
263  uint32_t indicator,
264  uint32_t* value)
265 {
266  return NiFpga_readU32
267  ? NiFpga_readU32(session, indicator, value)
268  : NiFpga_Status_ResourceNotInitialized;
269 }
270 
271 static NiFpga_Status (NiFpga_CCall *NiFpga_readI64)(
272  NiFpga_Session session,
273  uint32_t indicator,
274  int64_t* value) = NULL;
275 
276 NiFpga_Status NiFpga_ReadI64(NiFpga_Session session,
277  uint32_t indicator,
278  int64_t* value)
279 {
280  return NiFpga_readI64
281  ? NiFpga_readI64(session, indicator, value)
282  : NiFpga_Status_ResourceNotInitialized;
283 }
284 
285 static NiFpga_Status (NiFpga_CCall *NiFpga_readU64)(
286  NiFpga_Session session,
287  uint32_t indicator,
288  uint64_t* value) = NULL;
289 
290 NiFpga_Status NiFpga_ReadU64(NiFpga_Session session,
291  uint32_t indicator,
292  uint64_t* value)
293 {
294  return NiFpga_readU64
295  ? NiFpga_readU64(session, indicator, value)
296  : NiFpga_Status_ResourceNotInitialized;
297 }
298 
299 /*
300  * Functions to write to scalar controls and indicators.
301  */
302 static NiFpga_Status (NiFpga_CCall *NiFpga_writeBool)(
303  NiFpga_Session session,
304  uint32_t control,
305  NiFpga_Bool value) = NULL;
306 
307 NiFpga_Status NiFpga_WriteBool(NiFpga_Session session,
308  uint32_t control,
309  NiFpga_Bool value)
310 {
311  return NiFpga_writeBool
312  ? NiFpga_writeBool(session, control, value)
313  : NiFpga_Status_ResourceNotInitialized;
314 }
315 
316 static NiFpga_Status (NiFpga_CCall *NiFpga_writeI8)(
317  NiFpga_Session session,
318  uint32_t control,
319  int8_t value) = NULL;
320 
321 NiFpga_Status NiFpga_WriteI8(NiFpga_Session session,
322  uint32_t control,
323  int8_t value)
324 {
325  return NiFpga_writeI8
326  ? NiFpga_writeI8(session, control, value)
327  : NiFpga_Status_ResourceNotInitialized;
328 }
329 
330 static NiFpga_Status (NiFpga_CCall *NiFpga_writeU8)(
331  NiFpga_Session session,
332  uint32_t control,
333  uint8_t value) = NULL;
334 
335 NiFpga_Status NiFpga_WriteU8(NiFpga_Session session,
336  uint32_t control,
337  uint8_t value)
338 {
339  return NiFpga_writeU8
340  ? NiFpga_writeU8(session, control, value)
341  : NiFpga_Status_ResourceNotInitialized;
342 }
343 
344 static NiFpga_Status (NiFpga_CCall *NiFpga_writeI16)(
345  NiFpga_Session session,
346  uint32_t control,
347  int16_t value) = NULL;
348 
349 NiFpga_Status NiFpga_WriteI16(NiFpga_Session session,
350  uint32_t control,
351  int16_t value)
352 {
353  return NiFpga_writeI16
354  ? NiFpga_writeI16(session, control, value)
355  : NiFpga_Status_ResourceNotInitialized;
356 }
357 
358 static NiFpga_Status (NiFpga_CCall *NiFpga_writeU16)(
359  NiFpga_Session session,
360  uint32_t control,
361  uint16_t value) = NULL;
362 
363 NiFpga_Status NiFpga_WriteU16(NiFpga_Session session,
364  uint32_t control,
365  uint16_t value)
366 {
367  return NiFpga_writeU16
368  ? NiFpga_writeU16(session, control, value)
369  : NiFpga_Status_ResourceNotInitialized;
370 }
371 
372 static NiFpga_Status (NiFpga_CCall *NiFpga_writeI32)(
373  NiFpga_Session session,
374  uint32_t control,
375  int32_t value) = NULL;
376 
377 NiFpga_Status NiFpga_WriteI32(NiFpga_Session session,
378  uint32_t control,
379  int32_t value)
380 {
381  return NiFpga_writeI32
382  ? NiFpga_writeI32(session, control, value)
383  : NiFpga_Status_ResourceNotInitialized;
384 }
385 
386 static NiFpga_Status (NiFpga_CCall *NiFpga_writeU32)(
387  NiFpga_Session session,
388  uint32_t control,
389  uint32_t value) = NULL;
390 
391 NiFpga_Status NiFpga_WriteU32(NiFpga_Session session,
392  uint32_t control,
393  uint32_t value)
394 {
395  return NiFpga_writeU32
396  ? NiFpga_writeU32(session, control, value)
397  : NiFpga_Status_ResourceNotInitialized;
398 }
399 
400 static NiFpga_Status (NiFpga_CCall *NiFpga_writeI64)(
401  NiFpga_Session session,
402  uint32_t control,
403  int64_t value) = NULL;
404 
405 NiFpga_Status NiFpga_WriteI64(NiFpga_Session session,
406  uint32_t control,
407  int64_t value)
408 {
409  return NiFpga_writeI64
410  ? NiFpga_writeI64(session, control, value)
411  : NiFpga_Status_ResourceNotInitialized;
412 }
413 
414 static NiFpga_Status (NiFpga_CCall *NiFpga_writeU64)(
415  NiFpga_Session session,
416  uint32_t control,
417  uint64_t value) = NULL;
418 
419 NiFpga_Status NiFpga_WriteU64(NiFpga_Session session,
420  uint32_t control,
421  uint64_t value)
422 {
423  return NiFpga_writeU64
424  ? NiFpga_writeU64(session, control, value)
425  : NiFpga_Status_ResourceNotInitialized;
426 }
427 
428 /*
429  * Functions to read from array indicators and controls.
430  */
431 static NiFpga_Status (NiFpga_CCall *NiFpga_readArrayBool)(
432  NiFpga_Session session,
433  uint32_t indicator,
434  NiFpga_Bool* array,
435  size_t size) = NULL;
436 
437 NiFpga_Status NiFpga_ReadArrayBool(NiFpga_Session session,
438  uint32_t indicator,
439  NiFpga_Bool* array,
440  size_t size)
441 {
442  return NiFpga_readArrayBool
443  ? NiFpga_readArrayBool(session, indicator, array, size)
444  : NiFpga_Status_ResourceNotInitialized;
445 }
446 
447 static NiFpga_Status (NiFpga_CCall *NiFpga_readArrayI8)(
448  NiFpga_Session session,
449  uint32_t indicator,
450  int8_t* array,
451  size_t size) = NULL;
452 
453 NiFpga_Status NiFpga_ReadArrayI8(NiFpga_Session session,
454  uint32_t indicator,
455  int8_t* array,
456  size_t size)
457 {
458  return NiFpga_readArrayI8
459  ? NiFpga_readArrayI8(session, indicator, array, size)
460  : NiFpga_Status_ResourceNotInitialized;
461 }
462 
463 static NiFpga_Status (NiFpga_CCall *NiFpga_readArrayU8)(
464  NiFpga_Session session,
465  uint32_t indicator,
466  uint8_t* array,
467  size_t size) = NULL;
468 
469 NiFpga_Status NiFpga_ReadArrayU8(NiFpga_Session session,
470  uint32_t indicator,
471  uint8_t* array,
472  size_t size)
473 {
474  return NiFpga_readArrayU8
475  ? NiFpga_readArrayU8(session, indicator, array, size)
476  : NiFpga_Status_ResourceNotInitialized;
477 }
478 
479 static NiFpga_Status (NiFpga_CCall *NiFpga_readArrayI16)(
480  NiFpga_Session session,
481  uint32_t indicator,
482  int16_t* array,
483  size_t size) = NULL;
484 
485 NiFpga_Status NiFpga_ReadArrayI16(NiFpga_Session session,
486  uint32_t indicator,
487  int16_t* array,
488  size_t size)
489 {
490  return NiFpga_readArrayI16
491  ? NiFpga_readArrayI16(session, indicator, array, size)
492  : NiFpga_Status_ResourceNotInitialized;
493 }
494 
495 static NiFpga_Status (NiFpga_CCall *NiFpga_readArrayU16)(
496  NiFpga_Session session,
497  uint32_t indicator,
498  uint16_t* array,
499  size_t size) = NULL;
500 
501 NiFpga_Status NiFpga_ReadArrayU16(NiFpga_Session session,
502  uint32_t indicator,
503  uint16_t* array,
504  size_t size)
505 {
506  return NiFpga_readArrayU16
507  ? NiFpga_readArrayU16(session, indicator, array, size)
508  : NiFpga_Status_ResourceNotInitialized;
509 }
510 
511 static NiFpga_Status (NiFpga_CCall *NiFpga_readArrayI32)(
512  NiFpga_Session session,
513  uint32_t indicator,
514  int32_t* array,
515  size_t size) = NULL;
516 
517 NiFpga_Status NiFpga_ReadArrayI32(NiFpga_Session session,
518  uint32_t indicator,
519  int32_t* array,
520  size_t size)
521 {
522  return NiFpga_readArrayI32
523  ? NiFpga_readArrayI32(session, indicator, array, size)
524  : NiFpga_Status_ResourceNotInitialized;
525 }
526 
527 static NiFpga_Status (NiFpga_CCall *NiFpga_readArrayU32)(
528  NiFpga_Session session,
529  uint32_t indicator,
530  uint32_t* array,
531  size_t size) = NULL;
532 
533 NiFpga_Status NiFpga_ReadArrayU32(NiFpga_Session session,
534  uint32_t indicator,
535  uint32_t* array,
536  size_t size)
537 {
538  return NiFpga_readArrayU32
539  ? NiFpga_readArrayU32(session, indicator, array, size)
540  : NiFpga_Status_ResourceNotInitialized;
541 }
542 
543 static NiFpga_Status (NiFpga_CCall *NiFpga_readArrayI64)(
544  NiFpga_Session session,
545  uint32_t indicator,
546  int64_t* array,
547  size_t size) = NULL;
548 
549 NiFpga_Status NiFpga_ReadArrayI64(NiFpga_Session session,
550  uint32_t indicator,
551  int64_t* array,
552  size_t size)
553 {
554  return NiFpga_readArrayI64
555  ? NiFpga_readArrayI64(session, indicator, array, size)
556  : NiFpga_Status_ResourceNotInitialized;
557 }
558 
559 static NiFpga_Status (NiFpga_CCall *NiFpga_readArrayU64)(
560  NiFpga_Session session,
561  uint32_t indicator,
562  uint64_t* array,
563  size_t size) = NULL;
564 
565 NiFpga_Status NiFpga_ReadArrayU64(NiFpga_Session session,
566  uint32_t indicator,
567  uint64_t* array,
568  size_t size)
569 {
570  return NiFpga_readArrayU64
571  ? NiFpga_readArrayU64(session, indicator, array, size)
572  : NiFpga_Status_ResourceNotInitialized;
573 }
574 
575 /*
576  * Functions to write to array controls and indicators.
577  */
578 static NiFpga_Status (NiFpga_CCall *NiFpga_writeArrayBool)(
579  NiFpga_Session session,
580  uint32_t control,
581  const NiFpga_Bool* array,
582  size_t size) = NULL;
583 
584 NiFpga_Status NiFpga_WriteArrayBool(NiFpga_Session session,
585  uint32_t control,
586  const NiFpga_Bool* array,
587  size_t size)
588 {
589  return NiFpga_writeArrayBool
590  ? NiFpga_writeArrayBool(session, control, array, size)
591  : NiFpga_Status_ResourceNotInitialized;
592 }
593 
594 static NiFpga_Status (NiFpga_CCall *NiFpga_writeArrayI8)(
595  NiFpga_Session session,
596  uint32_t control,
597  const int8_t* array,
598  size_t size) = NULL;
599 
600 NiFpga_Status NiFpga_WriteArrayI8(NiFpga_Session session,
601  uint32_t control,
602  const int8_t* array,
603  size_t size)
604 {
605  return NiFpga_writeArrayI8
606  ? NiFpga_writeArrayI8(session, control, array, size)
607  : NiFpga_Status_ResourceNotInitialized;
608 }
609 
610 static NiFpga_Status (NiFpga_CCall *NiFpga_writeArrayU8)(
611  NiFpga_Session session,
612  uint32_t control,
613  const uint8_t* array,
614  size_t size) = NULL;
615 
616 NiFpga_Status NiFpga_WriteArrayU8(NiFpga_Session session,
617  uint32_t control,
618  const uint8_t* array,
619  size_t size)
620 {
621  return NiFpga_writeArrayU8
622  ? NiFpga_writeArrayU8(session, control, array, size)
623  : NiFpga_Status_ResourceNotInitialized;
624 }
625 
626 static NiFpga_Status (NiFpga_CCall *NiFpga_writeArrayI16)(
627  NiFpga_Session session,
628  uint32_t control,
629  const int16_t* array,
630  size_t size) = NULL;
631 
632 NiFpga_Status NiFpga_WriteArrayI16(NiFpga_Session session,
633  uint32_t control,
634  const int16_t* array,
635  size_t size)
636 {
637  return NiFpga_writeArrayI16
638  ? NiFpga_writeArrayI16(session, control, array, size)
639  : NiFpga_Status_ResourceNotInitialized;
640 }
641 
642 static NiFpga_Status (NiFpga_CCall *NiFpga_writeArrayU16)(
643  NiFpga_Session session,
644  uint32_t control,
645  const uint16_t* array,
646  size_t size) = NULL;
647 
648 NiFpga_Status NiFpga_WriteArrayU16(NiFpga_Session session,
649  uint32_t control,
650  const uint16_t* array,
651  size_t size)
652 {
653  return NiFpga_writeArrayU16
654  ? NiFpga_writeArrayU16(session, control, array, size)
655  : NiFpga_Status_ResourceNotInitialized;
656 }
657 
658 static NiFpga_Status (NiFpga_CCall *NiFpga_writeArrayI32)(
659  NiFpga_Session session,
660  uint32_t control,
661  const int32_t* array,
662  size_t size) = NULL;
663 
664 NiFpga_Status NiFpga_WriteArrayI32(NiFpga_Session session,
665  uint32_t control,
666  const int32_t* array,
667  size_t size)
668 {
669  return NiFpga_writeArrayI32
670  ? NiFpga_writeArrayI32(session, control, array, size)
671  : NiFpga_Status_ResourceNotInitialized;
672 }
673 
674 static NiFpga_Status (NiFpga_CCall *NiFpga_writeArrayU32)(
675  NiFpga_Session session,
676  uint32_t control,
677  const uint32_t* array,
678  size_t size) = NULL;
679 
680 NiFpga_Status NiFpga_WriteArrayU32(NiFpga_Session session,
681  uint32_t control,
682  const uint32_t* array,
683  size_t size)
684 {
685  return NiFpga_writeArrayU32
686  ? NiFpga_writeArrayU32(session, control, array, size)
687  : NiFpga_Status_ResourceNotInitialized;
688 }
689 
690 static NiFpga_Status (NiFpga_CCall *NiFpga_writeArrayI64)(
691  NiFpga_Session session,
692  uint32_t control,
693  const int64_t* array,
694  size_t size) = NULL;
695 
696 NiFpga_Status NiFpga_WriteArrayI64(NiFpga_Session session,
697  uint32_t control,
698  const int64_t* array,
699  size_t size)
700 {
701  return NiFpga_writeArrayI64
702  ? NiFpga_writeArrayI64(session, control, array, size)
703  : NiFpga_Status_ResourceNotInitialized;
704 }
705 
706 static NiFpga_Status (NiFpga_CCall *NiFpga_writeArrayU64)(
707  NiFpga_Session session,
708  uint32_t control,
709  const uint64_t* array,
710  size_t size) = NULL;
711 
712 NiFpga_Status NiFpga_WriteArrayU64(NiFpga_Session session,
713  uint32_t control,
714  const uint64_t* array,
715  size_t size)
716 {
717  return NiFpga_writeArrayU64
718  ? NiFpga_writeArrayU64(session, control, array, size)
719  : NiFpga_Status_ResourceNotInitialized;
720 }
721 
722 /*
723  * Interrupt functions.
724  */
725 static NiFpga_Status (NiFpga_CCall *NiFpga_reserveIrqContext)(
726  NiFpga_Session session,
727  NiFpga_IrqContext* context) = NULL;
728 
729 
730 NiFpga_Status NiFpga_ReserveIrqContext(NiFpga_Session session,
731  NiFpga_IrqContext* context)
732 {
733  const NiFpga_Status result = NiFpga_reserveIrqContext
734  ? NiFpga_reserveIrqContext(session, context)
735  : NiFpga_Status_ResourceNotInitialized;
736  #if NiFpga_CviResourceTracking
737  if (NiFpga_acquireCviResource
738  && NiFpga_IsNotError(result))
739  NiFpga_acquireCviResource(*context,
740  NiFpga_cviResourceType,
741  "NiFpga_IrqContext 0x%p",
742  *context);
743  #endif
744  return result;
745 }
746 
747 static NiFpga_Status (NiFpga_CCall *NiFpga_unreserveIrqContext)(
748  NiFpga_Session session,
749  NiFpga_IrqContext context) = NULL;
750 
751 
752 NiFpga_Status NiFpga_UnreserveIrqContext(NiFpga_Session session,
753  NiFpga_IrqContext context)
754 {
755  if (!NiFpga_unreserveIrqContext)
756  return NiFpga_Status_ResourceNotInitialized;
757  #if NiFpga_CviResourceTracking
758  if (NiFpga_releaseCviResource)
759  NiFpga_releaseCviResource(context);
760  #endif
761  return NiFpga_unreserveIrqContext(session, context);
762 }
763 
764 static NiFpga_Status (NiFpga_CCall *NiFpga_waitOnIrqs)(
765  NiFpga_Session session,
766  NiFpga_IrqContext context,
767  uint32_t irqs,
768  uint32_t timeout,
769  uint32_t* irqsAsserted,
770  NiFpga_Bool* timedOut) = NULL;
771 
772 NiFpga_Status NiFpga_WaitOnIrqs(NiFpga_Session session,
773  NiFpga_IrqContext context,
774  uint32_t irqs,
775  uint32_t timeout,
776  uint32_t* irqsAsserted,
777  NiFpga_Bool* timedOut)
778 {
779  return NiFpga_waitOnIrqs
780  ? NiFpga_waitOnIrqs(session,
781  context,
782  irqs,
783  timeout,
784  irqsAsserted,
785  timedOut)
786  : NiFpga_Status_ResourceNotInitialized;
787 }
788 
789 static NiFpga_Status (NiFpga_CCall *NiFpga_acknowledgeIrqs)(
790  NiFpga_Session session,
791  uint32_t irqs) = NULL;
792 
793 NiFpga_Status NiFpga_AcknowledgeIrqs(NiFpga_Session session,
794  uint32_t irqs)
795 {
796  return NiFpga_acknowledgeIrqs
797  ? NiFpga_acknowledgeIrqs(session, irqs)
798  : NiFpga_Status_ResourceNotInitialized;
799 }
800 
801 /*
802  * DMA FIFO state functions.
803  */
804 static NiFpga_Status (NiFpga_CCall *NiFpga_configureFifo)(
805  NiFpga_Session session,
806  uint32_t fifo,
807  size_t depth) = NULL;
808 
809 NiFpga_Status NiFpga_ConfigureFifo(NiFpga_Session session,
810  uint32_t fifo,
811  size_t depth)
812 {
813  return NiFpga_configureFifo
814  ? NiFpga_configureFifo(session, fifo, depth)
815  : NiFpga_Status_ResourceNotInitialized;
816 }
817 
818 static NiFpga_Status (NiFpga_CCall *NiFpga_configureFifo2)(
819  NiFpga_Session session,
820  uint32_t fifo,
821  size_t requestedDepth,
822  size_t* actualDepth) = NULL;
823 
824 NiFpga_Status NiFpga_ConfigureFifo2(NiFpga_Session session,
825  uint32_t fifo,
826  size_t requestedDepth,
827  size_t* actualDepth)
828 {
829  return NiFpga_configureFifo2
830  ? NiFpga_configureFifo2(session, fifo, requestedDepth, actualDepth)
831  : NiFpga_Status_ResourceNotInitialized;
832 }
833 
834 static NiFpga_Status (NiFpga_CCall *NiFpga_startFifo)(
835  NiFpga_Session session,
836  uint32_t fifo) = NULL;
837 
838 NiFpga_Status NiFpga_StartFifo(NiFpga_Session session,
839  uint32_t fifo)
840 {
841  return NiFpga_startFifo
842  ? NiFpga_startFifo(session, fifo)
843  : NiFpga_Status_ResourceNotInitialized;
844 }
845 
846 static NiFpga_Status (NiFpga_CCall *NiFpga_stopFifo)(
847  NiFpga_Session session,
848  uint32_t fifo) = NULL;
849 
850 NiFpga_Status NiFpga_StopFifo(NiFpga_Session session,
851  uint32_t fifo)
852 {
853  return NiFpga_stopFifo
854  ? NiFpga_stopFifo(session, fifo)
855  : NiFpga_Status_ResourceNotInitialized;
856 }
857 
858 /*
859  * Functions to read from target-to-host DMA FIFOs.
860  */
861 static NiFpga_Status (NiFpga_CCall *NiFpga_readFifoBool)(
862  NiFpga_Session session,
863  uint32_t fifo,
864  NiFpga_Bool* data,
865  size_t numberOfElements,
866  uint32_t timeout,
867  size_t* elementsRemaining) = NULL;
868 
869 NiFpga_Status NiFpga_ReadFifoBool(NiFpga_Session session,
870  uint32_t fifo,
871  NiFpga_Bool* data,
872  size_t numberOfElements,
873  uint32_t timeout,
874  size_t* elementsRemaining)
875 {
876  return NiFpga_readFifoBool
877  ? NiFpga_readFifoBool(session,
878  fifo,
879  data,
880  numberOfElements,
881  timeout,
882  elementsRemaining)
883  : NiFpga_Status_ResourceNotInitialized;
884 }
885 
886 static NiFpga_Status (NiFpga_CCall *NiFpga_readFifoI8)(
887  NiFpga_Session session,
888  uint32_t fifo,
889  int8_t* data,
890  size_t numberOfElements,
891  uint32_t timeout,
892  size_t* elementsRemaining) = NULL;
893 
894 NiFpga_Status NiFpga_ReadFifoI8(NiFpga_Session session,
895  uint32_t fifo,
896  int8_t* data,
897  size_t numberOfElements,
898  uint32_t timeout,
899  size_t* elementsRemaining)
900 {
901  return NiFpga_readFifoI8
902  ? NiFpga_readFifoI8(session,
903  fifo,
904  data,
905  numberOfElements,
906  timeout,
907  elementsRemaining)
908  : NiFpga_Status_ResourceNotInitialized;
909 }
910 
911 static NiFpga_Status (NiFpga_CCall *NiFpga_readFifoU8)(
912  NiFpga_Session session,
913  uint32_t fifo,
914  uint8_t* data,
915  size_t numberOfElements,
916  uint32_t timeout,
917  size_t* elementsRemaining) = NULL;
918 
919 NiFpga_Status NiFpga_ReadFifoU8(NiFpga_Session session,
920  uint32_t fifo,
921  uint8_t* data,
922  size_t numberOfElements,
923  uint32_t timeout,
924  size_t* elementsRemaining)
925 {
926  return NiFpga_readFifoU8
927  ? NiFpga_readFifoU8(session,
928  fifo,
929  data,
930  numberOfElements,
931  timeout,
932  elementsRemaining)
933  : NiFpga_Status_ResourceNotInitialized;
934 }
935 
936 static NiFpga_Status (NiFpga_CCall *NiFpga_readFifoI16)(
937  NiFpga_Session session,
938  uint32_t fifo,
939  int16_t* data,
940  size_t numberOfElements,
941  uint32_t timeout,
942  size_t* elementsRemaining) = NULL;
943 
944 NiFpga_Status NiFpga_ReadFifoI16(NiFpga_Session session,
945  uint32_t fifo,
946  int16_t* data,
947  size_t numberOfElements,
948  uint32_t timeout,
949  size_t* elementsRemaining)
950 {
951  return NiFpga_readFifoI16
952  ? NiFpga_readFifoI16(session,
953  fifo,
954  data,
955  numberOfElements,
956  timeout,
957  elementsRemaining)
958  : NiFpga_Status_ResourceNotInitialized;
959 }
960 
961 static NiFpga_Status (NiFpga_CCall *NiFpga_readFifoU16)(
962  NiFpga_Session session,
963  uint32_t fifo,
964  uint16_t* data,
965  size_t numberOfElements,
966  uint32_t timeout,
967  size_t* elementsRemaining) = NULL;
968 
969 NiFpga_Status NiFpga_ReadFifoU16(NiFpga_Session session,
970  uint32_t fifo,
971  uint16_t* data,
972  size_t numberOfElements,
973  uint32_t timeout,
974  size_t* elementsRemaining)
975 {
976  return NiFpga_readFifoU16
977  ? NiFpga_readFifoU16(session,
978  fifo,
979  data,
980  numberOfElements,
981  timeout,
982  elementsRemaining)
983  : NiFpga_Status_ResourceNotInitialized;
984 }
985 
986 static NiFpga_Status (NiFpga_CCall *NiFpga_readFifoI32)(
987  NiFpga_Session session,
988  uint32_t fifo,
989  int32_t* data,
990  size_t numberOfElements,
991  uint32_t timeout,
992  size_t* elementsRemaining) = NULL;
993 
994 NiFpga_Status NiFpga_ReadFifoI32(NiFpga_Session session,
995  uint32_t fifo,
996  int32_t* data,
997  size_t numberOfElements,
998  uint32_t timeout,
999  size_t* elementsRemaining)
1000 {
1001  return NiFpga_readFifoI32
1002  ? NiFpga_readFifoI32(session,
1003  fifo,
1004  data,
1005  numberOfElements,
1006  timeout,
1007  elementsRemaining)
1008  : NiFpga_Status_ResourceNotInitialized;
1009 }
1010 
1011 static NiFpga_Status (NiFpga_CCall *NiFpga_readFifoU32)(
1012  NiFpga_Session session,
1013  uint32_t fifo,
1014  uint32_t* data,
1015  size_t numberOfElements,
1016  uint32_t timeout,
1017  size_t* elementsRemaining) = NULL;
1018 
1019 NiFpga_Status NiFpga_ReadFifoU32(NiFpga_Session session,
1020  uint32_t fifo,
1021  uint32_t* data,
1022  size_t numberOfElements,
1023  uint32_t timeout,
1024  size_t* elementsRemaining)
1025 {
1026  return NiFpga_readFifoU32
1027  ? NiFpga_readFifoU32(session,
1028  fifo,
1029  data,
1030  numberOfElements,
1031  timeout,
1032  elementsRemaining)
1033  : NiFpga_Status_ResourceNotInitialized;
1034 }
1035 
1036 static NiFpga_Status (NiFpga_CCall *NiFpga_readFifoI64)(
1037  NiFpga_Session session,
1038  uint32_t fifo,
1039  int64_t* data,
1040  size_t numberOfElements,
1041  uint32_t timeout,
1042  size_t* elementsRemaining) = NULL;
1043 
1044 NiFpga_Status NiFpga_ReadFifoI64(NiFpga_Session session,
1045  uint32_t fifo,
1046  int64_t* data,
1047  size_t numberOfElements,
1048  uint32_t timeout,
1049  size_t* elementsRemaining)
1050 {
1051  return NiFpga_readFifoI64
1052  ? NiFpga_readFifoI64(session,
1053  fifo,
1054  data,
1055  numberOfElements,
1056  timeout,
1057  elementsRemaining)
1058  : NiFpga_Status_ResourceNotInitialized;
1059 }
1060 
1061 static NiFpga_Status (NiFpga_CCall *NiFpga_readFifoU64)(
1062  NiFpga_Session session,
1063  uint32_t fifo,
1064  uint64_t* data,
1065  size_t numberOfElements,
1066  uint32_t timeout,
1067  size_t* elementsRemaining) = NULL;
1068 
1069 NiFpga_Status NiFpga_ReadFifoU64(NiFpga_Session session,
1070  uint32_t fifo,
1071  uint64_t* data,
1072  size_t numberOfElements,
1073  uint32_t timeout,
1074  size_t* elementsRemaining)
1075 {
1076  return NiFpga_readFifoU64
1077  ? NiFpga_readFifoU64(session,
1078  fifo,
1079  data,
1080  numberOfElements,
1081  timeout,
1082  elementsRemaining)
1083  : NiFpga_Status_ResourceNotInitialized;
1084 }
1085 
1086 /*
1087  * Functions to write to host-to-target DMA FIFOs.
1088  */
1089 static NiFpga_Status (NiFpga_CCall *NiFpga_writeFifoBool)(
1090  NiFpga_Session session,
1091  uint32_t fifo,
1092  const NiFpga_Bool* data,
1093  size_t numberOfElements,
1094  uint32_t timeout,
1095  size_t* emptyElementsRemaining) = NULL;
1096 
1097 NiFpga_Status NiFpga_WriteFifoBool(
1098  NiFpga_Session session,
1099  uint32_t fifo,
1100  const NiFpga_Bool* data,
1101  size_t numberOfElements,
1102  uint32_t timeout,
1103  size_t* emptyElementsRemaining)
1104 {
1105  return NiFpga_writeFifoBool
1106  ? NiFpga_writeFifoBool(session,
1107  fifo,
1108  data,
1109  numberOfElements,
1110  timeout,
1111  emptyElementsRemaining)
1112  : NiFpga_Status_ResourceNotInitialized;
1113 }
1114 
1115 static NiFpga_Status (NiFpga_CCall *NiFpga_writeFifoI8)(
1116  NiFpga_Session session,
1117  uint32_t fifo,
1118  const int8_t* data,
1119  size_t numberOfElements,
1120  uint32_t timeout,
1121  size_t* emptyElementsRemaining) = NULL;
1122 
1123 NiFpga_Status NiFpga_WriteFifoI8(NiFpga_Session session,
1124  uint32_t fifo,
1125  const int8_t* data,
1126  size_t numberOfElements,
1127  uint32_t timeout,
1128  size_t* emptyElementsRemaining)
1129 {
1130  return NiFpga_writeFifoI8
1131  ? NiFpga_writeFifoI8(session,
1132  fifo,
1133  data,
1134  numberOfElements,
1135  timeout,
1136  emptyElementsRemaining)
1137  : NiFpga_Status_ResourceNotInitialized;
1138 }
1139 
1140 static NiFpga_Status (NiFpga_CCall *NiFpga_writeFifoU8)(
1141  NiFpga_Session session,
1142  uint32_t fifo,
1143  const uint8_t* data,
1144  size_t numberOfElements,
1145  uint32_t timeout,
1146  size_t* emptyElementsRemaining) = NULL;
1147 
1148 NiFpga_Status NiFpga_WriteFifoU8(NiFpga_Session session,
1149  uint32_t fifo,
1150  const uint8_t* data,
1151  size_t numberOfElements,
1152  uint32_t timeout,
1153  size_t* emptyElementsRemaining)
1154 {
1155  return NiFpga_writeFifoU8
1156  ? NiFpga_writeFifoU8(session,
1157  fifo,
1158  data,
1159  numberOfElements,
1160  timeout,
1161  emptyElementsRemaining)
1162  : NiFpga_Status_ResourceNotInitialized;
1163 }
1164 
1165 static NiFpga_Status (NiFpga_CCall *NiFpga_writeFifoI16)(
1166  NiFpga_Session session,
1167  uint32_t fifo,
1168  const int16_t* data,
1169  size_t numberOfElements,
1170  uint32_t timeout,
1171  size_t* emptyElementsRemaining) = NULL;
1172 
1173 NiFpga_Status NiFpga_WriteFifoI16(
1174  NiFpga_Session session,
1175  uint32_t fifo,
1176  const int16_t* data,
1177  size_t numberOfElements,
1178  uint32_t timeout,
1179  size_t* emptyElementsRemaining)
1180 {
1181  return NiFpga_writeFifoI16
1182  ? NiFpga_writeFifoI16(session,
1183  fifo,
1184  data,
1185  numberOfElements,
1186  timeout,
1187  emptyElementsRemaining)
1188  : NiFpga_Status_ResourceNotInitialized;
1189 }
1190 
1191 static NiFpga_Status (NiFpga_CCall *NiFpga_writeFifoU16)(
1192  NiFpga_Session session,
1193  uint32_t fifo,
1194  const uint16_t* data,
1195  size_t numberOfElements,
1196  uint32_t timeout,
1197  size_t* emptyElementsRemaining) = NULL;
1198 
1199 NiFpga_Status NiFpga_WriteFifoU16(
1200  NiFpga_Session session,
1201  uint32_t fifo,
1202  const uint16_t* data,
1203  size_t numberOfElements,
1204  uint32_t timeout,
1205  size_t* emptyElementsRemaining)
1206 {
1207  return NiFpga_writeFifoU16
1208  ? NiFpga_writeFifoU16(session,
1209  fifo,
1210  data,
1211  numberOfElements,
1212  timeout,
1213  emptyElementsRemaining)
1214  : NiFpga_Status_ResourceNotInitialized;
1215 }
1216 
1217 static NiFpga_Status (NiFpga_CCall *NiFpga_writeFifoI32)(
1218  NiFpga_Session session,
1219  uint32_t fifo,
1220  const int32_t* data,
1221  size_t numberOfElements,
1222  uint32_t timeout,
1223  size_t* emptyElementsRemaining) = NULL;
1224 
1225 NiFpga_Status NiFpga_WriteFifoI32(
1226  NiFpga_Session session,
1227  uint32_t fifo,
1228  const int32_t* data,
1229  size_t numberOfElements,
1230  uint32_t timeout,
1231  size_t* emptyElementsRemaining)
1232 {
1233  return NiFpga_writeFifoI32
1234  ? NiFpga_writeFifoI32(session,
1235  fifo,
1236  data,
1237  numberOfElements,
1238  timeout,
1239  emptyElementsRemaining)
1240  : NiFpga_Status_ResourceNotInitialized;
1241 }
1242 
1243 static NiFpga_Status (NiFpga_CCall *NiFpga_writeFifoU32)(
1244  NiFpga_Session session,
1245  uint32_t fifo,
1246  const uint32_t* data,
1247  size_t numberOfElements,
1248  uint32_t timeout,
1249  size_t* emptyElementsRemaining) = NULL;
1250 
1251 NiFpga_Status NiFpga_WriteFifoU32(
1252  NiFpga_Session session,
1253  uint32_t fifo,
1254  const uint32_t* data,
1255  size_t numberOfElements,
1256  uint32_t timeout,
1257  size_t* emptyElementsRemaining)
1258 {
1259  return NiFpga_writeFifoU32
1260  ? NiFpga_writeFifoU32(session,
1261  fifo,
1262  data,
1263  numberOfElements,
1264  timeout,
1265  emptyElementsRemaining)
1266  : NiFpga_Status_ResourceNotInitialized;
1267 }
1268 
1269 static NiFpga_Status (NiFpga_CCall *NiFpga_writeFifoI64)(
1270  NiFpga_Session session,
1271  uint32_t fifo,
1272  const int64_t* data,
1273  size_t numberOfElements,
1274  uint32_t timeout,
1275  size_t* emptyElementsRemaining) = NULL;
1276 
1277 NiFpga_Status NiFpga_WriteFifoI64(
1278  NiFpga_Session session,
1279  uint32_t fifo,
1280  const int64_t* data,
1281  size_t numberOfElements,
1282  uint32_t timeout,
1283  size_t* emptyElementsRemaining)
1284 {
1285  return NiFpga_writeFifoI64
1286  ? NiFpga_writeFifoI64(session,
1287  fifo,
1288  data,
1289  numberOfElements,
1290  timeout,
1291  emptyElementsRemaining)
1292  : NiFpga_Status_ResourceNotInitialized;
1293 }
1294 
1295 static NiFpga_Status (NiFpga_CCall *NiFpga_writeFifoU64)(
1296  NiFpga_Session session,
1297  uint32_t fifo,
1298  const uint64_t* data,
1299  size_t numberOfElements,
1300  uint32_t timeout,
1301  size_t* emptyElementsRemaining) = NULL;
1302 
1303 NiFpga_Status NiFpga_WriteFifoU64(
1304  NiFpga_Session session,
1305  uint32_t fifo,
1306  const uint64_t* data,
1307  size_t numberOfElements,
1308  uint32_t timeout,
1309  size_t* emptyElementsRemaining)
1310 {
1311  return NiFpga_writeFifoU64
1312  ? NiFpga_writeFifoU64(session,
1313  fifo,
1314  data,
1315  numberOfElements,
1316  timeout,
1317  emptyElementsRemaining)
1318  : NiFpga_Status_ResourceNotInitialized;
1319 }
1320 
1321 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoReadElementsBool)(
1322  NiFpga_Session session,
1323  uint32_t fifo,
1324  NiFpga_Bool** elements,
1325  size_t elementsRequested,
1326  uint32_t timeout,
1327  size_t* elementsAcquired,
1328  size_t* elementsRemaining) = NULL;
1329 
1330 NiFpga_Status NiFpga_AcquireFifoReadElementsBool(
1331  NiFpga_Session session,
1332  uint32_t fifo,
1333  NiFpga_Bool** elements,
1334  size_t elementsRequested,
1335  uint32_t timeout,
1336  size_t* elementsAcquired,
1337  size_t* elementsRemaining)
1338 {
1339  return NiFpga_acquireFifoReadElementsBool
1340  ? NiFpga_acquireFifoReadElementsBool(session,
1341  fifo,
1342  elements,
1343  elementsRequested,
1344  timeout,
1345  elementsAcquired,
1346  elementsRemaining)
1347  : NiFpga_Status_ResourceNotInitialized;
1348 }
1349 
1350 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoReadElementsI8)(
1351  NiFpga_Session session,
1352  uint32_t fifo,
1353  int8_t** elements,
1354  size_t elementsRequested,
1355  uint32_t timeout,
1356  size_t* elementsAcquired,
1357  size_t* elementsRemaining) = NULL;
1358 
1359 NiFpga_Status NiFpga_AcquireFifoReadElementsI8(
1360  NiFpga_Session session,
1361  uint32_t fifo,
1362  int8_t** elements,
1363  size_t elementsRequested,
1364  uint32_t timeout,
1365  size_t* elementsAcquired,
1366  size_t* elementsRemaining)
1367 {
1368  return NiFpga_acquireFifoReadElementsI8
1369  ? NiFpga_acquireFifoReadElementsI8(session,
1370  fifo,
1371  elements,
1372  elementsRequested,
1373  timeout,
1374  elementsAcquired,
1375  elementsRemaining)
1376  : NiFpga_Status_ResourceNotInitialized;
1377 }
1378 
1379 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoReadElementsU8)(
1380  NiFpga_Session session,
1381  uint32_t fifo,
1382  uint8_t** elements,
1383  size_t elementsRequested,
1384  uint32_t timeout,
1385  size_t* elementsAcquired,
1386  size_t* elementsRemaining) = NULL;
1387 
1388 NiFpga_Status NiFpga_AcquireFifoReadElementsU8(
1389  NiFpga_Session session,
1390  uint32_t fifo,
1391  uint8_t** elements,
1392  size_t elementsRequested,
1393  uint32_t timeout,
1394  size_t* elementsAcquired,
1395  size_t* elementsRemaining)
1396 {
1397  return NiFpga_acquireFifoReadElementsU8
1398  ? NiFpga_acquireFifoReadElementsU8(session,
1399  fifo,
1400  elements,
1401  elementsRequested,
1402  timeout,
1403  elementsAcquired,
1404  elementsRemaining)
1405  : NiFpga_Status_ResourceNotInitialized;
1406 }
1407 
1408 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoReadElementsI16)(
1409  NiFpga_Session session,
1410  uint32_t fifo,
1411  int16_t** elements,
1412  size_t elementsRequested,
1413  uint32_t timeout,
1414  size_t* elementsAcquired,
1415  size_t* elementsRemaining) = NULL;
1416 
1417 NiFpga_Status NiFpga_AcquireFifoReadElementsI16(
1418  NiFpga_Session session,
1419  uint32_t fifo,
1420  int16_t** elements,
1421  size_t elementsRequested,
1422  uint32_t timeout,
1423  size_t* elementsAcquired,
1424  size_t* elementsRemaining)
1425 {
1426  return NiFpga_acquireFifoReadElementsI16
1427  ? NiFpga_acquireFifoReadElementsI16(session,
1428  fifo,
1429  elements,
1430  elementsRequested,
1431  timeout,
1432  elementsAcquired,
1433  elementsRemaining)
1434  : NiFpga_Status_ResourceNotInitialized;
1435 }
1436 
1437 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoReadElementsU16)(
1438  NiFpga_Session session,
1439  uint32_t fifo,
1440  uint16_t** elements,
1441  size_t elementsRequested,
1442  uint32_t timeout,
1443  size_t* elementsAcquired,
1444  size_t* elementsRemaining) = NULL;
1445 
1446 NiFpga_Status NiFpga_AcquireFifoReadElementsU16(
1447  NiFpga_Session session,
1448  uint32_t fifo,
1449  uint16_t** elements,
1450  size_t elementsRequested,
1451  uint32_t timeout,
1452  size_t* elementsAcquired,
1453  size_t* elementsRemaining)
1454 {
1455  return NiFpga_acquireFifoReadElementsU16
1456  ? NiFpga_acquireFifoReadElementsU16(session,
1457  fifo,
1458  elements,
1459  elementsRequested,
1460  timeout,
1461  elementsAcquired,
1462  elementsRemaining)
1463  : NiFpga_Status_ResourceNotInitialized;
1464 }
1465 
1466 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoReadElementsI32)(
1467  NiFpga_Session session,
1468  uint32_t fifo,
1469  int32_t** elements,
1470  size_t elementsRequested,
1471  uint32_t timeout,
1472  size_t* elementsAcquired,
1473  size_t* elementsRemaining) = NULL;
1474 
1475 NiFpga_Status NiFpga_AcquireFifoReadElementsI32(
1476  NiFpga_Session session,
1477  uint32_t fifo,
1478  int32_t** elements,
1479  size_t elementsRequested,
1480  uint32_t timeout,
1481  size_t* elementsAcquired,
1482  size_t* elementsRemaining)
1483 {
1484  return NiFpga_acquireFifoReadElementsI32
1485  ? NiFpga_acquireFifoReadElementsI32(session,
1486  fifo,
1487  elements,
1488  elementsRequested,
1489  timeout,
1490  elementsAcquired,
1491  elementsRemaining)
1492  : NiFpga_Status_ResourceNotInitialized;
1493 }
1494 
1495 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoReadElementsU32)(
1496  NiFpga_Session session,
1497  uint32_t fifo,
1498  uint32_t** elements,
1499  size_t elementsRequested,
1500  uint32_t timeout,
1501  size_t* elementsAcquired,
1502  size_t* elementsRemaining) = NULL;
1503 
1504 NiFpga_Status NiFpga_AcquireFifoReadElementsU32(
1505  NiFpga_Session session,
1506  uint32_t fifo,
1507  uint32_t** elements,
1508  size_t elementsRequested,
1509  uint32_t timeout,
1510  size_t* elementsAcquired,
1511  size_t* elementsRemaining)
1512 {
1513  return NiFpga_acquireFifoReadElementsU32
1514  ? NiFpga_acquireFifoReadElementsU32(session,
1515  fifo,
1516  elements,
1517  elementsRequested,
1518  timeout,
1519  elementsAcquired,
1520  elementsRemaining)
1521  : NiFpga_Status_ResourceNotInitialized;
1522 }
1523 
1524 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoReadElementsI64)(
1525  NiFpga_Session session,
1526  uint32_t fifo,
1527  int64_t** elements,
1528  size_t elementsRequested,
1529  uint32_t timeout,
1530  size_t* elementsAcquired,
1531  size_t* elementsRemaining) = NULL;
1532 
1533 NiFpga_Status NiFpga_AcquireFifoReadElementsI64(
1534  NiFpga_Session session,
1535  uint32_t fifo,
1536  int64_t** elements,
1537  size_t elementsRequested,
1538  uint32_t timeout,
1539  size_t* elementsAcquired,
1540  size_t* elementsRemaining)
1541 {
1542  return NiFpga_acquireFifoReadElementsI64
1543  ? NiFpga_acquireFifoReadElementsI64(session,
1544  fifo,
1545  elements,
1546  elementsRequested,
1547  timeout,
1548  elementsAcquired,
1549  elementsRemaining)
1550  : NiFpga_Status_ResourceNotInitialized;
1551 }
1552 
1553 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoReadElementsU64)(
1554  NiFpga_Session session,
1555  uint32_t fifo,
1556  uint64_t** elements,
1557  size_t elementsRequested,
1558  uint32_t timeout,
1559  size_t* elementsAcquired,
1560  size_t* elementsRemaining) = NULL;
1561 
1562 NiFpga_Status NiFpga_AcquireFifoReadElementsU64(
1563  NiFpga_Session session,
1564  uint32_t fifo,
1565  uint64_t** elements,
1566  size_t elementsRequested,
1567  uint32_t timeout,
1568  size_t* elementsAcquired,
1569  size_t* elementsRemaining)
1570 {
1571  return NiFpga_acquireFifoReadElementsU64
1572  ? NiFpga_acquireFifoReadElementsU64(session,
1573  fifo,
1574  elements,
1575  elementsRequested,
1576  timeout,
1577  elementsAcquired,
1578  elementsRemaining)
1579  : NiFpga_Status_ResourceNotInitialized;
1580 }
1581 
1582 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoWriteElementsBool)(
1583  NiFpga_Session session,
1584  uint32_t fifo,
1585  NiFpga_Bool** elements,
1586  size_t elementsRequested,
1587  uint32_t timeout,
1588  size_t* elementsAcquired,
1589  size_t* elementsRemaining) = NULL;
1590 
1591 NiFpga_Status NiFpga_AcquireFifoWriteElementsBool(
1592  NiFpga_Session session,
1593  uint32_t fifo,
1594  NiFpga_Bool** elements,
1595  size_t elementsRequested,
1596  uint32_t timeout,
1597  size_t* elementsAcquired,
1598  size_t* elementsRemaining)
1599 {
1600  return NiFpga_acquireFifoWriteElementsBool
1601  ? NiFpga_acquireFifoWriteElementsBool(session,
1602  fifo,
1603  elements,
1604  elementsRequested,
1605  timeout,
1606  elementsAcquired,
1607  elementsRemaining)
1608  : NiFpga_Status_ResourceNotInitialized;
1609 }
1610 
1611 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoWriteElementsI8)(
1612  NiFpga_Session session,
1613  uint32_t fifo,
1614  int8_t** elements,
1615  size_t elementsRequested,
1616  uint32_t timeout,
1617  size_t* elementsAcquired,
1618  size_t* elementsRemaining) = NULL;
1619 
1620 NiFpga_Status NiFpga_AcquireFifoWriteElementsI8(
1621  NiFpga_Session session,
1622  uint32_t fifo,
1623  int8_t** elements,
1624  size_t elementsRequested,
1625  uint32_t timeout,
1626  size_t* elementsAcquired,
1627  size_t* elementsRemaining)
1628 {
1629  return NiFpga_acquireFifoWriteElementsI8
1630  ? NiFpga_acquireFifoWriteElementsI8(session,
1631  fifo,
1632  elements,
1633  elementsRequested,
1634  timeout,
1635  elementsAcquired,
1636  elementsRemaining)
1637  : NiFpga_Status_ResourceNotInitialized;
1638 }
1639 
1640 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoWriteElementsU8)(
1641  NiFpga_Session session,
1642  uint32_t fifo,
1643  uint8_t** elements,
1644  size_t elementsRequested,
1645  uint32_t timeout,
1646  size_t* elementsAcquired,
1647  size_t* elementsRemaining) = NULL;
1648 
1649 NiFpga_Status NiFpga_AcquireFifoWriteElementsU8(
1650  NiFpga_Session session,
1651  uint32_t fifo,
1652  uint8_t** elements,
1653  size_t elementsRequested,
1654  uint32_t timeout,
1655  size_t* elementsAcquired,
1656  size_t* elementsRemaining)
1657 {
1658  return NiFpga_acquireFifoWriteElementsU8
1659  ? NiFpga_acquireFifoWriteElementsU8(session,
1660  fifo,
1661  elements,
1662  elementsRequested,
1663  timeout,
1664  elementsAcquired,
1665  elementsRemaining)
1666  : NiFpga_Status_ResourceNotInitialized;
1667 }
1668 
1669 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoWriteElementsI16)(
1670  NiFpga_Session session,
1671  uint32_t fifo,
1672  int16_t** elements,
1673  size_t elementsRequested,
1674  uint32_t timeout,
1675  size_t* elementsAcquired,
1676  size_t* elementsRemaining) = NULL;
1677 
1678 NiFpga_Status NiFpga_AcquireFifoWriteElementsI16(
1679  NiFpga_Session session,
1680  uint32_t fifo,
1681  int16_t** elements,
1682  size_t elementsRequested,
1683  uint32_t timeout,
1684  size_t* elementsAcquired,
1685  size_t* elementsRemaining)
1686 {
1687  return NiFpga_acquireFifoWriteElementsI16
1688  ? NiFpga_acquireFifoWriteElementsI16(session,
1689  fifo,
1690  elements,
1691  elementsRequested,
1692  timeout,
1693  elementsAcquired,
1694  elementsRemaining)
1695  : NiFpga_Status_ResourceNotInitialized;
1696 }
1697 
1698 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoWriteElementsU16)(
1699  NiFpga_Session session,
1700  uint32_t fifo,
1701  uint16_t** elements,
1702  size_t elementsRequested,
1703  uint32_t timeout,
1704  size_t* elementsAcquired,
1705  size_t* elementsRemaining) = NULL;
1706 
1707 NiFpga_Status NiFpga_AcquireFifoWriteElementsU16(
1708  NiFpga_Session session,
1709  uint32_t fifo,
1710  uint16_t** elements,
1711  size_t elementsRequested,
1712  uint32_t timeout,
1713  size_t* elementsAcquired,
1714  size_t* elementsRemaining)
1715 {
1716  return NiFpga_acquireFifoWriteElementsU16
1717  ? NiFpga_acquireFifoWriteElementsU16(session,
1718  fifo,
1719  elements,
1720  elementsRequested,
1721  timeout,
1722  elementsAcquired,
1723  elementsRemaining)
1724  : NiFpga_Status_ResourceNotInitialized;
1725 }
1726 
1727 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoWriteElementsI32)(
1728  NiFpga_Session session,
1729  uint32_t fifo,
1730  int32_t** elements,
1731  size_t elementsRequested,
1732  uint32_t timeout,
1733  size_t* elementsAcquired,
1734  size_t* elementsRemaining) = NULL;
1735 
1736 NiFpga_Status NiFpga_AcquireFifoWriteElementsI32(
1737  NiFpga_Session session,
1738  uint32_t fifo,
1739  int32_t** elements,
1740  size_t elementsRequested,
1741  uint32_t timeout,
1742  size_t* elementsAcquired,
1743  size_t* elementsRemaining)
1744 {
1745  return NiFpga_acquireFifoWriteElementsI32
1746  ? NiFpga_acquireFifoWriteElementsI32(session,
1747  fifo,
1748  elements,
1749  elementsRequested,
1750  timeout,
1751  elementsAcquired,
1752  elementsRemaining)
1753  : NiFpga_Status_ResourceNotInitialized;
1754 }
1755 
1756 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoWriteElementsU32)(
1757  NiFpga_Session session,
1758  uint32_t fifo,
1759  uint32_t** elements,
1760  size_t elementsRequested,
1761  uint32_t timeout,
1762  size_t* elementsAcquired,
1763  size_t* elementsRemaining) = NULL;
1764 
1765 NiFpga_Status NiFpga_AcquireFifoWriteElementsU32(
1766  NiFpga_Session session,
1767  uint32_t fifo,
1768  uint32_t** elements,
1769  size_t elementsRequested,
1770  uint32_t timeout,
1771  size_t* elementsAcquired,
1772  size_t* elementsRemaining)
1773 {
1774  return NiFpga_acquireFifoWriteElementsU32
1775  ? NiFpga_acquireFifoWriteElementsU32(session,
1776  fifo,
1777  elements,
1778  elementsRequested,
1779  timeout,
1780  elementsAcquired,
1781  elementsRemaining)
1782  : NiFpga_Status_ResourceNotInitialized;
1783 }
1784 
1785 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoWriteElementsI64)(
1786  NiFpga_Session session,
1787  uint32_t fifo,
1788  int64_t** elements,
1789  size_t elementsRequested,
1790  uint32_t timeout,
1791  size_t* elementsAcquired,
1792  size_t* elementsRemaining) = NULL;
1793 
1794 NiFpga_Status NiFpga_AcquireFifoWriteElementsI64(
1795  NiFpga_Session session,
1796  uint32_t fifo,
1797  int64_t** elements,
1798  size_t elementsRequested,
1799  uint32_t timeout,
1800  size_t* elementsAcquired,
1801  size_t* elementsRemaining)
1802 {
1803  return NiFpga_acquireFifoWriteElementsI64
1804  ? NiFpga_acquireFifoWriteElementsI64(session,
1805  fifo,
1806  elements,
1807  elementsRequested,
1808  timeout,
1809  elementsAcquired,
1810  elementsRemaining)
1811  : NiFpga_Status_ResourceNotInitialized;
1812 }
1813 
1814 static NiFpga_Status (NiFpga_CCall *NiFpga_acquireFifoWriteElementsU64)(
1815  NiFpga_Session session,
1816  uint32_t fifo,
1817  uint64_t** elements,
1818  size_t elementsRequested,
1819  uint32_t timeout,
1820  size_t* elementsAcquired,
1821  size_t* elementsRemaining) = NULL;
1822 
1823 NiFpga_Status NiFpga_AcquireFifoWriteElementsU64(
1824  NiFpga_Session session,
1825  uint32_t fifo,
1826  uint64_t** elements,
1827  size_t elementsRequested,
1828  uint32_t timeout,
1829  size_t* elementsAcquired,
1830  size_t* elementsRemaining)
1831 {
1832  return NiFpga_acquireFifoWriteElementsU64
1833  ? NiFpga_acquireFifoWriteElementsU64(session,
1834  fifo,
1835  elements,
1836  elementsRequested,
1837  timeout,
1838  elementsAcquired,
1839  elementsRemaining)
1840  : NiFpga_Status_ResourceNotInitialized;
1841 }
1842 
1843 static NiFpga_Status (NiFpga_CCall *NiFpga_releaseFifoElements)(
1844  NiFpga_Session session,
1845  uint32_t fifo,
1846  size_t elements) = NULL;
1847 
1848 NiFpga_Status NiFpga_ReleaseFifoElements(NiFpga_Session session,
1849  uint32_t fifo,
1850  size_t elements)
1851 {
1852  return NiFpga_releaseFifoElements
1853  ? NiFpga_releaseFifoElements(session, fifo, elements)
1854  : NiFpga_Status_ResourceNotInitialized;
1855 }
1856 
1857 static NiFpga_Status (NiFpga_CCall *NiFpga_getPeerToPeerFifoEndpoint)(
1858  NiFpga_Session session,
1859  uint32_t fifo,
1860  uint32_t* endpoint) = NULL;
1861 
1862 NiFpga_Status NiFpga_GetPeerToPeerFifoEndpoint(NiFpga_Session session,
1863  uint32_t fifo,
1864  uint32_t* endpoint)
1865 {
1866  return NiFpga_getPeerToPeerFifoEndpoint
1867  ? NiFpga_getPeerToPeerFifoEndpoint(session, fifo, endpoint)
1868  : NiFpga_Status_ResourceNotInitialized;
1869 }
1870 
1874 static const struct
1875 {
1876  const char* const name;
1877  void** const address;
1878 } NiFpga_functions[] =
1879 {
1880  {"NiFpgaDll_Open", (void**)(void*)&NiFpga_open},
1881  {"NiFpgaDll_Close", (void**)(void*)&NiFpga_close},
1882  {"NiFpgaDll_Run", (void**)(void*)&NiFpga_run},
1883  {"NiFpgaDll_Abort", (void**)(void*)&NiFpga_abort},
1884  {"NiFpgaDll_Reset", (void**)(void*)&NiFpga_reset},
1885  {"NiFpgaDll_Download", (void**)(void*)&NiFpga_download},
1886  {"NiFpgaDll_ReadBool", (void**)(void*)&NiFpga_readBool},
1887  {"NiFpgaDll_ReadI8", (void**)(void*)&NiFpga_readI8},
1888  {"NiFpgaDll_ReadU8", (void**)(void*)&NiFpga_readU8},
1889  {"NiFpgaDll_ReadI16", (void**)(void*)&NiFpga_readI16},
1890  {"NiFpgaDll_ReadU16", (void**)(void*)&NiFpga_readU16},
1891  {"NiFpgaDll_ReadI32", (void**)(void*)&NiFpga_readI32},
1892  {"NiFpgaDll_ReadU32", (void**)(void*)&NiFpga_readU32},
1893  {"NiFpgaDll_ReadI64", (void**)(void*)&NiFpga_readI64},
1894  {"NiFpgaDll_ReadU64", (void**)(void*)&NiFpga_readU64},
1895  {"NiFpgaDll_WriteBool", (void**)(void*)&NiFpga_writeBool},
1896  {"NiFpgaDll_WriteI8", (void**)(void*)&NiFpga_writeI8},
1897  {"NiFpgaDll_WriteU8", (void**)(void*)&NiFpga_writeU8},
1898  {"NiFpgaDll_WriteI16", (void**)(void*)&NiFpga_writeI16},
1899  {"NiFpgaDll_WriteU16", (void**)(void*)&NiFpga_writeU16},
1900  {"NiFpgaDll_WriteI32", (void**)(void*)&NiFpga_writeI32},
1901  {"NiFpgaDll_WriteU32", (void**)(void*)&NiFpga_writeU32},
1902  {"NiFpgaDll_WriteI64", (void**)(void*)&NiFpga_writeI64},
1903  {"NiFpgaDll_WriteU64", (void**)(void*)&NiFpga_writeU64},
1904  {"NiFpgaDll_ReadArrayBool", (void**)(void*)&NiFpga_readArrayBool},
1905  {"NiFpgaDll_ReadArrayI8", (void**)(void*)&NiFpga_readArrayI8},
1906  {"NiFpgaDll_ReadArrayU8", (void**)(void*)&NiFpga_readArrayU8},
1907  {"NiFpgaDll_ReadArrayI16", (void**)(void*)&NiFpga_readArrayI16},
1908  {"NiFpgaDll_ReadArrayU16", (void**)(void*)&NiFpga_readArrayU16},
1909  {"NiFpgaDll_ReadArrayI32", (void**)(void*)&NiFpga_readArrayI32},
1910  {"NiFpgaDll_ReadArrayU32", (void**)(void*)&NiFpga_readArrayU32},
1911  {"NiFpgaDll_ReadArrayI64", (void**)(void*)&NiFpga_readArrayI64},
1912  {"NiFpgaDll_ReadArrayU64", (void**)(void*)&NiFpga_readArrayU64},
1913  {"NiFpgaDll_WriteArrayBool", (void**)(void*)&NiFpga_writeArrayBool},
1914  {"NiFpgaDll_WriteArrayI8", (void**)(void*)&NiFpga_writeArrayI8},
1915  {"NiFpgaDll_WriteArrayU8", (void**)(void*)&NiFpga_writeArrayU8},
1916  {"NiFpgaDll_WriteArrayI16", (void**)(void*)&NiFpga_writeArrayI16},
1917  {"NiFpgaDll_WriteArrayU16", (void**)(void*)&NiFpga_writeArrayU16},
1918  {"NiFpgaDll_WriteArrayI32", (void**)(void*)&NiFpga_writeArrayI32},
1919  {"NiFpgaDll_WriteArrayU32", (void**)(void*)&NiFpga_writeArrayU32},
1920  {"NiFpgaDll_WriteArrayI64", (void**)(void*)&NiFpga_writeArrayI64},
1921  {"NiFpgaDll_WriteArrayU64", (void**)(void*)&NiFpga_writeArrayU64},
1922  {"NiFpgaDll_ReserveIrqContext", (void**)(void*)&NiFpga_reserveIrqContext},
1923  {"NiFpgaDll_UnreserveIrqContext", (void**)(void*)&NiFpga_unreserveIrqContext},
1924  {"NiFpgaDll_WaitOnIrqs", (void**)(void*)&NiFpga_waitOnIrqs},
1925  {"NiFpgaDll_AcknowledgeIrqs", (void**)(void*)&NiFpga_acknowledgeIrqs},
1926  {"NiFpgaDll_ConfigureFifo", (void**)(void*)&NiFpga_configureFifo},
1927  {"NiFpgaDll_ConfigureFifo2", (void**)(void*)&NiFpga_configureFifo2},
1928  {"NiFpgaDll_StartFifo", (void**)(void*)&NiFpga_startFifo},
1929  {"NiFpgaDll_StopFifo", (void**)(void*)&NiFpga_stopFifo},
1930  {"NiFpgaDll_ReadFifoBool", (void**)(void*)&NiFpga_readFifoBool},
1931  {"NiFpgaDll_ReadFifoI8", (void**)(void*)&NiFpga_readFifoI8},
1932  {"NiFpgaDll_ReadFifoU8", (void**)(void*)&NiFpga_readFifoU8},
1933  {"NiFpgaDll_ReadFifoI16", (void**)(void*)&NiFpga_readFifoI16},
1934  {"NiFpgaDll_ReadFifoU16", (void**)(void*)&NiFpga_readFifoU16},
1935  {"NiFpgaDll_ReadFifoI32", (void**)(void*)&NiFpga_readFifoI32},
1936  {"NiFpgaDll_ReadFifoU32", (void**)(void*)&NiFpga_readFifoU32},
1937  {"NiFpgaDll_ReadFifoI64", (void**)(void*)&NiFpga_readFifoI64},
1938  {"NiFpgaDll_ReadFifoU64", (void**)(void*)&NiFpga_readFifoU64},
1939  {"NiFpgaDll_WriteFifoBool", (void**)(void*)&NiFpga_writeFifoBool},
1940  {"NiFpgaDll_WriteFifoI8", (void**)(void*)&NiFpga_writeFifoI8},
1941  {"NiFpgaDll_WriteFifoU8", (void**)(void*)&NiFpga_writeFifoU8},
1942  {"NiFpgaDll_WriteFifoI16", (void**)(void*)&NiFpga_writeFifoI16},
1943  {"NiFpgaDll_WriteFifoU16", (void**)(void*)&NiFpga_writeFifoU16},
1944  {"NiFpgaDll_WriteFifoI32", (void**)(void*)&NiFpga_writeFifoI32},
1945  {"NiFpgaDll_WriteFifoU32", (void**)(void*)&NiFpga_writeFifoU32},
1946  {"NiFpgaDll_WriteFifoI64", (void**)(void*)&NiFpga_writeFifoI64},
1947  {"NiFpgaDll_WriteFifoU64", (void**)(void*)&NiFpga_writeFifoU64},
1948  {"NiFpgaDll_AcquireFifoReadElementsBool", (void**)(void*)&NiFpga_acquireFifoReadElementsBool},
1949  {"NiFpgaDll_AcquireFifoReadElementsI8", (void**)(void*)&NiFpga_acquireFifoReadElementsI8},
1950  {"NiFpgaDll_AcquireFifoReadElementsU8", (void**)(void*)&NiFpga_acquireFifoReadElementsU8},
1951  {"NiFpgaDll_AcquireFifoReadElementsI16", (void**)(void*)&NiFpga_acquireFifoReadElementsI16},
1952  {"NiFpgaDll_AcquireFifoReadElementsU16", (void**)(void*)&NiFpga_acquireFifoReadElementsU16},
1953  {"NiFpgaDll_AcquireFifoReadElementsI32", (void**)(void*)&NiFpga_acquireFifoReadElementsI32},
1954  {"NiFpgaDll_AcquireFifoReadElementsU32", (void**)(void*)&NiFpga_acquireFifoReadElementsU32},
1955  {"NiFpgaDll_AcquireFifoReadElementsI64", (void**)(void*)&NiFpga_acquireFifoReadElementsI64},
1956  {"NiFpgaDll_AcquireFifoReadElementsU64", (void**)(void*)&NiFpga_acquireFifoReadElementsU64},
1957  {"NiFpgaDll_AcquireFifoWriteElementsBool", (void**)(void*)&NiFpga_acquireFifoWriteElementsBool},
1958  {"NiFpgaDll_AcquireFifoWriteElementsI8", (void**)(void*)&NiFpga_acquireFifoWriteElementsI8},
1959  {"NiFpgaDll_AcquireFifoWriteElementsU8", (void**)(void*)&NiFpga_acquireFifoWriteElementsU8},
1960  {"NiFpgaDll_AcquireFifoWriteElementsI16", (void**)(void*)&NiFpga_acquireFifoWriteElementsI16},
1961  {"NiFpgaDll_AcquireFifoWriteElementsU16", (void**)(void*)&NiFpga_acquireFifoWriteElementsU16},
1962  {"NiFpgaDll_AcquireFifoWriteElementsI32", (void**)(void*)&NiFpga_acquireFifoWriteElementsI32},
1963  {"NiFpgaDll_AcquireFifoWriteElementsU32", (void**)(void*)&NiFpga_acquireFifoWriteElementsU32},
1964  {"NiFpgaDll_AcquireFifoWriteElementsI64", (void**)(void*)&NiFpga_acquireFifoWriteElementsI64},
1965  {"NiFpgaDll_AcquireFifoWriteElementsU64", (void**)(void*)&NiFpga_acquireFifoWriteElementsU64},
1966  {"NiFpgaDll_ReleaseFifoElements", (void**)(void*)&NiFpga_releaseFifoElements},
1967  {"NiFpgaDll_GetPeerToPeerFifoEndpoint", (void**)(void*)&NiFpga_getPeerToPeerFifoEndpoint},
1968  {NULL, NULL}
1969 };
1970 
1971 NiFpga_Status NiFpga_Initialize(void)
1972 {
1973  /* if the library isn't already loaded */
1974  if (!NiFpga_library)
1975  {
1976  int i;
1977  /* load the library */
1978  #if NiFpga_Windows
1979  NiFpga_library = LoadLibraryA("NiFpga.dll");
1980  #elif NiFpga_VxWorks
1981  NiFpga_library = VxLoadLibraryFromPath("NiFpga.out", 0);
1982  #elif NiFpga_Linux
1983  const char* const library = "libNiFpga.so";
1984  NiFpga_library = dlopen(library, RTLD_LAZY);
1985  if (!NiFpga_library)
1986  fprintf(stderr, "Error opening %s: %s\n", library, dlerror());
1987  #else
1988  #error
1989  #endif
1990  if (!NiFpga_library)
1991  return NiFpga_Status_ResourceNotFound;
1992  /* get each exported function */
1993  for (i = 0; NiFpga_functions[i].name; i++)
1994  {
1995  const char* const name = NiFpga_functions[i].name;
1996  void** const address = NiFpga_functions[i].address;
1997  #if NiFpga_Windows
1998  *address = GetProcAddress(NiFpga_library, name);
1999  if (!*address)
2000  return NiFpga_Status_VersionMismatch;
2001  #elif NiFpga_VxWorks
2002  SYM_TYPE type;
2003  if (symFindByName(sysSymTbl,
2004  (char*)name,
2005  (char**)address,
2006  &type) != OK)
2007  return NiFpga_Status_VersionMismatch;
2008  #elif NiFpga_Linux
2009  *address = dlsym(NiFpga_library, name);
2010  if (!*address)
2011  return NiFpga_Status_VersionMismatch;
2012  #else
2013  #error
2014  #endif
2015  }
2016  /* enable CVI Resource Tracking, if available */
2017  #if NiFpga_CviResourceTracking
2018  {
2019  HMODULE engine = GetModuleHandle("cvirte.dll");
2020  if (!engine)
2021  engine = GetModuleHandle("cvi_lvrt.dll");
2022  if (!engine)
2023  engine = GetModuleHandle("instrsup.dll");
2024  if (engine)
2025  {
2026  NiFpga_acquireCviResource =
2027  (NiFpga_AcquireCviResource)
2028  GetProcAddress(engine, "__CVI_Resource_Acquire");
2029  NiFpga_releaseCviResource =
2030  (NiFpga_ReleaseCviResource)
2031  GetProcAddress(engine, "__CVI_Resource_Release");
2032  if (!NiFpga_acquireCviResource
2033  || !NiFpga_releaseCviResource)
2034  {
2035  NiFpga_acquireCviResource = NULL;
2036  NiFpga_releaseCviResource = NULL;
2037  }
2038  }
2039  }
2040  #endif
2041  }
2042  return NiFpga_Status_Success;
2043 }
2044 
2045 NiFpga_Status NiFpga_Finalize(void)
2046 {
2047  /* if the library is currently loaded */
2048  if (NiFpga_library)
2049  {
2050  int i;
2051  NiFpga_Status status = NiFpga_Status_Success;
2052  /* unload the library */
2053  #if NiFpga_Windows
2054  if (!FreeLibrary(NiFpga_library))
2055  status = NiFpga_Status_ResourceNotInitialized;
2056  #elif NiFpga_VxWorks
2057  if (VxFreeLibrary(NiFpga_library, 0) != OK)
2058  status = NiFpga_Status_ResourceNotInitialized;
2059  #elif NiFpga_Linux
2060  if (dlclose(NiFpga_library))
2061  status = NiFpga_Status_ResourceNotInitialized;
2062  #else
2063  #error
2064  #endif
2065  /* null out the library and each exported function */
2066  NiFpga_library = NULL;
2067  for (i = 0; NiFpga_functions[i].name; i++)
2068  *NiFpga_functions[i].address = NULL;
2069  /* null out the CVI Resource Tracking functions */
2070  #if NiFpga_CviResourceTracking
2071  NiFpga_acquireCviResource = NULL;
2072  NiFpga_releaseCviResource = NULL;
2073  #endif
2074  return status;
2075  }
2076  else {
2077  return NiFpga_Status_ResourceNotInitialized;
2078  }
2079 }