nidaqmx_cont_co_test.cpp
1 #define SIZEOF_INT 4
2 #define SIZEOF_LONG 4
3 #define SIZEOF_VOID_P 4
4 #define SIZEOF_SHORT 2
5 #define SIZEOF_FLOAT 4
6 #define SIZEOF_DOUBLE 8
7 #define msecsleep(x) (x)
8 
9 #include "support.h"
10 
11 #include <stdint.h>
12 
13 
14 void my_assert(char const*s, int d) {
15  fprintf(stderr, "Err:%s:%d\n", s, d);
16  abort();
17 }
18 
19 #include <NIDAQmx.h>
20 
21 using std::max;
22 using std::min;
23 
24 static const unsigned int CB_TRANSFER_SIZE = 16;
25 #define NUM_CO_CH 1
26 
27 uInt32 m_genBufCOLowTicks[CB_TRANSFER_SIZE * NUM_CO_CH];
28 uInt32 m_genBufCOHighTicks[CB_TRANSFER_SIZE * NUM_CO_CH];
29 
30 TaskHandle m_taskCO;
31 void _CHECK_DAQMX_RET(int ret, const char *file, int line) {
32  if(ret != 0) {
33  char str[2048];
34  DAQmxGetExtendedErrorInfo(str, sizeof(str));
35  fprintf(stderr, "%s\n@ %s: %d\n", str, file, line);
36  }
37  if( ret < 0 )
38  throw int(ret);
39 }
40 #define CHECK_DAQMX_RET(ret) _CHECK_DAQMX_RET(ret, __FILE__, __LINE__)
41 
42 unsigned int cnt = 0;
43 
44 int32
45 _genCallBackCO(TaskHandle task, int32 signalID, void *data)
46 {
47 // CHECK_DAQMX_RET(DAQmxWriteCtrTicksScalar(m_taskCO, false, 0,
48 // m_genBufCOHighTicks[cnt],
49 // m_genBufCOLowTicks[cnt],
50 // NULL));
51  CHECK_DAQMX_RET(DAQmxSetCOPulseLowTicks(m_taskCO, "Dev1/ctr0",
52  m_genBufCOLowTicks[cnt]
53  ));
54  cnt++;
55  cnt = cnt % CB_TRANSFER_SIZE;
56  return 0;
57 }
58 int
59 main(int argc, char **argv)
60 {
61  for(int i = 0; i < CB_TRANSFER_SIZE; i++) {
62  m_genBufCOLowTicks[i] = i * 10000 + 200;
63  m_genBufCOHighTicks[i] = 10000;
64  }
65  try {
66 
67  CHECK_DAQMX_RET(DAQmxCreateTask("", &m_taskCO));
68 
69  CHECK_DAQMX_RET(DAQmxCreateCOPulseChanTicks(m_taskCO,
70  "Dev1/ctr0", "", "20MHzTimebase", DAQmx_Val_Low, 100,
71  5000, 1000));
72 
73  CHECK_DAQMX_RET(DAQmxCfgImplicitTiming(m_taskCO,
74  DAQmx_Val_ContSamps,
75  100));
76 /* CHECK_DAQMX_RET(DAQmxCfgSampClkTiming(m_taskCO,
77  "/Dev2/20MHzTimebase", 20e6, DAQmx_Val_Rising,
78  DAQmx_Val_HWTimedSinglePoint,
79  BUF_SIZE_HINT));
80 */
81  CHECK_DAQMX_RET(DAQmxRegisterSignalEvent(m_taskCO,
82  DAQmx_Val_CounterOutputEvent, 0,
83  _genCallBackCO, NULL));
84 
85  CHECK_DAQMX_RET(DAQmxStartTask(m_taskCO));
86 
87  for(int cnt = 0; cnt < CB_TRANSFER_SIZE; cnt++) {
88 /* int32 state;
89  do {
90  CHECK_DAQMX_RET(DAQmxGetCOOutputState(m_taskCO, "Dev1/ctr0", &state));
91  } while (state == DAQmx_Val_High);
92 */ }
93  }
94  catch (...) {
95  }
96  getchar();
97  DAQmxStopTask(m_taskCO);
98  DAQmxClearTask(m_taskCO);
99 }

Generated for KAME4 by  doxygen 1.8.3