release
[tango-nonfree.git] / TANGO_CHANGES
blob3f00b27b33d07e864e8b48ec35b231886c1a93b0
1 TANGO history file\r
2 \r
3 01/2016        *******************************************************\r
4                *                                                     *\r
5                *  Tango release 9.2.5a : Changes since version 9.2.5 *\r
6                *                                                     *\r
7                *******************************************************\r
8 Bug fixes\r
9 ---------\r
10 - Jive: Fix bug when creating free property\r
12 New Features\r
13 ------------\r
14 - Astor: Added DBBench feature\r
16 12/2016        *******************************************************\r
17                *                                                     *\r
18                *  Tango release 9.2.5 : Changes since version 9.2.2  *\r
19                *                                                     *\r
20                *******************************************************\r
22 - Add automatic event unsubscription in DeviceProxy class destructor\r
24 Bug fixes\r
25 ---------\r
27 Bugs recorded in SourceForge:\r
29 - 787 : Event errors persisting after server restart\r
30 - 788 : Dead lock in event system\r
31 - 789 : Device not switching to ALARM\r
32 - 790 : Wrong full name passed to event callback\r
33 - 791 : Wrong usage of omni_mutex\r
34 - 792 : Calls to asynchronous methods not thread safe\r
35 - 793 : API_AsynReplyNotArrived exception thrown when asyn call response is \r
36         received in the last 20 ms before the timeout expiration\r
37 - 795 : Compilation pb with gcc >= 5.3\r
38 - 798 : memory leak in DeviceData for old compiler (not supporting C++11)\r
39 - 799 : read value for attribute xxx has not been updated\r
40 - 801 : Memory leak for R/W spectrum string attribute \r
41 - 802 : DevicePipeBlob\r
42 - 804 : init_device & DeviceProxy to an external device with same name \r
43 - 805 : Missing check in Dserver::zmq_event_subscription_change() method \r
44 - 813 : Segfault when pushing a change event with invalid quality \r
45 - 814 : Segmentation fault when reading attribute\r
46 - 816 : DevShort attribute change event has wrong data_type\r
47 - 822 : Swapped origin and desc in some versions of Tango::Except::throw_exception\r
48 - 825 : Event relative change filter does nothing\r
49 - 828 : Crash when client receives att conf change event for enum att\r
50 - 829 (github 312): Compatibility with Zmq 4.2.0\r
51 - github 313 : Improve doc for AttributeProxy::subscribe_event() method\r
52 - github 314 : DServer class ZmqEventSubscriptionChange cmd arg. check\r
54 Other bugs\r
56 - Dynamic attributes polled by code when created after classical DS startup sequence\r
57 - Polled attributes changing their own polling period\r
59 03/2016        *******************************************************\r
60                *                                                     *\r
61                *  Tango release 9.2.2 : Changes since version 9.2.1  *\r
62                *                                                     *\r
63                *******************************************************\r
65 Bug fixes\r
66 ---------\r
68 Bug recorded in SourceForge:\r
70 - 784 : DevULong memorized attribute\r
71 - 785 : Db and DS crash in case no DNS is available\r
74 03/2016        *******************************************************\r
75                *                                                     *\r
76                *  Tango release 9.2.1 : Changes since version 9.1.0  *\r
77                *                                                     *\r
78                *******************************************************\r
80 Tango 9.2 has been developed and tested using:\r
82 - omniORB 4.2.1\r
83 - zmq 4.0.5\r
84 - log4tango 5.0.1\r
86 Changes in Tango itself\r
87 -----------------------\r
89 - Apply changes sent by Szeged university for better code\r
90 - Improve way TANGO_HOST is used when the host name specified in TANGO_HOST is a host alias name\r
91 - Method DeviceClass::get_pipe_list() with device name as arg. is now case independant\r
93 Bug fixes\r
94 ---------\r
96 Bug recorded in SourceForge:\r
98 - 741 : Device_4Impl and Tango 9 compatibility\r
99 - 745 : Missing method for data ready event\r
100 - 748 : Memory leak in DeviceProxy assignment operator\r
101 - 749 : User dev_state() method not called + hide att exception in state method\r
102 - 752 : ZmqEventSupplier::push_event() from multiple threads\r
103 - 753 : Server crash when polling thread is late and IDL 4 clients\r
104 - 761 : Crash when pushing events from my own thread\r
105 - 765 : Asyn re-connection after admin device DevRestart command\r
106 - 767 : push_change_event("State") crashes device server process\r
107 - 783 : Tango server NO_SYNC serial mode\r
109 Other bugs\r
111 - Crash using asyn calls when returning error using omniORB 4.2.1\r
112 - Memory leak in DeviceProxy::get_command_config()\r
113 - It's now possible to read write only attribute of type DevState even before any value has been written\r
114 - Bug in DeviceProxy::write_attribute() family methods in case of DeviceProxy created while the DS is not\r
115 running and write_attribute being the first call\r
116 - Bug in case of forwarded enumerated attribute (enum labels not forwarded)\r
117 - Several pipe related bugs (get_data_elt_nb() method crashing process - Pipe defined at class level\r
118   instead of device level - Not possible to insert data in pipe/blob using DataElement class if no previous\r
119   call to set_data_elt_nb() method)\r
122 09/2015        *******************************************************\r
123                *                                                     *\r
124                *  Tango release 9.1.0 : Changes since version 8.1.2  *\r
125                *                                                     *\r
126                *******************************************************\r
128 Tango 9.1 has been developed and tested using:\r
130 - omniORB 4.2.0\r
131 - zmq 4.0.5\r
132 - log4tango 5.0.1\r
134 Please note that omniORB 4.2.0 on Windows has a bug preventing timeout to work correctly.\r
135 There is a required change described in http://www.omniorb-support.com/pipermail/omniorb-list/2014-November/031621.html\r
136 Do not use the omniORB libraries distributed from omniORB site. Use those provided by Tango Windows binary\r
137 distribution (which include the bug fix)\r
139 Changes between Log4tango 5.0.0 and Log4Tango 5.0.1\r
140 ---------------------------------------------------\r
142 - Small Windows specific change to support new Windows compiler\r
144 Changes in Tango itself\r
145 -----------------------\r
147 - Add device pipe\r
148 - Add forwarded attribute\r
149 - Add enumeration data type for attribute\r
150 - Add device interface change event (FR 90)\r
151 - Add dynamic command (FR 44)\r
152 - New polling algorithm\r
153 - Add memorized attribute information in attribute config (FR 20)\r
154 - New method DeviceProxy::write_read_attributes(). Note the ending s meaning plurial.\r
155 - Attribute "unit" property library default value is now an empty string\r
156 - Only one reference doc generated for all Tango classes (client and server). Tango book chapter 6 \r
157 is removed.\r
158 - Add method DeviceImpl::is_there_subscriber() (FR 89)\r
159 - Change logging system maximum and default logging file size (FR 112)\r
160 - Use template explicit instantiation\r
161 - Code re-factoring for \r
162     . attribute configuration storage in DB\r
163     . Event compatibility\r
164     . KeepAliveThread (on client)\r
165 - Solve memory pb due to event re-connection when nothing is sent on ZMQ sockets between re-connection\r
166 - Optimize group calls in case of disconnected group members \r
167 - Replace many "#define" by "const int" or "const char *" in Tango namespace\r
168 - Added a Tango::string_free() call\r
169 - Windows: Add a WSAStartup() call for pure client\r
170 - Event: During bind action, ask for ephemeral port number to ZMQ\r
171 - In Attribute::set_value() method family: Add test on data size before testing given pointer validity\r
172 - If not already installed, install SIGINT and SIGTERM signal handler in pure client for faster device\r
173 unlocking (in case some device is locked)\r
174 - Messsage "Failed to narrow the EventChannelfactory..." printed by DS to cout5 (FR 91)\r
175 - Better management of the admin device in Util::get_device_by_name()\r
176 - svr_starting flag now reset in Util::server_run() (instead of end of admin device creation)\r
177 - Better support of host alias when used in device fqdn\r
178 - Better support of DS without db when they embed several Tango classes\r
179 - Add methods DeviceProxy::get_command_list() and DeviceProxy::get_command_config() for better compatibility\r
180 between command an attribute\r
181 - Client using event: ORB shutdown an destroyed at process exit\r
182 - Remove possible deadlock in server side when using DeviceImpl class polling related methods\r
183 - Increase ORB maxGIOPConnectionPerServer to 128\r
184 - Change in attribute name passed to event callback in case of CS with multiple DB servers and in case of\r
185 CS with TANGO_HOST defined using a host alias\r
186 - It's supported to specify a host name When using ORBendPoint command line option\r
187 - Added DeviceData and DeviceAttribute state() methods\r
188 - First sync. event also for periodic event\r
189 - Also manage alternate address(es) for events for DS running on host with several NIC\r
190 - Databaase::add_server() method also manages the admin device\r
193 Bug fixes\r
194 ---------\r
196 Bug recorded in sourceForge:\r
198 - 620 : IP address specification from omniORB configuration file\r
199 - 621 : INcompatibility between ZMQ events\r
200 - 627 : DeviceAttribute data format field when using event\r
201 - 631 : Event reconnection\r
202 - 632 : Seg fault during event reconnection (with Tango 7/8 devices)\r
203 - 633 : DevRestart with dynamic attribute when polling is configured via code\r
204 - 638 : Missing events after two consecutive re-connection\r
205 - 642 : Client crash during re-connection\r
206 - 643 : Compilation clash on Windows (about NO_DATA)\r
207 - 646 : ZMQ event for device name when using FQDN\r
208 - 652 : Bug in signal managementwhen using your own signal handler\r
209 - 667 : Subscribing to event does not report error when polling is stopped on server side\r
210 - 668 : Inconsistency between stateless and non-stateless event subscription\r
211 - 676 : Event notification stopped after a while\r
212 - 682 : AttributeProxy created by alias and put_property() method\r
213 - 699 : Memory leak in callback calls when using asynchronous PUSH methods\r
214 - 707 : Wron dates from attribute_history() call\r
215 - 720 : Event with no-db device\r
216 - 725 : Hang in client when doing event subscription within the event callback\r
217 - 732 : GCC 5.2 compatibility\r
220 Other bugs\r
222 - In DbServerData class: Device attribute properties were not correctly copied\r
223 - In admin device polling_threads_pool_conf property when property size is > 255 chars\r
224 - Memory leak in server side during command ZmqEventSubscriptionChange in case of wrongly configured event\r
225 - In polling thread tuning algorithm\r
226 - Server side: In case one ORB is already created, also destroy db related objects stored in ApiUtil\r
227 - When using C++11: No event in case of CS with multiple DB servers if the server is started with\r
228 TANGO_HOST set to one DB server while the client is started with TANGO_HOST set to other DB server\r
229 - Fix valgrind complaining about uninitialized bytes when pushing events\r
230 - For float or double attribute: bug preventing events to be fired when attribute value is NaN\r
231 - During re-connection when remote device has alternate address(es) in its IOR \r
235 06/2013        *******************************************************\r
236                *                                                     *\r
237                *  Tango release 8.1.2 : Changes since version 8.0.5  *\r
238                *                                                     *\r
239                *******************************************************\r
241 Tango 8.1 has been developed and tested using:\r
243 - omniORB 4.1.6\r
244 - zmq 3.2.2\r
245 - log4tango 5.0.0\r
247 Changes between Log4tango 4.0.7 and Log4Tango 5.0.0\r
248 ---------------------------------------------------\r
250 - Small changes to allow Tango doc generation with a "make pdf" command\r
251 - Created a release 5 to handle a compatibility problem of timestamp buggy in release < 4.0.6 (SF Bug 613)\r
253 Changes in Tango itself\r
254 -----------------------\r
256 - Add event propagation using multicasting\r
257 - Add a DeviceImpl::write_attr_hardware() method (Feature request 68)\r
258 - Add a new EventConfirmSubscription command to admin device to optimize event heartbeat system\r
259 - Add a new define (TANGO_BASE_CLASS) to make next Tango inheritance change transparent\r
260 - Add class DbServerData with methods to ease moving device server from one CS to another\r
261 - Improve TAC device filters. It is now possible to use one wildcard per field (sr/v-*/*)\r
262 - Memorize error for memorized attribute which failed during device server startup sequence\r
263 - Change the way Tango device server retrieve host IP address(es)\r
264 - New methods in Database class: get_device_from_alias(), get_alias_from_device(), get_attribute_from_alias()\r
265   and get_alias_from_attribute(). Deprecate get_alias(), get_device_alias() and get_attribute_alias()\r
266   Also add a new rename_server() method\r
267 - Add DeviceProxy::get_tango_lib_version() method\r
268 - Add DeviceAttribute::set_error_list() method\r
269 - Remove CORBA methods throw clause\r
270 - Add Database::get_device_info() method\r
271 - Coherent inserters/extracters method set between DeviceData and DeviceAttribute for DevEncoded data type\r
272 - Change format define for DevEncoded attribute data type to prevent compilation error when used with Lima\r
273 - Add a check against NULL pointer in Attribute::set_value() method\r
274 - Message "Failed to narrow the EventChannelFactory... is printed on console only during DS startup\r
275 - Reduce min polling period to 5 mS\r
277 Bug fixes\r
278 ---------\r
280 Bug recorded in sourceForge:\r
282 - 178 (2027829) and 219 (2668010) : Database::get_services() method\r
283 - 529 (3563183) : Group command_inout fails between server restart\r
284 - 530 (3564392) : Database::get_info() method returns a string with extra '\0'\r
285 - 531 (3564930) : DeviceImpl::stop_poll_attribute and stop_poll_command\r
286 - 533 (3564995) : Memory leak in DbDatum class\r
287 - 534 (3565021) : Archive event subscription with only relative change\r
288 - 536 (3566280) : Device right in init_device() method when using a device running in another CS\r
289 - 537 (3568781) : Memorized attribute and device monitor\r
290 - 545 (3577835) : Event subscription by different threads\r
291 - 546 (3577837) : Attribute name given to user callback\r
292 - 552 (3586344) : Polling thread out of sync error and event\r
293 - 554 (3592399) : Seg fault in Attribute::set_value()\r
294 - 559 (3601231) : Limit in event number\r
295 - 560 (3601232) : Open file leak\r
296 - 561 (3601267) : Access right exception\r
297 - 563 (3601471) : exit() call in library\r
298 - 570 (3604715) : Default format of DevULong (Feature Request 22)\r
299 - 572 (3605540) : DevUChar memorized attribute\r
300 - 593 (3606931) : DeviceImpl class polling methods \r
301 - 602 : Tango lock mechanism\r
302 - 603 : Open file leak (duplicate of 560)\r
303 - 604 : Polling with long period\r
304 - 608 : Missing include for FreeBSD\r
305 - 609 : FreeBSD and DServerSignal::get_sig_thread_pid() method\r
307 Other bugs\r
309 - In notifd event system in case of slow DS generating event\r
310 - In state/status management when attribute are wrongly configured\r
311 - Small bug in returned value of GroupAttrReply::operator>>\r
312 - In event reconnection in the DS is re-started with the instance name given with different letter cases\r
313 - In admin device RestartDevice command when the device name is defined with upper case letters\r
314 - Double free in case of event system reconnection when events are sent to queue\r
315 - Safer memory management in Deviceproxy::read_attributes() method\r
318 05/2012        *******************************************************\r
319                *                                                     *\r
320                *  Tango release 8.0.5 : Changes since version 7.2.6  *\r
321                *                                                     *\r
322                *******************************************************\r
324 Tango 8 has been developed and tested using:\r
326 - omniORB 4.1.6\r
327 - zmq 3.1\r
328 - log4tango 4.0.7\r
330 Changes between Log4tango 4.0.3 and Log4Tango 4.0.7\r
331 ---------------------------------------------------\r
333 - SourceForge bug 3156197\r
334 - Fix warnings when Tango is compiled -Wall -Wextra\r
335 - Add Windows port for Windows 64 bits VC10\r
336 - Add ACLOCAL_AMFALGS in main Makefile.am\r
337 - Update Doxyfile file\r
338 - Apply Alessio's patch:\r
339         - Re-enable Thread's name PatternComponent\r
340         - Add Thread's id PatternComponent\r
341         - Add missing conversion patterns (%t and %T)\r
343 Changes in Tango itself\r
344 -----------------------\r
346 - New event system based on ZMQ\r
347 - New methods to manage polling in DeviceImpl class (is_attribute_polled()/is_command_polled,\r
348 get_attribute_poll_period()/get_command_poll_period(), poll_attribute()/poll_command(),\r
349 stop_poll_attribute()/stop_poll_command())\r
350 - DevEncoded data type supported for commands\r
351 - New Attribute class setter/getter methods for min_alarm, max_alarm, min_warning and max_warning attribute properties\r
352 - New Attribute set_properties/get_properties to set/get several attribute properties in one call\r
353 - Cleaner way to reset kernel attribute properties to lib/user/class default value\r
354 - Add some C++11 features when compiler support them (Lambda functions - unique_ptr for extension classes -\r
355 Move contructor and assignement for DeviceData and DeviceAttribute classes)\r
356 This requires a new compilation option (-std=c++0x)\r
357 - The DeviceProxy and DeviceAttribute classes copy constructor and assignement operator now really copy the data\r
358 - Add device log messages when any device attribute(s) quality factor changes\r
359 (ATTR_INVALID -> error stream, ATTR_CHANGING -> info stream, ATTR_VALID -> info stream\r
360 ATTR_ALARM: min/max alarm -> error stream, min/max warning + rds -> warning stream)\r
361 - Add a clean_db parameter to the DeviceImpl::remove_attribute() method. Default is true\r
362 - New DeviceProxy::get_access_right() method\r
363 - New Util::is_svr_starting(), Util::is_svr_shutting_down() and Util::is_device_restarting() methods\r
364 - New DeviceClass::get_cmd_by_name() method\r
365 - New DServer::_create_cpp_class() method (For PyTango)\r
366 - Remove warnings compilation (Tango is now compiled with -Wall and -Wextra)\r
367 - Add Group::command_inout(), Group::command_inout_asynch(), Group::write_attribute() and Group::write_attribute_asynch()\r
368 with vector<DeviceData> to carry the data.\r
369 - Improvements in event management for notifd events (link to bug 3293671)\r
370 - For writable and memorized attribute(s), check coherency of new min/max_value with memorized value when the\r
371 attribute configuration is modified.\r
372 - State computation for device with alarmed attributes: If the attribute is polled, the attribute value is\r
373 read from the polling buffer (also true when reading the state as a CORBA attribute)\r
374 - Add pre-processor define for Tango release number management (TANGO_VERSION_MAJOR, TANGO_VERSION_MINOR\r
375 and TANGO_VERSION_PATCH)\r
376 - Host IP address(es) is(are) now retrieved from network interface(s)\r
377 - Add a check during set_attribute_config() call for users trying to change hard coded properties\r
378 - Optimization in DeviceProxy methods to get asynchronous call replies when caller uses a timeout in case the\r
379 reply is already there\r
380 - Remove some "cerr" messages in AttributeProxy class\r
381 - Uil::get_host_name() always returns host name in lower case letters\r
382 - The caller PID is now reported in black-box also when UNIX socket is used as transport\r
383 - write_attribute() called during device server startup sequence due to memorized attribute(s) is reported \r
384 in black box with a specific message\r
385 - It's now possible to poll command/attribute in a device server started without database for command/attributes\r
386 with polling defined in code\r
387 - Add a polling thread tuning after the execution of UpdObjPollingPeriod command\r
388 - Remove all Solaris specific code\r
389 - Remove all old stream specific code\r
390 - Signals SIGUSR1 and SIGUSR2 can now be used within a device server process\r
391 - Optimize database calls during device server startup and shutdown sequence (When TAC is used or when\r
392 dynamic attributes are used)\r
393 - Added Database class copy constructor and assignment operator\r
394 - Restore user signal handler for SIGPIPE after CORBA::ORB_init() call\r
395 - Tango is now compiled with Debian hardenning flags on.\r
398 Bug fixes\r
399 ---------\r
401 Bug recorded in sourceForge:\r
403 - 3129849 : TANGO_HOST case sensitive for some event usage\r
404 - 3151801 : Missing some attribute properties in UserDefaultAttrProp class\r
405 - 3165120 : Yet another type in doc\r
406 - 3206916 : Another type in doc\r
407 - 3213730 : Device server add wrong ',0' in attribute abs_change property\r
408 - 3259442 : Macos compilation on x86\r
409 - 3267364 : Typo in documentation\r
410 - 3277453 : Database class and Tango Access Control\r
411 - 3280851 : Wrong state computation\r
412 - 3285370 : Printing operator for DeviceData class\r
413 - 3285372 : Wrong lock removal of last locked device from a locking thread (Windows specific)\r
414 - 3285674 : NaN in write_attribute() call (With a control system prop. to allow/disallow NaN)\r
415 - 3313211 : Polling threads pool management\r
416 - 3399975 : ULong data type and memorized writable attribute\r
417 - 3400550 : State computation with alarmed attributes\r
418 - 3413944 : Memorized attribute written at init\r
419 - 3460080 : Device server crash during event reconnection (event between devices within the same DS)\r
420 - 3468928 : Does not compile with gcc 3.3\r
421 - 3480524 : Write attribute (SCALAR) when throwing exception\r
422 - 3495592 : Logging directory\r
423 - 3505226 : Tango misses ORB parameters\r
425 Other bugs\r
427 - When user pushes event, pushes first event when it is inited (when the event detection is done by the lib)\r
428 - In case of consecutive signal installations and removals.\r
429 - Bug in error message and in inserters in DbDatum class for unsigned char data type\r
430 - Bug when updating database due to one attribute configuration change\r
431 - Bug when using the WAttribute::set_min_value() methods family: The attribute was not flagged as attribute with \r
432 minimun value defined\r
433 - Doc: Fix bug in Database::get_device_attribute_property() method usage example\r
434 - Bug in WAttribute::set_min_value() and Wattribute::set_max_value() methods for unsigned char data type.\r
435 The data was stored in database as ascii characters\r
436 - Device server crashes when you kill it if there are some long running actions when the signal is received.\r
437 - It's now possible to define in code that state and status has to be polled\r
438 - It's now possible to define an archive event period or a periodic event period for state or status attributes\r
439 - Possible device server process crash (depending how you are lucky) when trying to start one with an\r
440 instance name not defined in database\r
441 - Bug when reading attribute from CACHE when the attribute is not polled. The returned exception was not correct\r
442 - Wrong printed date (and reported in blackbox) when used on 64 bits computer\r
443 - Bug in attribute property management for dynamique attribute when the property is an array\r
444 - Fix bug in logging for devices not using database when the logging level is specified on the command line\r
448 03/2011        *******************************************************\r
449                *                                                     *\r
450                *  Tango release 7.2.6 : Changes since version 7.2.1  *\r
451                *                                                     *\r
452                *******************************************************\r
455 Note: Tango 7.2.2 to 7.2.5 have never been officially released outside ESRF.\r
457 - Replace the deprecated gethosybyname() and gethostbyaddr()calls. This allows running Tango on\r
458   OS like Ubuntu 10.10 with the default /etc/hosts file\r
459 - Optimize database call retries number during device server startup sequence.\r
460 - Added a DeviceProxy::get_access_right() method\r
461 - Add a check on empty device name in DeviceProxy ctor methods\r
462 - Add a encoded_format.h file for DevEncoded string definition\r
463 - Reset SIGINT and SIGQUIT to their default behavior during DS startup sequence.\r
464 This is needed in case of Tango class using signals and started as background process by a shell\r
465 script\r
467 Bug fixes\r
468 ---------\r
470 Bugs recorded in SourceForge\r
472 - 3110842 : Memory allocation in state command\r
473 - 3118520 : Windows: DS freeze when using event\r
474 - 3119664 : Windows: Stream inserter for DeviceAttribute fails\r
475 - 3122125 : Windows: DS crash at exit\r
476 - 3165232 : TAC and multi TANGO_HOST\r
477 - 3206383 : Double free in DeviceProxy::read_attributes()\r
479 Other bugs\r
481 - Two bugs related to controlled access on the database device\r
482 - Wrong synchronisation for periodic and archive (periodic part) events with non constant attribute\r
483   reading time\r
484 - TAC and re-connection (all commands allowed after a re-connection!!)\r
487 11/2010        *******************************************************\r
488                *                                                     *\r
489                *  Tango release 7.2.1 : Changes since version 7.2.0  *\r
490                *                                                     *\r
491                *******************************************************\r
492                            \r
493 Bug fixes\r
494 ---------\r
496 Bugs recorded in SourceForge\r
498 - 3092967 : Tango 7.2 DS crash when reading a string scalar R/W attribute\r
500 Other bugs\r
502 - DS crash in dynamic_cast when using C++ and Python Tango classes within the same process\r
503 - Windows: Reduce timeout for DS trying to connect to a non running notifd\r
506 10/2010        *******************************************************\r
507                *                                                     *\r
508                *  Tango release 7.2.0 : Changes since version 7.1.1  *\r
509                *                                                     *\r
510                *******************************************************\r
512                            \r
513 Tango 7.2.0 has been developed and tested with omniORB 4.1.4\r
515 Remarks about omniORB 4.1.4\r
516 ---------------------------\r
518 - SourceForge bug number 3054292 (client hangs on ping) is solved by a omniORB patch available in the SourceForge bug tracker\r
519 - SourceForge bug number 3011742 (memory leak) is also solved by 2 omniORB patches available in the SourceForge bug tracker\r
522 New / Optimized features\r
523 ------------------------\r
525 - The client API is now thread-safe:\r
526 This means that you can share a pointer to a DeviceProxy class instance between several thread. Note that if one thread changes\r
527 data like the device time-out, this change will be seen by all the other threads using this device.\r
528 In next major release (Tango 8), a new mechanism will be implemented allowing the user to choose if he want a thread safe \r
529 or unsafe device proxy. For compatibility reason, it was not possible to include this change in a non major release.\r
530 - It's now possible for applications to subscribe several times to the same event (with or without the same callback object)\r
531 - Add check on attribute dimension when using AttrData<T> class to fill polling buffer hsitory\r
532 - Subscribe to a data ready event fails if the Attr::set_data_ready_event() method has not been called (in the server side).\r
533 This allows application to be aware that the device could/couldn't fire data ready event\r
534 - Added insertion operators (<<) in the DeviceAttribute class for const char * and Tango::DevString\r
535 - Polling and logging related commands allowed only for the device lock owner when the device is locked\r
536 - Add a way to externally fill-up the polling buffer for R/W attribute when specifying the attribute written part\r
537 - No more database call executed by DeviceProxy constructor if it is called in a device server and the device is in the same process\r
538 - Better management of device server started on host with several network interface (ORBendPoint option not needed any more)\r
539 - Added a ApiUtil::get_env_var() method (static)\r
540 - Better timeout management during re-connection in case of device server running on a host switched off\r
541 - Add a new way to write class_factory() as a function instead of a DServer class method. Needed for PyTango on Windows using DLL\r
542 - NaN is now taken into account in RDS alarm for float/double (and array of) attributes\r
545 SourceForge features request\r
546 ----------------------------\r
548 - 2721963 : Implemented a much faster device server shutdown sequence\r
549 - 3004584 : Add a way to define a minimum polling period using properties\r
551 Bug fixes\r
552 ---------\r
554 Bugs recorded in SourceForge\r
556 - 2894469 : "localhost" correctly managed in TANGO_HOST environment variable\r
557 - 2908860 : Applications seg. fault at exit if notifd is dead\r
558 - 2910028 : Attribute history not correctly initilised (written part y dimension)\r
559 - 2916280 : Accessing a device in a non-db device server\r
560 - 2917038 : Seg fault if you start a device server from a thread which is not the main thread\r
561 - 2934375 : Polling thread out of sync for very slow polling\r
562 - 2934862 : Possible seg fault in device server\r
563 - 2954995 : Seg fault in device server for scalar, R/W attribute with quality factor set to invalid\r
564 - 2977091 : Memory leak in DeviceProxy::get_attribute_list() method\r
565 - 2979781 : Polling properties management\r
566 - 2988115 : DeviceProxy::read_attributes() call with several times the same attribute\r
567 - 2993423 : Dead lock in DeviceProxy unsubscribe_event() method\r
568 - 2996669 : Tango group and device defined using full Tango device name\r
569 - 3015443 : Inconsistency in event error management\r
570 - 3016953 : State command/attribute throws exception in case of attribute with alarm level defined and quality set to invalid\r
571 - 3017075 : Same bug than 3016953\r
572 - 3019067 : Dead lock in device server\r
573 - 3033465 : File name for device server using database in a file\r
574 - 3068607 : Memory leak for scalar, R/W string attribute\r
575 - 3079309 : Wrong error messages\r
576 - 3080885 : Double free for some DB calls in case of communication problem\r
578 Bugs not recorded in SourceForge (Shame on us)\r
580 - Events from device server using a file as database\r
581 - Some cases of re-connection with device running on Windows\r
582 - DeviceImpl::remove_attribute() does not correctly manage main attribute vecor indexes preventing nice implementation of\r
583   dynamic attributes\r
584 - The value set by a WAttribute::set_write_value() if used in the attribute write method (write_MyAttribute) was overwritten\r
585   with the caller value\r
587 Documentation\r
588 -------------\r
590 - Add property file syntax description (Appendix F)\r
591 - Add Group::read_attributes() method documentation\r
592 - Add / Update doc related to new / modified features\r
593 - Fix some typos                           \r
594                            \r
595                            \r
596                            \r
597 11/2009        *******************************************************\r
598                *                                                         *\r
599                *  Tango release 7.1.1 : Changes since version 7.1.0  *\r
600                *                                                     *\r
601                *******************************************************\r
604 - Change in the way polling thread(s) starts\r
605 - Support of events in Tango system with multiple db servers\r
606 - Attribute name passed to the event callback is now the fully qualified\r
607 attribute name\r
610 Bug fixes\r
611 ---------\r
613 Bugs recorded in SourceForge\r
615 - 2880372: Change of attribute config setting lost if DevRestart is done\r
616 - 2881841: Attribute quality factor is set incorrectly in Tango 7.1\r
620                *******************************************************\r
621                *                                                         *\r
622                *  Tango release 7.1.0 : Changes since version 7.0.2  *\r
623                *                                                     *\r
624                *******************************************************\r
625                            \r
627 Tango 7.1.0 has been developed and tested with omniORB 4.1.4\r
629 - On Unix like OS, the communication between devices on the same host uses Unix domain socket\r
630 - Database server host names stored with its FQDN\r
631 - Configurable attribute serialization model added\r
632 - Comment character (#) supported in the Tango rc file\r
633 - A Tango rc file is also supported on Windows platform ($TANGO_ROOT/tangorc)\r
634 - Call to DeviceImpl::stop_polling() method silently ignored if the polling is already stopped\r
635 - Added optimized DeviceProxy::read_attribute() call (Not yet virtual)\r
637 Bug fixes\r
638 ---------\r
640 Bugs recorded in SourceForge\r
642 - 2787140: Wrong value returned from DeviceProxy::get_logging_level()\r
643 - 2788358: Typos in exception fields\r
644 - 2801558: Stateless timeout\r
645 - 2803392: Event in multi Tango host system\r
646 - 2810110: Pushing change event with quality factor set to INVALID\r
647 - 2811351: Change event for state attribute\r
648 - 2812775: No more events after a double subscription\r
649 - 2814404: Wrong string comparison in polling threads pool init\r
650 - 2821229: Client crash at exit if using device locking and event\r
651 - 2821898: AttrConfEventData, EventData copy ctor and assignment operator\r
652 - 2826552: Event abs_change and rel_change attribute property resetting failed\r
653 - 2836943: Unsubscribe_event locks\r
654 - 2836238: Non PIC code\r
656 - 2840364: Missing ctors for DeviceAttribute class\r
657 - 2861309: Race condition in EventConsumerKeepAlive thread\r
658 - 2871262: Unsubscribe_event seg fault\r
660 Bugs not recorded in SourceForge\r
662 - Server crash when reading several attributes with the DeviceProxy::read_attributes() call\r
663 with one of the attribute being the State and other attributes being scalar with alarm\r
664 threshold defined\r
666                            \r
667 05/2009        *******************************************************\r
668                *                                                         *\r
669                *  Tango release 7.0.2 : Changes since version 6.1.1  *\r
670                *                                                     *\r
671                *******************************************************\r
672                            \r
674 Tango 7 is using Log4Tango 4.0.3. This new release of Log4Tango does not add \r
675 any new feature to Log4Tango.It simply allows smooth compilation with gcc 4.3\r
677 Tango 7 has been developed and tested using omniORB 4.1.3\r
679 - Control access in C++ (It was already available for Java)\r
680 - New DevEncoded attribute data type\r
681 - New attribute data transfer (Using IDL union instead of Any) \r
682 - Optimized image transfer using attribute DevEncoded data type in compressed\r
683   (JPEG encoder/decoder) or uncompressed format\r
684 - Event queues\r
685 - Multiple polling threads\r
686 - Fast polling buffer history retrieval\r
687 - write_read_attribute() call\r
688 - Data ready event\r
689 - Device dependency tree\r
690 - User main event loop\r
691 - Cancel asynchronous request (local to the client)\r
692 - Attribute data format transferred when reading attribute(s)\r
693 - Add some new constructor for class DbDatum and DeviceProxy (from const char *)\r
694 - Add some equality operators for miscellaneous classes - C\r
695 - New management of env. variable (Unix only) including conf. files\r
696   ($HOME/.tangorc an /etc/tangorc)\r
698 Small changes:\r
699 --------------\r
701 - Increase default blackbox depth to 50\r
702 - Support for gcc 4.3\r
704 Windows specific:\r
705 - Support VS8 (VC8) and VS9 (VC9)\r
707 Bug fixes:\r
708 ----------\r
710 Bugs recorded in SourceForge\r
712 - 1969687: Possible crash for device server started without database\r
713 - 1982044: Crash in "new DeviceProxy" in case of multi-threaded application\r
714 - 2019405: Memory leak in DeviceProxy::read_attributes in case of exception\r
715 - 2092748: Memorized attribute after an Init command\r
716 - 2119141: const parameters for Util::trigger_xxx_polling() methods\r
717 - 2150859: Wrong management in admin DeviceProxy instance admin device in case\r
718   of multi TANGO_HOST\r
719 - 2157328: Double memory free in DeviceProxy::command_inout_reply() method\r
720 - 2182565: Removing dynamic attribute in init_device() method\r
721 - 2489781: Type in database command name\r
722 - 2633201: const parameters in DeviceProxy::get_attribute_config()\r
723 - 2761379: DeviceProxy::alias() method for default constructed device\r
724 - 2784265: Bug in doc\r
725 - 2784267: Wrong output format in DeviceData/AttributeDataHistory\r
727 Bugs not recorded in SourceForge !\r
729 - Fix small memory leaks in\r
730    - server Db cache (16 bytes)\r
731    - Database::unexport_event() method\r
732 - Attribute::set_value_date_quality() methods family when attribute quality\r
733   is set to ATTR_INVALID \r
734 - Remove the server ORB endPoint defined in code before the call to ORB_init()\r
735 - Fix bug when starting a DS with "database on file"\r
736 - Clean shutdown of signal thread when a DS is killed\r
737 - Remove the "was only XYZ ms ago" in the error description in case of too\r
738   frequent re-connection attempt.\r
739 - Change event on attribute using the DevState data type required the change\r
740   property to be set!\r
741                            \r
743 04/2008        *******************************************************\r
744                *                                                         *\r
745                *  Tango release 6.1.1 : Changes since version 6.0.0  *\r
746                *                                                     *\r
747                *******************************************************\r
749 - Bug fixes:\r
750         - Compatibility problem between release 6.0 and 6.1\r
753                *******************************************************\r
754                *                                                     *\r
755                *  Tango release 6.1.0 : Changes since version 6.0.0  *\r
756                *                                                     *\r
757                *******************************************************\r
758                            \r
759 - Stateless event subscription : an event subscription is possible now, \r
760   even when the device server is not running. The subscribe_event method \r
761   takes a new boolean parameter to trigger stateless event subscription.\r
762   \r
763 - Attribute::set_write_value methods have been added for spectrum and image\r
764   data types.\r
765   \r
766 - Added extratction methods to DeviceAttribute to individually extract\r
767   read and set point values. Added methods to read the data dimensions \r
768   which are compatible with the Java API.\r
769   \r
770 - Ported to MacOSX\r
772 - Class dlls for Windows can be created and can be used as for UNIX now.\r
774 - Device server now uses a database cache to get all their data during \r
775   their starting sequence. This cache is filled in by a new Database server\r
776   command and destroyed at the end of the startup sequence. When possible, all\r
777   data are fetched from this cache instead of from the database.\r
778   If it is not possible to fill in this cache for any reason, the device server\r
779   process starts using the traditional way.\r
781 - Optimize network calls during connection establishment between client and server\r
783 - Implement a new timeout management for database object access. The timeout\r
784   used has a different value when the device server is in its starting phase\r
786 - Automatic management of a TCP connection establishment timeout for the\r
787   database object\r
789 - Add new Database class methods to interface the two new database server\r
790   commands (DbGetDataForServerCache and DbDeleteAllDeviceAttributeProperty)\r
792 - Change the way the DB is cleanup up due to dynamic attribute deletion\r
793   during device server shutdown\r
795 - Default value for the "doc_url" part of the info() network call changed\r
796   to "http://www.tango-controls.org"\r
798 - Add new methods allowing a better way to set the CVS tag and CVS location\r
799   info returned by the info() network call\r
801 - Add 2 new Attribute::set_properties() methods which can be used in a Tango class\r
802   init_device() method\r
805 - Bug fixes:  \r
806         - Solved deadlock when subscribing events from different threads.\r
807         - Initialisation of memorized attributes during the init command.\r
808         - Correction of client and server shutdown procedures when using \r
809           the event client part.\r
810         - Corrected the event synchronisation when a client is using another\r
811           threading package than omnithreads.\r
812         - Fix client multi-threading issue when a CORBA exception was received during\r
813           a re-connection\r
814         - Name letters case bug in polling thread command and in polled objects\r
815       name stored in database\r
816         - One re-connection case was not "transparent"\r
817         - Clarify some exception messages\r
818         - Polling thread synchronisation bug for internal commands start-polling, stop-polling\r
819           and rem-obj-polling\r
820         - Bug in the admin device RemObjPolling command related to polling\r
821           properties management (When the removed object was last polled object)\r
822         - Bug in asynchronous call in PUSH_CALLBACK mode when used intensively\r
823         - Polling configuration mismatch after an Init command on the admin device\r
824         - The DbGetDeviceList database command now has the same wildcard for its two \r
825           parameters ("*")\r
826         - Bug in the remote "info" call for devices implementing IDL3\r
827           (missing CVS Tag and CVS location)\r
828         - Bug when getting the State history using the command_history() calls\r
829         - Windows specific: Device server configured as "daemon" correctly starts on\r
830           a windows host with netowrk connection unavailable when the DS starts\r
833 06/2007        *****************************************************\r
834                *                                                   *\r
835                *  Tango release 6.0 : Changes since version 5.5.2  *\r
836                *                                                   *\r
837                *****************************************************\r
839 - Ported to OmniORB 4.1, which is a major release of omniORB and\r
840   changes the generated code from the IDL.\r
841   \r
842 - Ported to 64 bit architectures (Linux and Windows (x64))\r
845 - Add an attribute configuration event which is pushed every time an \r
846   attribute property changes. This allows to synchronize all client \r
847   displays of an attribute.\r
848   \r
849 - Added new filterable fields "quality" and "delta-t" (sine last archive_event) \r
850   to the archive event\r
851   \r
852 - Events with quality invalid are only send once as long as the quality\r
853   stays invalid.\r
854   \r
855 - Events with exceptions are only send once as long as the exception does\r
856   not change.\r
857   \r
858 - Modified the synchronisation between the event consumer and the keep \r
859   alive thread.\r
860   Exchanged the global mutexes on the channel and the callback maps \r
861   by individual monitors for every channel and every callback. \r
862   The monitor can time-out and will not block the event reception \r
863   for a long time in case of problems.\r
864   To synchronise with subscribe or unsubscribe requests, added a \r
865   global reader writer lock around the two maps.\r
866   The subscribe thread is the writer and the event consumer and the keep \r
867   alive thread are the readers.\r
869 - When removing dynamic attributes all their configuration will be deleted\r
870   now from the database. Polling configuration and event configuration\r
871   properties will be deleted.\r
872   \r
873 - Events are available for devices servers running with a file database\r
874   or without database. \r
875   \r
876 - Filling polling buffer using Util::fill_attr_polling_buffer() now \r
877   possible also for R/W attribute\r
878   \r
879 - Add get/set min/max_value methods family in the WAttribute class  \r
880  \r
882 - A bunch of new methods was added to the C++ database API to implement\r
883   the same functionality as the Java database API.\r
884   get_host_list, get_services, register_service, unregister_service,\r
885   get_class_for_device, get_class_inheritance_for_device,\r
886   get_device_exported_for_class, put_device_alias, delete_device_alias,\r
887   put_server_info, delete_server_info, get_server_class_list,\r
888   get_server_name_list, get_instance_name_list, get_server_list,\r
889   get_host_server_list, get_device_class_list, get_device_property_history,\r
890   get_device_property_list, get_device_attribute_property_history,\r
891   get_class_property_history, get_class_list, get_class_property_list,\r
892   get_class_attribute_property_history, get_class_attribute_list,\r
893   get_attribute_alias, put_attribute_alias, ...\r
894  \r
895   \r
896 - Methods to change timeouts for groups (common or individual)  \r
898 - New Util::get_tango_lib_release() method\r
900 - Add the DeviceClass::device_destoyer() method (opposite of the \r
901   device_factory)\r
902   \r
903 - The polling thread is now configured without creating a separate thread \r
904   (new argument in its ADD_OBJ_POLLING command)\r
906 - Add omni_thread::ensure_self object in AutoTangoMonitor and \r
907   NoSyncModelTangoMonitor classes in order to use these objects in \r
908   threads not created by omni_thread (Python thread for instance)\r
909   \r
910 - Add device name in Tango monitor print messages\r
912 - MAX_TRANSFER_SIZE is now 256 Mbytes\r
913  \r
914 - Removed all #ifdef for HP-aCC compiler\r
916 - The Tango database server do not use the root account for MySQL any\r
917   more. You can configure any account to be used via the my.cnf \r
918   configuration files or via the environment variables MYSQL_USER and\r
919   MYSQL_PASSWORD.\r
923 - Bug fixes:\r
924         - Polling did not restart correctly after an Init command on a device\r
925           server admin device\r
927         - Bug in re-connection after a device server admin device Init, Restart or \r
928           Devrestart command  \r
930         - Two small memory leaks when dealing with dynamic attributes\r
932         - Admin device did not handle device alias in its DevPollStatus command\r
934         - Bug in add_attribute() method if you try to add an attribute with the \r
935           same name but a different definition (different data type, data \r
936           format, ...)\r
937           \r
938         - Several bugs when removing dynamic attributes\r
940         - Bug when removing a CORBA servant for non-exported device\r
942         - Bug in Util::get_device_list_by_class() in some specific cases\r
944         - Bug in the forced event without criteria checking. Some flag init. \r
945           was missing\r
947         - Bug in re-connection in case of asynchronous call\r
949         - Bug in the subsribe_event() method when the DeviceProxy has been \r
950           created using a syntax like "host:port/a/b/c" with host and port not \r
951           the same than the one defined by the TANGO_HOST environment variable\r
953         - In the case of a too long delivery time for events the notifd closes\r
954           the connection to a client. Now this case is detected in the client \r
955           and the client will reconnect. \r
958                *****************************************************\r
959                *                                                   *\r
960                *  Tango release 5.5.2 : Changes since version 5.5  *\r
961                *                                                   *\r
962                *****************************************************\r
963 - Contains a new version of the Tango database which keeps a history\r
964   of the last changes for every property. This needs the creation of\r
965   new tables in MySQL and a new database server.\r
966   \r
967 - Corrected the reconnection to the notification daemon in the case of\r
968   network cuts.\r
969 - Increased the maximum data size to be transferred between server and \r
970   client from 8Mbytes to 16Mbytes.\r
971 - Since release 5.5 a server under windows could no longer be installed \r
972   as a windows service. Corrected the problem.\r
975                *****************************************************\r
976                *                                                   *\r
977                *    Tango release 5.5 : Changes since version 5.4  *\r
978                *                                                   *\r
979                *****************************************************\r
981 - Change and archive Events can be pushed manually from the code now \r
982   without polling. Two ways are possible:\r
983   1.) Push events but check the event configuration \r
984      (as the polling thread). Events are fired exactly under the\r
985           same conditions as with the polling.\r
986   2.) Push events without configuration check. \r
987       The event is fired without any value checking.\r
988 - The quality event was removed and integrated as filter "quality"\r
989   to the change event.\r
990   \r
991 - The user event was adapted to follow the structure of pushing \r
992   change or archive events.\r
993   \r
994 - Event reconnection will follow now when a server was moved to a\r
995   different host. The connection will be rebuild to the new notifd.\r
996   \r
997 - Polling configuration for attributes and commands specified in \r
998   the code with Pogo are written to the database at server start-up.\r
999   The polling will start immediately and no longer on a first reading\r
1000   request.\r
1001   \r
1002 - The transparent reconnection is now the default reconnection mode.\r
1004 - Naming requests to the database are cached for a DeviceProxy.\r
1005   A reconnection request will be emitted only once a second for a\r
1006   DeviceProxy connection.\r
1007   The same feature is implemented in the Java api.\r
1008   \r
1009 - Debugging is now possible with the Linux 2.6 kernel.\r
1010 - Support of gcc 4.0\r
1011 - Support of VC7 and VC8 under Windos.\r
1012 - Integration of code for device servers written in Python.\r
1014 - Bug fixes:\r
1015         - Corrected event priod handling for periodic events.\r
1016         - Corrected rounding errors when checking the conditions.\r
1017           of change and archive events.\r
1018         - Corrected constructor for the class GroupReply.\r
1021                *****************************************************\r
1022                *                                                   *\r
1023                *    Tango release 5.4 : Changes since version 5.3  *\r
1024                *                                                   *\r
1025                *****************************************************\r
1027 - Stopped the automatic polling startup of attributes at event subscription.\r
1028   All polling has be be configured manually!\r
1029   Subscription to events is only possible if the event properties\r
1030   for an attribute are properly configured and the polling is started!\r
1032 - An exception during initialisation of memorized attributes\r
1033   will no longer result in an exit of the server.\r
1035 - Memorized attributes can be used in two ways now.\r
1036   1) The setpoint gets initialised during a server startup.\r
1037      No write happens on the attribute.\r
1038   2.) The setpoint gets initialised during a server startup\r
1039       and is written to the attribute.\r
1040       The initialisation mode can be triggered by\r
1041       Attr::set_memorized_init(bool write_on_init) method\r
1042       during attribute creation.\r
1043       The two options are supported by Pogo.\r
1045  - The archive event behavior has changed. The archive period\r
1046    is no longer set to 10 seconds as default. If no period is\r
1047    specified, no periodic archive event is send.\r
1049 - Bug fixes:\r
1050    - Corrected the wrong archive period reading after a\r
1051      server restart.\r
1053    - Changed DServerClass::instance() to return an exception\r
1054      in the case of a not initialised object.\r
1055      The exit() killed the server during a startup when\r
1056      a client sends requests to early.\r
1058    - Changed the clean-up mechanism when shutting down\r
1059      the ORB. Destroy ORB when returning from run().\r
1060      In 5.3 This was done in the main and when missing\r
1061      caused some threads to hang-up with the Linux kernel\r
1062      2.4.x.\r
1064    - Avoid calling Device_3Impl::status2attr() during\r
1065      attribute reading when an error was detected.\r
1066      Avoids segmentation fault in status2attr(). \r
1069            *****************************************************\r
1070                *                                                   *\r
1071            *    Tango release 5.3 : Changes since version 5.2  *\r
1072                *                                                   *\r
1073                *****************************************************\r
1074                \r
1076 - Fix bug in server part which prevents using object files compiled with \r
1077   5.1 to link with 5.2\r
1078 - Changed the clean-up mechanism when shutting down the ORB. \r
1079   Destroy ORB when returning from run().\r
1080 - Fix bug for reading and applying the period of archive events.\r
1083   \r
1085            *****************************************************\r
1086                *                                                   *\r
1087            *    Tango release 5.2 : Changes since version 5.1  *\r
1088                *                                                   *\r
1089                *****************************************************\r
1092 Small changes :\r
1093 ---------------\r
1095    - Support for gcc 3.4.x compilers\r
1097    - Support for Solaris computer with gcc (Compiled and Tested on Solaris 7 \r
1098      with gcc 3.3.2 and Solaris 9 with gcc 3.3)\r
1099      WARNING : The support of gcc on Solaris needs log4tango release 4.0.2\r
1100      -------\r
1102    - The host name stored in database is now the Fully Qualified Domain Name\r
1103      WARNING : For those using events, you now need "notifd2db" release 1.4\r
1104      -------\r
1106    - Events are now available also for device server started with the\r
1107      "-file" option. Needs "notifd2db" release 1.4\r
1108      \r
1109    - Added attribute quality change event firing by the Attribute::set_quality()\r
1110      and Attribute::set_value_date_quality() methods via a new method argument\r
1111      \r
1112    - New method DeviceAttribute::get_type() and DeviceData::get_type()\r
1113    \r
1114    - Add a AttrManip class constructor from a C++ string\r
1115    \r
1116    - Add a DeviceImpl::remove_attribute() method\r
1117    \r
1118    - A new Tango::string_dup() method to replace the CORBA::string_dup()\r
1120    - Management of two new class properties called "CVS_tag" and\r
1121      "CVS_location"\r
1122      \r
1123    - Add a method Command::set_name()\r
1124    \r
1125    - Change parameters for omniORB server threading strategy. Server\r
1126      switches from thread per client to thread pool at 50 connections and\r
1127      max number of threads is now 100\r
1128      \r
1129    - When events are used, add a new error "API_PollThreadOutOfSync" if polling\r
1130      thread discards work item because it is late.\r
1131      \r
1132    - Add two new commands in device server admin. device for device creation\r
1133      wizard\r
1134      \r
1135    - Start a device server with "-v5" if you want to see Tango library messages.\r
1136      The "-v4" now put only classical devices in DEBUG mode.\r
1138 Bug fixes :\r
1139 -----------\r
1141    - Review exception thrown by the DeviceProxy::subscribe_event() and \r
1142      DeviceProxy::unsubscribe_event()\r
1143      \r
1144    - No more "Class not initialised" at device server startup (It was a bug\r
1145      introduced by V5)\r
1146      \r
1147    - Fix bug for device server started with the "-file" option in the\r
1148      get device property and get class property features\r
1149      \r
1150    - No more "seg faults" in the DeviceAttribute::has_failed() method\r
1151    \r
1152    - For Solaris : Reset SIGINT and SIGQUIT signals handler to default value.\r
1153    \r
1154    - Fix deadlock in device server introduced in V5 in some specific cases\r
1155      when device server manage device with commands or attribute polled\r
1156      at startup and by first reading\r
1157      \r
1158    - Correctly initialise fileds "attr_name" and "event" in the EventData \r
1159      structure passed to client when the event hartbeat is missing\r
1160      \r
1161    - Fix incoherency between C++ and Java API for the \r
1162      Database::delete_device_attribute_proerty() and\r
1163      Database::delete_class_attribute_property()\r
1164      \r
1165    - Fix bug which generates a "core dumped" when killing device server on\r
1166      Debian Linux system\r
1167      \r
1168    - Fix bug in the archive event period returned to the client with the\r
1169      get_attribute_config call\r
1170      \r
1171    - Fix bug in the date stored in Attribute history when using polling buffer\r
1172      externally filled and exception\r
1173      \r
1174    - Fix bug in event reconnection (one attribute name was still case dependant)\r
1175    \r
1176    - Fix bug when asking polling thread to poll state or status attribute.\r
1177      Polled them as attributes only for device server implementing IDL 3\r
1178      \r
1179    - Fix bug in device server startup phase for device server with polled\r
1180      objects at startup and at first reading.\r
1181      \r
1182       \r
1185            *****************************************************\r
1186                *                                                   *\r
1187            *    Tango release 5.1 : Changes since version 5.0  *\r
1188                *                                                   *\r
1189                *****************************************************\r
1192 Small changes :\r
1193 ---------------\r
1195    - Remove device name from library default value from attribute label\r
1196      property\r
1197      \r
1198    - An empty string for string attribute properties will now return\r
1199      their values to the default one (from lib or from a user defined one)\r
1200      \r
1201    - Some improvements in error management when parsing database file with\r
1202      the device server -file option\r
1204 Bug fixes :\r
1205 -----------\r
1207    - Fix bug when setting R/W attribute write value with the\r
1208      WAttribute::set_write_value() method in device server startup phase\r
1209      \r
1210    - Fix bug when polling a Device_2Impl device's attribute which throws\r
1211      an exception (crashed the device server)\r
1212      \r
1213    - Library default value for the attribute label property not stored in\r
1214      database any more\r
1215      \r
1216    - Fix bug in Database::get_class_attribute_property() and\r
1217      Database::get_device_attribute_property(). Could generate stange behaviour\r
1218      (even core dumped) when reading attribute configuration on a Device_2Impl\r
1219      device or when creating on AttributeProxy object on a Device_2Impl\r
1220      \r
1221    - Fix bug when reading R/W Device_2Impl attribute. The  last written value\r
1222       was always 0.\r
1223       \r
1224    - Fix bug which crashes a device server when a client linked with Tango V4\r
1225      tryed to get attribute history from a Device_3Impl\r
1226      \r
1227    - Fix some tables in the HTML doc which appears with only one row.\r
1228  \r
1229  \r
1230  \r
1231  \r
1232            *****************************************************\r
1233                *                                                   *\r
1234            *    Tango release 5 : Changes since version 4.3    *\r
1235                *                                                   *\r
1236                *****************************************************\r
1239 Main changes :\r
1240 --------------\r
1242    - A new way to code attribute inside a device server.\r
1244    - It is now possible to read several attributes with the read_attributes\r
1245      call even if one of them failed.\r
1246      \r
1247    - It is now possible to write several attributes with the write_attributes\r
1248      call even if one of them failed.\r
1249      \r
1250    - Four new attribute data type which are : Boolean, float, unsigned char and\r
1251      unsigned short.\r
1252      \r
1253    - It now supports image and spectrum attributes as READ_WRITE or\r
1254       READ_WITH_WRITE attribute.\r
1255       \r
1256    - Device state and status can be read as attributes.\r
1257       \r
1258    - Added memorized attributes (only for scalar attribute).\r
1259    \r
1260    - Each attributes now support a four thresholds level alarm (instead of two)\r
1261    \r
1262    - Each attribute implements a Read Different than Set (RDS) alarms.\r
1263    \r
1264    - New attribute configuration set (including alarm and event parameters).\r
1266    - External triggering of the polling thread.\r
1267    \r
1268    - Add methods to set the attribute or command polling buffer.\r
1269    \r
1270    - A new device server command line option (-file=<file name>) allowing\r
1271      a device server to run using a file to get/store properties instead of the\r
1272      database.\r
1273      \r
1274    - Four monitors per device in a server instead of one allowing a better \r
1275      concurrency model.\r
1276      \r
1277    - Auto tuning of the polling thread and configuration at device server\r
1278      startup time by a separate thread\r
1279    \r
1280 Small changes :\r
1281 ---------------\r
1283    - It now uses omniORB 4.0.5\r
1284    \r
1285    - Exception thrown if you subscribed two (or more) times to the same event.\r
1286    \r
1287    - AttributeProxy class constructor suppports attribute name syntax like\r
1288      "device alias/attribute name".\r
1289      \r
1290    - Added calls in Database and DeviceProxy classes to get alias name from\r
1291      device name.\r
1292      \r
1293    - It is now possible to defined command or attribute polling buffer depth\r
1294      individually.\r
1295      \r
1296    - Added copy constructor, assignement operator and destructor for the\r
1297      EventData class.\r
1298      \r
1299    - DeviceProxy and AttributeProxy classes constructor allow device or\r
1300      attribute name specified like "//host:port/....".\r
1301      \r
1302    - Added the "source" parameter value in device black box for command_inout\r
1303      and read_attribute calls.\r
1304      \r
1305    - Only one line stored in device black box for command_inout or\r
1306      read_attribute calls when used from IDL release 2 or 3.\r
1307      \r
1308    - When killing a device server, it now waits for last request to be ended.\r
1309    \r
1310    - Added insertor/extractor for Boolean type to the DbDatum class.\r
1311    \r
1312    - The admin device command "QueryDevice" now returns device name in the\r
1313      following syntax : <class name>::<device name>.\r
1314      \r
1315    - Add some methods in the DeviceDataHistory and DeviceAttributeHistory\r
1316      classes for compatibility reasons.\r
1317      \r
1318    - Added many new Attribute::set_date and Attribute::set_value_date_quality\r
1319      methods.\r
1320      \r
1321    - The dev_type of the info call in now a string instead of a numer.\r
1322    \r
1323    - Added DeviceClass methods to set/get the info device type field.\r
1324    \r
1325    - If a server is not able to connect to the notifd on its host, it now\r
1326      unexports its event channel from the database.\r
1327      \r
1328    - The event heartbeat is now manage in the polling thread as a separate\r
1329      object. This allows to have periodic event of any period even greater\r
1330      than 10 seconds.\r
1331      \r
1332    - DeviceProxy::subsribe_event now throws exception in case of change event\r
1333      without any related attribute configuration parameters set.\r
1334      \r
1335    - New construcor in TangoMonitor class with a name to ease debugging.\r
1336    \r
1337    - Device and class attribute properties can now be array. Needs\r
1338      datbase device server release 2.4.0 or above. Compatibility with\r
1339      older database release is supported.\r
1340      \r
1341    - Remove all direct access to database device in a server. Now, always\r
1342      uses method of the Database class.\r
1343      \r
1344    - Change library default value for attribute label and format configuration\r
1345      set.\r
1346      \r
1347    - By default, DeviceAttribute and DeviceData now throws exception if trying\r
1348      to extract data from empty instance.\r
1349      \r
1350    - WIN 32 specific : The polling thread uses WIndows Performance Counter to\r
1351      measure command or read attribute execution time\r
1354 Bug fixes :\r
1355 -----------\r
1357    - When getting attribute history from polling buffer and attribute has a\r
1358      quality factor set to ATTR_INVALID.\r
1359      \r
1360    - In the Database::get_class_property method. Could generate some strange\r
1361      "core dump/seg fault" in DeviceClass initialization.\r
1362      \r
1363    - In the admin device "DevRestart" command. The device name passed as\r
1364      parameter was still case dependant.\r
1365      \r
1366    - If date not set by the user, attribute date automatically set when\r
1367      attribute quality factor is ATTR_INVALID.\r
1368      \r
1369    - In the asynchronous PUSH_CALLBACK model. The callback thread ate all\r
1370      CPU power.\r
1371      \r
1372    - When inserting vector into DbDatum object. Still a stream problem.\r
1373    \r
1374    - Fix order in which device server classes are destroyed (opposite order\r
1375      than the one used during device server startup phase)\r
1376      \r
1377    - In Database::get_info() method for WIN32. A call to CORBA in() method\r
1378      was missing\r
1379      \r
1380    - In DeviceProxy::adm_name() method. It now returns full admin device name\r
1381      with host/port in case of non database device.\r
1382      \r
1383    - In device exit sequence if an exception was thrown during the \r
1384      Util::init method.\r
1385      \r
1386      \r
1389            *****************************************************\r
1390                *                                                   *\r
1391            *    Tango release 4.3 : Changes since version 4.2  *\r
1392                *                                                   *\r
1393                *****************************************************\r
1394                \r
1396 - Fix bug in server part which prevents a device server compiled with Tango\r
1397   release 4.2 to run using Tango 4.1 shared library\r
1400            *****************************************************\r
1401                *                                                   *\r
1402            *    Tango release 4.2 : Changes since version 4.1  *\r
1403                *                                                   *\r
1404                *****************************************************\r
1405                \r
1407 - Add full reconnection between clients/servers and the CORBA notification\r
1408   service daemon.\r
1410 - Add SA_RESTART flag when signals are installed in the operation system\r
1412 - DeviceImpl::get_db_device() method now throws exception in case of\r
1413   non database device\r
1415 - DeviceProxy constructor from string does not "lowercase" the passed string \r
1416   any more\r
1418 - Add a default setting for attribute quality factor at Attribute object \r
1419   creation time\r
1421 - Fix bug in event generation if device name stored in database contains upper \r
1422   case letters\r
1424 - Fix bug when reading attribute from CACHE and attribute quality factor set to\r
1425   INVALID\r
1427 - Fix bug when modifying attribute properties max_value, min_alarm or \r
1428   max_alarm without any change on the min_value property \r
1430 - Fix bug in read_attributes() call when source is not DEVICE and some of\r
1431   the device attributes/commands are polled and "AllAttr" used as attribute name\r
1433 - Windows service : Fix bug which prevents device server used as service\r
1434                     with polled attributes or commands to start correctly.\r
1437            *****************************************************\r
1438                *                                                   *\r
1439            *    Tango release 4.1 : Changes since version 4.0  *\r
1440                *                                                   *\r
1441                *****************************************************\r
1444 - Fix bug in some Database class methods when used with gcc 3.2\r
1446 - Remove unecessary call to "connect(this)" in DeviceProxy::unsubscribe_event()\r
1447   method\r
1449 - Fix bug if several strings used in the filter string(s) passed to the\r
1450   DeviceProxy::subscribe_event() method\r
1452 - Add a way to send command to the KeepAliveThread event thread\r
1453   This allows the ApiUtil::cleanup method to work properly\r
1455 - Fix bug in the change detection for change event when the attribute is\r
1456   a string\r
1458 - Add a call to the event callback for event when the client re-connect to a\r
1459   server which has been re-started\r
1461 - Change the order of include files in the master tango include file\r
1463 - Fix bug when defining attribute min_value, max_value, min_alarm or max_alarm\r
1464   in scientific notation for long attribute\r
1466 - Add a check on the exception minor code of the CORBA::IMP_LIMIT exception\r
1467   before adding error description in the exeception message\r
1469 - The Group::get_device() methods now throw an exception if the device is not\r
1470   reachable\r
1472 - Windows DLL : Don't ask anything to be done by "atexit" call due to a deadlock  in omniORB ORB shutdown in this case. \r
1474 - Windows DLL : Add some import/export declarartions.\r
1477            *****************************************************\r
1478                *                                                   *\r
1479            *    Tango release 4 : Changes since version 3.0.2  *\r
1480                *                                                   *\r
1481                *****************************************************\r
1484 - Added the event system\r
1486 - Added the Group class\r
1488 - Added the AttributeProxy class\r
1490 - It's now possible to have a Tango device server using the Tango lib as\r
1491   a Windows DLL\r
1493 - Doc and Tango WEB pages updated\r
1495 - Device destructor are now called when a device server exits\r
1497 - The library versionning now uses the classical way of doing\r
1499 - Fix memory leaks\r
1500         - In the Database::get_device_exported() call\r
1501         - In the DeviceProxy::is_polled() method if nothing is polled\r
1502         - In the DeviceProxy::command_inout_asyn() call using fire and\r
1503           forget mode\r
1504         - In the State command for devices with attributes with an alarm\r
1505           level set and with one of these attribute throwing exception \r
1506                                                         \r
1507 - The Win32 device server graphical window "Debug" menu has been updated to\r
1508   take logging into account\r
1510 - Added Attribute::set_write_value() methods\r
1512 - Clean-up the way a device server is killed. The "kill" command of the\r
1513   administration device will generate the Valgrind report file\r
1514   if the server is started using Valgrind. If you want to benefit from this\r
1515   change, add the Util::server_cleanup() call at the end of your device\r
1516   server main function. See Tango V4 doc chapter 8.4.6 for example.\r
1517           \r
1518 - Fix some gcc compiler warnings when used with its -Wall option\r
1520 - Fix bug in the DeviceProxy copy constructor and assignement operator\r
1522 - Change the way DeviceProxy::write_attribute() method is written\r
1524 - Added DeviceAttribute constructors from a "const char *"\r
1526 - Split all "str().c_str()" in a two lines code (for Win32 compiler)\r
1528 - Add a check on polling property number when server starts\r
1530 - Add a new command to the polling thread to kill it\r
1532 - Fix bug when updating (via set_attribute_config) attribute properties and\r
1533   the min_value attribute property was set to either "NaN" or "Not specified"\r
1534               \r
1535 - Device state switches to ALARM if one of the device attribute does not\r
1536   have alarm level defined but have its quality factor set to ALARM\r
1537                   \r
1538 - Fix bug in DeviceProxy::poll_command(const char *...) and in \r
1539   DeviceProxy::poll_attribute(const char *...)\r
1541 - Fix bug for device server started without database and a device name given\r
1542   on command line mixing upper and lower case letters\r
1543     \r
1544 - It's now possible to send command to the polling thread from itself\r
1546 - Added DeviceProxy::set_transparency_reconnection() and\r
1547   DeviceProxy::get_transparency_reconnection() methods to silently handle\r
1548   device reconnection\r
1549           \r
1550 - Added the ATTR_CHANGING attribute quality factor\r
1552 - In the BY_CLASS and BY_PROCESS device server process serialization model,\r
1553   the class (or process) monitor is taken during device(s) creation\r
1554               \r
1555 - Fix bug when inserting/extracting vector in a DbDatum object. This bug \r
1556   appaers only for vector with element of different size\r
1557   (for instance, a vector<double> with first element set to 1.2345 and the\r
1558   second element set to 2.3)\r
1559                       \r
1560 - Change in polling strategy:\r
1561   - Add a random number of milli seconds (between 0 and 500) before the first\r
1562     polling of each object (command or attribute) to be polled\r
1563                                       \r
1564   - Take command execution time into account in the "Data not updated since "\r
1565     polling status string\r
1569            *********************************************************\r
1570                *                                                       *\r
1571            *    Tango release 3.0.1 : Changes since version 3.0.0  *\r
1572                *                                                       *\r
1573                *********************************************************\r
1574                \r
1576 - C++ Tango now uses omniORB 4.0.1\r
1578 - C++ client classes : - Device timeout are back\r
1580                        - It is now possible to have several Tango database \r
1581                          servers within one control system \r
1583                        - Added some functions to easily print DeviceData,\r
1584                          DeviceDataHistory, DeviceAttribute and\r
1585                          DeviceAttributeHistory instances\r
1587                        - It is now possible to create a DeviceProxy instance\r
1588                          from the device alias name\r
1590                        - Command and Attribute names are case insensitive\r
1592                        - Change in parameters of some DeviceProxy class logging\r
1593                          methods\r
1595                        - Change in parameters of the DeviceProxy asynchronous\r
1596                          replies methods\r
1598                        - The asynchronous calls now support device_2 and device\r
1599                          IDL interfaces\r
1601                        - Bug fixes :\r
1602                                 - In reconnection algorithm\r
1603                                 - Memory leak in DeviceProxy constructor in case\r
1604                                   of device not defined in database\r
1606 - C++ server classes : - Attributes names are now stored in black-box\r
1608                        - Remove check if a class without any device defined in\r
1609                          database is embedded in a server\r
1611                        - Tango device server used as Win 2000 service does not\r
1612                          exit anymore at logoff\r
1614                        - Clarify message displayed when a server is not able to\r
1615                          connect to database\r
1617                        - New serialization model in device server\r
1619                        - Bug fixes :\r
1620                                 - No message when killing a DS with the admin\r
1621                                   device kill command (Solaris only)\r
1622                                 - Some DevVarStringArray element printing\r
1623                                   (Win32)\r
1624                                 - RestartServer admin command now start a thread\r
1625                                   to do its job\r
1626                                 - In polling thread for heavily loaded servers\r
1627                                   with command with a long response time\r
1630            *********************************************************\r
1631                *                                                       *\r
1632            *    Tango release 3.0.0 : Changes since version 2.2.0  *\r
1633                *                                                       *\r
1634                *********************************************************\r
1635                \r
1637 - C++ client classes : - Added asynchronous calls to execute commands, \r
1638                          read_attribute or write_attribute\r
1640                        - Added ApiUtil::cleanup method and destructors method\r
1642                        - Fix bug in the return value of the DeviceAttribute\r
1643                          class extraction methods when extracting data into\r
1644                          C++ vectors\r
1646 - C++ server classes : - Added logging features\r
1648                        - The client host name is now stored in the\r
1649                          device black-box\r
1651                        - Added three serialization models (by device, by class\r
1652                          and by  process)\r
1654                        - Change the way how TangoMonitor was implemented\r
1656                        - The "always_executed_hook" method is now also called\r
1657                          when getting the deice state or status as CORBA\r
1658                          attributes\r
1660                        - The date returned when reading attributes is now also\r
1661                          correct with Win32\r
1663 - All C++ classes : - Ported to gcc 3.2.x\r
1665                     - Some internal cleanups\r
1667 - Java server classes : - Minor bug fixes\r
1669 - Java client classes : - Added asynchronous calls to execute commands, \r
1670                           read_attribute or write_attribute\r
1673 Changes since version 2.1.2\r
1674 ---------------------------\r
1676 - C++ client classes : - Adapted to omniORB use\r
1678 - C++ server classes : - Adapted to omniORB use\r
1680                        - Add a new get_device_list() method in the Util class\r
1682                        - Modified the Util::get_class_list() method\r
1683                          in order to takes the DServer class into account\r
1685                        - Modified the Util::get_device_by_name() method\r
1686                          in order to takes the DServer device into account\r
1688                        - Modified the Util::get_device_list_by_class mrthod\r
1689                          to take into account the DServer device.\r
1691                        - Added a new parameter to the Attribute::set_value()\r
1692                          methods to ask CORBA to free memory allocated for \r
1693                          the attribute\r
1695 - Java server classes : - Adapted to JacORB use\r
1697 - Java client classes : - Adapted to JacORB use\r
1699                         - Update of the Database.delete_device_attribute_property\r
1700                           and Database.delete_class_attribute_property methods.\r
1702                         - Added a DeviceProxy.set_transparency_reconnection() and\r
1703                           DeviceProxy.get_transparency_reconnection() methods\r
1705                         - Added a -DTANGO_TIMEOUT option for client timeout on \r
1706                           the java interpreter command line\r
1708                         - Merge of the three Tango packages (Tango, TangoDs and\r
1709                           TangoApi) and the CORBA classes within the same\r
1710                           jar file called TangORB.jar\r
1712 Changes since version 2.1.1\r
1713 ---------------------------\r
1715 - C++ client classes : - Fix bug in data extraction from the DeviceAttribute \r
1716                          class when the read_attributes call was local to the\r
1717                          process\r
1719                        - Add re-connection to the set_timeout() DeviceProxy\r
1720                          class method\r
1722                        - Fix bug when device is marked as non-exported in the\r
1723                          database during DeviceProxy class constructor\r
1725 - C++ server classes : - Fix bug which allows concurrent access between state\r
1726                          or status when requested as CORBA attributes and\r
1727                          any commands or attributes\r
1729                        - Add a string with library release number called\r
1730                          "TgLibVers" (Also available for clients)\r
1732 Changes since version 2.1.0\r
1733 ---------------------------\r
1735 - C++ client classes : - Fix bug in DeviceProxy::write_attributes() method which\r
1736                          prevent writing more than one attribute in one call\r
1738 - C++ server classes : - Fix bug in polling algorithm. In some condition, the \r
1739                          polling thread enters an infinite loop.\r
1741                        - Fix bug for Win32 device when trying to set\r
1742                          attribute config\r
1744                        - Remove HP-UX specific code in source files\r
1747 Changes since version 2.0.2\r
1748 ---------------------------\r
1750 - C++ client classes : - Support all Tango device name syntax (using TANGO_HOST\r
1751                          environment variable, without environment variable but\r
1752                          with database server parameters specified in device \r
1753                          name and non database device)\r
1755                        - Database object managed as a singleton per control \r
1756                          system\r
1758                        - No more data copy during command_inout or\r
1759                          read_attribute calls\r
1761                        - Support all Tango device IDL interface release 2\r
1762                          features (data/attributes read from polling buffer,\r
1763                          commmand/attribute result history, polling related\r
1764                          methods added to the DeviceProxy class)\r
1766                        - Build an exception class hierarchy for exception \r
1767                          thrown by these classes\r
1769                        - Add management of device time-out\r
1771                        - Added some missing methods (copy constructor, \r
1772                          assignement operator...)\r
1774 - C++ server classes : - Kernel classes reference documentation now generated\r
1775                          using doxygen instead of doc++\r
1777                        - A little file added to the library which summarizes\r
1778                          version number. The RCS/CVS "ident" command will now\r
1779                          tells you that release library x.y.z is composed\r
1780                          by C++ client classes set release a.b and C++ server\r
1781                          classes set release c.d\r
1783                        - Fix incorrect field setting for DevFailed exception\r
1784                          re-thrown from a CORBA exception\r
1786                        - It's now not possible to poll the Init command\r
1788                        - It's now possible to define a default class doc. per \r
1789                          control system instance (using property)\r
1791                        - The test done to check if attribute value has been\r
1792                          set before it is returned to caller is done only if the\r
1793                          attribute quality is set to VALID\r
1795                        - The JTCInitialize object is now stored in the Util \r
1796                          class\r
1798                        - Windows : The Tango master include file (tango.h) now\r
1799                          also include winsock.h\r
1802 Changes since version 2.0.0\r
1803 ---------------------------\r
1805 - C++ client classes : - Fix bug in Database::delete_device_attribute_property()\r
1806                          method. This method now allows deleting device attribute\r
1807                          property for one device at a time\r
1809 - C++ server classes : - For writable attribute: When writing new value, the\r
1810                           check done between this new value and the attribute\r
1811                           property min_value or max_value is not strict anymore\r
1812                           (only < or > instead of <= or >=)\r
1814                         - It's now possible to reset an attribute property\r
1815                           value to its "unspecified value" by sending it the\r
1816                           "NaN" string.\r
1818                         - For attribute with a min_alarm or max_alarm property\r
1819                           defined : If the attribute quality factor is set to \r
1820                           INVALID, the attribute value will not be checked \r
1821                           against the alarm level during default state or status\r
1822                           command.\r
1824 Changes since version 1.6\r
1825 -------------------------\r
1827 - Supported OS :  - Suse 7.2 (and above) with gcc 2.95.3\r
1828                   - Solaris 7 with its Natif compiler (Forte C++ 6 Update 2)\r
1829                   - Windows NT with VC++ 6\r
1830                   Note that HP-UX is not supported any more and solaris with\r
1831                   gcc also (Waiting for gcc 3.1) \r
1832                   \r
1833 - ORB : ORBacus 4.1.1 is used (All OS)\r
1835 - C++ client classes : - More insertors and extractors operators in the \r
1836                          DeviceData class\r
1837                          \r
1838                        - Added support for attributes\r
1839                        \r
1840                        - Minor changes for compatibility with the Java classes\r
1841                          client set\r
1842                    \r
1843 - C++ server classes : - A polling thread is created within each device server\r
1844                          (See documentation for all details about polling)\r
1845                          \r
1846                        - The documentation has been re-organized\r
1847                        \r
1848                        - A full library versionning is used\r
1849                        \r
1850                        - Implemented commands name do not start with Devxxx\r
1851                          (DevState is now State, DevStatus is Status...)\r
1852                          \r
1853                        - Option -h,-?,-help for each device server\r
1854                        \r
1855                        - Command name, attribute name and device server name are\r
1856                          now case sensitive name\r
1857                          \r
1858                        - The POA Manager is now activated earlier in server\r
1859                          startup sequence allowing command_inout call in the\r
1860                          init_device method\r
1861                          \r
1862                        - A new Init command automatically added to all devices\r
1863                          (like the State and Status command)\r
1864                          \r
1865                        - No more exception when the list of supported attributes\r
1866                          is requested to a device without attribute. The\r
1867                          sequence length is set to 0.\r
1868                          \r
1869                        - The always_executed_hook method is now executed once\r
1870                          during the read_attributes and write_attributes CORBA\r
1871                          calls\r
1872                          \r
1873                        - The default class documentation URL has been modified\r
1874                          and it is now possible to define one default value per\r
1875                          Tango control system installation\r
1876                          \r
1877                        - The -d option for Tango device server used as Windows\r
1878                          service is now replaced by a -dbg option\r
1879                          \r
1880                        - Fix bug which could prevent a Tango device server used\r
1881                          as Windows service to start\r
1885 Changes since version 1.5\r
1886 -------------------------\r
1888 - DS API : Fix bug in the DeviceImpl class add_attribute() method\r
1890 - DS API : Command and attributes now support a command display types. This is\r
1891            used by the future Tango Application Toolkit for generic display\r
1892            software\r
1894 - DS API : Now, with two new options (-nodb and -dlist), it is possible to run a\r
1895            Tango device server without a database server. Obviously, some Tango\r
1896            device server features are lost if these options are used (See doc\r
1897            for more details)\r
1899 - DS API : Windows NT specific :\r
1900           - To use the operator between sequence and vector, it is now necessary\r
1901             to add a "using namespace Tango;" line in your source code\r
1902           - A window is now displayed if device creation failed\r
1903           - Tango has been generated as a DLL. \r
1904             WARNING : This is only for client. Some work is still necessary \r
1905             for server.\r
1907 - DB and DEV API : Re-connection now fully operational\r
1909 - DB and DEV API : Correct management of exception.\r
1911 - Java specific\r
1912 ---------------\r
1915 - DSAPI : Change the db call used to get device server class list to\r
1916           DbGetDserverClassList\r
1918 - DEV API : Add attribute management\r
1920 Changes since version 1.4\r
1921 -------------------------\r
1923 - Client API classes added to the library\r
1925 - New re_throw_exception() methods in the Except class\r
1927 - Read_attributes now support "AllAttr" as attribute name to read all \r
1928   attributes value within a single call\r
1930 - Add a add_attribute() method to the DeviceImpl class to dynamically\r
1931   add attribute to the device attribute list\r
1933 - New way to define attribute properties\r
1934     1 - From a Tango lib default value (lowest priority)\r
1935     2 - From user default value (with a new class called UserDefaultAttrProp)\r
1936     3 - From the database (highest priority)\r
1938 - A new "pattern" to prevent full re-compile of C++ servers when new data\r
1939   members are added to classes used by programmer\r
1941 - For multi-classes device server, it is now possible to use the\r
1942   Util::get_device_by_name() method in the device constructor\r
1944 - Added "<<" operator overloading functions between DevVarxxxArray\r
1945   types and C++ vector\r
1947 - Added "<<" operator overloading functions between DevVarxxxArray types\r
1948   and ostream (for easy printing)\r
1950 - Correct print of exception data members when device constructor throw\r
1951   exception during device server startup sequence\r
1953 Changes since version 1.3\r
1954 -------------------------\r
1956 - Fix bug in the Tango::DServer::restart() method preventing a correct device\r
1957   restart\r
1958   \r
1959 - Fix a bug in the Tango::Util::get_device_by_name() method preventing the\r
1960   method to find the correct device in the device server device list\r
1962 Changes since version 1.2\r
1963 -------------------------\r
1965 - The Tango lib now include the user classes to easily access the Tango\r
1966   database\r
1968 - For linux : Add the possibility to have the signal handler executed in the\r
1969   calling thread (instead of the signal management thread)\r
1970   \r
1971 - For linux : Change the way how a server is killed in order to also destroy\r
1972   user thread(s)\r
1973   \r
1974 - Add a new CORBA attribute in the Tango IDL definition to retrieve the name\r
1975   of the administration device associated to the server hosting the device\r
1976   \r
1977 - Change the DevRestart command philosophy. It is not any more a command \r
1978   automatically added to every device but a command on the device server\r
1979   administration device (with device name to be restarted as input parameter).\r
1980   A command to restart the whole device server has also been added to this \r
1981   administration device.\r
1982   \r
1983 Changes since version 1.1\r
1984 -------------------------\r
1986 - Fix bug in the Tango::MultiClassAttribute::init_class_attributes() method\r
1988 - Remove database specific error codes\r
1990 Changes since the Tango alpha release (installed as version 1.1)\r
1991 ----------------------------------------------------------------\r
1993 - Support CORBA 2.3\r
1995 - Everything in a Tango namespace (C++ specific)\r
1997 - Remove all assert from library (C++ specific)\r
1999 - Main attributes properties (format, type, name..) now hard-coded in user\r
2000   code\r
2001   \r
2002 - Change in the DevFailed exception definition\r
2004 - Complete new handling of signals. Now, all servers are automatically threaded\r
2005   and one thread is dedicated to signal handling. This allow user code to\r
2006   do what they want in signal handler\r
2007   \r
2008 - All exceptions related methods are now grouped in a "Except" class\r
2010 - New method to generate DevFailed exception from a CORBA exception\r
2012 - Change name of the main include file (tango.h instead of tango_ds.h)\r
2014 - DevRestart now delete and completely re-create device. The client has to\r
2015   reconnect.\r
2016   \r
2017 - Server can start even if the database server is not there (for the starter\r
2018   device server)\r
2019   \r
2020 - Include and lib directories re-organized\r
2022 - Tango device server running on NT may now run as NT service\r
2024 - Add a completely new graphical user interface for device server running on\r
2025   Windows NT\r