diff --git a/doc/DeviceServerUsersGuide_en.doc b/doc/DeviceServerUsersGuide_en.doc
new file mode 100644
index 0000000000000000000000000000000000000000..739e7ee92579db0bf1d47b623f66a43c617574ae
Binary files /dev/null and b/doc/DeviceServerUsersGuide_en.doc differ
diff --git a/doc/Doxyfile b/doc/Doxyfile
new file mode 100644
index 0000000000000000000000000000000000000000..c4b1a995c0026cfc6cf203e7c383162cb29f3c2d
--- /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 0000000000000000000000000000000000000000..383d44521208efc4f7445f52b4b9ba7174cdd7fe
--- /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 0000000000000000000000000000000000000000..5d640e2cd0a22d4996df05e02fd6d01c37ae9142
--- /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 0000000000000000000000000000000000000000..82dbba2bfbf1f7232fda887b050b4a59ee3397f5
--- /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 0000000000000000000000000000000000000000..039ee3311d80a9af10034080ac4d9588e93ca491
--- /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 0000000000000000000000000000000000000000..07e6925485b50a021510ec79b631e4cf5065f29b
--- /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 0000000000000000000000000000000000000000..01abe5c835196e1474a068d9e8bdc28ee18d2b95
--- /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 0000000000000000000000000000000000000000..a41dd83c6f85edef434100a5d452c918f989cdf5
--- /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 0000000000000000000000000000000000000000..02660af153f05e0684773027955462329310468a
--- /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 0000000000000000000000000000000000000000..29c83c52b65661594e32dfa10999f840139fc3a8
--- /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 0000000000000000000000000000000000000000..0d21467e837afc528fccea6565a763b0e8a77ae8
--- /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 0000000000000000000000000000000000000000..24e18048aa09cd943b45a655a542ba6848e850b4
--- /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 0000000000000000000000000000000000000000..d9a634279e9b0a9d5f6c54ce01c7febbc16e7222
--- /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 0000000000000000000000000000000000000000..e273b5bb18d61d964ea5ada668d8020304b840f8
--- /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 0000000000000000000000000000000000000000..a6903d9c4df6b006cc66437e0a9efc7513b54437
--- /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 0000000000000000000000000000000000000000..ce5207330e8a4fc9149e80bfac01d6cffda4e780
--- /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 0000000000000000000000000000000000000000..4678e055950715de76a5159775a0ad00812a0f82
--- /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 0000000000000000000000000000000000000000..82fc9cc0a33572b7654a8407429074e6b2f7f287
--- /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 0000000000000000000000000000000000000000..428e48ab6bd9738a25f14f6b5f3da2e98729eb3d
--- /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 0000000000000000000000000000000000000000..5ec99fabbc7d52e73600d743c2ccac88b217d4a4
--- /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 0000000000000000000000000000000000000000..af900dade41baf34a0cd2c3ed1ce46be1ff7f5f7
--- /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 0000000000000000000000000000000000000000..65dd20beb77521a13b88575896221d2e33194a30
--- /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 0000000000000000000000000000000000000000..343a30d3c2b8451b1bef9513613af866e8209c85
--- /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 0000000000000000000000000000000000000000..f917a03d0cc2ffa8005330e4017aeb967ef09271
--- /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);
+}