Past list: (items tagged as bug fix [bug], or feature [ftr]. Big ones starred.) --------------- 6.04: 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 joystick