From 84442aa32e6fbd13955d319e18773ca9d46760be Mon Sep 17 00:00:00 2001
From: Sylvain Dupuy <sylvain.dupuy@synchrotron-soleil.fr>
Date: Mon, 6 Dec 2004 10:23:38 +0000
Subject: [PATCH] initial import

---
 doc/DeviceServerUsersGuide_en.doc  |  Bin 0 -> 103936 bytes
 doc/Doxyfile                       |  831 +++++++++++++++++
 doc/doc_html/Attributes.html       |  105 +++
 doc/doc_html/Description           |   62 ++
 doc/doc_html/DevCommands.html      |  143 +++
 doc/doc_html/DevCommandsFrame.html |   20 +
 doc/doc_html/DevCommandsList.html  |   20 +
 doc/doc_html/DevCommandsTable.html |   85 ++
 doc/doc_html/Properties.html       |  190 ++++
 doc/doc_html/TangoDevStates.html   |   74 ++
 doc/doc_html/index.html            |   86 ++
 scripts/load_sine_chan4.py         |   44 +
 scripts/load_square_chan0.py       |   46 +
 src/ADLinkContinuousAO.cpp         |   35 +
 src/ADLinkContinuousAO.h           |   39 +
 src/ClassFactory.cpp               |   47 +
 src/ContinuousAO.cpp               | 1343 ++++++++++++++++++++++++++++
 src/ContinuousAO.h                 |  335 +++++++
 src/ContinuousAOClass.cpp          |  588 ++++++++++++
 src/ContinuousAOClass.h            |  110 +++
 src/Doxyfile                       |  831 +++++++++++++++++
 src/Makefile                       |   91 ++
 src/Makefile.VC                    |   38 +
 src/README                         |   40 +
 src/main.cpp                       |   72 ++
 25 files changed, 5275 insertions(+)
 create mode 100644 doc/DeviceServerUsersGuide_en.doc
 create mode 100644 doc/Doxyfile
 create mode 100644 doc/doc_html/Attributes.html
 create mode 100644 doc/doc_html/Description
 create mode 100644 doc/doc_html/DevCommands.html
 create mode 100644 doc/doc_html/DevCommandsFrame.html
 create mode 100644 doc/doc_html/DevCommandsList.html
 create mode 100644 doc/doc_html/DevCommandsTable.html
 create mode 100644 doc/doc_html/Properties.html
 create mode 100644 doc/doc_html/TangoDevStates.html
 create mode 100644 doc/doc_html/index.html
 create mode 100644 scripts/load_sine_chan4.py
 create mode 100644 scripts/load_square_chan0.py
 create mode 100644 src/ADLinkContinuousAO.cpp
 create mode 100644 src/ADLinkContinuousAO.h
 create mode 100644 src/ClassFactory.cpp
 create mode 100644 src/ContinuousAO.cpp
 create mode 100644 src/ContinuousAO.h
 create mode 100644 src/ContinuousAOClass.cpp
 create mode 100644 src/ContinuousAOClass.h
 create mode 100644 src/Doxyfile
 create mode 100644 src/Makefile
 create mode 100644 src/Makefile.VC
 create mode 100644 src/README
 create mode 100644 src/main.cpp

diff --git a/doc/DeviceServerUsersGuide_en.doc b/doc/DeviceServerUsersGuide_en.doc
new file mode 100644
index 0000000000000000000000000000000000000000..739e7ee92579db0bf1d47b623f66a43c617574ae
GIT binary patch
literal 103936
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
F007^myVn2!

literal 0
HcmV?d00001

diff --git a/doc/Doxyfile b/doc/Doxyfile
new file mode 100644
index 0000000..c4b1a99
--- /dev/null
+++ b/doc/Doxyfile
@@ -0,0 +1,831 @@
+# Doxyfile 1.2.10
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = "Continuous Anolog Output"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       =	F:\test_AO\ContinuousAO/doc_html
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French, 
+# German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, 
+# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.
+
+OUTPUT_LANGUAGE        = English
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these class will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH        = 
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a class diagram (in Html and LaTeX) for classes with base or 
+# super classes. Setting the tag to NO turns the diagrams off.
+
+CLASS_DIAGRAMS         = YES
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower case letters. If set to YES upper case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# users are adviced to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments  will behave just like the Qt-style comments (thus requiring an 
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# reimplements.
+
+INHERIT_DOCS           = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consist of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
+# only. Doxygen will then generate output that is more tailored for C. 
+# For instance some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text.
+
+WARN_FORMAT            = 
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  =	F:\test_AO\ContinuousAO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+FILE_PATTERNS          = *.h *.cpp
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.
+
+INPUT_FILTER           = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse.
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = 
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = /segfs/tango/templates/pogo/html/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = /segfs/tango/templates/pogo/html/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the Html help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript and frames is required (for instance Netscape 4.0+ 
+# or Internet explorer 4.0+).
+
+GENERATE_TREEVIEW      = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = 
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimised for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = 
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = YES
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assigments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = 
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = 
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_XML           = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tagfiles.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermedate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
+
+# The CGI_NAME tag should be the name of the CGI script that 
+# starts the search engine (doxysearch) with the correct parameters. 
+# A script with this name will be generated by doxygen.
+
+CGI_NAME               = 
+
+# The CGI_URL tag should be the absolute URL to the directory where the 
+# cgi binaries are located. See the documentation of your http daemon for 
+# details.
+
+CGI_URL                = 
+
+# The DOC_URL tag should be the absolute URL to the directory where the 
+# documentation is located. If left blank the absolute path to the 
+# documentation, with file:// prepended to it, will be used.
+
+DOC_URL                = 
+
+# The DOC_ABSPATH tag should be the absolute path to the directory where the 
+# documentation is located. If left blank the directory on the local machine 
+# will be used.
+
+DOC_ABSPATH            = 
+
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary 
+# is installed.
+
+BIN_ABSPATH            = 
+
+# The EXT_DOC_PATHS tag can be used to specify one or more paths to 
+# documentation generated for other projects. This allows doxysearch to search 
+# the documentation for these projects as well.
+
+EXT_DOC_PATHS          = 
diff --git a/doc/doc_html/Attributes.html b/doc/doc_html/Attributes.html
new file mode 100644
index 0000000..383d445
--- /dev/null
+++ b/doc/doc_html/Attributes.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+<table width="100%" height="20%"><tr>
+<td align=LEFT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Synchrotron </FONT></FONT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Soleil</FONT></FONT>
+<H5>Saint-Aubin - BP 48 91192 GIF-sur-YVETTE CEDEX<BR>
+</td><td>
+<A href="http://www.synchrotron-soleil.fr/">
+<IMG  SRC="http://controle/images/logo-150.gif" 
+		ALT="SOLEIL Logo" ALIGN=RIGHT border="0"></A>
+</td></tr></table>
+
+<HR WIDTH="100%"></H5>
+
+<Br>
+<center>
+<h1>
+Continuous Anolog Output<Br>
+Device Attributes Description
+</h1>
+<Br>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+
+
+<Br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td COLSPAN=4> <Font Size=+2><Center><b>Scalar Attributes</b></td></Font></Center>
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td><Center><b>Attribute name</b></td></Center>
+<Td><Center><b>Data Type</b></td></Center>
+<Td><Center><b>R/W Type</b></td></Center>
+<Td><Center><b>Expert</b></td></Center>
+<Tr><Td><b><Center>errorCounter</b><Br>( Errors occuring during the waveform generation. )</Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>READ</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>useBoardFifo</b><Br>( Set to 1 if data have been loaded in FIFO. Set to 0 if data is continuously tranfered through DMA (possible underrun) )</Center></Td>
+<Td><Center>DEV_SHORT</Center></Td><Td><Center>READ</Center></Td><Td><Center>No</Center></Td></Tr>
+
+</Table>
+</Center>
+<Br><Br><Br><Br><Br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td COLSPAN=4> <Font Size=+2><Center><b>Spectrum Attributes</b></td></Font></Center>
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td><Center><b>Attribute name</b></td></Center>
+<Td><Center><b>Data Type</b></td></Center>
+<Td><Center><b>X Data Length</b></td></Center>
+<Td><Center><b>Expert</b></td></Center>
+<Tr><Td><b><Center>channel0</b></Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>1000000</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>channel1</b></Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>100000</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>channel2</b></Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>100000</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>channel3</b></Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>100000</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>channel4</b></Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>100000</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>channel5</b></Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>100000</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>channel6</b></Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>100000</Center></Td><Td><Center>No</Center></Td></Tr>
+
+<Tr><Td><b><Center>channel7</b></Center></Td>
+<Td><Center>DEV_DOUBLE</Center></Td><Td><Center>100000</Center></Td><Td><Center>No</Center></Td></Tr>
+
+</Table>
+</Center>
+<Br><Br><Br><Br><Br>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3>(c) SOLEIL : Groupe ICA Contr�le et Acquisitions </H33>
+</Center>
+</body>
+</html>
diff --git a/doc/doc_html/Description b/doc/doc_html/Description
new file mode 100644
index 0000000..5d640e2
--- /dev/null
+++ b/doc/doc_html/Description
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+<table width="100%" height="20%"><tr>
+<td align=LEFT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Synchrotron </FONT></FONT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Soleil</FONT></FONT>
+<H5>Saint-Aubin - BP 48 91192 GIF-sur-YVETTE CEDEX<BR>
+</td><td>
+<A href="http://www.synchrotron-soleil.fr/">
+<IMG  SRC="http://controle/images/logo-150.gif" 
+		ALT="SOLEIL Logo" ALIGN=RIGHT border="0"></A>
+</td></tr></table>
+
+<HR WIDTH="100%"></H5>
+
+<Br>
+<center>
+<h1>
+Continuous Anolog Output<Br>
+Device Description
+</h1>
+<Br>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+
+
+<Center>
+<Br>
+<Br>
+<Br>
+<Br>
+<Br>
+<Br>
+This Page Must Be Filled by <Br>
+The Programmer
+</Center>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3>(c) SOLEIL : Groupe ICA Contr�le et Acquisitions </H33>
+</Center>
+</body>
+</html>
diff --git a/doc/doc_html/DevCommands.html b/doc/doc_html/DevCommands.html
new file mode 100644
index 0000000..82dbba2
--- /dev/null
+++ b/doc/doc_html/DevCommands.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+<table width="100%" height="20%"><tr>
+<td align=LEFT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Synchrotron </FONT></FONT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Soleil</FONT></FONT>
+<H5>Saint-Aubin - BP 48 91192 GIF-sur-YVETTE CEDEX<BR>
+</td><td>
+<A href="http://www.synchrotron-soleil.fr/">
+<IMG  SRC="http://controle/images/logo-150.gif" 
+		ALT="SOLEIL Logo" ALIGN=RIGHT border="0"></A>
+</td></tr></table>
+
+<HR WIDTH="100%"></H5>
+
+<Br>
+<center>
+<h1>
+Continuous Anolog Output<Br>
+Device Commands Description
+</h1>
+<Br>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+
+
+<Br>
+<Br>
+<Br>
+<A NAME="Init"><!-- --></A>
+<A NAME="Init"><!-- --></A>
+<h2>1 - Init</h2>
+<ul>
+<Li><Strong>Description: </Strong> This commands re-initialise a device keeping the same network connection.<Br>
+After an Init command executed on a device, it is not necessary for client to re-connect to the device.<Br>
+This command first calls the device <i> delete_device() </i>method and then execute its <i> init_device()</i> method.<Br>
+For C++ device server, all the memory allocated in the <i> nit_device() </i> method must be freed in the <i> delete_device() </i> method.<Br>
+The language device desctructor automatically calls the <i> delete_device() </i> method.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : none.<Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : none.<Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::UNKNOWN<Li>Tango::STANDBY<Li>Tango::RUNNING</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="State"><!-- --></A>
+<A NAME="State"><!-- --></A>
+<h2>2 - State</h2>
+<ul>
+<Li><Strong>Description: </Strong> This command gets the device state (stored in its <i>device_state</i> data member) and returns it to the caller.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : none.<Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_STATE</Strong>
+ : State Code<Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::UNKNOWN<Li>Tango::STANDBY<Li>Tango::RUNNING</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="Status"><!-- --></A>
+<A NAME="Status"><!-- --></A>
+<h2>3 - Status</h2>
+<ul>
+<Li><Strong>Description: </Strong> This command gets the device status (stored in its <i>device_status</i> data member) and returns it to the caller.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : none.<Br>&nbsp
+<Li><Strong>Argout:<Br>CONST_DEV_STRING</Strong>
+ : Status descrition<Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::UNKNOWN<Li>Tango::STANDBY<Li>Tango::RUNNING</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="Start"><!-- --></A>
+<A NAME="Start"><!-- --></A>
+<h2>4 - Start</h2>
+<ul>
+<Li><Strong>Description: </Strong> start the generation.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::UNKNOWN<Li>Tango::STANDBY<Li>Tango::RUNNING</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="Stop"><!-- --></A>
+<A NAME="Stop"><!-- --></A>
+<h2>5 - Stop</h2>
+<ul>
+<Li><Strong>Description: </Strong> stop the generation.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::UNKNOWN<Li>Tango::STANDBY<Li>Tango::RUNNING</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<A NAME="SetAOScaledData"><!-- --></A>
+<A NAME="SetAOScaledData"><!-- --></A>
+<h2>6 - SetAOScaledData</h2>
+<ul>
+<Li><Strong>Description: </Strong> Give one period of the signal to generated of a specified channel in volts.<Br>&nbsp
+<Li><Strong>Argin:<Br>DEVVAR_DOUBLESTRINGARRAY</Strong>
+ : The channel number (string).  The output data in volts (double)<Br>&nbsp
+<Li><Strong>Argout:<Br>DEV_VOID</Strong>
+ : <Br>&nbsp
+<Li><Strong>Command allowed for: </Strong><Ul>
+<Li>Tango::UNKNOWN<Li>Tango::STANDBY<Li>Tango::RUNNING</Ul>
+<Br>&nbsp
+</ul><Br>
+<Br>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3>(c) SOLEIL : Groupe ICA Contr�le et Acquisitions </H33>
+</Center>
+</body>
+</html>
diff --git a/doc/doc_html/DevCommandsFrame.html b/doc/doc_html/DevCommandsFrame.html
new file mode 100644
index 0000000..039ee33
--- /dev/null
+++ b/doc/doc_html/DevCommandsFrame.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+
+<FRAMESET cols="20%,80%">
+<FRAME src="DevCommandsList.html" name="DevCommandsList">
+<FRAME src="DevCommands.html" name="DevCommands">
+</FRAMESET>
+<NOFRAMES>
+<H2>
+Frame Alert</H2>
+
+<P>
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+<BR>
+Link to <A HREF="DevCommands.html">Non-frame version.</A></NOFRAMES>
+</HTML>
diff --git a/doc/doc_html/DevCommandsList.html b/doc/doc_html/DevCommandsList.html
new file mode 100644
index 0000000..07e6925
--- /dev/null
+++ b/doc/doc_html/DevCommandsList.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<HTML><HEAD>
+<TITLE>Commands
+</TITLE></HEAD>
+<BODY BGCOLOR="white">
+<FONT size="+1" ID="FrameHeadingFont">
+<B>Commands:</B></FONT>
+<Br>
+<Br>
+<Br>
+<A Href="DevCommands.html#Init" TARGET="DevCommands"> Init</a><Br>
+<A Href="DevCommands.html#State" TARGET="DevCommands"> State</a><Br>
+<A Href="DevCommands.html#Status" TARGET="DevCommands"> Status</a><Br>
+<A Href="DevCommands.html#Start" TARGET="DevCommands"> Start</a><Br>
+<A Href="DevCommands.html#Stop" TARGET="DevCommands"> Stop</a><Br>
+<A Href="DevCommands.html#SetAOScaledData" TARGET="DevCommands"> SetAOScaledData</a><Br>
+
+
+</BODY>
+</HTML>
diff --git a/doc/doc_html/DevCommandsTable.html b/doc/doc_html/DevCommandsTable.html
new file mode 100644
index 0000000..01abe5c
--- /dev/null
+++ b/doc/doc_html/DevCommandsTable.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+<table width="100%" height="20%"><tr>
+<td align=LEFT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Synchrotron </FONT></FONT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Soleil</FONT></FONT>
+<H5>Saint-Aubin - BP 48 91192 GIF-sur-YVETTE CEDEX<BR>
+</td><td>
+<A href="http://www.synchrotron-soleil.fr/">
+<IMG  SRC="http://controle/images/logo-150.gif" 
+		ALT="SOLEIL Logo" ALIGN=RIGHT border="0"></A>
+</td></tr></table>
+
+<HR WIDTH="100%"></H5>
+
+<Br>
+<center>
+<h1>
+Continuous Anolog Output<Br>
+Device Commands Description
+</h1>
+<Br>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+
+
+<Center>
+<Br><Br>
+<A Href="DevCommandsFrame.html"> More Details on commands.... </a><Br>
+<Br> <Br>
+<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td COLSPAN=3> <Font Size=+2><Center><b>Device Commands for Operator Level</b></td></Font></Center>
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td><Center><b>Command name</b></td></Center>
+<Td><Center><b>Argument In</b></td></Center>
+<Td><Center><b>Argument Out</b></td></Center>
+<Tr><Td>Init</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>State</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_STATE</Td>
+<Tr><Td>Status</Td>
+<Td>DEV_VOID</Td>
+<Td>CONST_DEV_STRING</Td>
+<Tr><Td>Start</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>Stop</Td>
+<Td>DEV_VOID</Td>
+<Td>DEV_VOID</Td>
+<Tr><Td>SetAOScaledData</Td>
+<Td>DEVVAR_DOUBLESTRINGARRAY</Td>
+<Td>DEV_VOID</Td>
+
+
+
+</Table></Center>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3>(c) SOLEIL : Groupe ICA Contr�le et Acquisitions </H33>
+</Center>
+</body>
+</html>
diff --git a/doc/doc_html/Properties.html b/doc/doc_html/Properties.html
new file mode 100644
index 0000000..a41dd83
--- /dev/null
+++ b/doc/doc_html/Properties.html
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+<table width="100%" height="20%"><tr>
+<td align=LEFT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Synchrotron </FONT></FONT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Soleil</FONT></FONT>
+<H5>Saint-Aubin - BP 48 91192 GIF-sur-YVETTE CEDEX<BR>
+</td><td>
+<A href="http://www.synchrotron-soleil.fr/">
+<IMG  SRC="http://controle/images/logo-150.gif" 
+		ALT="SOLEIL Logo" ALIGN=RIGHT border="0"></A>
+</td></tr></table>
+
+<HR WIDTH="100%"></H5>
+
+<Br>
+<center>
+<h1>
+Continuous Anolog Output<Br>
+Properties Description
+</h1>
+<Br>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+
+
+<Br> <Br> <Br> 
+<Center>
+<Br> <Br> <Br> 
+<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td COLSPAN=3> <Font Size=+2><Center><b>Device Properties</b></td></Font></Center>
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td><Center><b>Property name</b></td></Center>
+<Td><Center><b>Property type</b></td></Center>
+<Td><Center><b>Description</b></td></Center>
+<Tr><Td>BoardNum</Td>
+<Td>Tango::DEV_USHORT</Td>
+<Td>The number of the board in the chassis cPCI.</Td></Tr>
+
+<Tr><Td>Frequency</Td>
+<Td>Tango::DEV_DOUBLE</Td>
+<Td>The output frequency (the rate the samples are outputed).</Td></Tr>
+
+<Tr><Td>StartTrigger</Td>
+<Td>Tango::DEV_SHORT</Td>
+<Td>1 if using a start trigger, 0 otherwise.</Td></Tr>
+
+<Tr><Td>StopTrigger</Td>
+<Td>Tango::DEV_SHORT</Td>
+<Td>1 if using a stop trigger, 0 otherwise.</Td></Tr>
+
+<Tr><Td>StartTriggerSource</Td>
+<Td>Tango::DEV_USHORT</Td>
+<Td>The start trigger source. Analog trigger DTRIG or ATRIG.</Td></Tr>
+
+<Tr><Td>StopTriggerSource</Td>
+<Td>Tango::DEV_USHORT</Td>
+<Td>The stop trigger source. anolog trigger ATRIG or pin AFI0 of AFI1.</Td></Tr>
+
+<Tr><Td>ATRIGSelection</Td>
+<Td>Tango::DEV_USHORT</Td>
+<Td>select the type of analog trigger. Can be BELOW (trigger occurs below ATRIGLevel)
+or can be ABOVE (trigger occurs above ATRIGLevel).</Td></Tr>
+
+<Tr><Td>ATRIGLevel</Td>
+<Td>Tango::DEV_DOUBLE</Td>
+<Td>The analog trigger level in volts.</Td></Tr>
+
+<Tr><Td>DTRIGPolarity</Td>
+<Td>Tango::DEV_USHORT</Td>
+<Td>The edges on which the trigger are detected. Can be RISING or FALLING.</Td></Tr>
+
+<Tr><Td>AORefA</Td>
+<Td>Tango::DEV_DOUBLE</Td>
+<Td>The value of the reference voltage gave on pin AORefA.</Td></Tr>
+
+<Tr><Td>AORefB</Td>
+<Td>Tango::DEV_DOUBLE</Td>
+<Td>The value of the reference voltage gave on pin AORefB.</Td></Tr>
+
+<Tr><Td>Polarity</Td>
+<Td>Tango::DEV_USHORT</Td>
+<Td>BP for unipolar outputs or UP for bipolar outputs.</Td></Tr>
+
+<Tr><Td>AORefSource</Td>
+<Td>Tango::DEV_USHORT</Td>
+<Td>Select the internal reference (10.0 volts) with INTERN or the external references
+AORefA and AORefB with EXTERN.</Td></Tr>
+
+<Tr><Td>Channel0Enable</Td>
+<Td>Tango::DEV_SHORT</Td>
+<Td>1 if enable channel 0, 0 otherwise.</Td></Tr>
+
+<Tr><Td>Channel1Enable</Td>
+<Td>Tango::DEV_SHORT</Td>
+<Td>1 if enable channel 1, 0 otherwise.</Td></Tr>
+
+<Tr><Td>Channel2Enable</Td>
+<Td>Tango::DEV_SHORT</Td>
+<Td>1 if enable channel 2, 0 otherwise.</Td></Tr>
+
+<Tr><Td>Channel3Enable</Td>
+<Td>Tango::DEV_SHORT</Td>
+<Td>1 if enable channel 3, 0 otherwise.</Td></Tr>
+
+<Tr><Td>Channel4Enable</Td>
+<Td>Tango::DEV_SHORT</Td>
+<Td>1 if enable channel 4, 0 otherwise.</Td></Tr>
+
+<Tr><Td>Channel5Enable</Td>
+<Td>Tango::DEV_SHORT</Td>
+<Td>1 if enable channel 5, 0 otherwise.</Td></Tr>
+
+<Tr><Td>Channel6Enable</Td>
+<Td>Tango::DEV_SHORT</Td>
+<Td>1 if enable channel 6, 0 otherwise.</Td></Tr>
+
+<Tr><Td>Channel7Enable</Td>
+<Td>Tango::DEV_SHORT</Td>
+<Td>1 if enable channel 7, 0 otherwise.</Td></Tr>
+
+<Tr><Td>BufferDepth</Td>
+<Td>Tango::DEV_USHORT</Td>
+<Td>The buffer depth for <b>one channel</b>.</Td></Tr>
+
+<Tr><Td>Channel0Waveform</Td>
+<Td>Array of double</Td>
+<Td>The waveform for channel 0 (attribute persistency).</Td></Tr>
+
+<Tr><Td>Channel1Waveform</Td>
+<Td>Array of double</Td>
+<Td>The waveform for channel 1 (attribute persistency).</Td></Tr>
+
+<Tr><Td>Channel2Waveform</Td>
+<Td>Array of double</Td>
+<Td>The waveform for channel 2 (attribute persistency).</Td></Tr>
+
+<Tr><Td>Channel3Waveform</Td>
+<Td>Array of double</Td>
+<Td>The waveform for channel 3 (attribute persistency).</Td></Tr>
+
+<Tr><Td>Channel4Waveform</Td>
+<Td>Array of double</Td>
+<Td>The waveform for channel 4 (attribute persistency).</Td></Tr>
+
+<Tr><Td>Channel5Waveform</Td>
+<Td>Array of double</Td>
+<Td>The waveform for channel 5 (attribute persistency).</Td></Tr>
+
+<Tr><Td>Channel6Waveform</Td>
+<Td>Array of double</Td>
+<Td>The waveform for channel 6 (attribute persistency).</Td></Tr>
+
+<Tr><Td>Channel7Waveform</Td>
+<Td>Array of double</Td>
+<Td>The waveform for channel 7 (attribute persistency).</Td></Tr>
+
+</Table>
+
+<Br><Br><Br>
+<Center><b>
+There is no Class properties.<Br><Br>
+</Center></b>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3>(c) SOLEIL : Groupe ICA Contr�le et Acquisitions </H33>
+</Center>
+</body>
+</html>
diff --git a/doc/doc_html/TangoDevStates.html b/doc/doc_html/TangoDevStates.html
new file mode 100644
index 0000000..02660af
--- /dev/null
+++ b/doc/doc_html/TangoDevStates.html
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+<table width="100%" height="20%"><tr>
+<td align=LEFT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Synchrotron </FONT></FONT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Soleil</FONT></FONT>
+<H5>Saint-Aubin - BP 48 91192 GIF-sur-YVETTE CEDEX<BR>
+</td><td>
+<A href="http://www.synchrotron-soleil.fr/">
+<IMG  SRC="http://controle/images/logo-150.gif" 
+		ALT="SOLEIL Logo" ALIGN=RIGHT border="0"></A>
+</td></tr></table>
+
+<HR WIDTH="100%"></H5>
+
+<Br>
+<center>
+<h1>
+Continuous Anolog Output<Br>
+Device States Description
+</h1>
+<Br>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+
+
+<Center>
+<Br> <Br> <Br> 
+<Table Border=2 Cellpadding=3 CELLSPACING=0 WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td COLSPAN=2> <Font Size=+2><Center><b>States</b></td></Font></Center>
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<Td><Center><b>Names</b></td></Center>
+<Td><Center><b>Descriptions</b></td></Center>
+<Tr><Td>UNKNOWN</Td>
+<Td></Td></Tr>
+
+<Tr><Td>STANDBY</Td>
+<Td></Td></Tr>
+
+<Tr><Td>RUNNING</Td>
+<Td></Td></Tr>
+
+
+
+
+</Table>
+</Center>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3>(c) SOLEIL : Groupe ICA Contr�le et Acquisitions </H33>
+</Center>
+</body>
+</html>
diff --git a/doc/doc_html/index.html b/doc/doc_html/index.html
new file mode 100644
index 0000000..29c83c5
--- /dev/null
+++ b/doc/doc_html/index.html
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+<table width="100%" height="20%"><tr>
+<td align=LEFT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Synchrotron </FONT></FONT>
+<FONT COLOR="#0000FF"><FONT SIZE=+4>Soleil</FONT></FONT>
+<H5>Saint-Aubin - BP 48 91192 GIF-sur-YVETTE CEDEX<BR>
+</td><td>
+<A href="http://www.synchrotron-soleil.fr/">
+<IMG  SRC="http://controle/images/logo-150.gif" 
+		ALT="SOLEIL Logo" ALIGN=RIGHT border="0"></A>
+</td></tr></table>
+
+<HR WIDTH="100%"></H5>
+
+<Br>
+<center>
+<h1>
+Continuous Anolog Output<Br>
+Device Server User's Guide
+</h1>
+<Br>
+<b>
+Revision:  - Author: 
+</b>
+</center>
+<Br>
+<Br>
+<Br>
+<Br>
+<Br>
+<Br>
+<h2>Introduction:</h2>
+Perform continuous anolog ouput (waveform generation) on the selected outputs.<Br>
+<Br>
+<Br>
+<h2>Description:</h2>
+<ul>
+	<li> <a href=Description.html>		Device description.</a>
+	<li> <a href=Properties.html>	Properties description</a>
+	<li> <a href=TangoDevStates.html>	States description</a>
+	<li> <a href=DevCommandsFrame.html>	Commands description</a>
+	<li> <a href=Attributes.html>		Attributes description</a>
+</ul>
+<Br>
+<Br>
+<Br>
+<h2>Extented User's guide (available only for complex DeviceServers):</h2>
+<ul>
+	<li> <a href="../DeviceServerUsersGuide.doc">		   In French word format.</a>
+	<li> <a href="../DeviceServerUsersGuide.pdf">		   In French PDF format.</a>
+	<li> <a href="../DeviceServerUsersGuide_en.doc">	   In English word format.</a>
+	<li> <a href="../DeviceServerUsersGuide_en.pdf">	   In English PDF format.</a>
+</ul>
+<Br>
+<Br>
+<Br>
+<h2>Conclusion:</h2>
+The device server is ready for distribution application programmers.<Br>
+The author will be interested inany feedback which arise from their usage of this device server.
+<Br>
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<Title> Tango Device Server User's Guide </Title>
+   <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; HP-UX B.10.20 9000/735) [Netscape]">
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000FF" VLINK="#FF0000" ALINK="#FF0000">
+
+<P><!-------TITLE------></P>
+
+<Center>
+<Br>
+<HR WIDTH="100%"></H5>
+<H3>(c) SOLEIL : Groupe ICA Contr�le et Acquisitions </H33>
+</Center>
+</body>
+</html>
diff --git a/scripts/load_sine_chan4.py b/scripts/load_sine_chan4.py
new file mode 100644
index 0000000..0d21467
--- /dev/null
+++ b/scripts/load_sine_chan4.py
@@ -0,0 +1,44 @@
+from PyTango import*
+import sys
+import time
+import math
+
+
+try:
+	#TODO: put the desired device proxy	
+	contAO = DeviceProxy("generic/acq/ContinuousAO")
+	
+	###############load a sine signal on channel 4####################
+	
+	#TODO: put the correct BufferDepth (same as in the property of the device)
+	BufferDepth = 1000
+	
+	#TODO: put the desired voltage in volts (verify the the input range is coherent with this value)
+	# The input range is gave by properties Polarity, AORefA, AORefB, AORefSource
+	max_voltage = 5.0 
+
+	i = 1
+	ao_data = [math.sin(0 * 2. * 3.14159 / BufferDepth) * max_voltage]
+	
+
+	while i<BufferDepth:
+		ao_data[i:i] = [math.sin(i * 2. * 3.14159 / BufferDepth) * max_voltage]
+		i = i + 1 
+
+	print ao_data
+
+	#put ao_data in the argin of the command contAO with the channel number
+	argin =(ao_data,["4"])
+	
+	#load the waveform on the device
+	contAO.SetAOScaledData(argin)
+	
+except:
+	exctype , value = sys.exc_info()[:2]
+	print "Failed with exception ", exctype
+	for err in value :
+		print "---ERROR ELEMENT-------"
+		print "reason:" , err["reason"]
+		print "description:" , err["desc"]
+		print "origin:" , err["origin"]
+		print "severity:" , err["severity"]
diff --git a/scripts/load_square_chan0.py b/scripts/load_square_chan0.py
new file mode 100644
index 0000000..24e1804
--- /dev/null
+++ b/scripts/load_square_chan0.py
@@ -0,0 +1,46 @@
+from PyTango import*
+import sys
+import time
+
+
+try:
+	#TODO: put the desired device proxy	
+	contAO = DeviceProxy("generic/acq/ContinuousAO")
+	
+	###############load a square signal on channel 0####################
+	
+	#TODO: put the correct BufferDepth (same as in the property of the device)
+	BufferDepth = 1000
+	
+	#TODO: put the desired voltage in volts (verify the the input range is coherent with this value)
+	# The input range is gave by properties Polarity, AORefA, AORefB, AORefSource
+	max_voltage = 5.0 
+
+	i = 1
+	ao_data = [-max_voltage]
+	
+	
+	while i<BufferDepth/2:
+		ao_data[i:i] = [-max_voltage]
+		i = i + 1 
+	while i<BufferDepth:
+		ao_data[i:i] = [max_voltage]
+		i = i + 1 
+
+	#print ao_data
+
+	#put ao_data in the argin of the command contAO with the channel number
+	argin =(ao_data,["0"])
+	
+	#load the waveform on the device
+	contAO.SetAOScaledData(argin)
+	
+except:
+	exctype , value = sys.exc_info()[:2]
+	print "Failed with exception ", exctype
+	for err in value :
+		print "---ERROR ELEMENT-------"
+		print "reason:" , err["reason"]
+		print "description:" , err["desc"]
+		print "origin:" , err["origin"]
+		print "severity:" , err["severity"]
diff --git a/src/ADLinkContinuousAO.cpp b/src/ADLinkContinuousAO.cpp
new file mode 100644
index 0000000..d9a6342
--- /dev/null
+++ b/src/ADLinkContinuousAO.cpp
@@ -0,0 +1,35 @@
+//============================================================
+//DEPENDENCIES
+//============================================================
+#include <asl/ASLExceptionsHandler.h>
+#include "ADLinkContinuousAO.h"
+
+//============================================================
+//ADLinkContinuousAO::ADLinkContinuousAO
+//============================================================
+ADLinkContinuousAO::ADLinkContinuousAO (Tango::DeviceImpl* dev) 
+    : Tango::LogAdapter(dev),
+    asl::ContinuousAO (),
+    err_ctr(0)
+{
+    
+} 
+//============================================================
+//ADLinkContinuousAO::~ADLinkContinuousAO
+//============================================================
+ADLinkContinuousAO::~ADLinkContinuousAO (void) 
+{   
+}
+//============================================================
+//ADLinkContinuousAO::handle_error
+//============================================================
+void ADLinkContinuousAO::handle_error (const asl::DAQException& de)
+{
+  cout<<"error occured during acquisition"<<endl;
+  this->lock_data();
+  err_ctr++;
+  this->unlock_data();
+  _ASL_TO_TANGO_EXCEPTION(de, df);
+  ERROR_STREAM<<"error occured during acquisition"<<endl;
+  ERROR_STREAM<<df<<endl;
+}
diff --git a/src/ADLinkContinuousAO.h b/src/ADLinkContinuousAO.h
new file mode 100644
index 0000000..e273b5b
--- /dev/null
+++ b/src/ADLinkContinuousAO.h
@@ -0,0 +1,39 @@
+#ifndef _ADLinkContinuousAO_H
+#define _ADLinkContinuousAO_H
+//============================================================
+//DEPENDENCIES
+//============================================================
+#include <asl/ContinuousAO.h>
+#include <Tango.h>
+
+class ADLinkContinuousAO: public asl::ContinuousAO, public Tango::LogAdapter
+{
+    
+public: 
+  
+  ADLinkContinuousAO (Tango::DeviceImpl* dev);
+  virtual ~ADLinkContinuousAO (void) ;  
+  /**
+  * Receive errors ocurring during the waveform generation.
+  * @param de The error
+  */
+  virtual void handle_error (const asl::DAQException& de);
+  /**
+  * Get the mutex
+  */
+  inline void lock_data(void)
+  {
+    this->data_lock_.acquire();
+  };
+  /**
+  * Release the mutex
+  */
+  inline void unlock_data(void)
+  {
+    this->data_lock_.release();
+  };
+  unsigned long err_ctr;
+private:
+	ACE_Thread_Mutex data_lock_;
+};
+#endif	// _ADLinkContinuousAO_H
\ No newline at end of file
diff --git a/src/ClassFactory.cpp b/src/ClassFactory.cpp
new file mode 100644
index 0000000..a6903d9
--- /dev/null
+++ b/src/ClassFactory.cpp
@@ -0,0 +1,47 @@
+static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/InputOutput/ADLINK/ContinuousAO/src/ClassFactory.cpp,v 1.1.1.1 2004-12-06 10:20:44 syldup Exp $";
+//+=============================================================================
+//
+// file :        ClassFactory.cpp
+//
+// description : C++ source for the class_factory method of the DServer
+//               device class. This method is responsible to create
+//               all class singletin for a device server. It is called
+//               at device server startup
+//
+// project :     TANGO Device Server
+//
+// $Author: syldup $
+//
+// $Revision: 1.1.1.1 $
+//
+// $Log: not supported by cvs2svn $
+//
+// copyleft :     Synchrotron SOLEIL
+//                L'Orme des Merisiers
+//                Saint-Aubin - BP 48
+//
+//-=============================================================================
+//
+//  		This file is generated by POGO
+//	(Program Obviously used to Generate tango Object)
+//
+//         (c) - Software Engineering Group - ESRF
+//=============================================================================
+
+
+#include <tango.h>
+#include <ContinuousAOClass.h>
+
+/**
+ *	Create ContinuousAOClass singleton and store it in DServer object.
+ *
+ * @author	$Author: syldup $
+ * @version	$Revision: 1.1.1.1 $ $
+ */
+
+void Tango::DServer::class_factory()
+{
+
+	add_class(ContinuousAO::ContinuousAOClass::init("ContinuousAO"));
+
+}
diff --git a/src/ContinuousAO.cpp b/src/ContinuousAO.cpp
new file mode 100644
index 0000000..ce52073
--- /dev/null
+++ b/src/ContinuousAO.cpp
@@ -0,0 +1,1343 @@
+static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/InputOutput/ADLINK/ContinuousAO/src/ContinuousAO.cpp,v 1.1.1.1 2004-12-06 10:20:44 syldup Exp $";
+//+=============================================================================
+//
+// file :	  ContinuousAO.cpp
+//
+// description :  C++ source for the ContinuousAO and its commands. 
+//		  The class is derived from Device. It represents the
+//		  CORBA servant object which will be accessed from the
+//		  network. All commands which can be executed on the
+//		  ContinuousAO are implemented in this file.
+//
+// project :	  TANGO Device Server
+//
+// $Author: syldup $
+//
+// $Revision: 1.1.1.1 $
+//
+// $Log: not supported by cvs2svn $
+//
+// copyleft :	  Synchrotron SOLEIL
+//		  L'Orme des Merisiers
+//		  Saint-Aubin - BP 48
+
+//
+//-=============================================================================
+//
+//		This file is generated by POGO
+//	(Program Obviously used to Generate tango Object)
+//
+//	   (c) - Software Engineering Group - ESRF
+//=============================================================================
+
+
+//===================================================================
+//
+//	The folowing table gives the correspondance
+//	between commands and method's name.
+//
+//	Command's name	|	Method's name
+//	----------------------------------------
+//	State	|	dev_state()
+//	Status	|	dev_status()
+//	Start	|	start()
+//	Stop	|	stop()
+//	SetAOScaledData |	set_aoscaled_data()
+//
+//===================================================================
+#include <ContinuousAO.h>
+#include <TangoExceptionsHelper.h>
+#include <asl/ASLExceptionsHandler.h>
+#include <asl/AOData.h>
+#include <math.h>
+namespace ContinuousAO
+{
+
+//+----------------------------------------------------------------------------
+//
+// method :		ContinuousAO::ContinuousAO(string &s)
+// 
+// description :	constructor for simulated ContinuousAO
+//
+// in : - cl : Pointer to the DeviceClass object
+//	- s : Device name 
+//
+//-----------------------------------------------------------------------------
+ContinuousAO::ContinuousAO(Tango::DeviceClass *cl,string &s):Tango::Device_2Impl(cl,s.c_str())
+{
+	init_device();
+}
+
+ContinuousAO::ContinuousAO(Tango::DeviceClass *cl,const char *s):Tango::Device_2Impl(cl,s)
+{
+	init_device();
+}
+
+ContinuousAO::ContinuousAO(Tango::DeviceClass *cl,const char *s,const char *d)
+:Tango::Device_2Impl(cl,s,d)
+{
+	init_device();
+}
+//+----------------------------------------------------------------------------
+//
+// method :		ContinuousAO::delete_device()
+// 
+// description :	will be called at device destruction or at init command.
+//
+//-----------------------------------------------------------------------------
+void ContinuousAO::delete_device()
+{
+	//	Delete device's allocated object
+  if(ao)
+  {
+    delete ao;
+    ao = 0;
+  }
+  if(ch0)
+  {
+    delete ch0;
+    ch0 = 0;
+  }
+  if(ch1)
+  {
+    delete ch1;
+    ch1 = 0;
+  }
+  if(ch2)
+  {
+    delete ch2;
+    ch2 = 0;
+  }
+  if(ch3)
+  {
+    delete ch3;
+    ch3 = 0;
+  }
+  if(ch4)
+  {
+    delete ch4;
+    ch4 = 0;
+  }
+  if(ch5)
+  {
+    delete ch5;
+    ch5 = 0;
+  }
+  if(ch6)
+  {
+    delete ch6;
+    ch6 = 0;
+  }
+  if(ch7)
+  {
+    delete ch7;
+    ch7 = 0;
+  }
+}
+
+//+----------------------------------------------------------------------------
+//
+// method :		ContinuousAO::init_device()
+// 
+// description :	will be called at device initialization.
+//
+//-----------------------------------------------------------------------------
+void ContinuousAO::init_device()
+{
+  INFO_STREAM << "ContinuousAO::ContinuousAO() create device " << device_name << endl;
+  
+  ao = 0;
+  ch0 = 0;
+  ch1 = 0;
+  ch2 = 0;
+  ch3 = 0;
+  ch4 = 0;
+  ch5 = 0;
+  ch6 = 0;
+  ch7 = 0;
+  
+  // Initialise variables to default values
+  //--------------------------------------------
+  get_device_property();
+  
+  //- create a continuous analog output daq
+  ao = new ADLinkContinuousAO(this);
+  
+  //- check memory allocation
+  if (ao == 0)
+  {
+    this->set_internal_state();
+    Tango::Except::throw_exception(
+      (const char*)("OUT_OF_MEMORY"),
+      (const char*)("out of memory error"),
+      (const char*)("ContinuousAO::init_device")
+      );
+  }
+  
+  asl::ContinuousAOConfig config;
+  ch0 = new double[bufferDepth];
+  ch1 = new double[bufferDepth];
+  ch2 = new double[bufferDepth];
+  ch3 = new double[bufferDepth];
+  ch4 = new double[bufferDepth];
+  ch5 = new double[bufferDepth];
+  ch6 = new double[bufferDepth];
+  ch7 = new double[bufferDepth];
+  if(ch0 == 0 || ch1 == 0 || ch2 == 0 || ch3 == 0 || ch4 == 0 || ch5 == 0 ||ch6 == 0 || ch7 == 0)
+  {
+    this->set_internal_state();
+    this->delete_device();
+    Tango::Except::throw_exception(
+      (const char*)("OUT_OF_MEMORY"),
+      (const char*)("out of memory error"),
+      (const char*)("ContinuousAO::init_device")
+      );
+  }
+  
+  
+  // default waveform for group A (channel 0 to 3)
+  asl::AOScaledData default_waveformA(bufferDepth);
+  double max_valA;
+  if(aORefSource == adl::external_reference)
+    max_valA = aORefA ;
+  else
+    max_valA = 10.0;
+  
+  // fill buffer with a sin signal 
+  for (unsigned long i = 0; i < bufferDepth; i++)
+  {
+    (default_waveformA)[i] = ::sin((double)i * 2. * 3.14159 / (double) bufferDepth) * max_valA;
+  }
+  
+  ACE_OS::memcpy(this->ch0, default_waveformA.base(), default_waveformA.size());
+  ACE_OS::memcpy(this->ch1, default_waveformA.base(), default_waveformA.size());
+  ACE_OS::memcpy(this->ch2, default_waveformA.base(), default_waveformA.size());
+  ACE_OS::memcpy(this->ch3, default_waveformA.base(), default_waveformA.size());
+  
+  // default waveform for group A (channel 4 to 7)
+  asl::AOScaledData default_waveformB(bufferDepth);
+  double max_valB;
+  if(aORefSource == adl::external_reference)
+    max_valB = aORefB;
+  else
+    max_valB = 10.0;
+  
+  // fill buffer with a square signal 
+  for (i = 0; i < bufferDepth/2; i++)
+  {
+    default_waveformB[i] = max_valB - 0.01;
+  }
+  for (i = bufferDepth/2; i < bufferDepth; i++)
+  {
+    default_waveformB[i] = -max_valB + 0.01;
+  }
+  ACE_OS::memcpy(this->ch4, default_waveformB.base(), default_waveformB.size());
+  ACE_OS::memcpy(this->ch5, default_waveformB.base(), default_waveformB.size());
+  ACE_OS::memcpy(this->ch6, default_waveformB.base(), default_waveformB.size());
+  ACE_OS::memcpy(this->ch7, default_waveformB.base(), default_waveformB.size());
+  
+  //--------------------------channels config------------------------------------ 
+  asl::ActiveAOChannel ac;
+  
+  // configure all channels
+  ac.polarity = (adl::OutputPolarity)polarity;
+  ac.volt_ref_src = (adl::VoltageReferenceSource)aORefSource;
+  ac.volt_ref = 10.0;
+  
+  //- active/config. channel 0
+  if(channel0Enable)
+  {
+    ac.id = 0;
+    if(aORefSource == adl::external_reference)
+      ac.volt_ref = aORefA;
+    config.add_active_channel(ac);
+    
+    if(channel0Waveform.empty())
+    {
+      WARN_STREAM<<"No waveform is saved in database for channel 0, using a default one"<<endl;
+      config.set_channel_periodic_data(0, default_waveformA);
+    }
+    else if(channel0Waveform.size() != bufferDepth)
+    {
+      WARN_STREAM<<"The waveform saved in database for channel 0 has a different size from property BufferDepth, "<<
+        "using default waveform"<<endl;
+      config.set_channel_periodic_data(0, default_waveformA);
+    }
+    else //put waveform of the Tango database in ch0
+    {
+      // copy the input data in a buffer of type asl::AOScaledData
+      asl::AOScaledData data(bufferDepth);
+      for(int i=0; i<bufferDepth; i++)
+        data[i] = channel0Waveform[i]; 
+      // put the waveform in the configuration
+      config.set_channel_periodic_data(0, data);
+      //cpy data in the attribute of the device
+      ::memcpy(ch0, data.base(), data.size());
+    }
+  }
+  //- active/config. channel 1
+  if(channel1Enable)
+  {
+    ac.id = 1;
+    if(aORefSource == adl::external_reference)
+      ac.volt_ref = aORefA;
+    config.add_active_channel(ac);
+    
+    if(channel1Waveform.empty())
+    {
+      WARN_STREAM<<"No waveform is saved in database for channel 1, using a default one"<<endl;
+      config.set_channel_periodic_data(1, default_waveformA);
+    }
+    else if(channel1Waveform.size() != bufferDepth)
+    {
+      WARN_STREAM<<"The waveform saved in database for channel 1 has a different size from property BufferDepth, "<<
+        "using default waveform"<<endl;
+      config.set_channel_periodic_data(1, default_waveformA);
+    }
+    else //put waveform of the Tango database in ch1
+    {
+      // copy the input data in a buffer of type asl::AOScaledData
+      asl::AOScaledData data(bufferDepth);
+      for(int i=0; i<bufferDepth; i++)
+        data[i] = channel1Waveform[i]; 
+      // put the waveform in the configuration
+      config.set_channel_periodic_data(1, data);
+      //cpy data in the attribute of the device
+      ::memcpy(ch1, data.base(), data.size());
+    }
+  }
+  //- active/config. channel 2
+  if(channel2Enable)
+  {
+    ac.id = 2;
+    if(aORefSource == adl::external_reference)
+      ac.volt_ref = aORefA;
+    config.add_active_channel(ac);
+    config.set_channel_periodic_data(2, default_waveformA);
+    
+    if(channel2Waveform.empty())
+    {
+      WARN_STREAM<<"No waveform is saved in database for channel 2, using a default one"<<endl;
+      config.set_channel_periodic_data(2, default_waveformA);
+    }
+    else if(channel2Waveform.size() != bufferDepth)
+    {
+      WARN_STREAM<<"The waveform saved in database for channel 2 has a different size from property BufferDepth, "<<
+        "using default waveform"<<endl;
+      config.set_channel_periodic_data(2, default_waveformA);
+    }
+    else //put waveform of the Tango database in ch2
+    {
+      // copy the input data in a buffer of type asl::AOScaledData
+      asl::AOScaledData data(bufferDepth);
+      for(int i=0; i<bufferDepth; i++)
+        data[i] = channel2Waveform[i]; 
+      // put the waveform in the configuration
+      config.set_channel_periodic_data(2, data);
+      //cpy data in the attribute of the device
+      ::memcpy(ch2, data.base(), data.size());
+    }
+  }
+  //- active/config. channel 3
+  if(channel3Enable)
+  {
+    ac.id = 3;
+    if(aORefSource == adl::external_reference)
+      ac.volt_ref = aORefA;
+    config.add_active_channel(ac);
+    
+    if(channel3Waveform.empty())
+    {
+      WARN_STREAM<<"No waveform is saved in database for channel 3, using a default one"<<endl;
+      config.set_channel_periodic_data(3, default_waveformA);
+    }
+    else if(channel3Waveform.size() != bufferDepth)
+    {
+      WARN_STREAM<<"The waveform saved in database for channel 3 has a different size from property BufferDepth, "<<
+        "using default waveform"<<endl;
+      config.set_channel_periodic_data(3, default_waveformA);
+    }
+    else //put waveform of the Tango database in ch3
+    {
+      // copy the input data in a buffer of type asl::AOScaledData
+      asl::AOScaledData data(bufferDepth);
+      for(int i=0; i<bufferDepth; i++)
+        data[i] = channel3Waveform[i]; 
+      // put the waveform in the configuration
+      config.set_channel_periodic_data(3, data);
+      //cpy data in the attribute of the device
+      ::memcpy(ch3, data.base(), data.size());
+    }
+  }
+  //- active/config. channel 4
+  if(channel4Enable)
+  {
+    ac.id = 4;
+    if(aORefSource == adl::external_reference)
+      ac.volt_ref = aORefB;
+    config.add_active_channel(ac);
+    
+    if(channel4Waveform.empty())
+    {
+      WARN_STREAM<<"No waveform is saved in database for channel 4, using a default one"<<endl;
+      config.set_channel_periodic_data(4, default_waveformA);
+    }
+    else if(channel4Waveform.size() != bufferDepth)
+    {
+      WARN_STREAM<<"The waveform saved in database for channel 4 has a different size from property BufferDepth, "<<
+        "using default waveform"<<endl;
+      config.set_channel_periodic_data(4, default_waveformA);
+    }
+    else //put waveform of the Tango database in ch4
+    {
+      // copy the input data in a buffer of type asl::AOScaledData
+      asl::AOScaledData data(bufferDepth);
+      for(int i=0; i<bufferDepth; i++)
+        data[i] = channel4Waveform[i]; 
+      // put the waveform in the configuration
+      config.set_channel_periodic_data(4, data);
+      //cpy data in the attribute of the device
+      ::memcpy(ch4, data.base(), data.size());
+    }
+  }
+  //- active/config. channel 5
+  if(channel5Enable)
+  {
+    ac.id = 5;
+    if(aORefSource == adl::external_reference)
+      ac.volt_ref = aORefB;
+    config.add_active_channel(ac);
+    config.set_channel_periodic_data(5, default_waveformB);
+  }
+  //- active/config. channel 6
+  if(channel6Enable)
+  {
+    ac.id = 6;
+    if(aORefSource == adl::external_reference)
+      ac.volt_ref = aORefB;
+    config.add_active_channel(ac);
+    
+    if(channel6Waveform.empty())
+    {
+      WARN_STREAM<<"No waveform is saved in database for channel 6, using a default one"<<endl;
+      config.set_channel_periodic_data(6, default_waveformA);
+    }
+    else if(channel6Waveform.size() != bufferDepth)
+    {
+      WARN_STREAM<<"The waveform saved in database for channel 6 has a different size from property BufferDepth, "<<
+        "using default waveform"<<endl;
+      config.set_channel_periodic_data(6, default_waveformA);
+    }
+    else //put waveform of the Tango database in ch6
+    {
+      // copy the input data in a buffer of type asl::AOScaledData
+      asl::AOScaledData data(bufferDepth);
+      for(int i=0; i<bufferDepth; i++)
+        data[i] = channel6Waveform[i]; 
+      // put the waveform in the configuration
+      config.set_channel_periodic_data(6, data);
+      //cpy data in the attribute of the device
+      ::memcpy(ch6, data.base(), data.size());
+    }
+  }
+  //- active/config. channel 7
+  if(channel7Enable)
+  {
+    ac.id = 7;
+    if(aORefSource == adl::external_reference)
+      ac.volt_ref = aORefB;
+    config.add_active_channel(ac);
+    
+    if(channel7Waveform.empty())
+    {
+      WARN_STREAM<<"No waveform is saved in database for channel 7, using a default one"<<endl;
+      config.set_channel_periodic_data(7, default_waveformA);
+    }
+    else if(channel7Waveform.size() != bufferDepth)
+    {
+      WARN_STREAM<<"The waveform saved in database for channel 7 has a different size from property BufferDepth, "<<
+        "using default waveform"<<endl;
+      config.set_channel_periodic_data(7, default_waveformA);
+    }
+    else //put waveform of the Tango database in ch7
+    {
+      // copy the input data in a buffer of type asl::AOScaledData
+      asl::AOScaledData data(bufferDepth);
+      for(int i=0; i<bufferDepth; i++)
+        data[i] = channel7Waveform[i]; 
+      // put the waveform in the configuration
+      config.set_channel_periodic_data(7, data);
+      //cpy data in the attribute of the device
+      ::memcpy(ch7, data.base(), data.size());
+    }
+  }
+  //--------------------------------start trigger config---------------------------------
+  if(startTrigger)
+  {
+    config.set_trigger_source((adl::AIOTriggerSource)startTriggerSource);
+    config.set_trigger_mode(adl::ao_post);
+    if(startTriggerSource == adl::external_digital)
+    {
+      config.set_trigger_polarity((adl::AOTriggerPolarity)dTRIGPolarity);
+    }
+    else if(startTriggerSource == adl::external_analog)
+    {
+      config.set_analog_trigger_source(adl::analog_trigger_ext);
+      config.set_analog_trigger_condition((adl::AnalogTriggerCondition)aTRIGSelection);
+      unsigned short level;
+      if(aTRIGLevel>=0)
+        level = (aTRIGLevel / 0.078125) + 127;
+      else // v < 0
+        level = (-aTRIGLevel / 0.078125);
+      //the voltage is converted in digital value (8 bits of resolution on EXTATRIG with +/-10 V (256/20 = 0.078125))
+      config.set_analog_low_level_condition(level);
+      config.set_analog_high_level_condition(level);
+    }
+  }  
+  //--------------------------------stop trigger config---------------------------------
+  if(stopTrigger)
+  {
+    config.set_stop_mode(adl::wait_end_waveform);
+    config.set_stop_source ((adl::StopSource)stopTriggerSource);
+  }
+  
+  config.set_output_rate(frequency);
+  
+  DEBUG_STREAM<<"ContinuousAO::init_device : init acq"<<std::endl;
+  _ASL_TRY_ACTION
+    (
+    ao->init(adl::DAQ2502, 0),
+    "init", 
+    "ContinuousAO::init_device",
+    this->set_internal_state()
+    );
+  
+  DEBUG_STREAM<<"ContinuousAO::init_device : config acq"<<std::endl;
+  _ASL_TRY_ACTION
+    (
+    ao->configure(config),
+    "configure", 
+    "ContinuousAO::init_device",
+    this->set_internal_state()
+    );	
+  
+  
+}
+
+
+//+----------------------------------------------------------------------------
+//
+// method :		ContinuousAO::readDeviceProperies()
+// 
+// description :	Read the device properties from database.
+//
+//-----------------------------------------------------------------------------
+void ContinuousAO::get_device_property()
+{
+  //	Initialize your default values here.
+  //------------------------------------------
+  boardNum =  0;
+  frequency = 50000.0; //50 kHz
+  
+  startTrigger = 0; //no start trigger
+  stopTrigger = 0;  //no stop trigger
+  
+  string default_start_source = "DTRIG";
+  startTriggerSource = adl::external_digital;
+  
+  string default_stop_source = "AFI1";
+  stopTriggerSource = adl::afi1_termination;
+  
+  string default_atrig_select = "BELOW";
+  aTRIGSelection = adl::below_low_level;
+  
+  aTRIGLevel = 5.0;
+  
+  string default_dtrig_pol = "RISING";
+  dTRIGPolarity = adl::ao_rising_edge ;
+  
+  aORefA = 10.0;
+  aORefB = 10.0;
+  
+  string default_pol = "BP";
+  polarity = adl::bipolar;   
+  
+  string default_aoref = "INTERN";
+  aORefSource = adl::internal_reference;
+
+  channel0Enable = 1;
+  channel1Enable = 0;
+  channel2Enable = 0;
+  channel3Enable = 0;
+  channel4Enable = 0;
+  channel5Enable = 0;
+  channel6Enable = 0;
+  channel7Enable = 0;
+
+  bufferDepth = 4096;
+  
+  //	Read device properties from database.(Automatic code generation)
+  //-------------------------------------------------------------
+	Tango::DbData	data;
+	data.push_back(Tango::DbDatum("BoardNum"));
+	data.push_back(Tango::DbDatum("Frequency"));
+	data.push_back(Tango::DbDatum("StartTrigger"));
+	data.push_back(Tango::DbDatum("StopTrigger"));
+	data.push_back(Tango::DbDatum("StartTriggerSource"));
+	data.push_back(Tango::DbDatum("StopTriggerSource"));
+	data.push_back(Tango::DbDatum("ATRIGSelection"));
+	data.push_back(Tango::DbDatum("ATRIGLevel"));
+	data.push_back(Tango::DbDatum("DTRIGPolarity"));
+	data.push_back(Tango::DbDatum("AORefA"));
+	data.push_back(Tango::DbDatum("AORefB"));
+	data.push_back(Tango::DbDatum("Polarity"));
+	data.push_back(Tango::DbDatum("AORefSource"));
+	data.push_back(Tango::DbDatum("Channel0Enable"));
+	data.push_back(Tango::DbDatum("Channel1Enable"));
+	data.push_back(Tango::DbDatum("Channel2Enable"));
+	data.push_back(Tango::DbDatum("Channel3Enable"));
+	data.push_back(Tango::DbDatum("Channel4Enable"));
+	data.push_back(Tango::DbDatum("Channel5Enable"));
+	data.push_back(Tango::DbDatum("Channel6Enable"));
+	data.push_back(Tango::DbDatum("Channel7Enable"));
+	data.push_back(Tango::DbDatum("BufferDepth"));
+	data.push_back(Tango::DbDatum("Channel0Waveform"));
+	data.push_back(Tango::DbDatum("Channel1Waveform"));
+	data.push_back(Tango::DbDatum("Channel2Waveform"));
+	data.push_back(Tango::DbDatum("Channel3Waveform"));
+	data.push_back(Tango::DbDatum("Channel4Waveform"));
+	data.push_back(Tango::DbDatum("Channel5Waveform"));
+	data.push_back(Tango::DbDatum("Channel6Waveform"));
+	data.push_back(Tango::DbDatum("Channel7Waveform"));
+
+	//	Call database and extract values
+	//--------------------------------------------
+	get_db_device()->get_property(data);
+	
+
+  //	End of Automatic code generation
+  //-------------------------------------------------------------
+  Tango::DbData data_put;
+  //-------------------------------------------------------------
+  if (data[0].is_empty()==false)
+  {
+    unsigned short bnum;
+    data[1]  >>  bnum;
+    //check value
+    if(bnum<0 || bnum>= 7)//num max of boards in chassis
+    {
+      WARN_STREAM<<"ContinuousAO::get_device_property: the value of BoardNum is invalid"
+        <<"using default value "<<boardNum<<endl;
+    }
+    else
+    {
+      boardNum = bnum;
+    }
+  }
+  else
+  {
+    Tango::DbDatum  property("BoardNum");
+    property << boardNum;
+    data_put.push_back(property);
+    WARN_STREAM<<"BoardNum property is not set in database, loading default value in database:"
+      <<boardNum<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[1].is_empty()==false)
+  {
+    data[1]  >>  frequency;   
+  }
+  else
+  {
+    Tango::DbDatum  property("Frequency");
+    property << frequency;
+    data_put.push_back(property);
+    WARN_STREAM<<"Frequency property is not set in database, loading default value in database:"
+      <<frequency<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[2].is_empty()==false)
+  {
+    data[2]  >>  startTrigger;	 
+  }
+  else
+  {
+    Tango::DbDatum  property("StartTrigger");
+    property << startTrigger;
+    data_put.push_back(property);
+    WARN_STREAM<<"StartTrigger property is not set in database, loading default value in database:"
+      <<startTrigger<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[3].is_empty()==false)
+  {
+    data[3]  >>  stopTrigger; 
+  }
+  else
+  {
+    Tango::DbDatum  property("StopTrigger");
+    property << stopTrigger;
+    data_put.push_back(property);
+    WARN_STREAM<<"StopTrigger property is not set in database, loading default value in database:"
+      <<stopTrigger<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[4].is_empty()==false)
+  {
+    data[4]  >>  startTriggerSource;
+    string start_source;
+    data[4]  >>  start_source;
+    if(start_source == "DTRIG")
+      startTriggerSource = adl::external_digital;
+    else if(start_source == "ATRIG")
+      startTriggerSource = adl::external_analog;
+    else
+      WARN_STREAM<<"ContinuousAO::get_device_property: the value of StartTriggerSource is not valid"
+      <<"using default value "<<default_start_source<<endl;
+  }
+  else
+  {
+    Tango::DbDatum  property("StartTriggerSource");
+    property << default_start_source;
+    data_put.push_back(property);
+    WARN_STREAM<<"StartTriggerSource property is not set in database, loading default value in database:"
+      <<default_start_source<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[5].is_empty()==false)
+  {
+    string stop_source; 
+    data[5]  >>  stop_source;
+    if(stop_source == "ATRIG")
+      stopTriggerSource = adl::analog_trigger_termination;
+    else if(stop_source == "AFI0")
+      stopTriggerSource = adl::afi0_termination;
+    else if(stop_source == "AFI1")
+      stopTriggerSource = adl::afi1_termination;
+    else
+      WARN_STREAM<<"ContinuousAO::get_device_property: the value of StopTriggerSource is not valid"
+      <<"using default value "<<default_stop_source<<endl;
+  }
+  else
+  {
+    Tango::DbDatum  property("StopTriggerSource");
+    property << default_stop_source;
+    data_put.push_back(property);
+    WARN_STREAM<<"StopTriggerSource property is not set in database, loading default value in database:"
+      <<default_stop_source<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[6].is_empty()==false)
+  {
+    string atrig_select;
+    data[6]  >>  atrig_select;
+    if(atrig_select == "BELOW")
+      aTRIGSelection = adl::below_low_level;
+    else if(atrig_select == "ABOVE")
+      aTRIGSelection = adl::above_high_level;
+    else
+      WARN_STREAM<<"ContinuousAO::get_device_property: the value of ATRIGSelection is not valid"
+      <<"using default value "<<default_atrig_select<<endl;
+  }
+  else
+  {
+    Tango::DbDatum  property("ATRIGSelection");
+    property << default_atrig_select;
+    data_put.push_back(property);
+    WARN_STREAM<<"ATRIGSelection property is not set in database, loading default value in database:"
+      <<default_atrig_select<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[7].is_empty()==false)
+  {
+    data[7]  >>  aTRIGLevel;
+  }
+  else
+  {
+    Tango::DbDatum  property("ATRIGLevel");
+    property << aTRIGLevel;
+    data_put.push_back(property);
+    WARN_STREAM<<"ATRIGLevel property is not set in database, loading default value in database:"
+      <<aTRIGLevel<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[8].is_empty()==false)
+  {
+    string dtrig_pol;
+    data[8]  >>  dtrig_pol;
+    if(dtrig_pol == "RISING")
+      dTRIGPolarity = adl::ao_rising_edge;
+    else if(dtrig_pol == "FALLING")
+      dTRIGPolarity = adl::ao_falling_edge;
+    else
+      WARN_STREAM<<"ContinuousAO::get_device_property: the value of DTRIGPolarity is not valid"
+      <<"using default value "<<default_dtrig_pol<<endl;
+  }
+  else
+  {
+    Tango::DbDatum  property("DTRIGPolarity");
+    property << default_dtrig_pol;
+    data_put.push_back(property);
+    WARN_STREAM<<"DTRIGPolarity property is not set in database, loading default value in database:"
+      <<default_dtrig_pol<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[9].is_empty()==false)
+  {
+    double ref;
+    data[9]  >>  ref;
+    if(ref >= -10.0 || ref <= 10.0)
+      aORefA = ref;
+    else
+      WARN_STREAM<<"ContinuousAO::get_device_property: the value of AORefA is not valid"
+      <<"using default value "<<aORefA<<endl;
+  }
+  else
+  {
+    Tango::DbDatum  property("AORefA");
+    property << aORefA;
+    data_put.push_back(property);
+    WARN_STREAM<<"AORefA property is not set in database, loading default value in database:"
+      <<aORefA<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[10].is_empty()==false)
+  {
+    double ref;
+    data[9]  >>  ref;
+    if(ref >= -10.0 || ref <= 10.0)
+      aORefB = ref;
+    else
+      WARN_STREAM<<"ContinuousAO::get_device_property: the value of AORefB is not valid"
+      <<"using default value "<<aORefB<<endl;
+  }
+  else
+  {
+    Tango::DbDatum  property("AORefB");
+    property << aORefB;
+    data_put.push_back(property);
+    WARN_STREAM<<"AORefB property is not set in database, loading default value in database:"
+      <<aORefB<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[11].is_empty()==false)
+  {
+    string pol;
+    data[11]  >>  pol;
+    if(pol == "BP")
+      polarity = adl::bipolar;
+    else if(pol == "UP")
+      polarity = adl::unipolar;
+    else
+      WARN_STREAM<<"ContinuousAO::get_device_property: the value of Polarity is not valid"
+      <<"using default value "<<default_pol<<endl;
+  }
+  else
+  {
+    Tango::DbDatum  property("Polarity");
+    property << default_pol;
+    data_put.push_back(property);
+    WARN_STREAM<<"Polarity property is not set in database, loading default value in database:"
+      <<default_pol<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[12].is_empty()==false)	
+  {
+    string aoref;
+    data[12]  >>  aoref;
+    if(aoref == "INTERN")
+      aORefSource = adl::internal_reference;
+    else if(aoref == "EXTERN")
+      aORefSource = adl::external_reference;
+    else
+      WARN_STREAM<<"ContinuousAO::get_device_property: the value of AORefSource is not valid"
+      <<"using default value "<<default_aoref<<endl;
+  }
+  else
+  {
+    Tango::DbDatum  property("AORefSource");
+    property << default_aoref;
+    data_put.push_back(property);
+    WARN_STREAM<<"AORefSource property is not set in database, loading default value in database:"
+      <<default_aoref<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[13].is_empty()==false)
+  {
+    data[13]  >>  channel0Enable;
+  }
+  else
+  {
+    Tango::DbDatum  property("Channel0Enable");
+    property << channel0Enable;
+    data_put.push_back(property);
+    WARN_STREAM<<"Channel0Enable property is not set in database, loading default value in database:"
+      <<channel0Enable<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[14].is_empty()==false)
+  {
+    data[14]  >>  channel1Enable;
+  }
+  else
+  {
+    Tango::DbDatum  property("Channel1Enable");
+    property << channel1Enable;
+    data_put.push_back(property);
+    WARN_STREAM<<"Channel1Enable property is not set in database, loading default value in database:"
+      <<channel1Enable<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[15].is_empty()==false)
+  {
+    data[15]  >>  channel2Enable;
+  }
+  else
+  {
+    Tango::DbDatum  property("Channel2Enable");
+    property << channel2Enable;
+    data_put.push_back(property);
+    WARN_STREAM<<"Channel2Enable property is not set in database, loading default value in database:"
+      <<channel2Enable<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[16].is_empty()==false)
+  {
+    data[16]  >>  channel3Enable;
+  }
+  else
+  {
+    Tango::DbDatum  property("Channel3Enable");
+    property << channel3Enable;
+    data_put.push_back(property);
+    WARN_STREAM<<"Channel3Enable property is not set in database, loading default value in database:"
+      <<channel3Enable<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[17].is_empty()==false)
+  {
+    data[17]  >>  channel4Enable;
+  }
+  else
+  {
+    Tango::DbDatum  property("Channel4Enable");
+    property << channel4Enable;
+    data_put.push_back(property);
+    WARN_STREAM<<"Channel4Enable property is not set in database, loading default value in database:"
+      <<channel4Enable<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[18].is_empty()==false)
+  {
+    data[18]  >>  channel5Enable;
+  }
+  else
+  {
+    Tango::DbDatum  property("Channel5Enable");
+    property << channel5Enable;
+    data_put.push_back(property);
+    WARN_STREAM<<"Channel5Enable property is not set in database, loading default value in database:"
+      <<channel5Enable<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[19].is_empty()==false)
+  {
+    data[19]  >>  channel6Enable;
+  }
+  else
+  {
+    Tango::DbDatum  property("Channel6Enable");
+    property << channel6Enable;
+    data_put.push_back(property);
+    WARN_STREAM<<"Channel6Enable property is not set in database, loading default value in database:"
+      <<channel6Enable<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[20].is_empty()==false)
+  {
+    data[20]  >>  channel7Enable;
+  }
+  else
+  {
+    Tango::DbDatum  property("Channel7Enable");
+    property << channel7Enable;
+    data_put.push_back(property);
+    WARN_STREAM<<"Channel7Enable property is not set in database, loading default value in database:"
+      <<channel7Enable<<endl;
+  }
+  //-------------------------------------------------------------
+  if (data[21].is_empty()==false)
+  {
+    data[21]  >>  bufferDepth;
+  }
+  else
+  {
+    Tango::DbDatum  property("BufferDepth");
+    property << bufferDepth;
+    data_put.push_back(property);
+    WARN_STREAM<<"BufferDepth property is not set in database, loading default value in database:"
+      <<bufferDepth<<endl;
+  }
+  //update database for not initiliazed properties
+  get_db_device()->put_property(data_put);
+}
+//+----------------------------------------------------------------------------
+//
+// method :		ContinuousAO::always_executed_hook()
+// 
+// description :	method always executed before any command is executed
+//
+//-----------------------------------------------------------------------------
+void ContinuousAO::always_executed_hook()
+{
+	
+}
+
+//+----------------------------------------------------------------------------
+//
+// method :		ContinuousAO::read_attr_hardware()
+// 
+// description :	Hardware acquisition for attributes.
+//
+//-----------------------------------------------------------------------------
+void ContinuousAO::read_attr_hardware(vector<long> &attr_list)
+{
+	DEBUG_STREAM << "In read_attr_hardware for " << attr_list.size();
+	DEBUG_STREAM << " attribute(s)" << endl;
+	
+	//	Add your own code here
+	//---------------------------------
+  ao->lock_data();
+
+  this->err_ctr = ao->err_ctr;
+  
+  ao->unlock_data();
+ 
+}
+
+//+----------------------------------------------------------------------------
+//
+// method :		ContinuousAO::read_attr()
+// 
+// description :	Extract real attribute values from
+//					hardware acquisition result.
+//
+//-----------------------------------------------------------------------------
+void ContinuousAO::read_attr(Tango::Attribute &attr)
+{
+	string &attr_name = attr.get_name();
+
+	DEBUG_STREAM << "In read_attr for attribute " << attr_name << endl;
+
+  //	Switch on attribute name
+  //---------------------------------
+  if (attr_name == "channel0")
+  {
+    if(channel0Enable)
+      attr.set_value(ch0, bufferDepth);
+    else 
+      attr.set_quality(Tango::ATTR_INVALID);
+  }
+  else if (attr_name == "channel1")
+  {
+    if(channel1Enable)
+      attr.set_value(ch1, bufferDepth);
+    else 
+      attr.set_quality(Tango::ATTR_INVALID);
+  }
+  else if (attr_name == "channel2")
+  {
+    if(channel2Enable)
+      attr.set_value(ch2, bufferDepth);
+    else 
+      attr.set_quality(Tango::ATTR_INVALID);
+  }
+  else if (attr_name == "channel3")
+  {
+    if(channel3Enable)
+      attr.set_value(ch3, bufferDepth);
+    else 
+      attr.set_quality(Tango::ATTR_INVALID);
+  }
+  else if (attr_name == "channel4")
+  {
+    if(channel4Enable)
+      attr.set_value(ch4, bufferDepth);
+    else 
+      attr.set_quality(Tango::ATTR_INVALID);
+  }
+  else if (attr_name == "channel5")
+  {
+    if(channel5Enable)
+      attr.set_value(ch5, bufferDepth);
+    else 
+      attr.set_quality(Tango::ATTR_INVALID);
+  }
+  else if (attr_name == "channel6")
+  {
+    if(channel6Enable)
+      attr.set_value(ch6, bufferDepth);
+    else 
+      attr.set_quality(Tango::ATTR_INVALID);
+  }
+  else if (attr_name == "channel7")
+  { 
+    if(channel7Enable)
+      attr.set_value(ch7, bufferDepth);
+    else 
+      attr.set_quality(Tango::ATTR_INVALID);
+  }
+  else if (attr_name == "errorCounter")
+  {
+    attr.set_value(&err_ctr);
+  }
+	else if (attr_name == "useBoardFifo")
+	{
+    // the information about data loading on fifo in available only after Start command.
+    if(this->get_state() == Tango::RUNNING)
+      attr.set_value(&use_fifo);
+    else
+      attr.set_quality(Tango::ATTR_INVALID);
+	}
+}
+
+//+------------------------------------------------------------------
+/**
+ *	method: ContinuousAO::start
+ *
+ *	description:	method to execute "Start"
+ *	start the generation.
+ *
+ *
+ */
+//+------------------------------------------------------------------
+void ContinuousAO::start()
+{
+  DEBUG_STREAM << "ContinuousAO::start(): entering... !" << endl;
+  
+  _ASL_TRY_ACTION
+    (
+    ao->start(),
+    "start", 
+    "ContinuousAO::start",
+    this->set_internal_state()
+    );
+  
+  // get if the output data have been loaded in the onboard FIFO.
+  // depends on the size of the buffer.
+  this->use_fifo = ao->use_board_fifo();
+  
+}
+
+//+------------------------------------------------------------------
+/**
+ *	method: ContinuousAO::stop
+ *
+ *	description:	method to execute "Stop"
+ *	stop the generation.
+ *
+ *
+ */
+//+------------------------------------------------------------------
+void ContinuousAO::stop()
+{
+	DEBUG_STREAM << "ContinuousAO::stop(): entering... !" << endl;
+
+	_ASL_TRY_ACTION
+    (
+    ao->stop(),
+    "stop", 
+    "ContinuousAO::stop",
+    this->set_internal_state()
+    );
+
+}
+
+//+------------------------------------------------------------------
+/**
+ *	method: ContinuousAO::set_aoscaled_data
+ *
+ *	description:	method to execute "SetAOScaledData"
+ *	Give one period of the signal to generated of a specified channel in volts.
+ *
+ * @param	argin	The channel number (string).  The output data in volts (double)
+ *
+ */
+//+------------------------------------------------------------------
+void ContinuousAO::set_aoscaled_data(const Tango::DevVarDoubleStringArray *argin)
+{
+  DEBUG_STREAM << "ContinuousAO::set_aoscaled_data(): entering... !" << endl;
+  
+  if((*argin).svalue.length() != 1)
+  {
+    Tango::Except::throw_exception(
+      (const char*)("OPERATION_NOT_ALLOWED"),
+      (const char*)("The size of the string argument must be 1"),
+      (const char*)("ContinuousAO::set_aoscaled_data")
+      );
+  }
+  Tango::DevVarStringArray chan_dvsa = (*argin).svalue;
+  string chan_s = chan_dvsa[0];
+  char chan = chan_s[0];
+  if(chan < '0' || chan > '7')
+  {
+    Tango::Except::throw_exception(
+      (const char*)("OPERATION_NOT_ALLOWED"),
+      (const char*)("The string argument must be between 0 and 7"),
+      (const char*)("ContinuousAO::set_aoscaled_data")
+      );
+  }
+  if((*argin).dvalue.length() != bufferDepth)
+  {
+    Tango::Except::throw_exception(
+      (const char*)("OPERATION_NOT_ALLOWED"),
+      (const char*)("The depth of the given buffer must be the same as specified in Device Properties"),
+      (const char*)("ContinuousAO::set_aoscaled_data")
+      );
+  }
+  
+  // stop the current generation
+  _ASL_TRY_ACTION
+    (
+    ao->stop(),
+    "stop", 
+    "ContinuousAO::set_aoscaled_data",
+    this->set_internal_state()
+    );
+  
+  // get the configuration
+  asl::ContinuousAOConfig config = ao->configuration();
+  
+  // copy the input data in a buffer of type asl::AOScaledData
+  asl::AOScaledData data(bufferDepth);
+  ::memcpy(data.base(), (*argin).dvalue.get_buffer(), ((*argin).dvalue.length())*sizeof(double));
+  
+  //NB: if a chan hasn't been enable with properties, 'ao' will do nothing
+  config.set_channel_periodic_data(chan - '0', data);
+  
+  // copy the new data in the attributes of the device.
+  switch(chan)
+  {
+  case '0':
+    ::memcpy(ch0, data.base(), data.size());
+    //save the waveform in the database
+    this->save_waveform(ch0, "Channel0Waveform");
+    break;
+  case '1':
+    ::memcpy(ch1, data.base(), data.size());
+    //save the waveform in the database
+    this->save_waveform(ch1, "Channel1Waveform");
+    break;
+  case '2':
+    ::memcpy(ch2, data.base(), data.size());
+    //save the waveform in the database
+    this->save_waveform(ch2, "Channel2Waveform");
+    break;
+  case '3':
+    ::memcpy(ch3, data.base(), data.size());
+    //save the waveform in the database
+    this->save_waveform(ch3, "Channel3Waveform");
+    break;
+  case '4':
+    ::memcpy(ch4, data.base(), data.size());
+    //save the waveform in the database
+    this->save_waveform(ch4, "Channel4Waveform");
+    break;
+  case '5':
+    ::memcpy(ch5, data.base(), data.size());
+    //save the waveform in the database
+    this->save_waveform(ch5, "Channel5Waveform");
+    break;
+  case '6':
+    ::memcpy(ch6, data.base(), data.size());
+    //save the waveform in the database
+    this->save_waveform(ch6, "Channel6Waveform");
+    break;
+  case '7':
+    ::memcpy(ch7, data.base(), data.size());
+    //save the waveform in the database
+    this->save_waveform(ch7, "Channel7Waveform");
+    break;
+  default:
+    Tango::Except::throw_exception(
+      (const char*)("OPERATION_NOT_ALLOWED"),
+      (const char*)("The string argument must be between 0 and 7"),
+      (const char*)("ContinuousAO::set_aoscaled_data")
+      );
+    break;
+  }
+  
+  // give the configuration with a new channel
+  _ASL_TRY_ACTION
+    (
+    ao->configure(config),
+    "configure", 
+    "ContinuousAO::set_aoscaled_data",
+    this->set_internal_state()
+    );
+
+}
+//+------------------------------------------------------------------
+/**
+*	method: ContinuousAO::set_internal_state
+*/
+//+------------------------------------------------------------------
+void  ContinuousAO::set_internal_state(void)
+{
+  if(ao == 0)
+  {
+    this->set_state(Tango::UNKNOWN);
+    this->set_status("The acquisition was not initialized properly");
+  }
+  else
+  {
+    switch(ao->state())
+    {
+    case asl::ContinuousAO::STANDBY:
+      this->set_state(Tango::STANDBY);
+      this->set_status("The acquisition is stopped");
+      break;
+    case asl::ContinuousAO::RUNNING:
+    case asl::ContinuousAO::RESTARTING:
+    case asl::ContinuousAO::ABORTING:
+      this->set_state(Tango::RUNNING);
+      this->set_status("The acquisition is running");
+      break;
+    case asl::ContinuousAO::UNKNOWN:
+    default:
+      this->set_state(Tango::UNKNOWN);
+      this->set_status("The acquisition is in an unknown state");
+      break;
+    }
+  }
+}
+//+------------------------------------------------------------------
+/**
+*	method: ContinuousAO::save_waveform
+* Save a waveform in tango database
+*/
+//+------------------------------------------------------------------
+void ContinuousAO::save_waveform(double* waveform, string wfm_channel)
+{
+  // cpy the waveform in a double vector 
+  vector<double> vec;
+  for(int i=0; i<bufferDepth; i++)
+    vec.push_back(waveform[i]);
+
+  //put the vector in a DBDatum
+  Tango::DbDatum dbdatum(wfm_channel);
+  dbdatum << vec;
+
+  // put it in a DbData
+  Tango::DbData db_data;
+  db_data.push_back(dbdatum);
+  
+  // put the waveform in the database 
+  _DEV_TRY
+    (	  
+    get_db_device()->put_property(db_data),
+    "put_property",
+    "ContinuousAO::save_waveform",
+    );
+}
+}	//	namespace
diff --git a/src/ContinuousAO.h b/src/ContinuousAO.h
new file mode 100644
index 0000000..4678e05
--- /dev/null
+++ b/src/ContinuousAO.h
@@ -0,0 +1,335 @@
+//=============================================================================
+//
+// file :	 ContinuousAO.h
+//
+// description : Include for the ContinuousAO class.
+//
+// project :	Continuous Anolog Output
+//
+// $Author: syldup $
+//
+// $Revision: 1.1.1.1 $
+//
+// $Log: not supported by cvs2svn $
+//
+// copyleft :	  Synchrotron SOLEIL
+//		  L'Orme des Merisiers
+//		  Saint-Aubin - BP 48
+
+//
+//=============================================================================
+//
+//		This file is generated by POGO
+//	(Program Obviously used to Generate tango Object)
+//
+//	   (c) - Software Engineering Group - ESRF
+//=============================================================================
+#ifndef _CONTINUOUSAO_H
+#define _CONTINUOUSAO_H
+
+#include <ADLinkContinuousAO.h>
+#include <tango.h>
+
+
+//using namespace Tango;
+
+/**
+ * @author	$Author: syldup $
+ * @version	$Revision: 1.1.1.1 $ $
+ */
+
+ //	Add your own constants definitions here.
+ //-----------------------------------------------
+
+
+namespace ContinuousAO
+{
+
+/**
+ * Class Description:
+ * Perform continuous anolog ouput (waveform generation) on the selected outputs.
+ */
+
+/*
+ *	Device States Description:
+ *	Tango::UNKNOWN :	
+ *	Tango::STANDBY :	
+ *	Tango::RUNNING :	
+ */
+
+
+class ContinuousAO: public Tango::Device_2Impl
+{
+public :
+	//	Add your own data members here
+	//-----------------------------------------
+
+
+	//	Here is the Start of the automatic code generation part
+	//------------------------------------------------------------- 
+/**
+ *	@name attributes
+ *	Attributs member data.
+ */
+//@{
+		Tango::DevDouble	*attr_channel0_read;
+		Tango::DevDouble	*attr_channel1_read;
+		Tango::DevDouble	*attr_channel2_read;
+		Tango::DevDouble	*attr_channel3_read;
+		Tango::DevDouble	*attr_channel4_read;
+		Tango::DevDouble	*attr_channel5_read;
+		Tango::DevDouble	*attr_channel6_read;
+		Tango::DevDouble	*attr_channel7_read;
+		Tango::DevDouble	*attr_errorCounter_read;
+		Tango::DevShort *attr_useBoardFifo_read;
+//@}
+
+/**
+ *	@name Device properties
+ *	Device properties member data.
+ */
+//@{
+/**
+ *	The number of the board in the chassis cPCI.
+ */
+	Tango::DevUShort	boardNum;
+/**
+ *	The output frequency (the rate the samples are outputed).
+ */
+	Tango::DevDouble	frequency;
+/**
+ *	1 if using a start trigger, 0 otherwise.
+ */
+	Tango::DevShort startTrigger;
+/**
+ *	1 if using a stop trigger, 0 otherwise.
+ */
+	Tango::DevShort stopTrigger;
+/**
+ *	The start trigger source. Analog trigger DTRIG or ATRIG.
+ */
+	Tango::DevUShort	startTriggerSource;
+/**
+ *	The stop trigger source. anolog trigger ATRIG or pin AFI0 of AFI1.
+ */
+	Tango::DevUShort	stopTriggerSource;
+/**
+ *	select the type of analog trigger. Can be BELOW (trigger occurs below ATRIGLevel)
+ *	or can be ABOVE (trigger occurs above ATRIGLevel).
+ */
+	Tango::DevUShort	aTRIGSelection;
+/**
+ *	The analog trigger level in volts.
+ */
+	Tango::DevDouble	aTRIGLevel;
+/**
+ *	The edges on which the trigger are detected. Can be RISING or FALLING.
+ */
+	Tango::DevUShort	dTRIGPolarity;
+/**
+ *	The value of the reference voltage gave on pin AORefA.
+ */
+	Tango::DevDouble	aORefA;
+/**
+ *	The value of the reference voltage gave on pin AORefB.
+ */
+	Tango::DevDouble	aORefB;
+/**
+ *	BP for unipolar outputs or UP for bipolar outputs.
+ */
+	Tango::DevUShort	polarity;
+/**
+ *	Select the internal reference (10.0 volts) with INTERN or the external references
+ *	AORefA and AORefB with EXTERN.
+ */
+	Tango::DevUShort	aORefSource;
+/**
+ *	1 if enable channel 0, 0 otherwise.
+ */
+	Tango::DevShort channel0Enable;
+/**
+ *	1 if enable channel 1, 0 otherwise.
+ */
+	Tango::DevShort channel1Enable;
+/**
+ *	1 if enable channel 2, 0 otherwise.
+ */
+	Tango::DevShort channel2Enable;
+/**
+ *	1 if enable channel 3, 0 otherwise.
+ */
+	Tango::DevShort channel3Enable;
+/**
+ *	1 if enable channel 4, 0 otherwise.
+ */
+	Tango::DevShort channel4Enable;
+/**
+ *	1 if enable channel 5, 0 otherwise.
+ */
+	Tango::DevShort channel5Enable;
+/**
+ *	1 if enable channel 6, 0 otherwise.
+ */
+	Tango::DevShort channel6Enable;
+/**
+ *	1 if enable channel 7, 0 otherwise.
+ */
+	Tango::DevShort channel7Enable;
+/**
+ *	The buffer depth for <b>one channel</b>.
+ */
+	Tango::DevUShort	bufferDepth;
+/**
+ *	The waveform for channel 0 (attribute persistency).
+ */
+	vector<double>	channel0Waveform;
+/**
+ *	The waveform for channel 1 (attribute persistency).
+ */
+	vector<double>	channel1Waveform;
+/**
+ *	The waveform for channel 2 (attribute persistency).
+ */
+	vector<double>	channel2Waveform;
+/**
+ *	The waveform for channel 3 (attribute persistency).
+ */
+	vector<double>	channel3Waveform;
+/**
+ *	The waveform for channel 4 (attribute persistency).
+ */
+	vector<double>	channel4Waveform;
+/**
+ *	The waveform for channel 5 (attribute persistency).
+ */
+	vector<double>	channel5Waveform;
+/**
+ *	The waveform for channel 6 (attribute persistency).
+ */
+	vector<double>	channel6Waveform;
+/**
+ *	The waveform for channel 7 (attribute persistency).
+ */
+	vector<double>	channel7Waveform;
+//@}
+
+/**@name Constructors
+ * Miscellaneous constructors */
+//@{
+/**
+ * Constructs a newly allocated Command object.
+ *
+ *	@param cl	Class.
+ *	@param s	Device Name
+ */
+	ContinuousAO(Tango::DeviceClass *,string &);
+/**
+ * Constructs a newly allocated Command object.
+ *
+ *	@param cl	Class.
+ *	@param s	Device Name
+ */
+	ContinuousAO(Tango::DeviceClass *,const char *);
+/**
+ * Constructs a newly allocated Command object.
+ *
+ *	@param cl	Class.
+ *	@param s	Device name
+ *	@param d	Device description.
+ */
+	ContinuousAO(Tango::DeviceClass *,const char *,const char *);
+//@}
+
+/**@name Destructor
+ * Only one desctructor is defined for this class */
+//@{
+/**
+ * The object desctructor.
+ */	
+	~ContinuousAO() { delete_device(); };
+/**
+ *	will be called at device destruction or at init command.
+ */
+	void delete_device();
+//@}
+
+	
+/**@name Miscellaneous methods */
+//@{
+/**
+ *	Initialize the device
+ */
+	virtual void init_device();
+/**
+ *	Always executed method befor execution command method.
+ */
+	virtual void always_executed_hook();
+
+//@}
+
+/**
+ * @name ContinuousAO methods prototypes
+ */
+
+//@{
+/**
+ *	Hardware acquisition for attributes.
+ */
+	virtual void read_attr_hardware(vector<long> &attr_list);
+/**
+ *	Extract real attribute values from hardware acquisition result.
+ */
+	virtual void read_attr(Tango::Attribute &attr);
+/**
+ * start the generation.
+ *	@exception DevFailed
+ */
+	void	start();
+/**
+ * stop the generation.
+ *	@exception DevFailed
+ */
+	void	stop();
+/**
+ * Give one period of the signal to generated of a specified channel in volts.
+ *	@param	argin	The channel number (string).  The output data in volts (double)
+ *	@exception DevFailed
+ */
+	void	set_aoscaled_data(const Tango::DevVarDoubleStringArray *);
+
+/**
+ *	Read the device properties from database
+ */
+	 void get_device_property();
+//@}
+
+	//	Here is the end of the automatic code generation part
+	//------------------------------------------------------------- 
+   ADLinkContinuousAO* ao;
+  // asl::ContinuousAOConfig* config;
+   void set_internal_state(void);
+   // save a channel waveform in the database 
+   void ContinuousAO::save_waveform(double* waveform, string wfm_channel);
+   double* ch0;
+   double* ch1;
+   double* ch2;
+   double* ch3;
+   double* ch4;
+   double* ch5;
+   double* ch6;
+   double* ch7;
+   double err_ctr;
+   short use_fifo;
+
+
+
+
+
+protected :	
+	//	Add your own data members here
+	//-----------------------------------------
+};
+
+}	// namespace
+
+#endif	// _CONTINUOUSAO_H
diff --git a/src/ContinuousAOClass.cpp b/src/ContinuousAOClass.cpp
new file mode 100644
index 0000000..82fc9cc
--- /dev/null
+++ b/src/ContinuousAOClass.cpp
@@ -0,0 +1,588 @@
+static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/InputOutput/ADLINK/ContinuousAO/src/ContinuousAOClass.cpp,v 1.1.1.1 2004-12-06 10:20:44 syldup Exp $";
+
+static const char *TagName = "$Name: not supported by cvs2svn $";
+
+static const char *FileName= "$Source: /users/chaize/newsvn/cvsroot/InputOutput/ADLINK/ContinuousAO/src/ContinuousAOClass.cpp,v $"; 
+
+static const char *HttpServer= "http://controle/DeviceServer/doc/";
+
+static const char *RCSfile = "$RCSfile: ContinuousAOClass.cpp,v $"; 
+//+=============================================================================
+//
+// file :        ContinuousAOClass.cpp
+//
+// description : C++ source for the ContinuousAOClass. A singleton
+//               class derived from DeviceClass. It implements the
+//               command list and all properties and methods required
+//               by the ContinuousAO once per process.
+//
+// project :     TANGO Device Server
+//
+// $Author: syldup $
+//
+// $Revision: 1.1.1.1 $
+//
+// $Log: not supported by cvs2svn $
+//
+// copyleft :     Synchrotron SOLEIL
+//                L'Orme des Merisiers
+//                Saint-Aubin - BP 48/
+//-=============================================================================
+//
+//  		This file is generated by POGO
+//	(Program Obviously used to Generate tango Object)
+//
+//         (c) - Software Engineering Group - ESRF
+//=============================================================================
+
+
+//#include <tango.h>
+
+#include <ContinuousAO.h>
+#include <ContinuousAOClass.h>
+
+
+namespace ContinuousAO
+{
+
+
+//+----------------------------------------------------------------------------
+//
+// method : 		StartCmd::StartCmd()
+// 
+// description : 	constructor for the command of the ContinuousAO.
+//
+// In : - name : The command name
+//		- in : The input parameter type
+//		- out : The output parameter type
+//		- in_desc : The input parameter description
+//		- out_desc : The output parameter description
+//
+//-----------------------------------------------------------------------------
+StartCmd::StartCmd(	const char		*name,
+								Tango::CmdArgType in,
+				       			Tango::CmdArgType out,
+								const char		*in_desc,
+				       			const char		*out_desc,
+								Tango::DispLevel level)
+:Command(name,in,out,in_desc,out_desc, level)
+{
+}
+//
+//	Constructor without in/out parameters description
+//
+StartCmd::StartCmd(	const char		*name,
+								Tango::CmdArgType in,
+				       			Tango::CmdArgType out)
+:Command(name,in,out)
+{
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		StartCmd::is_allowed()
+// 
+// description : 	method to test whether command is allowed or not in this
+//			state. In this case, the command is allowed only if
+//			the device is in ON state
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns :	boolean - true == is allowed , false == not allowed
+//
+//-----------------------------------------------------------------------------
+bool StartCmd::is_allowed(Tango::DeviceImpl *device, const CORBA::Any &in_any)
+{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		StartCmd::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *StartCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "DevTemplateCmd::execute(): arrived" << endl;
+
+	((static_cast<ContinuousAO *>(device))->start());
+	return new CORBA::Any();
+}
+
+
+
+//+----------------------------------------------------------------------------
+//
+// method : 		StopCmd::StopCmd()
+// 
+// description : 	constructor for the command of the ContinuousAO.
+//
+// In : - name : The command name
+//		- in : The input parameter type
+//		- out : The output parameter type
+//		- in_desc : The input parameter description
+//		- out_desc : The output parameter description
+//
+//-----------------------------------------------------------------------------
+StopCmd::StopCmd(	const char		*name,
+								Tango::CmdArgType in,
+				       			Tango::CmdArgType out,
+								const char		*in_desc,
+				       			const char		*out_desc,
+								Tango::DispLevel level)
+:Command(name,in,out,in_desc,out_desc, level)
+{
+}
+//
+//	Constructor without in/out parameters description
+//
+StopCmd::StopCmd(	const char		*name,
+								Tango::CmdArgType in,
+				       			Tango::CmdArgType out)
+:Command(name,in,out)
+{
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		StopCmd::is_allowed()
+// 
+// description : 	method to test whether command is allowed or not in this
+//			state. In this case, the command is allowed only if
+//			the device is in ON state
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns :	boolean - true == is allowed , false == not allowed
+//
+//-----------------------------------------------------------------------------
+bool StopCmd::is_allowed(Tango::DeviceImpl *device, const CORBA::Any &in_any)
+{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return true;
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		StopCmd::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *StopCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "DevTemplateCmd::execute(): arrived" << endl;
+
+	((static_cast<ContinuousAO *>(device))->stop());
+	return new CORBA::Any();
+}
+
+
+//+----------------------------------------------------------------------------
+//
+// method : 		SetAOScaledDataCmd::SetAOScaledDataCmd()
+// 
+// description : 	constructor for the command of the ContinuousAO.
+//
+// In : - name : The command name
+//		- in : The input parameter type
+//		- out : The output parameter type
+//		- in_desc : The input parameter description
+//		- out_desc : The output parameter description
+//
+//-----------------------------------------------------------------------------
+SetAOScaledDataCmd::SetAOScaledDataCmd(	const char		*name,
+								Tango::CmdArgType in,
+				       			Tango::CmdArgType out,
+								const char		*in_desc,
+				       			const char		*out_desc,
+								Tango::DispLevel level)
+:Command(name,in,out,in_desc,out_desc, level)
+{
+}
+//
+//	Constructor without in/out parameters description
+//
+SetAOScaledDataCmd::SetAOScaledDataCmd(	const char		*name,
+								Tango::CmdArgType in,
+				       			Tango::CmdArgType out)
+:Command(name,in,out)
+{
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		SetAOScaledDataCmd::is_allowed()
+// 
+// description : 	method to test whether command is allowed or not in this
+//			state. In this case, the command is allowed only if
+//			the device is in ON state
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns :	boolean - true == is allowed , false == not allowed
+//
+//-----------------------------------------------------------------------------
+bool SetAOScaledDataCmd::is_allowed(Tango::DeviceImpl *device, const CORBA::Any &in_any)
+{
+		//	End of Generated Code
+
+		//	Re-Start of Generated Code
+		return true;
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		SetAOScaledDataCmd::execute()
+// 
+// description : 	method to trigger the execution of the command.
+//                PLEASE DO NOT MODIFY this method core without pogo   
+//
+// in : - device : The device on which the command must be excuted
+//		- in_any : The command input data
+//
+// returns : The command output data (packed in the Any object)
+//
+//-----------------------------------------------------------------------------
+CORBA::Any *SetAOScaledDataCmd::execute(Tango::DeviceImpl *device,const CORBA::Any &in_any)
+{
+
+	cout2 << "DevTemplateCmd::execute(): arrived" << endl;
+
+	const Tango::DevVarDoubleStringArray	*argin;
+	extract(in_any, argin);
+
+	((static_cast<ContinuousAO *>(device))->set_aoscaled_data(argin));
+	return new CORBA::Any();
+}
+
+//
+//----------------------------------------------------------------
+//	Initialize pointer for singleton pattern
+//----------------------------------------------------------------
+//
+ContinuousAOClass *ContinuousAOClass::_instance = NULL;
+
+//+----------------------------------------------------------------------------
+//
+// method : 		ContinuousAOClass::ContinuousAOClass(string &s)
+// 
+// description : 	constructor for the ContinuousAOClass
+//
+// in : - s : The class name
+//
+//-----------------------------------------------------------------------------
+ContinuousAOClass::ContinuousAOClass(string &s):DeviceClass(s)
+{
+
+	cout2 << "Entering ContinuousAOClass constructor" << endl;
+	write_class_property();
+	
+	cout2 << "Leaving ContinuousAOClass constructor" << endl;
+
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		ContinuousAOClass::~ContinuousAOClass()
+// 
+// description : 	destructor for the ContinuousAOClass
+//
+//-----------------------------------------------------------------------------
+ContinuousAOClass::~ContinuousAOClass()
+{
+	_instance = NULL;
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		ContinuousAOClass::instance
+// 
+// description : 	Create the object if not already done. Otherwise, just
+//			return a pointer to the object
+//
+// in : - name : The class name
+//
+//-----------------------------------------------------------------------------
+ContinuousAOClass *ContinuousAOClass::init(const char *name)
+{
+	if (_instance == NULL)
+	{
+		try
+		{
+			string s(name);
+			_instance = new ContinuousAOClass(s);
+		}
+		catch (bad_alloc)
+		{
+			throw;
+		}		
+	}		
+	return _instance;
+}
+
+ContinuousAOClass *ContinuousAOClass::instance()
+{
+	if (_instance == NULL)
+	{
+		cerr << "Class is not initialised !!" << endl;
+		exit(-1);
+	}
+	return _instance;
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		ContinuousAOClass::command_factory
+// 
+// description : 	Create the command object(s) and store them in the 
+//			command list
+//
+//-----------------------------------------------------------------------------
+void ContinuousAOClass::command_factory()
+{
+	command_list.push_back(new StartCmd("Start",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new StopCmd("Stop",
+		Tango::DEV_VOID, Tango::DEV_VOID,
+		"",
+		"",
+		Tango::OPERATOR));
+	command_list.push_back(new SetAOScaledDataCmd("SetAOScaledData",
+		Tango::DEVVAR_DOUBLESTRINGARRAY, Tango::DEV_VOID,
+		"The channel number ,in string).  The output data in volts ,in double)",
+		"",
+		Tango::OPERATOR));
+
+	//	add polling if any
+	for (unsigned int i=0 ; i<command_list.size(); i++)
+	{
+	}
+}
+
+//+----------------------------------------------------------------------------
+//
+// method : 		ContinuousAOClass::device_factory
+// 
+// description : 	Create the device object(s) and store them in the 
+//			device list
+//
+// in :		Tango::DevVarStringArray *devlist_ptr : The device name list
+//
+//-----------------------------------------------------------------------------
+void ContinuousAOClass::device_factory(const Tango::DevVarStringArray *devlist_ptr)
+{
+	
+	for (long i=0 ; i < devlist_ptr->length() ; i++)
+	{
+		cout4 << "Device name : " << (*devlist_ptr)[i].in() << endl;
+						
+		// Create device and add it into the device list
+		//----------------------------------------------------
+		device_list.push_back(new ContinuousAO(this, (*devlist_ptr)[i]));							 
+
+		// Export device to the outside world
+		// Check before id database used.
+		//---------------------------------------------
+		if (Tango::Util::_UseDb == true)
+			export_device(device_list.back());
+		else
+			export_device(device_list.back(), (*devlist_ptr)[i]);
+	}
+}
+//+----------------------------------------------------------------------------
+//	Method: ContinuousAOClass::attribute_factory(vector<Tango::Attr *> &att_list)
+//-----------------------------------------------------------------------------
+void ContinuousAOClass::attribute_factory(vector<Tango::Attr *> &att_list)
+{
+	//	Attribute : channel0
+	Tango::SpectrumAttr	*channel0 = 
+		new Tango::SpectrumAttr("channel0", Tango::DEV_DOUBLE, 1000000);
+	Tango::UserDefaultAttrProp	channel0_prop;
+	channel0_prop.set_label("channel0");
+	channel0_prop.set_unit("volts");
+	channel0->set_default_properties(channel0_prop);
+	att_list.push_back(channel0);
+
+	//	Attribute : channel1
+	Tango::SpectrumAttr	*channel1 = 
+		new Tango::SpectrumAttr("channel1", Tango::DEV_DOUBLE, 100000);
+	Tango::UserDefaultAttrProp	channel1_prop;
+	channel1_prop.set_label("channel1");
+	channel1_prop.set_unit("volts");
+	channel1->set_default_properties(channel1_prop);
+	att_list.push_back(channel1);
+
+	//	Attribute : channel2
+	Tango::SpectrumAttr	*channel2 = 
+		new Tango::SpectrumAttr("channel2", Tango::DEV_DOUBLE, 100000);
+	Tango::UserDefaultAttrProp	channel2_prop;
+	channel2_prop.set_label("channel2");
+	channel2_prop.set_unit("volts");
+	channel2->set_default_properties(channel2_prop);
+	att_list.push_back(channel2);
+
+	//	Attribute : channel3
+	Tango::SpectrumAttr	*channel3 = 
+		new Tango::SpectrumAttr("channel3", Tango::DEV_DOUBLE, 100000);
+	Tango::UserDefaultAttrProp	channel3_prop;
+	channel3_prop.set_label("channel3");
+	channel3->set_default_properties(channel3_prop);
+	att_list.push_back(channel3);
+
+	//	Attribute : channel4
+	Tango::SpectrumAttr	*channel4 = 
+		new Tango::SpectrumAttr("channel4", Tango::DEV_DOUBLE, 100000);
+	Tango::UserDefaultAttrProp	channel4_prop;
+	channel4_prop.set_label("channel4");
+	channel4_prop.set_unit("volts");
+	channel4->set_default_properties(channel4_prop);
+	att_list.push_back(channel4);
+
+	//	Attribute : channel5
+	Tango::SpectrumAttr	*channel5 = 
+		new Tango::SpectrumAttr("channel5", Tango::DEV_DOUBLE, 100000);
+	Tango::UserDefaultAttrProp	channel5_prop;
+	channel5_prop.set_label("channel");
+	channel5_prop.set_unit("volts");
+	channel5->set_default_properties(channel5_prop);
+	att_list.push_back(channel5);
+
+	//	Attribute : channel6
+	Tango::SpectrumAttr	*channel6 = 
+		new Tango::SpectrumAttr("channel6", Tango::DEV_DOUBLE, 100000);
+	Tango::UserDefaultAttrProp	channel6_prop;
+	channel6_prop.set_label("channel6");
+	channel6_prop.set_unit("volts");
+	channel6->set_default_properties(channel6_prop);
+	att_list.push_back(channel6);
+
+	//	Attribute : channel7
+	Tango::SpectrumAttr	*channel7 = 
+		new Tango::SpectrumAttr("channel7", Tango::DEV_DOUBLE, 100000);
+	Tango::UserDefaultAttrProp	channel7_prop;
+	channel7_prop.set_label("channel7");
+	channel7_prop.set_unit("volts");
+	channel7->set_default_properties(channel7_prop);
+	att_list.push_back(channel7);
+
+	//	Attribute : errorCounter
+	Tango::Attr	*error_counter = 
+		new Tango::Attr("errorCounter", Tango::DEV_DOUBLE, Tango::READ);
+	Tango::UserDefaultAttrProp	error_counter_prop;
+	error_counter_prop.set_label("error counter");
+	error_counter_prop.set_format("%i");
+	error_counter_prop.set_description("Errors occuring during the waveform generation.");
+	error_counter->set_default_properties(error_counter_prop);
+	att_list.push_back(error_counter);
+
+	//	Attribute : useBoardFifo
+	Tango::Attr	*use_board_fifo = 
+		new Tango::Attr("useBoardFifo", Tango::DEV_SHORT, Tango::READ);
+	Tango::UserDefaultAttrProp	use_board_fifo_prop;
+	use_board_fifo_prop.set_label("use board FIFO");
+	use_board_fifo_prop.set_description("Set to 1 if data have been loaded in FIFO.\nSet to 0 if data is continuously tranfered through DMA (possible underrun)");
+	use_board_fifo->set_default_properties(use_board_fifo_prop);
+	att_list.push_back(use_board_fifo);
+
+}
+//+----------------------------------------------------------------------------
+//
+// method : 		ContinuousAOClass::write_class_property
+// 
+// description : 	Set class description as property in database
+//
+//-----------------------------------------------------------------------------
+void ContinuousAOClass::write_class_property()
+{
+	//	First time, check if database used
+	//--------------------------------------------
+	if (Tango::Util::_UseDb == false)
+		return;
+
+	//	Prepeare DbDatum
+	//--------------------------------------------
+	Tango::DbDatum	title("ProjectTitle");
+	string	str_title("Continuous Anolog Output");
+	title << str_title;
+
+	Tango::DbDatum	description("Description");
+	string	str_desc("Perform continuous anolog ouput (waveform generation) on the selected outputs.");
+	description << str_desc;
+	
+		// Use the doc_url field to store all information 
+		// on the server version and CVS 
+		string::size_type pos, len; 
+		
+		// 1) Manage module name  
+		//  get rid of the $RCSfile:  prefix and of Class.cpp suffix 
+		string classname = RCSfile;
+		
+		pos = classname.find("$RCSfile: ");
+		len = classname.length();
+		
+		if (pos != string::npos) 
+			classname= classname.substr(pos+10, len- pos-10); 
+
+		pos = classname.find ("Class.cpp",0);
+		if (pos != string::npos) 
+			classname=classname.substr(0,pos);
+		
+		// 2)  Manage version number with SOLEIL CVS rules 
+		// tag name is in the form : release_1_0 ==> transform it to 1.0
+		// 
+		string version ; 
+		string str_TagName=string(TagName); 
+		
+		pos = str_TagName.find_first_of("_",0); 
+		if (pos != string::npos) 
+			version= str_TagName.substr(pos+1, 3);
+
+		pos = version.find_first_of("_",0); 
+		if (pos != string::npos) 
+			version[pos] = '.';
+
+		
+	//  Store all info in the str_url property		
+		
+		string	str_url=  "Documentation URL = " + string(HttpServer) + classname +"-" + version + "/index.html" + "\n";
+		str_url= str_url + " Version CVS Tag = " + string(TagName)+ "\n"; 
+		str_url= str_url + " CVS location = " + string(FileName)+ "\n"; 
+		
+		Tango::DbDatum	doc_url("doc_url");
+		
+		doc_url << str_url;
+
+		// Push everything in DataBase
+
+		Tango::DbData	data;
+		data.push_back(title);
+		data.push_back(description);
+		data.push_back(doc_url);
+		//	Call database and and values
+		//--------------------------------------------
+		get_db_class()->put_property(data);
+}
+
+}	// namespace
diff --git a/src/ContinuousAOClass.h b/src/ContinuousAOClass.h
new file mode 100644
index 0000000..428e48a
--- /dev/null
+++ b/src/ContinuousAOClass.h
@@ -0,0 +1,110 @@
+//=============================================================================
+//
+// file :         ContinuousAOClass.h
+//
+// description :  Include for the ContinuousAOClass root class.
+//                This class is represents the singleton class for
+//                the ContinuousAO device class.
+//                It contains all properties and methods which the 
+//                ContinuousAO requires only once e.g. the commands.
+//			
+// project :      TANGO Device Server
+//
+// $Author: syldup $
+//
+// $Revision: 1.1.1.1 $
+//
+// $Log: not supported by cvs2svn $
+//
+// copyleft :     Synchrotron SOLEIL
+//                L'Orme des Merisiers
+//                Saint-Aubin - BP 48
+//=============================================================================
+//
+//  		This file is generated by POGO
+//	(Program Obviously used to Generate tango Object)
+//
+//         (c) - Software Engineering Group - ESRF
+//=============================================================================
+
+#ifndef _CONTINUOUSAOCLASS_H
+#define _CONTINUOUSAOCLASS_H
+
+#include <tango.h>
+
+
+namespace ContinuousAO
+{
+//
+// Define classes for commands
+//
+class SetAOScaledDataCmd : public Tango::Command
+{
+public:
+	SetAOScaledDataCmd(const char *,Tango::CmdArgType, Tango::CmdArgType,const char *,const char *, Tango::DispLevel);
+	SetAOScaledDataCmd(const char *,Tango::CmdArgType, Tango::CmdArgType);
+	~SetAOScaledDataCmd() {};
+	
+	virtual bool is_allowed (Tango::DeviceImpl *, const CORBA::Any &);
+	virtual CORBA::Any *execute (Tango::DeviceImpl *, const CORBA::Any &);
+};
+
+
+class StopCmd : public Tango::Command
+{
+public:
+	StopCmd(const char *,Tango::CmdArgType, Tango::CmdArgType,const char *,const char *, Tango::DispLevel);
+	StopCmd(const char *,Tango::CmdArgType, Tango::CmdArgType);
+	~StopCmd() {};
+	
+	virtual bool is_allowed (Tango::DeviceImpl *, const CORBA::Any &);
+	virtual CORBA::Any *execute (Tango::DeviceImpl *, const CORBA::Any &);
+};
+
+
+class StartCmd : public Tango::Command
+{
+public:
+	StartCmd(const char *,Tango::CmdArgType, Tango::CmdArgType,const char *,const char *, Tango::DispLevel);
+	StartCmd(const char *,Tango::CmdArgType, Tango::CmdArgType);
+	~StartCmd() {};
+	
+	virtual bool is_allowed (Tango::DeviceImpl *, const CORBA::Any &);
+	virtual CORBA::Any *execute (Tango::DeviceImpl *, const CORBA::Any &);
+};
+
+
+
+//
+// The ContinuousAOClass singleton definition
+//
+
+class ContinuousAOClass : public Tango::DeviceClass
+{
+public:
+
+//	add your own data members here
+//------------------------------------
+
+public:
+
+//	Method prototypes
+	static ContinuousAOClass *init(const char *);
+	static ContinuousAOClass *instance();
+	~ContinuousAOClass();
+	
+protected:
+	ContinuousAOClass(string &);
+	static ContinuousAOClass *_instance;
+	void command_factory();
+	void attribute_factory(vector<Tango::Attr *> &);
+	void write_class_property();
+
+private:
+	void device_factory(const Tango::DevVarStringArray *);
+};
+
+
+}	//	namespace ContinuousAO
+
+#endif // _CONTINUOUSAOCLASS_H
diff --git a/src/Doxyfile b/src/Doxyfile
new file mode 100644
index 0000000..5ec99fa
--- /dev/null
+++ b/src/Doxyfile
@@ -0,0 +1,831 @@
+# Doxyfile 1.2.10
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = "Continuous Anolog Output"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       =	D:\devices\devices_adlink\ContinuousAO\src/doc_html
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French, 
+# German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, 
+# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.
+
+OUTPUT_LANGUAGE        = English
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these class will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH        = 
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a class diagram (in Html and LaTeX) for classes with base or 
+# super classes. Setting the tag to NO turns the diagrams off.
+
+CLASS_DIAGRAMS         = YES
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower case letters. If set to YES upper case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# users are adviced to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments  will behave just like the Qt-style comments (thus requiring an 
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# reimplements.
+
+INHERIT_DOCS           = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consist of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 
+# only. Doxygen will then generate output that is more tailored for C. 
+# For instance some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text.
+
+WARN_FORMAT            = 
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  =	D:\devices\devices_adlink\ContinuousAO\src
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+FILE_PATTERNS          = *.h *.cpp
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories.
+
+EXCLUDE_PATTERNS       = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.
+
+INPUT_FILTER           = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse.
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = 
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = /segfs/tango/templates/pogo/html/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = /segfs/tango/templates/pogo/html/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the Html help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript and frames is required (for instance Netscape 4.0+ 
+# or Internet explorer 4.0+).
+
+GENERATE_TREEVIEW      = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = 
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimised for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = 
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = YES
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assigments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = 
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = 
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_XML           = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tagfiles.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermedate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
+
+# The CGI_NAME tag should be the name of the CGI script that 
+# starts the search engine (doxysearch) with the correct parameters. 
+# A script with this name will be generated by doxygen.
+
+CGI_NAME               = 
+
+# The CGI_URL tag should be the absolute URL to the directory where the 
+# cgi binaries are located. See the documentation of your http daemon for 
+# details.
+
+CGI_URL                = 
+
+# The DOC_URL tag should be the absolute URL to the directory where the 
+# documentation is located. If left blank the absolute path to the 
+# documentation, with file:// prepended to it, will be used.
+
+DOC_URL                = 
+
+# The DOC_ABSPATH tag should be the absolute path to the directory where the 
+# documentation is located. If left blank the directory on the local machine 
+# will be used.
+
+DOC_ABSPATH            = 
+
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary 
+# is installed.
+
+BIN_ABSPATH            = 
+
+# The EXT_DOC_PATHS tag can be used to specify one or more paths to 
+# documentation generated for other projects. This allows doxysearch to search 
+# the documentation for these projects as well.
+
+EXT_DOC_PATHS          = 
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000..af900da
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,91 @@
+#=============================================================================
+#
+# file :        Makefile.h
+#
+# description : Include for the ContinuousAO class.
+#
+# project :     Makefile to generate a Tango server
+#
+# $Author: syldup $
+#
+# $Revision: 1.1.1.1 $
+#
+# $Log: not supported by cvs2svn $
+#
+# copyleft :    European Synchrotron Radiation Facility
+#               BP 220, Grenoble 38043
+#               FRANCE
+#
+#=============================================================================
+#  		This file is generated by POGO
+#	(Program Obviously used to Generate tango Object)
+#
+#         (c) - Software Engineering Group - ESRF
+#=============================================================================
+#
+
+ifdef _solaris
+CC = CC
+BIN_DIR = solaris7_CC
+endif
+
+ifdef linux
+CC = c++
+AR = ar
+BIN_DIR = suse72
+endif
+
+TANGO_HOME   =  /segfs/tango
+INCLUDE_DIRS =  -I$(TANGO_HOME)/include/$(BIN_DIR)	-I.
+LIB_DIRS     =  -L $(TANGO_HOME)/lib/$(BIN_DIR)
+
+ifdef _solaris
+CXXFLAGS =  -mt -D_PTHREADS $(INCLUDE_DIRS)
+LFLAGS =  -g $(LIB_DIRS)  		\
+				-ltango			\
+				-llog4tango		\
+				-lomniORB4 		\
+				-lomniDynamic4	\
+				-lomnithread	\
+				-lpthread		\
+				-lposix4 -lsocket -lnsl
+endif
+
+ifdef linux
+CXXFLAGS =  -g -D_REENTRANT $(INCLUDE_DIRS)
+LFLAGS =  -g $(LIB_DIRS)  		\
+				-ltango			\
+				-llog4tango		\
+				-lomniORB4 		\
+				-lomniDynamic4	\
+				-lomnithread	\
+				-ldl -lpthread
+endif
+
+
+
+
+CLASS =	ContinuousAO
+
+SVC_OBJS = 	main.o	\
+		ClassFactory.o	\
+		$(CLASS)Class.o	\
+		$(CLASS).o
+
+SVC_INC = 	$(CLASS)Class.h \
+			$(CLASS).h
+
+
+%.o: %.cpp $(SVC_INC)
+	$(CC) $(CXXFLAGS) -c $<
+			
+all: $(CLASS)
+
+$(CLASS):	$(SVC_OBJS)
+	$(CC) $(SVC_OBJS) -o $(CLASS) $(LFLAGS)
+
+clean:
+	rm -f *.o $(CLASS) core
+	
+install:
+	cp $(CLASS) $(TANGO_HOME)/bin/$(BIN_DIR)
diff --git a/src/Makefile.VC b/src/Makefile.VC
new file mode 100644
index 0000000..65dd20b
--- /dev/null
+++ b/src/Makefile.VC
@@ -0,0 +1,38 @@
+#
+device_server= ContinuousAO
+#
+INCUSER= /I$(D2KDASK_INC) /I$(PCISDASK_INC)
+#
+LIBUSER= $(ASL_LIB)/asl.lib $(ACE_LIB)/ace.lib
+
+#
+# ------------------Fin des modifications pour le end user -------------------------------------
+#
+make_dir=$(SOLEIL_ROOT)\env
+
+#  Les d�finitions communes � tous les DeviceServeurs
+!include $(make_dir)\tango.opt
+
+exe_device_server= $(EXEDIR)\ds_$(device_server).exe
+pdb_name= $(TEMPLIBDIR)\$(device_server).pdb
+
+# --------------------------------------
+#   Partie sp�cifique Device Server
+# --------------------------------------
+
+LISTEOBJ = \
+   $(OBJDIR)\ADLinkContinuousAO.OBJ\
+   $(OBJDIR)\$(device_server).OBJ\
+   $(OBJDIR)\ClassFactory.OBJ\
+   $(OBJDIR)\main.OBJ\
+   $(OBJDIR)\$(device_server)Class.OBJ
+
+SRCS    =    \
+   ADLinkContinuousAO.CPP\
+   $(device_server).CPP\
+   ClassFactory.CPP\
+   main.CPP \
+   $(device_server)Class.CPP
+# --------------------------------------
+!include $(make_dir)\common_target.opt
+
diff --git a/src/README b/src/README
new file mode 100644
index 0000000..343a30d
--- /dev/null
+++ b/src/README
@@ -0,0 +1,40 @@
+//-============================================================
+//
+//         This class has been generated by POGO
+//      (Program Obviously used to Generate tango Object)
+//
+//         (c) - Software Engineering Group - ESRF
+//=============================================================
+
+
+Files generated:
+===============
+ContinuousAO.cpp:        Source code for the ContinuousAO class and its commands.
+                        This class is derived from DeviceImpl_2 class.
+                        It represents the CORBA servant obbject which
+                        will be accessed from the network.
+                        All commands which can be executed on the
+                        ContinuousAO are implemented in this file.
+
+ContinuousAO.h:  Include for the ContinuousAO class.
+                    Server class prototypes and descriptions.
+
+ContinuousAOClass.cpp:   A singleton class derived fromContinuousAO.
+                        It implements the command list and all properties
+                        and methods required by the ContinuousAO once per process
+
+ContinuousAOClass.h:	Include for the ContinuousAOClass root class.
+                        This class is represents the singleton class for
+                        the ContinuousAO device class.
+                        It contains all properties and methods which the 
+                        ContinuousAO requires only once e.g. the commands.
+
+main.cpp:		C++ source for a TANGO device server main.
+                        The main rule is to initialise (and create) the Tango
+                        system and to create the DServerClass singleton.
+                        The main should be the same for every Tango device server.
+
+ClassFactory.cpp:	C++ source for the class_factory method of the DServer
+                        device class. This method is responsible to create
+                        all class singletin for a device server. It is called
+                        at device server startup
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..f917a03
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,72 @@
+static const char *RcsId = "$Header: /users/chaize/newsvn/cvsroot/InputOutput/ADLINK/ContinuousAO/src/main.cpp,v 1.1.1.1 2004-12-06 10:20:44 syldup Exp $";
+//+=============================================================================
+//
+// file :        main.cpp
+//
+// description : C++ source for a TANGO device server main.
+//               The main rule is to initialise (and create) the Tango
+//               system and to create the DServerClass singleton.
+//               The main should be the same for every Tango device server.
+//
+// project :     TANGO Device Server
+//
+// $Author: syldup $
+//
+// $Revision: 1.1.1.1 $ $
+//
+// $Log: not supported by cvs2svn $
+//
+// copyleft :     Synchrotron SOLEIL
+//                L'Orme des Merisiers
+//                Saint-Aubin - BP 48
+//
+//-=============================================================================
+//
+//  		This file is generated by POGO
+//	(Program Obviously used to Generate tango Object)
+//
+//         (c) - Software Engineering Group - ESRF
+//=============================================================================
+#include <ace\ACE.h>
+#include <tango.h>
+
+
+int main(int argc,char *argv[])
+{
+
+	Tango::Util *tg;
+	try
+	{
+		// Initialise the device server
+		//----------------------------------------
+		tg = Tango::Util::init(argc,argv);
+
+		// Create the device server singleton 
+		//	which will create everything
+		//----------------------------------------
+		tg->server_init(false);
+
+		// Run the endless loop
+		//----------------------------------------
+		cout << "Ready to accept request" << endl;
+		tg->server_run();
+	}
+	catch (bad_alloc)
+	{
+		cout << "Can't allocate memory to store device object !!!" << endl;
+		cout << "Exiting" << endl;
+	}
+	catch (CORBA::Exception &e)
+	{
+		Tango::Except::print_exception(e);
+		
+		cout << "Received a CORBA_Exception" << endl;
+		cout << "Exiting" << endl;
+	}
+
+	//	clean ORB, threads.....
+	//--------------------------
+	tg->server_cleanup();
+	
+	return(0);
+}
-- 
GitLab