* update the changelog
[tango.git] / TANGO_CHANGES
blobaf29525830afe4b3814e21cd8f17a62011644d21
1 TANGO history file\r
2                *******************************************************\r
3                *                                                         *\r
4                *  Tango release 6.1.1 : Changes since version 6.0.0  *\r
5                *                                                     *\r
6                *******************************************************\r
7 - Bug fixes:\r
8         - Compatibility problem between release 6.0 and 6.1\r
9 \r
11                *******************************************************\r
12                *                                                     *\r
13                *  Tango release 6.1.0 : Changes since version 6.0.0  *\r
14                *                                                     *\r
15                *******************************************************\r
16                            \r
17 - Stateless event subscription : an event subscription is possible now, \r
18   even when the device server is not running. The subscribe_event method \r
19   takes a new boolean parameter to trigger stateless event subscription.\r
20   \r
21 - Attribute::set_write_value methods have been added for spectrum and image\r
22   data types.\r
23   \r
24 - Added extratction methods to DeviceAttribute to individually extract\r
25   read and set point values. Added methods to read the data dimensions \r
26   which are compatible with the Java API.\r
27   \r
28 - Ported to MacOSX\r
30 - Class dlls for Windows can be created and can be used as for UNIX now.\r
32 - Device server now uses a database cache to get all their data during \r
33   their starting sequence. This cache is filled in by a new Database server\r
34   command and destroyed at the end of the startup sequence. When possible, all\r
35   data are fetched from this cache instead of from the database.\r
36   If it is not possible to fill in this cache for any reason, the device server\r
37   process starts using the traditional way.\r
39 - Optimize network calls during connection establishment between client and server\r
41 - Implement a new timeout management for database object access. The timeout\r
42   used has a different value when the device server is in its starting phase\r
44 - Automatic management of a TCP connection establishment timeout for the\r
45   database object\r
47 - Add new Database class methods to interface the two new database server\r
48   commands (DbGetDataForServerCache and DbDeleteAllDeviceAttributeProperty)\r
50 - Change the way the DB is cleanup up due to dynamic attribute deletion\r
51   during device server shutdown\r
53 - Default value for the "doc_url" part of the info() network call changed\r
54   to "http://www.tango-controls.org"\r
56 - Add new methods allowing a better way to set the CVS tag and CVS location\r
57   info returned by the info() network call\r
59 - Add 2 new Attribute::set_properties() methods which can be used in a Tango class\r
60   init_device() method\r
63 - Bug fixes:  \r
64         - Solved deadlock when subscribing events from different threads.\r
65         - Initialisation of memorized attributes during the init command.\r
66         - Correction of client and server shutdown procedures when using \r
67           the event client part.\r
68         - Corrected the event synchronisation when a client is using another\r
69           threading package than omnithreads.\r
70         - Fix client multi-threading issue when a CORBA exception was received during\r
71           a re-connection\r
72         - Name letters case bug in polling thread command and in polled objects\r
73       name stored in database\r
74         - One re-connection case was not "transparent"\r
75         - Clarify some exception messages\r
76         - Polling thread synchronisation bug for internal commands start-polling, stop-polling\r
77           and rem-obj-polling\r
78         - Bug in the admin device RemObjPolling command related to polling\r
79           properties management (When the removed object was last polled object)\r
80         - Bug in asynchronous call in PUSH_CALLBACK mode when used intensively\r
81         - Polling configuration mismatch after an Init command on the admin device\r
82         - The DbGetDeviceList database command now has the same wildcard for its two \r
83           parameters ("*")\r
84         - Bug in the remote "info" call for devices implementing IDL3\r
85           (missing CVS Tag and CVS location)\r
86         - Bug when getting the State history using the command_history() calls\r
87         - Windows specific: Device server configured as "daemon" correctly starts on\r
88           a windows host with netowrk connection unavailable when the DS starts\r
91                *****************************************************\r
92                *                                                   *\r
93                *  Tango release 6.0 : Changes since version 5.5.2  *\r
94                *                                                   *\r
95                *****************************************************\r
96 - Ported to OmniORB 4.1, which is a major release of omniORB and\r
97   changes the generated code from the IDL.\r
98   \r
99 - Ported to 64 bit architectures (Linux and Windows (x64))\r
102 - Add an attribute configuration event which is pushed every time an \r
103   attribute property changes. This allows to synchronize all client \r
104   displays of an attribute.\r
105   \r
106 - Added new filterable fields "quality" and "delta-t" (sine last archive_event) \r
107   to the archive event\r
108   \r
109 - Events with quality invalid are only send once as long as the quality\r
110   stays invalid.\r
111   \r
112 - Events with exceptions are only send once as long as the exception does\r
113   not change.\r
114   \r
115 - Modified the synchronisation between the event consumer and the keep \r
116   alive thread.\r
117   Exchanged the global mutexes on the channel and the callback maps \r
118   by individual monitors for every channel and every callback. \r
119   The monitor can time-out and will not block the event reception \r
120   for a long time in case of problems.\r
121   To synchronise with subscribe or unsubscribe requests, added a \r
122   global reader writer lock around the two maps.\r
123   The subscribe thread is the writer and the event consumer and the keep \r
124   alive thread are the readers.\r
126 - When removing dynamic attributes all their configuration will be deleted\r
127   now from the database. Polling configuration and event configuration\r
128   properties will be deleted.\r
129   \r
130 - Events are available for devices servers running with a file database\r
131   or without database. \r
132   \r
133 - Filling polling buffer using Util::fill_attr_polling_buffer() now \r
134   possible also for R/W attribute\r
135   \r
136 - Add get/set min/max_value methods family in the WAttribute class  \r
137  \r
139 - A bunch of new methods was added to the C++ database API to implement\r
140   the same functionality as the Java database API.\r
141   get_host_list, get_services, register_service, unregister_service,\r
142   get_class_for_device, get_class_inheritance_for_device,\r
143   get_device_exported_for_class, put_device_alias, delete_device_alias,\r
144   put_server_info, delete_server_info, get_server_class_list,\r
145   get_server_name_list, get_instance_name_list, get_server_list,\r
146   get_host_server_list, get_device_class_list, get_device_property_history,\r
147   get_device_property_list, get_device_attribute_property_history,\r
148   get_class_property_history, get_class_list, get_class_property_list,\r
149   get_class_attribute_property_history, get_class_attribute_list,\r
150   get_attribute_alias, put_attribute_alias, ...\r
151  \r
152   \r
153 - Methods to change timeouts for groups (common or individual)  \r
155 - New Util::get_tango_lib_release() method\r
157 - Add the DeviceClass::device_destoyer() method (opposite of the \r
158   device_factory)\r
159   \r
160 - The polling thread is now configured without creating a separate thread \r
161   (new argument in its ADD_OBJ_POLLING command)\r
163 - Add omni_thread::ensure_self object in AutoTangoMonitor and \r
164   NoSyncModelTangoMonitor classes in order to use these objects in \r
165   threads not created by omni_thread (Python thread for instance)\r
166   \r
167 - Add device name in Tango monitor print messages\r
169 - MAX_TRANSFER_SIZE is now 256 Mbytes\r
170  \r
171 - Removed all #ifdef for HP-aCC compiler\r
173 - The Tango database server do not use the root account for MySQL any\r
174   more. You can configure any account to be used via the my.cnf \r
175   configuration files or via the environment variables MYSQL_USER and\r
176   MYSQL_PASSWORD.\r
180 - Bug fixes:\r
181         - Polling did not restart correctly after an Init command on a device\r
182           server admin device\r
184         - Bug in re-connection after a device server admin device Init, Restart or \r
185           Devrestart command  \r
187         - Two small memory leaks when dealing with dynamic attributes\r
189         - Admin device did not handle device alias in its DevPollStatus command\r
191         - Bug in add_attribute() method if you try to add an attribute with the \r
192           same name but a different definition (different data type, data \r
193           format, ...)\r
194           \r
195         - Several bugs when removing dynamic attributes\r
197         - Bug when removing a CORBA servant for non-exported device\r
199         - Bug in Util::get_device_list_by_class() in some specific cases\r
201         - Bug in the forced event without criteria checking. Some flag init. \r
202           was missing\r
204         - Bug in re-connection in case of asynchronous call\r
206         - Bug in the subsribe_event() method when the DeviceProxy has been \r
207           created using a syntax like "host:port/a/b/c" with host and port not \r
208           the same than the one defined by the TANGO_HOST environment variable\r
210         - In the case of a too long delivery time for events the notifd closes\r
211           the connection to a client. Now this case is detected in the client \r
212           and the client will reconnect. \r
215                *****************************************************\r
216                *                                                   *\r
217                *  Tango release 5.5.2 : Changes since version 5.5  *\r
218                *                                                   *\r
219                *****************************************************\r
220 - Contains a new version of the Tango database which keeps a history\r
221   of the last changes for every property. This needs the creation of\r
222   new tables in MySQL and a new database server.\r
223   \r
224 - Corrected the reconnection to the notification daemon in the case of\r
225   network cuts.\r
226 - Increased the maximum data size to be transferred between server and \r
227   client from 8Mbytes to 16Mbytes.\r
228 - Since release 5.5 a server under windows could no longer be installed \r
229   as a windows service. Corrected the problem.\r
232                *****************************************************\r
233                *                                                   *\r
234                *    Tango release 5.5 : Changes since version 5.4  *\r
235                *                                                   *\r
236                *****************************************************\r
238 - Change and archive Events can be pushed manually from the code now \r
239   without polling. Two ways are possible:\r
240   1.) Push events but check the event configuration \r
241      (as the polling thread). Events are fired exactly under the\r
242           same conditions as with the polling.\r
243   2.) Push events without configuration check. \r
244       The event is fired without any value checking.\r
245 - The quality event was removed and integrated as filter "quality"\r
246   to the change event.\r
247   \r
248 - The user event was adapted to follow the structure of pushing \r
249   change or archive events.\r
250   \r
251 - Event reconnection will follow now when a server was moved to a\r
252   different host. The connection will be rebuild to the new notifd.\r
253   \r
254 - Polling configuration for attributes and commands specified in \r
255   the code with Pogo are written to the database at server start-up.\r
256   The polling will start immediately and no longer on a first reading\r
257   request.\r
258   \r
259 - The transparent reconnection is now the default reconnection mode.\r
261 - Naming requests to the database are cached for a DeviceProxy.\r
262   A reconnection request will be emitted only once a second for a\r
263   DeviceProxy connection.\r
264   The same feature is implemented in the Java api.\r
265   \r
266 - Debugging is now possible with the Linux 2.6 kernel.\r
267 - Support of gcc 4.0\r
268 - Support of VC7 and VC8 under Windos.\r
269 - Integration of code for device servers written in Python.\r
271 - Bug fixes:\r
272         - Corrected event priod handling for periodic events.\r
273         - Corrected rounding errors when checking the conditions.\r
274           of change and archive events.\r
275         - Corrected constructor for the class GroupReply.\r
278                *****************************************************\r
279                *                                                   *\r
280                *    Tango release 5.4 : Changes since version 5.3  *\r
281                *                                                   *\r
282                *****************************************************\r
284 - Stopped the automatic polling startup of attributes at event subscription.\r
285   All polling has be be configured manually!\r
286   Subscription to events is only possible if the event properties\r
287   for an attribute are properly configured and the polling is started!\r
289 - An exception during initialisation of memorized attributes\r
290   will no longer result in an exit of the server.\r
292 - Memorized attributes can be used in two ways now.\r
293   1) The setpoint gets initialised during a server startup.\r
294      No write happens on the attribute.\r
295   2.) The setpoint gets initialised during a server startup\r
296       and is written to the attribute.\r
297       The initialisation mode can be triggered by\r
298       Attr::set_memorized_init(bool write_on_init) method\r
299       during attribute creation.\r
300       The two options are supported by Pogo.\r
302  - The archive event behavior has changed. The archive period\r
303    is no longer set to 10 seconds as default. If no period is\r
304    specified, no periodic archive event is send.\r
306 - Bug fixes:\r
307    - Corrected the wrong archive period reading after a\r
308      server restart.\r
310    - Changed DServerClass::instance() to return an exception\r
311      in the case of a not initialised object.\r
312      The exit() killed the server during a startup when\r
313      a client sends requests to early.\r
315    - Changed the clean-up mechanism when shutting down\r
316      the ORB. Destroy ORB when returning from run().\r
317      In 5.3 This was done in the main and when missing\r
318      caused some threads to hang-up with the Linux kernel\r
319      2.4.x.\r
321    - Avoid calling Device_3Impl::status2attr() during\r
322      attribute reading when an error was detected.\r
323      Avoids segmentation fault in status2attr(). \r
326                *****************************************************\r
327                *                                                   *\r
328                *    Tango release 5.3 : Changes since version 5.2  *\r
329                *                                                   *\r
330                *****************************************************\r
331                \r
333 - Fix bug in server part which prevents using object files compiled with \r
334   5.1 to link with 5.2\r
335 - Changed the clean-up mechanism when shutting down the ORB. \r
336   Destroy ORB when returning from run().\r
337 - Fix bug for reading and applying the period of archive events.\r
340   \r
342                *****************************************************\r
343                *                                                   *\r
344                *    Tango release 5.2 : Changes since version 5.1  *\r
345                *                                                   *\r
346                *****************************************************\r
349 Small changes :\r
350 ---------------\r
352    - Support for gcc 3.4.x compilers\r
354    - Support for Solaris computer with gcc (Compiled and Tested on Solaris 7 \r
355      with gcc 3.3.2 and Solaris 9 with gcc 3.3)\r
356      WARNING : The support of gcc on Solaris needs log4tango release 4.0.2\r
357      -------\r
359    - The host name stored in database is now the Fully Qualified Domain Name\r
360      WARNING : For those using events, you now need "notifd2db" release 1.4\r
361      -------\r
363    - Events are now available also for device server started with the\r
364      "-file" option. Needs "notifd2db" release 1.4\r
365      \r
366    - Added attribute quality change event firing by the Attribute::set_quality()\r
367      and Attribute::set_value_date_quality() methods via a new method argument\r
368      \r
369    - New method DeviceAttribute::get_type() and DeviceData::get_type()\r
370    \r
371    - Add a AttrManip class constructor from a C++ string\r
372    \r
373    - Add a DeviceImpl::remove_attribute() method\r
374    \r
375    - A new Tango::string_dup() method to replace the CORBA::string_dup()\r
377    - Management of two new class properties called "CVS_tag" and\r
378      "CVS_location"\r
379      \r
380    - Add a method Command::set_name()\r
381    \r
382    - Change parameters for omniORB server threading strategy. Server\r
383      switches from thread per client to thread pool at 50 connections and\r
384      max number of threads is now 100\r
385      \r
386    - When events are used, add a new error "API_PollThreadOutOfSync" if polling\r
387      thread discards work item because it is late.\r
388      \r
389    - Add two new commands in device server admin. device for device creation\r
390      wizard\r
391      \r
392    - Start a device server with "-v5" if you want to see Tango library messages.\r
393      The "-v4" now put only classical devices in DEBUG mode.\r
395 Bug fixes :\r
396 -----------\r
398    - Review exception thrown by the DeviceProxy::subscribe_event() and \r
399      DeviceProxy::unsubscribe_event()\r
400      \r
401    - No more "Class not initialised" at device server startup (It was a bug\r
402      introduced by V5)\r
403      \r
404    - Fix bug for device server started with the "-file" option in the\r
405      get device property and get class property features\r
406      \r
407    - No more "seg faults" in the DeviceAttribute::has_failed() method\r
408    \r
409    - For Solaris : Reset SIGINT and SIGQUIT signals handler to default value.\r
410    \r
411    - Fix deadlock in device server introduced in V5 in some specific cases\r
412      when device server manage device with commands or attribute polled\r
413      at startup and by first reading\r
414      \r
415    - Correctly initialise fileds "attr_name" and "event" in the EventData \r
416      structure passed to client when the event hartbeat is missing\r
417      \r
418    - Fix incoherency between C++ and Java API for the \r
419      Database::delete_device_attribute_proerty() and\r
420      Database::delete_class_attribute_property()\r
421      \r
422    - Fix bug which generates a "core dumped" when killing device server on\r
423      Debian Linux system\r
424      \r
425    - Fix bug in the archive event period returned to the client with the\r
426      get_attribute_config call\r
427      \r
428    - Fix bug in the date stored in Attribute history when using polling buffer\r
429      externally filled and exception\r
430      \r
431    - Fix bug in event reconnection (one attribute name was still case dependant)\r
432    \r
433    - Fix bug when asking polling thread to poll state or status attribute.\r
434      Polled them as attributes only for device server implementing IDL 3\r
435      \r
436    - Fix bug in device server startup phase for device server with polled\r
437      objects at startup and at first reading.\r
438      \r
439       \r
442                *****************************************************\r
443                *                                                   *\r
444                *    Tango release 5.1 : Changes since version 5.0  *\r
445                *                                                   *\r
446                *****************************************************\r
449 Small changes :\r
450 ---------------\r
452    - Remove device name from library default value from attribute label\r
453      property\r
454      \r
455    - An empty string for string attribute properties will now return\r
456      their values to the default one (from lib or from a user defined one)\r
457      \r
458    - Some improvements in error management when parsing database file with\r
459      the device server -file option\r
461 Bug fixes :\r
462 -----------\r
464    - Fix bug when setting R/W attribute write value with the\r
465      WAttribute::set_write_value() method in device server startup phase\r
466      \r
467    - Fix bug when polling a Device_2Impl device's attribute which throws\r
468      an exception (crashed the device server)\r
469      \r
470    - Library default value for the attribute label property not stored in\r
471      database any more\r
472      \r
473    - Fix bug in Database::get_class_attribute_property() and\r
474      Database::get_device_attribute_property(). Could generate stange behaviour\r
475      (even core dumped) when reading attribute configuration on a Device_2Impl\r
476      device or when creating on AttributeProxy object on a Device_2Impl\r
477      \r
478    - Fix bug when reading R/W Device_2Impl attribute. The  last written value\r
479       was always 0.\r
480       \r
481    - Fix bug which crashes a device server when a client linked with Tango V4\r
482      tryed to get attribute history from a Device_3Impl\r
483      \r
484    - Fix some tables in the HTML doc which appears with only one row.\r
485  \r
486  \r
487  \r
488  \r
489                *****************************************************\r
490                *                                                   *\r
491                *    Tango release 5 : Changes since version 4.3    *\r
492                *                                                   *\r
493                *****************************************************\r
496 Main changes :\r
497 --------------\r
499    - A new way to code attribute inside a device server.\r
501    - It is now possible to read several attributes with the read_attributes\r
502      call even if one of them failed.\r
503      \r
504    - It is now possible to write several attributes with the write_attributes\r
505      call even if one of them failed.\r
506      \r
507    - Four new attribute data type which are : Boolean, float, unsigned char and\r
508      unsigned short.\r
509      \r
510    - It now supports image and spectrum attributes as READ_WRITE or\r
511       READ_WITH_WRITE attribute.\r
512       \r
513    - Device state and status can be read as attributes.\r
514       \r
515    - Added memorized attributes (only for scalar attribute).\r
516    \r
517    - Each attributes now support a four thresholds level alarm (instead of two)\r
518    \r
519    - Each attribute implements a Read Different than Set (RDS) alarms.\r
520    \r
521    - New attribute configuration set (including alarm and event parameters).\r
523    - External triggering of the polling thread.\r
524    \r
525    - Add methods to set the attribute or command polling buffer.\r
526    \r
527    - A new device server command line option (-file=<file name>) allowing\r
528      a device server to run using a file to get/store properties instead of the\r
529      database.\r
530      \r
531    - Four monitors per device in a server instead of one allowing a better \r
532      concurrency model.\r
533      \r
534    - Auto tuning of the polling thread and configuration at device server\r
535      startup time by a separate thread\r
536    \r
537 Small changes :\r
538 ---------------\r
540    - It now uses omniORB 4.0.5\r
541    \r
542    - Exception thrown if you subscribed two (or more) times to the same event.\r
543    \r
544    - AttributeProxy class constructor suppports attribute name syntax like\r
545      "device alias/attribute name".\r
546      \r
547    - Added calls in Database and DeviceProxy classes to get alias name from\r
548      device name.\r
549      \r
550    - It is now possible to defined command or attribute polling buffer depth\r
551      individually.\r
552      \r
553    - Added copy constructor, assignement operator and destructor for the\r
554      EventData class.\r
555      \r
556    - DeviceProxy and AttributeProxy classes constructor allow device or\r
557      attribute name specified like "//host:port/....".\r
558      \r
559    - Added the "source" parameter value in device black box for command_inout\r
560      and read_attribute calls.\r
561      \r
562    - Only one line stored in device black box for command_inout or\r
563      read_attribute calls when used from IDL release 2 or 3.\r
564      \r
565    - When killing a device server, it now waits for last request to be ended.\r
566    \r
567    - Added insertor/extractor for Boolean type to the DbDatum class.\r
568    \r
569    - The admin device command "QueryDevice" now returns device name in the\r
570      following syntax : <class name>::<device name>.\r
571      \r
572    - Add some methods in the DeviceDataHistory and DeviceAttributeHistory\r
573      classes for compatibility reasons.\r
574      \r
575    - Added many new Attribute::set_date and Attribute::set_value_date_quality\r
576      methods.\r
577      \r
578    - The dev_type of the info call in now a string instead of a numer.\r
579    \r
580    - Added DeviceClass methods to set/get the info device type field.\r
581    \r
582    - If a server is not able to connect to the notifd on its host, it now\r
583      unexports its event channel from the database.\r
584      \r
585    - The event heartbeat is now manage in the polling thread as a separate\r
586      object. This allows to have periodic event of any period even greater\r
587      than 10 seconds.\r
588      \r
589    - DeviceProxy::subsribe_event now throws exception in case of change event\r
590      without any related attribute configuration parameters set.\r
591      \r
592    - New construcor in TangoMonitor class with a name to ease debugging.\r
593    \r
594    - Device and class attribute properties can now be array. Needs\r
595      datbase device server release 2.4.0 or above. Compatibility with\r
596      older database release is supported.\r
597      \r
598    - Remove all direct access to database device in a server. Now, always\r
599      uses method of the Database class.\r
600      \r
601    - Change library default value for attribute label and format configuration\r
602      set.\r
603      \r
604    - By default, DeviceAttribute and DeviceData now throws exception if trying\r
605      to extract data from empty instance.\r
606      \r
607    - WIN 32 specific : The polling thread uses WIndows Performance Counter to\r
608      measure command or read attribute execution time\r
611 Bug fixes :\r
612 -----------\r
614    - When getting attribute history from polling buffer and attribute has a\r
615      quality factor set to ATTR_INVALID.\r
616      \r
617    - In the Database::get_class_property method. Could generate some strange\r
618      "core dump/seg fault" in DeviceClass initialization.\r
619      \r
620    - In the admin device "DevRestart" command. The device name passed as\r
621      parameter was still case dependant.\r
622      \r
623    - If date not set by the user, attribute date automatically set when\r
624      attribute quality factor is ATTR_INVALID.\r
625      \r
626    - In the asynchronous PUSH_CALLBACK model. The callback thread ate all\r
627      CPU power.\r
628      \r
629    - When inserting vector into DbDatum object. Still a stream problem.\r
630    \r
631    - Fix order in which device server classes are destroyed (opposite order\r
632      than the one used during device server startup phase)\r
633      \r
634    - In Database::get_info() method for WIN32. A call to CORBA in() method\r
635      was missing\r
636      \r
637    - In DeviceProxy::adm_name() method. It now returns full admin device name\r
638      with host/port in case of non database device.\r
639      \r
640    - In device exit sequence if an exception was thrown during the \r
641      Util::init method.\r
642      \r
643      \r
646                *****************************************************\r
647                *                                                   *\r
648                *    Tango release 4.3 : Changes since version 4.2  *\r
649                *                                                   *\r
650                *****************************************************\r
651                \r
653 - Fix bug in server part which prevents a device server compiled with Tango\r
654   release 4.2 to run using Tango 4.1 shared library\r
657                *****************************************************\r
658                *                                                   *\r
659                *    Tango release 4.2 : Changes since version 4.1  *\r
660                *                                                   *\r
661                *****************************************************\r
662                \r
664 - Add full reconnection between clients/servers and the CORBA notification\r
665   service daemon.\r
667 - Add SA_RESTART flag when signals are installed in the operation system\r
669 - DeviceImpl::get_db_device() method now throws exception in case of\r
670   non database device\r
672 - DeviceProxy constructor from string does not "lowercase" the passed string \r
673   any more\r
675 - Add a default setting for attribute quality factor at Attribute object \r
676   creation time\r
678 - Fix bug in event generation if device name stored in database contains upper \r
679   case letters\r
681 - Fix bug when reading attribute from CACHE and attribute quality factor set to\r
682   INVALID\r
684 - Fix bug when modifying attribute properties max_value, min_alarm or \r
685   max_alarm without any change on the min_value property \r
687 - Fix bug in read_attributes() call when source is not DEVICE and some of\r
688   the device attributes/commands are polled and "AllAttr" used as attribute name\r
690 - Windows service : Fix bug which prevents device server used as service\r
691                     with polled attributes or commands to start correctly.\r
694                *****************************************************\r
695                *                                                   *\r
696                *    Tango release 4.1 : Changes since version 4.0  *\r
697                *                                                   *\r
698                *****************************************************\r
701 - Fix bug in some Database class methods when used with gcc 3.2\r
703 - Remove unecessary call to "connect(this)" in DeviceProxy::unsubscribe_event()\r
704   method\r
706 - Fix bug if several strings used in the filter string(s) passed to the\r
707   DeviceProxy::subscribe_event() method\r
709 - Add a way to send command to the KeepAliveThread event thread\r
710   This allows the ApiUtil::cleanup method to work properly\r
712 - Fix bug in the change detection for change event when the attribute is\r
713   a string\r
715 - Add a call to the event callback for event when the client re-connect to a\r
716   server which has been re-started\r
718 - Change the order of include files in the master tango include file\r
720 - Fix bug when defining attribute min_value, max_value, min_alarm or max_alarm\r
721   in scientific notation for long attribute\r
723 - Add a check on the exception minor code of the CORBA::IMP_LIMIT exception\r
724   before adding error description in the exeception message\r
726 - The Group::get_device() methods now throw an exception if the device is not\r
727   reachable\r
729 - Windows DLL : Don't ask anything to be done by "atexit" call due to a deadlock  in omniORB ORB shutdown in this case. \r
731 - Windows DLL : Add some import/export declarartions.\r
734                *****************************************************\r
735                *                                                   *\r
736                *    Tango release 4 : Changes since version 3.0.2  *\r
737                *                                                   *\r
738                *****************************************************\r
741 - Added the event system\r
743 - Added the Group class\r
745 - Added the AttributeProxy class\r
747 - It's now possible to have a Tango device server using the Tango lib as\r
748   a Windows DLL\r
750 - Doc and Tango WEB pages updated\r
752 - Device destructor are now called when a device server exits\r
754 - The library versionning now uses the classical way of doing\r
756 - Fix memory leaks\r
757         - In the Database::get_device_exported() call\r
758         - In the DeviceProxy::is_polled() method if nothing is polled\r
759         - In the DeviceProxy::command_inout_asyn() call using fire and\r
760           forget mode\r
761         - In the State command for devices with attributes with an alarm\r
762           level set and with one of these attribute throwing exception \r
763                                                         \r
764 - The Win32 device server graphical window "Debug" menu has been updated to\r
765   take logging into account\r
767 - Added Attribute::set_write_value() methods\r
769 - Clean-up the way a device server is killed. The "kill" command of the\r
770   administration device will generate the Valgrind report file\r
771   if the server is started using Valgrind. If you want to benefit from this\r
772   change, add the Util::server_cleanup() call at the end of your device\r
773   server main function. See Tango V4 doc chapter 8.4.6 for example.\r
774           \r
775 - Fix some gcc compiler warnings when used with its -Wall option\r
777 - Fix bug in the DeviceProxy copy constructor and assignement operator\r
779 - Change the way DeviceProxy::write_attribute() method is written\r
781 - Added DeviceAttribute constructors from a "const char *"\r
783 - Split all "str().c_str()" in a two lines code (for Win32 compiler)\r
785 - Add a check on polling property number when server starts\r
787 - Add a new command to the polling thread to kill it\r
789 - Fix bug when updating (via set_attribute_config) attribute properties and\r
790   the min_value attribute property was set to either "NaN" or "Not specified"\r
791               \r
792 - Device state switches to ALARM if one of the device attribute does not\r
793   have alarm level defined but have its quality factor set to ALARM\r
794                   \r
795 - Fix bug in DeviceProxy::poll_command(const char *...) and in \r
796   DeviceProxy::poll_attribute(const char *...)\r
798 - Fix bug for device server started without database and a device name given\r
799   on command line mixing upper and lower case letters\r
800     \r
801 - It's now possible to send command to the polling thread from itself\r
803 - Added DeviceProxy::set_transparency_reconnection() and\r
804   DeviceProxy::get_transparency_reconnection() methods to silently handle\r
805   device reconnection\r
806           \r
807 - Added the ATTR_CHANGING attribute quality factor\r
809 - In the BY_CLASS and BY_PROCESS device server process serialization model,\r
810   the class (or process) monitor is taken during device(s) creation\r
811               \r
812 - Fix bug when inserting/extracting vector in a DbDatum object. This bug \r
813   appaers only for vector with element of different size\r
814   (for instance, a vector<double> with first element set to 1.2345 and the\r
815   second element set to 2.3)\r
816                       \r
817 - Change in polling strategy:\r
818   - Add a random number of milli seconds (between 0 and 500) before the first\r
819     polling of each object (command or attribute) to be polled\r
820                                       \r
821   - Take command execution time into account in the "Data not updated since "\r
822     polling status string\r
826                *********************************************************\r
827                *                                                       *\r
828                *    Tango release 3.0.1 : Changes since version 3.0.0  *\r
829                *                                                       *\r
830                *********************************************************\r
831                \r
833 - C++ Tango now uses omniORB 4.0.1\r
835 - C++ client classes : - Device timeout are back\r
837                        - It is now possible to have several Tango database \r
838                          servers within one control system \r
840                        - Added some functions to easily print DeviceData,\r
841                          DeviceDataHistory, DeviceAttribute and\r
842                          DeviceAttributeHistory instances\r
844                        - It is now possible to create a DeviceProxy instance\r
845                          from the device alias name\r
847                        - Command and Attribute names are case insensitive\r
849                        - Change in parameters of some DeviceProxy class logging\r
850                          methods\r
852                        - Change in parameters of the DeviceProxy asynchronous\r
853                          replies methods\r
855                        - The asynchronous calls now support device_2 and device\r
856                          IDL interfaces\r
858                        - Bug fixes :\r
859                                 - In reconnection algorithm\r
860                                 - Memory leak in DeviceProxy constructor in case\r
861                                   of device not defined in database\r
863 - C++ server classes : - Attributes names are now stored in black-box\r
865                        - Remove check if a class without any device defined in\r
866                          database is embedded in a server\r
868                        - Tango device server used as Win 2000 service does not\r
869                          exit anymore at logoff\r
871                        - Clarify message displayed when a server is not able to\r
872                          connect to database\r
874                        - New serialization model in device server\r
876                        - Bug fixes :\r
877                                 - No message when killing a DS with the admin\r
878                                   device kill command (Solaris only)\r
879                                 - Some DevVarStringArray element printing\r
880                                   (Win32)\r
881                                 - RestartServer admin command now start a thread\r
882                                   to do its job\r
883                                 - In polling thread for heavily loaded servers\r
884                                   with command with a long response time\r
887                *********************************************************\r
888                *                                                       *\r
889                *    Tango release 3.0.0 : Changes since version 2.2.0  *\r
890                *                                                       *\r
891                *********************************************************\r
892                \r
894 - C++ client classes : - Added asynchronous calls to execute commands, \r
895                          read_attribute or write_attribute\r
897                        - Added ApiUtil::cleanup method and destructors method\r
899                        - Fix bug in the return value of the DeviceAttribute\r
900                          class extraction methods when extracting data into\r
901                          C++ vectors\r
903 - C++ server classes : - Added logging features\r
905                        - The client host name is now stored in the\r
906                          device black-box\r
908                        - Added three serialization models (by device, by class\r
909                          and by  process)\r
911                        - Change the way how TangoMonitor was implemented\r
913                        - The "always_executed_hook" method is now also called\r
914                          when getting the deice state or status as CORBA\r
915                          attributes\r
917                        - The date returned when reading attributes is now also\r
918                          correct with Win32\r
920 - All C++ classes : - Ported to gcc 3.2.x\r
922                     - Some internal cleanups\r
924 - Java server classes : - Minor bug fixes\r
926 - Java client classes : - Added asynchronous calls to execute commands, \r
927                           read_attribute or write_attribute\r
930 Changes since version 2.1.2\r
931 ---------------------------\r
933 - C++ client classes : - Adapted to omniORB use\r
935 - C++ server classes : - Adapted to omniORB use\r
937                        - Add a new get_device_list() method in the Util class\r
939                        - Modified the Util::get_class_list() method\r
940                          in order to takes the DServer class into account\r
942                        - Modified the Util::get_device_by_name() method\r
943                          in order to takes the DServer device into account\r
945                        - Modified the Util::get_device_list_by_class mrthod\r
946                          to take into account the DServer device.\r
948                        - Added a new parameter to the Attribute::set_value()\r
949                          methods to ask CORBA to free memory allocated for \r
950                          the attribute\r
952 - Java server classes : - Adapted to JacORB use\r
954 - Java client classes : - Adapted to JacORB use\r
956                         - Update of the Database.delete_device_attribute_property\r
957                           and Database.delete_class_attribute_property methods.\r
959                         - Added a DeviceProxy.set_transparency_reconnection() and\r
960                           DeviceProxy.get_transparency_reconnection() methods\r
962                         - Added a -DTANGO_TIMEOUT option for client timeout on \r
963                           the java interpreter command line\r
965                         - Merge of the three Tango packages (Tango, TangoDs and\r
966                           TangoApi) and the CORBA classes within the same\r
967                           jar file called TangORB.jar\r
969 Changes since version 2.1.1\r
970 ---------------------------\r
972 - C++ client classes : - Fix bug in data extraction from the DeviceAttribute \r
973                          class when the read_attributes call was local to the\r
974                          process\r
976                        - Add re-connection to the set_timeout() DeviceProxy\r
977                          class method\r
979                        - Fix bug when device is marked as non-exported in the\r
980                          database during DeviceProxy class constructor\r
982 - C++ server classes : - Fix bug which allows concurrent access between state\r
983                          or status when requested as CORBA attributes and\r
984                          any commands or attributes\r
986                        - Add a string with library release number called\r
987                          "TgLibVers" (Also available for clients)\r
989 Changes since version 2.1.0\r
990 ---------------------------\r
992 - C++ client classes : - Fix bug in DeviceProxy::write_attributes() method which\r
993                          prevent writing more than one attribute in one call\r
995 - C++ server classes : - Fix bug in polling algorithm. In some condition, the \r
996                          polling thread enters an infinite loop.\r
998                        - Fix bug for Win32 device when trying to set\r
999                          attribute config\r
1001                        - Remove HP-UX specific code in source files\r
1004 Changes since version 2.0.2\r
1005 ---------------------------\r
1007 - C++ client classes : - Support all Tango device name syntax (using TANGO_HOST\r
1008                          environment variable, without environment variable but\r
1009                          with database server parameters specified in device \r
1010                          name and non database device)\r
1012                        - Database object managed as a singleton per control \r
1013                          system\r
1015                        - No more data copy during command_inout or\r
1016                          read_attribute calls\r
1018                        - Support all Tango device IDL interface release 2\r
1019                          features (data/attributes read from polling buffer,\r
1020                          commmand/attribute result history, polling related\r
1021                          methods added to the DeviceProxy class)\r
1023                        - Build an exception class hierarchy for exception \r
1024                          thrown by these classes\r
1026                        - Add management of device time-out\r
1028                        - Added some missing methods (copy constructor, \r
1029                          assignement operator...)\r
1031 - C++ server classes : - Kernel classes reference documentation now generated\r
1032                          using doxygen instead of doc++\r
1034                        - A little file added to the library which summarizes\r
1035                          version number. The RCS/CVS "ident" command will now\r
1036                          tells you that release library x.y.z is composed\r
1037                          by C++ client classes set release a.b and C++ server\r
1038                          classes set release c.d\r
1040                        - Fix incorrect field setting for DevFailed exception\r
1041                          re-thrown from a CORBA exception\r
1043                        - It's now not possible to poll the Init command\r
1045                        - It's now possible to define a default class doc. per \r
1046                          control system instance (using property)\r
1048                        - The test done to check if attribute value has been\r
1049                          set before it is returned to caller is done only if the\r
1050                          attribute quality is set to VALID\r
1052                        - The JTCInitialize object is now stored in the Util \r
1053                          class\r
1055                        - Windows : The Tango master include file (tango.h) now\r
1056                          also include winsock.h\r
1059 Changes since version 2.0.0\r
1060 ---------------------------\r
1062 - C++ client classes : - Fix bug in Database::delete_device_attribute_property()\r
1063                          method. This method now allows deleting device attribute\r
1064                          property for one device at a time\r
1066 - C++ server classes : - For writable attribute: When writing new value, the\r
1067                           check done between this new value and the attribute\r
1068                           property min_value or max_value is not strict anymore\r
1069                           (only < or > instead of <= or >=)\r
1071                         - It's now possible to reset an attribute property\r
1072                           value to its "unspecified value" by sending it the\r
1073                           "NaN" string.\r
1075                         - For attribute with a min_alarm or max_alarm property\r
1076                           defined : If the attribute quality factor is set to \r
1077                           INVALID, the attribute value will not be checked \r
1078                           against the alarm level during default state or status\r
1079                           command.\r
1081 Changes since version 1.6\r
1082 -------------------------\r
1084 - Supported OS :  - Suse 7.2 (and above) with gcc 2.95.3\r
1085                   - Solaris 7 with its Natif compiler (Forte C++ 6 Update 2)\r
1086                   - Windows NT with VC++ 6\r
1087                   Note that HP-UX is not supported any more and solaris with\r
1088                   gcc also (Waiting for gcc 3.1) \r
1089                   \r
1090 - ORB : ORBacus 4.1.1 is used (All OS)\r
1092 - C++ client classes : - More insertors and extractors operators in the \r
1093                          DeviceData class\r
1094                          \r
1095                        - Added support for attributes\r
1096                        \r
1097                        - Minor changes for compatibility with the Java classes\r
1098                          client set\r
1099                    \r
1100 - C++ server classes : - A polling thread is created within each device server\r
1101                          (See documentation for all details about polling)\r
1102                          \r
1103                        - The documentation has been re-organized\r
1104                        \r
1105                        - A full library versionning is used\r
1106                        \r
1107                        - Implemented commands name do not start with Devxxx\r
1108                          (DevState is now State, DevStatus is Status...)\r
1109                          \r
1110                        - Option -h,-?,-help for each device server\r
1111                        \r
1112                        - Command name, attribute name and device server name are\r
1113                          now case sensitive name\r
1114                          \r
1115                        - The POA Manager is now activated earlier in server\r
1116                          startup sequence allowing command_inout call in the\r
1117                          init_device method\r
1118                          \r
1119                        - A new Init command automatically added to all devices\r
1120                          (like the State and Status command)\r
1121                          \r
1122                        - No more exception when the list of supported attributes\r
1123                          is requested to a device without attribute. The\r
1124                          sequence length is set to 0.\r
1125                          \r
1126                        - The always_executed_hook method is now executed once\r
1127                          during the read_attributes and write_attributes CORBA\r
1128                          calls\r
1129                          \r
1130                        - The default class documentation URL has been modified\r
1131                          and it is now possible to define one default value per\r
1132                          Tango control system installation\r
1133                          \r
1134                        - The -d option for Tango device server used as Windows\r
1135                          service is now replaced by a -dbg option\r
1136                          \r
1137                        - Fix bug which could prevent a Tango device server used\r
1138                          as Windows service to start\r
1142 Changes since version 1.5\r
1143 -------------------------\r
1145 - DS API : Fix bug in the DeviceImpl class add_attribute() method\r
1147 - DS API : Command and attributes now support a command display types. This is\r
1148            used by the future Tango Application Toolkit for generic display\r
1149            software\r
1151 - DS API : Now, with two new options (-nodb and -dlist), it is possible to run a\r
1152            Tango device server without a database server. Obviously, some Tango\r
1153            device server features are lost if these options are used (See doc\r
1154            for more details)\r
1156 - DS API : Windows NT specific :\r
1157           - To use the operator between sequence and vector, it is now necessary\r
1158             to add a "using namespace Tango;" line in your source code\r
1159           - A window is now displayed if device creation failed\r
1160           - Tango has been generated as a DLL. \r
1161             WARNING : This is only for client. Some work is still necessary \r
1162             for server.\r
1164 - DB and DEV API : Re-connection now fully operational\r
1166 - DB and DEV API : Correct management of exception.\r
1168 - Java specific\r
1169 ---------------\r
1171 - DSAPI : Change the db call used to get device server class list to\r
1172           DbGetDserverClassList\r
1174 - DEV API : Add attribute management\r
1176 Changes since version 1.4\r
1177 -------------------------\r
1179 - Client API classes added to the library\r
1181 - New re_throw_exception() methods in the Except class\r
1183 - Read_attributes now support "AllAttr" as attribute name to read all \r
1184   attributes value within a single call\r
1186 - Add a add_attribute() method to the DeviceImpl class to dynamically\r
1187   add attribute to the device attribute list\r
1189 - New way to define attribute properties\r
1190     1 - From a Tango lib default value (lowest priority)\r
1191     2 - From user default value (with a new class called UserDefaultAttrProp)\r
1192     3 - From the database (highest priority)\r
1194 - A new "pattern" to prevent full re-compile of C++ servers when new data\r
1195   members are added to classes used by programmer\r
1197 - For multi-classes device server, it is now possible to use the\r
1198   Util::get_device_by_name() method in the device constructor\r
1200 - Added "<<" operator overloading functions between DevVarxxxArray\r
1201   types and C++ vector\r
1203 - Added "<<" operator overloading functions between DevVarxxxArray types\r
1204   and ostream (for easy printing)\r
1206 - Correct print of exception data members when device constructor throw\r
1207   exception during device server startup sequence\r
1209 Changes since version 1.3\r
1210 -------------------------\r
1212 - Fix bug in the Tango::DServer::restart() method preventing a correct device\r
1213   restart\r
1214   \r
1215 - Fix a bug in the Tango::Util::get_device_by_name() method preventing the\r
1216   method to find the correct device in the device server device list\r
1218 Changes since version 1.2\r
1219 -------------------------\r
1221 - The Tango lib now include the user classes to easily access the Tango\r
1222   database\r
1224 - For linux : Add the possibility to have the signal handler executed in the\r
1225   calling thread (instead of the signal management thread)\r
1226   \r
1227 - For linux : Change the way how a server is killed in order to also destroy\r
1228   user thread(s)\r
1229   \r
1230 - Add a new CORBA attribute in the Tango IDL definition to retrieve the name\r
1231   of the administration device associated to the server hosting the device\r
1232   \r
1233 - Change the DevRestart command philosophy. It is not any more a command \r
1234   automatically added to every device but a command on the device server\r
1235   administration device (with device name to be restarted as input parameter).\r
1236   A command to restart the whole device server has also been added to this \r
1237   administration device.\r
1238   \r
1239 Changes since version 1.1\r
1240 -------------------------\r
1242 - Fix bug in the Tango::MultiClassAttribute::init_class_attributes() method\r
1244 - Remove database specific error codes\r
1246 Changes since the Tango alpha release (installed as version 1.1)\r
1247 ----------------------------------------------------------------\r
1249 - Support CORBA 2.3\r
1251 - Everything in a Tango namespace (C++ specific)\r
1253 - Remove all assert from library (C++ specific)\r
1255 - Main attributes properties (format, type, name..) now hard-coded in user\r
1256   code\r
1257   \r
1258 - Change in the DevFailed exception definition\r
1260 - Complete new handling of signals. Now, all servers are automatically threaded\r
1261   and one thread is dedicated to signal handling. This allow user code to\r
1262   do what they want in signal handler\r
1263   \r
1264 - All exceptions related methods are now grouped in a "Except" class\r
1266 - New method to generate DevFailed exception from a CORBA exception\r
1268 - Change name of the main include file (tango.h instead of tango_ds.h)\r
1270 - DevRestart now delete and completely re-create device. The client has to\r
1271   reconnect.\r
1272   \r
1273 - Server can start even if the database server is not there (for the starter\r
1274   device server)\r
1275   \r
1276 - Include and lib directories re-organized\r
1278 - Tango device server running on NT may now run as NT service\r
1280 - Add a completely new graphical user interface for device server running on\r
1281   Windows NT\r