VRPN 07.15

How to acknowledge VRPN in your papers

VRPN main page

Known Bugs

Obtaining VRPN

VRPN FAQ

VRPN Support

Installing and Testing

Compiling and Modifying

Client code

Server code

Troubleshooting

Connections

Logging and Playback

Shared Objects

Sound

Text Messages

Doxygen documentation

VRPN on PDAs

Coming attractions & suggestions

UNC-specific information

Version Release Information

(Note to self: edit this page in code view, not in the WSYWIG editor.)
Change list: (items tagged as bug fix [bug], or feature [ftr]. Big ones starred.)
---------------
7:15:
  ftr		TestImager client now neither pre-loads nor accumulates if it is used
  			to read from a log file.
  bug		Patch from Jan Ciger to fix RESET and CLUTCH buttons on anaoogfly.
  			The config file parser was setting them to the same thing.
  BUG		Finally tracked down and squashed the bug that kept UDP packets
  			from working with some computers that had multiple network connections.
  ftr		Patch from Michael Adrian to work with more Liberty tracker versions.
  bug		Patch from Patrick Hartling to make things compile with new mac compiler.
  bug		Patch from Patrick Hartling to make 3DConnexion compile on the mac.
  ftr		Added vendor-supplied code for MotionNode tracker.  This code only
  			compiles under Visual Studio 2005 (not VS 6.0).
  ftr		Moved the DirectX paths from vrpn_Configure.h and described how to put
  			them into the Visual Studio environmnent itself once for all projects.
  ftr		Added patch from Eric Griffith to include control of a Liberty stylus.
  bug		Included definitions needed to compile with the InterSense library.
7:14:
  ftr		Added code from Jan Cigar that handles the 3DConnexion under Linux
  			using the event interface.  I modified it quite a bit to try and
			shoehorn it into the existing interface, so it may be broken.
  ftr		Added fix from Paulo G. de Barros to enable more than 2 joysticks.
  bug		Added fix from Jo Skjermo to run with Flocks that do not have
  			the extended-range transmitters; space was being scaled wrong.
  bug		Inserted David Marshburn's changes renaming Auxilliary to Auxiliary
  ftr		Added a CLUTCH button to AnalogFly that lets motion happen only
  			when a button is pressed, and behavior like clutching with a mouse.
  ftr		Reorganized a number of the Mouse classes and consolidated them
  			into vrpn_Mouse.  This changed the scaling for the Windows version
			of the mouse code; it now reports in fraction of screen size rather
			than pixels.  Also pulled vrpn_Keyboard out into a separate file.
  bug		Removed vrpn_Keyboard_Mouse (refactored as described above).
7:13:
  bug		Removed -lgpm from the Linux makefiles.  Some distros don't have this.
  			The vrpn_Configure.h file tells how to make this link if it is
			included in the build.
  ftr		Added a new derived class for vrpn_Analog_Output_Server for applications
  			that don't want to derive a new class but still want callbacks to be
			called when new values come in.  Also moved some functions from public
			to protected in the vrpn_Analog_Output_Server class.
7:12:
  bug		Compiles on 64-bit Linux.
 *ftr		Added HID support in Windows from Chris VanderKnyff.  Added
  			suport for XKeys devices (from Chris) and also for 3DConnexion
			devices on top of HID.
  ftr		Added vrpn_Imager_Stream_Buffer object to store full-rate video
  			to log files while sending only the latest images across the
			network.
  ftr		Added vrpn_Auxilliary_Logger object to cause logging to happen
  			remotely on a connection.  This is now available in the vrpn.cfg
			file.
  bug		Added Chris VanderKnyff's fixes to RumblePad that make it work
  			under Visual Studio .NET and 6.
  bug		Fixed a race-condition bug in the testimager_client.
  bug		Fix for the Intersense Wand submitted by Christian Odom.
  bug		Fixed vrpn_server to have all references cleaned up on exit
  			and to handle ^C exit on Windows.
7:11:
  bug		Removed iostream from included code
  ftr		Added code from Kurt Achatz to build for new versions
  			of the A.R.T. DTrack, which supports the Flystick2.
  bug		Makes the vrpn_DirectXRumblePad report that it is broken
  			until we get a fix from someone; Russ mangled it when
			trying to get it to compile under Visual Studio 6.
  bug		Fixed the thread code to work under Windows, Linux, Mac.
  			Added test routine for the semaphores and threads.
7:10:
  bug		Made it compile under MacOSX Universal.
  bug		Bug fix from Mike Weiblen enabling >32 file descriptors.
  bug		Bug fix from Mike Weiblen for vrpn_Mouse server.
7:09:
  bug		Fixed Quatlib bug in q_to_axis_angle.
 *ftr		Added the "Event Mouse" and "inertialmouse"
 			interfaces from Bauhaus University Weimar, submitted by
			Jan Springer.  Also, helper libraries and functions.
7:08:
 *bug		Fixed RTS/CTS bugs in Windows and (hopefully) Linux versions
 			That prevented Flock code from working.
7:07:
 *ftr		Added DirectX RumblePack driver from Chris VanderKnyff and
 			Jeff Feasel
  ftr		Added hemisphere control for Flock of Birds.
  bug		Fixed a bug that kept the code from compiling for DLL linkage.
  ftr		Added patch submitted by Patrick Hartling from Infiscape.com
  			to make it compile under MacOSX universal binaries.
7:06:
 *ftr		Added PhaseSpace driver from Lawrence Kwan.
7:05:
  ftr		Added build target for cross-compiling to ARM under Cygwin
 *bug		The embedded ARM version was not handling the conversion of
 			doubles to/from network byte order.  This processor can have
			a mixed-endian format that requires an extra swap.
  bug		Removed the Linux GPM Mouse library except when VPRN_USE_GPM_MOUSE
  			is defined in vrpn_Configure.h.  Some distros don't have this
			library and it was causing the build to fail.
  bug		Fixed the build environment for VS .NET development.
  ftr		Added forcefield implementation to vrpnDirectXFFJoystick from
  			David Borland.
  bug		Fixed bug with vrpnDirectXFFJoystick that caused buzzing submitted
  			by David Borland.
7.04:
 *bug		Inserted fix for Intersense Quaternion translation submitted
 			by Christian Odom and Dan Lewis from Louisiana Immersive
			Technologies Enterprise.  This probably changes the
			native position and orientation based on the way
			the code was before, but is the more correct interpretation.
7.03:
  bug		Improved the HDAPI implementation of ForceDevice for the
  			Phantoms.  Now includes friction and damping for the
			Plane class (using the HL proxy implementation).
7.02:
  bug		Inserted a fix from one of Virtools' partners (Kevin from
  			Axis 3d in Taiwan) to make the IS900 wand button
			work.
  bug		Re-commenteded a line in the default configuration file
  			vrpn.cfg so that it didn't try to make a spurious
			AnalogFly
7.01:
  ftr		Added vrpn_Button_USB from Tom De Weyer's group in Belgium.
  ftr		Modified vrpn_Keyboard_Mouse from same group to send analogs.
  ftr		Compiles under Visual C++ 2005 (new set of build files).
  bug		FileConnection bookmarking mechanism memory leak fixed.
  ftr		vrpn_Imager: Added is_description_valid() method.
7:00:
  ftr		Start on a port to the HDAPI library for running Phantoms
			in the vrpn_ForceDevice.
  ftr		Added Keyboard_Mouse device from Tom De Weyer at EDM-
			Uhasselt from Belgium that enables flying using the
			Windows keybaord.
 *ftr		Added new ForceDevice code from Tom De Weyer at EDM-
 			Uhasselt from Belgium that enables a hierarchy of
			objects.
  ftr		Added driver for Microscope from Tom De Weyer at EDM-
			Uhasselt from Belgium.
  ftr		Added 5DT16 driver from Tom De Weyer at EDM-
  			Uhasselt from Belgium.
  bug		Fixed a bug in line-mode constraint for ForceDevice.
 *bug		Ported the serial-port code to the mac, and to a consistent
 			interface on Posix systems (termios style).
 *bug		Removed the synchronized connection object, and the clock
 			objects on which it depended.  Available network-
			clock-sync does a better job than VRPN was doing, and
			this prevents time-warps in logged data files.
  ftr		Added GPM-based vrpn_Mouse class for Linux, submitted by
  			Mike Weiblen at 3DLabs.
  ftr		Added Logitech 3D Mouse driver submitted by Jinseok Seo
  			from the VR Lab of POSTECH in Korea.
  ftr		Added Crossbow driver from Chris VanderKnyff.
  ftr		Added reference-counting code for vrpn_Connection objects
  			submitted by Jeff Feasel.  This will delete a connection
			when all of the remote objects using it are deleted,
			which causes a new object to open a new connection,
			which prevents astonishment when replaying from stored
			log files.
  bug		Fixed a bug in the NationalInstruments driver that was failing
			on a non-error return from A0_Configure.
  bug		Removed the last vestiges of Streams from VRPN.
  ftr		Patches to make things compile on new architectures.
  ftr		Beta version of vrpn_Imager class for sending image data
  			over VRPN.
6.06:
 *ftr		David Nahon and Kurt Achatz added an A.R.T. tracker driver.
  bug		Fixed time-comparison bug in analog devices.
  ftr		ForceDevice test client to test the lower-level primitives.
  ftr		Beginning of a port from SensAble GHOST library to HDAPI
  ftr		Beginning of a vrpn_TempImager class to send images via VRPN.
  ftr		vrpn_Poser_Analogs can now use different devices for each output.
  ftr		vrpn_Analog_Outputs can now use National Instruments boards.
 *bug		Fixed reset bug in PinchGlove code.
  ftr		Made stream-file-loading code more general, so that it can
  			either pull in the whole thing first (default, original
			behavior), pull it in as it goes, or only pull in the
			records it is using.  This is to make it faster to run
			very large streamfiles (like ones that contain video
			data sent through the imager).
  ftr		Patrick Hartling fixed VRPN to compile under Visual Studio.NET
  bug		Switched to vrpn_gettimeofday(), which defines itself depending
  			on architecture.  No longer exposes gettimeofday() on
			windows, which was breaking some builds.  An optional
			parameter makes VRPN still export it for backwards-compat.
  bug		CerealBox used to encode negative ticks incorrectly; fixed it.
 *bug		isense now reports meters (the VRPN standard), rather than cm.
 *bug		Flock code modified to optionally invert the quaternion orientation
			before sending it back.  This had always been done in the
			past, but was probably a hack to make it work in the wrong
			hemisphere.
  ftr		Added better description of -millisleep option; David Nahon
  			pointed out the differing behavior on Windows and Unix.
6.05:
  bug		Made Liberty tracker server compile on several architectures.
 *bug		Long-standing bug with the Flock driver meant that it would only
 			operate correctly when the sensors were in the wrong
			hemisphere (which is how we ran them at UNC).  Now has an
			optional parameter with the default being the old (incorrect)
			implementation.
  ftr		Added optional parameter to 5DT to let it handle 10 or 9 byte
  			messages because different ones seem to behave differently.
  bug		Plugged memory leaks in the Connection and Clock objects
 *bug		Make InstantBuzzEffect (and therefore server) compile without the
			GHOST libraries installed if VRPN_USE_PHANTOM_SERVER is not
			defined.  Also, a later patch to make this compile again
			with the libraries.
6.04:
  ftr		Moved vrpn_Tracker.cfg file out of the way so that it doesn't
			generate error messages for non-Phantom trackers.
  bug		Fixed memory leak in remote tracker destructor
 *ftr		Sebastien Maraux added custom buzzing effect to ForceDevice
  ftr		Blair MacIntyre added code to native Isense driver to accept
  			arguments to add stylus and other things that were in
			the Fastrak-based driver
 *ftr		Blair MacIntyre added Mac fixes making MacOSX work with Intersense
 *ftr		Sebastien Maraux added Joywin interface
  bug		Made DirectXJoystick driver not crash when it can't find a stick
 *bug/ftr	Changed the default port number from 4500 because VPNs had been
 			using that port and Microsoft shut it down to avoid security
			holes.
  ftr		Added non-interrupting version of select that is more robust
			in the presence of user-level signals.
 *ftr		Matt McCallus added Sound driver for DirectX and Ausim
 *ftr		Sascha Scholz added ADBox/CubicMouse drivers
  ftr		David Marshburn added flag to let you pick GHOST 3.1
  ftr		Updated Phantom driver to use GHOST 4.0
 *ftr		Sharif Razzaque added native-mode InterSense driver
  bug		Correctly handle case where only one log file is requested
  bug		Fixed the raw SGIbox code for reading the dials
 *ftr		Merged all servers into one program.  You select what gets
			compiled in by editing vrpn_Configure.h
 *ftr		Haris Fretzagias implemented a newer version of the fast
			Windows clock that is available by defining
			USE_UNSAFE_WINDOWS_CLOCK and the V2 definition near
			it in vrpn_Configure.h.  This seems to work on several
			machines, so run time_test and see if you can use it.
 *ftr		Added support for Global Haptics GeoOrb
 *ftr		Deepak Bandyopadhyay and Sascha Scholz added the ability to
			add a fastrak stylus
 *ftr		David Borland added vrpn_Analog_Output, which is the inverse
			of a vrpn_Analog
 *ftr		Created vrpn_Configure.h file that you edit before compiling
			to set site-specific defaults and to indicate which
			portions of the library you want to use, what default
			port to listen on, and other things.
  ftr		John Stone made lots of the code compile on Mac OSX
  ftr		Thorsten Scheuerman added changes to compile for ARM-based PDAs
			running Linux
  ftr		Alternate reset option for older Magellans
  ftr		Works with Zaber Serial Positioning Units
 *ftr		David Borland added Poser (inverse Tracker)
  ftr		Can control focus location of Nikon microscopes
  bug		Fixed return value in vrpn_drain_output_buffer
  bug		Fixed seg-fault in newer compilers for the UNC joystick box
			running under Linux.
6.03:
  ftr           Code to control the Zaber Serial Positioning Interface
                        linear actuators.
  ftr           vrpn_Analog_Remotes can now send requests to the server to
                        update the value.  Used to control the Zaber and
                        other devices.
  ftr           New driver for Intersense trackers that uses their library
                        directly, rather than talking to the raw devices.
                        For IS600 and such, probably want to use the
                        Fastrak server still.  You need to get their include
                        files and libraries to link, then define the proper
                        thing in the compiler VRPN_USE_ISENSE.
 *ftr           Java port of several of the VRPN remote objects.  Still in
                        beta, but enables reading from trackers, buttons, and
                        analogs from Java applications.  Also code to build
                        VRPN as a DLL so that it can be loaded by Java.
  bug           Serial port code changed on Windows to raise the DTR line when
                        the port is opened.  When this was not done explicitly
                        on Windows XP, the TNG3 died because it uses this line
                        for power.
 *bug           TNG3 driver fixed.  It used to hang forever on the read routine
                        because I made it loop while getting reports and the read
                        routine held out waiting for all of the characters.  It
                        now polls.
 *ftr           Includes Phantom example programs (Tracker, Button, Forcedevice)
                        in client_src/haptic that show how to use VRPN with openGL
                        on SGIs.
 *ftr           Includes code from John Stone at Beckman Institute for driving
                        various versions of the Spaceball 6DOF controller with
                        buttons.
 *bug           3Space driver orientation was decoded incorrectly for some
                        orientations.  There is still a bug in the driver that will
                        make it only work on machines that have the same byte-order
                        as PCs.
  bug           Some IS900s report 54-byte status messages, which does not match
                        the 55-byte messages reported by Fastraks.  This modifies
                        the Fastrak driver to accept messages of either length.
 *bug           Fixed a problem with the IS900 wand driver that prevented it from
                        ever reporting analog values (the mainloop() function in the
                        Analog_Server base class changed its behavior and the server
                        was not modified to match).
 *ftr           Modified project files to enable the compilation of the Phantom
                        server using a standard GHOST 3.1 installation, rather than
                        requiring the "external" system that we have at UNC.
  bug           Re-ordered unpacking of parameters to control button toggle
                        or momentary from the client.  This re-enables client-side
                        control over whether a button is a toggle or momentary
 *ftr           Build files in vrpn_embedded to compile the client-side VRPN
                        library in Windows CE development environment.  Currently
                        doesn't build the vrpn_print_devices file because of a link
                        problem, but the library does compile.
 *ftr           Program to display traces of tracker data is built into the
                        Vlib/openGL (vogl) library.  Requires external UNC version
                        of Glut library to run.
  ftr           National Instruments D/A board server that will try to connect
                        to an analog server and will set the D/A channels to the
                        voltages that correspond to the Analog outputs.
  ftr           q_to_euler() function for quatlib to go directly to Euler angles
                        by Rich Holloway
  clean Massive clean-up of Quatlib code by Rich Holloway.
6.02:
  *bug  Fixed a bug introduced by the "send all packets when a connection is
                        closing" fix reported below.
  *bug  Compiles the Phantom server with the same settings for all parts,
                        to avoid seg faults on print messages (the binary file was
                        bad last relese).
  *bug  Fixes the project file for the Phantom server so user-built ones will
                        also compile correctly.
   bug  Undosify run on the source files, so they will compile on Unix.
6.01:
   ftr  Upgraded to version 3.1 of GHOST library for Phantom server.
  *bug  Removed dynamic allocation of comm handles, which was causing seg
                        faults.
   bug  Added check for negative sensor number in callback for handler (this
                        happened when connected to a malfunctioning tracker server).
  *bug  Re-ordered the delivery of VRPN messages so that messages are packed
                        to endpoints before being delivered locally.  This makes it be
                        the case that the messages are delivered in the same order on
                        the local and remote host if the callback handler for one message
                        sends a message of its own.
   ftr  Making error messages from more VRPN devices use vrpn_TEXT rather than
                        fprintf to stderr on the server machine when there is a
                        connection.
   bug  Making many serial devices keep reading in case there are multiple
                        reports in the serial buffer during one call to mainloop()
   clean        Refactoring serial trackers to put the main loop in the base class.
   bug  Making serial trackers read multiple reports if they are present during
                        a single call to mainloop().
   bug  Connections that are deleted send all of their pending messages
                        before shutting down.  This is supposed to help stop race
                        conditions.
   clean        Removing un-called functions, adding comments, rearranging code
                        to be cleaner.
6.00:
   bug  Not a fix, but at least the Flock code now prints an error if you
                        try and open a Flock that has the transmitter set at other
                        than the first unit.  A general solution will have to wait
                        until someone who wants it badly enough upgrades the driver,
                        or pays 3rdTech to.
  *bug  The timing code under Win32 tried to use the performance counter on
                        the Pentium chip to get timing resolution better than that
                        provided by _ftime() (which is about 6ms).  Unfortunately,
                        the code was fragile and didn't work across all the flavors
                        (98, NT, and 2000).  That code has been removed, so now the
                        resolution is about 6ms on Win32 (boo!), but at least it works
                        reliably.
                ***     Take not those who relied on better timing information!
  *ftr  Better client application for printing the output from devices.
                        vrpn_print_devices is given a list of devices and it will
                        print all common message types coming from them (tracker,
                        button, analog, dial, warning/error) or a subset of them.
                        User can select the frequency of tracker reports for each
                        sensor of each tracker -- reports from all sensors are
                        printed.
  *ftr  Includes a driver for the buttons on a mouse that is plugged into
                        a serial port (courtesy of Rob King at NRL)
  *ftr  Includes a driver for the buttons on a TNG3 (Totally Neat Gadget)
                        (again, courtesy of Rob King at NRL)
  *bug  Modified the various serial-device servers so that they check for
                        a valid record before checking for timeout.  This prevents
                        infinite-reset loops, where one resets and causes the other
                        to time out, and then it returns the favor.
  *ftr  Includes a driver for PC joysticks under Linux, courtesy of
                        Harald Barth.
   ftr  Includes 3rdTech modifications to button code to enable use of
                        more general parallel port setups and button devices besides
                        the UNC Python parallel-port button.
  *ftr  Includes a driver for the 5DT glove (five fingers plus pitch and
                        roll are reported as analog values).  The driver was written
                        by David Philippe from Direction de la Recherche in Paris.
   ftr  The Timecode generator server code has been combined into the
                        standard vrpn.C server code, guarded by INCLUDE_TIMECODE_SERVER
                        so that changes to the server will track.  The project file
                        has been modified to look for the Adrienne code in a directory
                        at the same level as vrpn named Adrienne/AEX_DLL.
   bug  Fixed the driver for the UNC serial joysticks.  Also, renamed it
                        vrpn_UNC_Joystick.[hC], rather than just vrpn_Joystick.[hC]
   ftr  Modified all of the message types to be legal "C" variable names.
                        This will enable auto-generation by PERL of the code to
                        handle them.
   ftr  Made it so that you can log both incoming and outgoing streams at
                        the server, requested by the client.
  *ftr  Added the ability to connect using only an outgoing TCP connection
                        to the server (to punch through a firewall or Network Address
                        Translation).  When a connection is made this way, no data
                        is sent via UDP over that connection between the client and
                        server.
  *bug  Non-word-aligned code had sneaked back into the tracker drivers for
                        some devices.  Now the vrpn_buffer() and vrpn_unbuffer()
                        routines have been changed to work for unaligned buffers as
                        well, so this should not recur.  This should be fixed for
                        everything including the vrpn_float64 type now.
5.04:
   ftr  Adds a driver for the AEC PCI-LTC time-code reader board.  Emits an
                        analog value for each connected board that has the current
                        timecode in seconds.
5.03:
   ftr  Adds a driver for the Wanda device, written by Brown University
   ftr  Code to handle Sierra video switches
  *bug  It turns out that ^C handlers in Windows are multithreaded, causing
                        printvals much confusion.  Handling this properly fixes the
                        crash-at-the-end bug on 98/NT.  HOWEVER, this does not work
                        properly when the program is run in at least some versions of
                        the Cygwin shell when run on Windows 98.
  *bug  Removed buggy clock-check code introduced in version 5.01
                        Now checks to see if it is Windows NT and disables if not
   bug  Cleaned up the gethostbyname() code on the NT version
   bug  Seg fault when using printvals to open file://stored.vrpn, where
                        file:stored.vrpn works.
   bug  Fixed vrpn_drain_output_buffer() to call drain rather than
                        flush.  Should make Flock driver work better.
   bug  Made -millisleep 0 the default on vrpn_server again.  Setting
                        it to 1 broke both the Radamac SPI and the Fastrak
  *bug  Removes code that causes a seg fault when a VRPN application
                        exits (due to multiple deletions of connections in the
                        system textprinter)
5.02:
   ftr  Clean-up of vrpn_Tracker.[hC]
                        Reduction of the number of register/unregister functions in vrpn_Tracker
                        Switching to the use of vrpn_buffer() and vrpn_unbuffer()
   ftr  Phantom button changed to button_filter to allow app to make it a toggle
  *bug  Fixes bugs in analogfly that caused it to seg fault
  *ftr  Driver for the Radamec Serial Position Interface camera tracker
   bug  Fixes deletion bug in printcereal
  *ftr  vrpn_AnalogFly now has to flavors: absolute and relative.
                        Also, added offset to the calculation chain
                        *** See new vrpn.cfg.SAMPLE file if you are using AnalogFly ***
5.01:
   bug  Zero-length VRPN messages were not logged.
   bug  If you deleted a vrpn_Connection with active Endpoints, they didn't close their sockets
  *ftr  Fastrak driver updated
                *Support for InterSense 900 tracker (with Wand and/or Stylus) added to Fastrak driver
                No longer issues "dangerous" commands during reset (dangerous to Isense)
                Tries a fast reset first before doing full reset
                Uses VRPN warning/error/info for many messages, rather than printf
   bug  Fixed gettimeofday() implementation on Win98 when perfcounter isn't close
   bug  Fixed some "const" declarations keeping it from compiling under Solaris
   bug  Buffer-send code to clear up space for new messages had been broken.
                Fixing this allows sending gobs of data between calls to mainloop()
   ftr  Clipping/scaling analog server to map values to [-1..1]
  *bug  Fixes seg-fault on some architectures when reading from files
5.0:
   bug  Removed the mainloop() calls from within the ForceDevice methods that set
                parameters. This will allow them to be used from within callback
                handlers.
   bug  Modified "delete msgbuf" commands to become "delete [] msgbuf", which
                matches the fact that they were created with "new char [len]".
  *ftr  The timeout parameter has been removed from the mainloop() functions of
                the object classes (such as Analog) that had it.  Waiting is more properly
                done outside this function (using vrpn_SleepMsecs()).
  *ftr  Make it so that vrpn_Text messages don't get sent as the maximum-length text message
                no matter how short the actual message is.  THIS FEATURE MAKES THE CODE
                NON-INTEROPERABLE WITH VERSION 4 OF VRPN.  THIS FEATURE WILL BREAK ANY CODE
                THAT USED vrpn_Text TO PASS STRINGS THAT CONTAINED THE NULL CHARACTER.
  *bug  Fixed the packing/unpacking of vrpn_Bool so that it uses the proper-length
                byte ordering.  THIS FEATURE MAY MAKE THE CODE NON-INTEROPERABLE WITH
                VERSION 4 OF VRPN.
   bug  vrpn_Text send_message() should not call mainloop() inside it. Causes segfaults if
                messages are send inside a callback handler.
  *ftr  vrpn_BaseClass object created, from which all object types should derive.  Most
                system object types now derive from this (clock, analog, button, dial,
                forcedevice, sound, tracker, text).  This pulls sender_id registration
                and several other
                functions together so that they are only implemented once.  Also allows
                extension of function (needed for the following features) by extending
                only the vrpn_BaseClass object functions.
  *ftr  Text-handling code pulled into the vrpn_BaseClass object, so that all
                objects can send text messages -- allows moving towards this way
                of printing error messages from within objects.
  *ftr  vrpn_System_TextPrinter object created to print warnings and errors
                from any created object (by default).  User can change the ostream
                that it uses, as well as adjust its level of verbosity.  This should
                allow all objects to print errors/warnings to the user console by
                emitting VRPN text messages.  This addresses a long-standing problem
                with VRPN where you couldn't tell if there was a problem with the
                server because its error messages go to some console on another
                machine.  Now they will go to both places for objects that are
                derived from vrpn_BaseClass.
  *ftr  Handling the Ping/Pong messages that tell the client if the server is alive
                The client warns of no hearbeat in 3 seconds, error if no heartbeat
                in 10 second.  Warn/error 1/second.  Gets printed by vrpn_System_TextPrinter.
4.13:   (This version was never released publicly, changes are in 5.0, except the Logitech Magellan,
                look for it in 5.1 or email vrpn to get a beta driver).
  *ftr  Driver for the Logitech Magellan 6DOF motion controller.  It is a button and
                analog driver; you put the AnalogFly on top of its axes to make it
                act as a tracker.
  *ftr  Multiple connections to the same server has been implemented. This allows
                more than one client to connect to the same server at the same
                time.  Messages are unicast from the server to each client in this
                version.
   bug  More general type/sender ID setup -- the old version didn't look at the
                incoming index, but just assumed that they were sent in order.
   bug  Makes it so that logged messages from the client are not clock-adjusted
                (they should never have been).
   ftr  Removes the endpointPtr() method from vrpn_Connection, since there can now be
                more than one endpoint. This function provided a violation of encapsulation
                in any case. Use the newconnection/droppedconnection messages to track
                information on who is connected.
   ftr  Make it so that the server clears out all incoming requests when started
                (in case client has been trying to call for a while). Also, bug fixed where
                the client would pause for a second between a few calls, then request new
                connections as fast as it could.
4.12:   (This version was never released publicly, changes are in 5.0).
4.11:
        Adds server and remote versions of vrpn_float64 and vrpn_int32
                that allow easy sharing of information between networked
                applications. Implemented to allow shared state for multiple
                users of the nanoManipulator connected across a network.
        Make sure the millisleep() works without busywait on Unix and NT
        Shutdown/restart server w/o restarting app
                If the client starts before the server, this is okay -- it will retry
                If the server stops, the client will restore the connection later
                If you are logging on the client, it logs before and after reconnect
                        The break is marked in the log file, in case we need to know
                        this for some reason.
                Both fullsync and interval clock synchronization work
        Fixes the code to control a raw SGI dial/button box. The old version would
                write too fast and sometimes choke the box.
        Fixing the output on the Intersense
                It failed to send any line feed to the tracker
                It sends add a cr/lf to the screen
        Rearranged headers to get rid of vrpn_cygwin_hack.h.
        Problem with Cygwin hanging on a packet with 0-byte payload fixed
        Removing the quat directory from within server_src. Quat should now be
                checked out separately from CVS, at the same level as the VRPN
                main directory.
        Fixed problems with the output buffers in all of the classes that buffer messages. This causes
                seg faults on some architectures when it is not done. Switched all the classes
                to using the vrpn_buffer() calls, which handle unaligned buffers.
        Figured out what was making the unaligned unbuffer seg-fault happen on some machines when
                reading. PROBABLY FOUND THIS -- the TCP buffer was allocated on the fly
                based on the size of the message received. I've modified it to match the
                UDP way, which allocates a float64 buffer and points the character buffer there.
        The last two fixes should solve problems found on solaris, aix and older
                SGI machines that were causing segmentation violations.
4.10:
        Example classes (templates) for device drivers (server objects)
        Make sure you can create/delete/create remotes [destructor unregister handlers]
        test_vrpn code that verifies handler registration/unregistration
4.09:
        Fixes to allow compilation on sparc_solaris
        Client_and_server example program added
        Added sleep commands to the extended Fastrak reset commands
        Document the example vrpn.cfg on the web pages
        Document client_and_server.C in the web pages
4.08:
        Fastrak driver improved for clarity and simplicity, augmented to work with Intersense
        CerealBox driver for analog, digital and encoder inputs
        Example server configuration file (vrpn.cfg)
        Making client not complain when it cannot find vrpn_Tracker.cfg file
        AnalogFly device created to allow flying with CerealBox joysticks