vrpn  07.33
Virtual Reality Peripheral Network
vrpn_NationalInstruments.h
Go to the documentation of this file.
1 // vrpn_NationalInstruments.h
2 // Russell Taylor, May 2004
3 //
4 
5 #ifndef VRPN_NATIONALINSTRUMENTS_H
6 #define VRPN_NATIONALINSTRUMENTS_H
7 
8 #ifdef VRPN_USE_NATIONAL_INSTRUMENTS_MX
9 #include <NIDAQmx.h>
10 #endif
11 
12 #include "vrpn_Analog.h" // for vrpn_CHANNEL_MAX, etc
13 #include "vrpn_Analog_Output.h" // for vrpn_Analog_Output
14 #include "vrpn_Configure.h" // for VRPN_CALLBACK, VRPN_API
15 #include "vrpn_Connection.h"
16 #include "vrpn_Shared.h" // for timeval
17 #include "vrpn_Types.h" // for vrpn_int32, vrpn_uint32, etc
18 
19 #define vrpn_NI_INPUT_MODE_DIFFERENTIAL (0)
20 #define vrpn_NI_INPUT_MODE_REF_SINGLE_ENDED (1)
21 #define vrpn_NI_INPUT_MODE_NON_REF_SINGLE_ENDED (2)
22 #define vrpn_NI_INPUT_RANGE_5V (5)
23 #define vrpn_NI_INPUT_RANGE_10V (10)
24 #define vrpn_NI_INPUT_RANGE_20V (20)
25 
26 // An Analog and/or Analog_Output server that uses National Instruments cards
27 // to do its input and output. It supercedes the vrpn_Analog_Output_Server_NI,
28 // which is now depracated.
29 
31 public:
33  const char *boardName = "PCI-6713",
34  int numInChannels = vrpn_CHANNEL_MAX,
35  int numOutChannels = vrpn_CHANNEL_MAX,
36  double minInputReportDelaySecs = 0.0,
37  bool inBipolar = false,
38  int inputMode = vrpn_NI_INPUT_MODE_DIFFERENTIAL, // Input parameters (A/D)
39  int inputRange = vrpn_NI_INPUT_RANGE_10V,
40  bool driveAIS = false,
41  int inputGain = 1,
42  bool outBipolar = false, // Output parameters (D/A)
43  double minOutVoltage = 0.0,
44  double maxOutVoltage = 10.0);
46 
47  virtual void mainloop();
48 
49 protected:
50  // Addresses of the devices
51 #ifdef VRPN_USE_NATIONAL_INSTRUMENTS_MX
54  bool setValues(); // Transfer our internal values to the D/A
55  void reportError(int32 errnumber, vrpn_bool exitProgram = vrpn_false);
56 #else
57  short d_device_number; //< National Instruments device to use
58 #endif
59  short d_in_polarity; //< Polarity (1 = unipolar, 0 = bipolar)
60  int d_in_gain; //< Input gain
61  double d_in_min_delay; //< Minimum delay between two readings
62  double d_out_min_voltage; //< Minimum voltage allowed on a channel
63  double d_out_max_voltage; //< Maximum voltate allowed on a channel
64  short d_out_polarity; //< Polarity (1 = unipolar, 0 = bipolar)
65  struct timeval d_last_report_time;//< When was the last analog tracker report sent?
66 
70  int setNumInChannels (int sizeRequested);
71 
75  int setNumOutChannels (int sizeRequested);
76 
81  static int VRPN_CALLBACK handle_request_message( void *userdata,
83 
88  static int VRPN_CALLBACK handle_request_channels_message( void* userdata,
90 
93  static int VRPN_CALLBACK handle_got_connection( void* userdata, vrpn_HANDLERPARAM p );
94 
95  virtual bool report_num_channels( vrpn_uint32 class_of_service = vrpn_CONNECTION_RELIABLE );
96  virtual vrpn_int32 encode_num_channels_to( char* buf, vrpn_int32 num );
97 };
98 
99 // An Analog output server that uses National Instruments cards to do its
100 // output. It is superceded by vrpn_National_Instruments_Server, and is
101 // now deprecated. It only works with the NIDAQ traditional.
102 
104 public:
105  vrpn_Analog_Output_Server_NI(const char* name, vrpn_Connection* c,
106  const char *boardName = "PCI-6713",
107  vrpn_int16 numChannels = vrpn_CHANNEL_MAX,
108  bool bipolar = false,
109  double minVoltage = 0.0,
110  double maxVoltage = 10.0);
111  virtual ~vrpn_Analog_Output_Server_NI(void);
112 
113  virtual void mainloop();
114 
115 protected:
116  short NI_device_number; //< National Instruments device to use
117  short NI_num_channels; //< Number of channels on the board
118  double min_voltage; //< Minimum voltage allowed on a channel
119  double max_voltage; //< Maximum voltate allowed on a channel
120  short polarity; //< Polarity (1 = unipolar, 0 = bipolar)
121 
125  vrpn_int32 setNumChannels (vrpn_int32 sizeRequested);
126 
131  static int VRPN_CALLBACK handle_request_message( void *userdata,
132  vrpn_HANDLERPARAM p );
133 
138  static int VRPN_CALLBACK handle_request_channels_message( void* userdata,
140 
143  static int VRPN_CALLBACK handle_got_connection( void* userdata, vrpn_HANDLERPARAM p );
144 
145  virtual bool report_num_channels( vrpn_uint32 class_of_service = vrpn_CONNECTION_RELIABLE );
146  virtual vrpn_int32 encode_num_channels_to( char* buf, vrpn_int32 num );
147 };
148 
149 #endif
vrpn_Analog_Output_Server_NI::min_voltage
double min_voltage
Definition: vrpn_NationalInstruments.h:118
vrpn_Analog_Output_Server_NI::max_voltage
double max_voltage
Definition: vrpn_NationalInstruments.h:119
vrpn_Types.h
vrpn_Analog_Output_Server_NI
Definition: vrpn_NationalInstruments.h:103
vrpn_National_Instruments_Server::d_out_polarity
short d_out_polarity
Definition: vrpn_NationalInstruments.h:64
vrpn_Analog_Output_Server_NI::NI_num_channels
short NI_num_channels
Definition: vrpn_NationalInstruments.h:117
vrpn_Analog_Output.h
vrpn_NI_INPUT_RANGE_10V
#define vrpn_NI_INPUT_RANGE_10V
Definition: vrpn_NationalInstruments.h:23
vrpn_Analog
Definition: vrpn_Analog.h:28
vrpn_Analog_Output
Definition: vrpn_Analog_Output.h:26
vrpn_CHANNEL_MAX
#define vrpn_CHANNEL_MAX
Definition: vrpn_Analog.h:16
vrpn_National_Instruments_Server::d_in_polarity
short d_in_polarity
Definition: vrpn_NationalInstruments.h:59
vrpn_CONNECTION_RELIABLE
const vrpn_uint32 vrpn_CONNECTION_RELIABLE
Classes of service for messages, specify multiple by ORing them together Priority of satisfying these...
Definition: vrpn_Connection.h:120
vrpn_HANDLERPARAM
This structure is what is passed to a vrpn_Connection message callback.
Definition: vrpn_Connection.h:44
vrpn_Shared.h
vrpn_Analog_Output_Server_NI::NI_device_number
short NI_device_number
Definition: vrpn_NationalInstruments.h:116
vrpn_NI_INPUT_MODE_DIFFERENTIAL
#define vrpn_NI_INPUT_MODE_DIFFERENTIAL
Definition: vrpn_NationalInstruments.h:19
vrpn_BaseClass::mainloop
virtual void mainloop()=0
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
vrpn_National_Instruments_Server::d_analog_out_task_handle
TaskHandle d_analog_out_task_handle
Definition: vrpn_NationalInstruments.h:53
vrpn_National_Instruments_Server::d_out_max_voltage
double d_out_max_voltage
Definition: vrpn_NationalInstruments.h:63
vrpn_Connection
Generic connection class not specific to the transport mechanism.
Definition: vrpn_Connection.h:510
vrpn_Connection.h
vrpn_Analog.h
VRPN_CALLBACK
#define VRPN_CALLBACK
Definition: vrpn_Configure.h:647
vrpn_Analog_Output_Server_NI::polarity
short polarity
Definition: vrpn_NationalInstruments.h:120
vrpn_Configure.h
vrpn_National_Instruments_Server::d_in_gain
int d_in_gain
Definition: vrpn_NationalInstruments.h:60
vrpn_National_Instruments_Server::d_out_min_voltage
double d_out_min_voltage
Definition: vrpn_NationalInstruments.h:62
vrpn_National_Instruments_Server::d_analog_task_handle
TaskHandle d_analog_task_handle
Definition: vrpn_NationalInstruments.h:52
vrpn_National_Instruments_Server
Definition: vrpn_NationalInstruments.h:30
vrpn_National_Instruments_Server::d_in_min_delay
double d_in_min_delay
Definition: vrpn_NationalInstruments.h:61
VRPN_API
#define VRPN_API
Definition: vrpn_Configure.h:646