Commit efd1ed5e1e7524b7f79306f6c44111a203b4bba7

Authored by Jojo-1000
Committed by Moritz Wirger
1 parent 58186067

Update documentation pages.

- use snippets to verify that the code actually compiles
- travis compiles examples and snippets
- update Doxyfile
.travis.yml
... ... @@ -49,11 +49,12 @@ install:
49 49  
50 50 script:
51 51 ############################################################################
52   - # Build main and tests
  52 + # Build main, tests and examples
53 53 ############################################################################
54 54 - mkdir -p build
55 55 - cd build
56   - - cmake .. -Dhueplusplus_TESTS=ON -DCMAKE_BUILD_TYPE=Debug
  56 + - cmake .. -Dhueplusplus_TESTS=ON -DCMAKE_BUILD_TYPE=Debug -Dhueplusplus_EXAMPLES=ON
  57 + - make hueplusplus_examples hueplusplus_snippets
57 58 - make coveragetest
58 59 - cd ..
59 60 - doxygen Doxyfile
... ...
CMakeLists.txt
... ... @@ -22,7 +22,7 @@ endif()
22 22  
23 23 # options to set
24 24 option(hueplusplus_TESTS "Build tests" OFF)
25   -option(hueplusplus_SAMPLES "Build examples" OFF)
  25 +option(hueplusplus_EXAMPLES "Build examples" OFF)
26 26  
27 27 option(CLANG_TIDY_FIX "Perform fixes for Clang-Tidy" OFF)
28 28 find_program(CLANG_TIDY_EXE NAMES "clang-tidy" DOC "Path to clang-tidy executable")
... ... @@ -100,6 +100,6 @@ if(hueplusplus_TESTS)
100 100 add_subdirectory("test")
101 101 endif()
102 102  
103   -if(hueplusplus_SAMPLES)
  103 +if(hueplusplus_EXAMPLES)
104 104 add_subdirectory("examples")
105 105 endif()
... ...
Doxyfile
1   -# Doxyfile 1.8.11
  1 +# Doxyfile 1.8.20
2 2  
3 3 # This file describes the settings to be used by the documentation system
4 4 # doxygen (www.doxygen.org) for a project.
... ... @@ -17,11 +17,11 @@
17 17 # Project related configuration options
18 18 #---------------------------------------------------------------------------
19 19  
20   -# This tag specifies the encoding used for all characters in the config file
21   -# that follow. The default is UTF-8 which is also the encoding used for all text
22   -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
23   -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
24   -# for the list of possible encodings.
  20 +# This tag specifies the encoding used for all characters in the configuration
  21 +# file that follow. The default is UTF-8 which is also the encoding used for all
  22 +# text before the first occurrence of this tag. Doxygen uses libiconv (or the
  23 +# iconv built into libc) for the transcoding. See
  24 +# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
25 25 # The default value is: UTF-8.
26 26  
27 27 DOXYFILE_ENCODING = UTF-8
... ... @@ -38,20 +38,20 @@ PROJECT_NAME = hueplusplus
38 38 # could be handy for archiving the generated documentation or if some version
39 39 # control system is used.
40 40  
41   -PROJECT_NUMBER =
  41 +PROJECT_NUMBER = 1.0.0
42 42  
43 43 # Using the PROJECT_BRIEF tag one can provide an optional one line description
44 44 # for a project that appears at the top of each page and should give viewer a
45 45 # quick idea about the purpose of the project. Keep the description short.
46 46  
47   -PROJECT_BRIEF =
  47 +PROJECT_BRIEF =
48 48  
49 49 # With the PROJECT_LOGO tag one can specify a logo or an icon that is included
50 50 # in the documentation. The maximum height of the logo should not exceed 55
51 51 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
52 52 # the logo to the output directory.
53 53  
54   -PROJECT_LOGO =
  54 +PROJECT_LOGO =
55 55  
56 56 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
57 57 # into which the generated documentation will be written. If a relative path is
... ... @@ -93,6 +93,14 @@ ALLOW_UNICODE_NAMES = NO
93 93  
94 94 OUTPUT_LANGUAGE = English
95 95  
  96 +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all
  97 +# documentation generated by doxygen is written. Doxygen will use this
  98 +# information to generate all generated output in the proper direction.
  99 +# Possible values are: None, LTR, RTL and Context.
  100 +# The default value is: None.
  101 +
  102 +OUTPUT_TEXT_DIRECTION = None
  103 +
96 104 # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
97 105 # descriptions after the members that are listed in the file and class
98 106 # documentation (similar to Javadoc). Set to NO to disable this.
... ... @@ -162,7 +170,7 @@ FULL_PATH_NAMES = YES
162 170 # will be relative from the directory where doxygen is started.
163 171 # This tag requires that the tag FULL_PATH_NAMES is set to YES.
164 172  
165   -STRIP_FROM_PATH =
  173 +STRIP_FROM_PATH =
166 174  
167 175 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
168 176 # path mentioned in the documentation of a class, which tells the reader which
... ... @@ -189,6 +197,16 @@ SHORT_NAMES = NO
189 197  
190 198 JAVADOC_AUTOBRIEF = NO
191 199  
  200 +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
  201 +# such as
  202 +# /***************
  203 +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
  204 +# Javadoc-style will behave just like regular comments and it will not be
  205 +# interpreted by doxygen.
  206 +# The default value is: NO.
  207 +
  208 +JAVADOC_BANNER = NO
  209 +
192 210 # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
193 211 # line (until the first dot) of a Qt-style comment as the brief description. If
194 212 # set to NO, the Qt-style will behave just like regular Qt-style comments (thus
... ... @@ -209,6 +227,14 @@ QT_AUTOBRIEF = NO
209 227  
210 228 MULTILINE_CPP_IS_BRIEF = NO
211 229  
  230 +# By default Python docstrings are displayed as preformatted text and doxygen's
  231 +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
  232 +# doxygen's special commands can be used and the contents of the docstring
  233 +# documentation blocks is shown as doxygen documentation.
  234 +# The default value is: YES.
  235 +
  236 +PYTHON_DOCSTRING = YES
  237 +
212 238 # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
213 239 # documentation from any documented member that it re-implements.
214 240 # The default value is: YES.
... ... @@ -236,15 +262,14 @@ TAB_SIZE = 4
236 262 # will allow you to put the command \sideeffect (or @sideeffect) in the
237 263 # documentation, which will result in a user-defined paragraph with heading
238 264 # "Side Effects:". You can put \n's in the value part of an alias to insert
239   -# newlines.
240   -
241   -ALIASES =
242   -
243   -# This tag can be used to specify a number of word-keyword mappings (TCL only).
244   -# A mapping has the form "name=value". For example adding "class=itcl::class"
245   -# will allow you to use the command class in the itcl::class meaning.
  265 +# newlines (in the resulting output). You can put ^^ in the value part of an
  266 +# alias to insert a newline as if a physical newline was in the original file.
  267 +# When you need a literal { or } or , in the value part of an alias you have to
  268 +# escape them by means of a backslash (\), this can lead to conflicts with the
  269 +# commands \{ and \} for these it is advised to use the version @{ and @} or use
  270 +# a double escape (\\{ and \\})
246 271  
247   -TCL_SUBST =
  272 +ALIASES =
248 273  
249 274 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
250 275 # only. Doxygen will then generate output that is more tailored for C. For
... ... @@ -274,28 +299,37 @@ OPTIMIZE_FOR_FORTRAN = NO
274 299  
275 300 OPTIMIZE_OUTPUT_VHDL = NO
276 301  
  302 +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
  303 +# sources only. Doxygen will then generate output that is more tailored for that
  304 +# language. For instance, namespaces will be presented as modules, types will be
  305 +# separated into more groups, etc.
  306 +# The default value is: NO.
  307 +
  308 +OPTIMIZE_OUTPUT_SLICE = NO
  309 +
277 310 # Doxygen selects the parser to use depending on the extension of the files it
278 311 # parses. With this tag you can assign which parser to use for a given
279 312 # extension. Doxygen has a built-in mapping, but you can override or extend it
280 313 # using this tag. The format is ext=language, where ext is a file extension, and
281   -# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
282   -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
283   -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
284   -# Fortran. In the later case the parser tries to guess whether the code is fixed
285   -# or free formatted code, this is the default for Fortran type files), VHDL. For
286   -# instance to make doxygen treat .inc files as Fortran files (default is PHP),
287   -# and .f files as C (default is Fortran), use: inc=Fortran f=C.
  314 +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
  315 +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL,
  316 +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
  317 +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
  318 +# tries to guess whether the code is fixed or free formatted code, this is the
  319 +# default for Fortran type files). For instance to make doxygen treat .inc files
  320 +# as Fortran files (default is PHP), and .f files as C (default is Fortran),
  321 +# use: inc=Fortran f=C.
288 322 #
289 323 # Note: For files without extension you can use no_extension as a placeholder.
290 324 #
291 325 # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
292 326 # the files are not read by doxygen.
293 327  
294   -EXTENSION_MAPPING =
  328 +EXTENSION_MAPPING =
295 329  
296 330 # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
297 331 # according to the Markdown format, which allows for more readable
298   -# documentation. See http://daringfireball.net/projects/markdown/ for details.
  332 +# documentation. See https://daringfireball.net/projects/markdown/ for details.
299 333 # The output of markdown processing is further processed by doxygen, so you can
300 334 # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
301 335 # case of backward compatibilities issues.
... ... @@ -303,6 +337,15 @@ EXTENSION_MAPPING =
303 337  
304 338 MARKDOWN_SUPPORT = YES
305 339  
  340 +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
  341 +# to that level are automatically included in the table of contents, even if
  342 +# they do not have an id attribute.
  343 +# Note: This feature currently applies only to Markdown headings.
  344 +# Minimum value: 0, maximum value: 99, default value: 5.
  345 +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
  346 +
  347 +TOC_INCLUDE_HEADINGS = 5
  348 +
306 349 # When enabled doxygen tries to link words that correspond to documented
307 350 # classes, or namespaces to their corresponding documentation. Such a link can
308 351 # be prevented in individual cases by putting a % sign in front of the word or
... ... @@ -328,7 +371,7 @@ BUILTIN_STL_SUPPORT = NO
328 371 CPP_CLI_SUPPORT = NO
329 372  
330 373 # Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
331   -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
  374 +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
332 375 # will parse them like normal C++ but will assume all classes use public instead
333 376 # of private inheritance when no explicit protection keyword is present.
334 377 # The default value is: NO.
... ... @@ -414,6 +457,19 @@ TYPEDEF_HIDES_STRUCT = NO
414 457  
415 458 LOOKUP_CACHE_SIZE = 0
416 459  
  460 +# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use
  461 +# during processing. When set to 0 doxygen will based this on the number of
  462 +# cores available in the system. You can set it explicitly to a value larger
  463 +# than 0 to get more control over the balance between CPU load and processing
  464 +# speed. At this moment only the input processing can be done using multiple
  465 +# threads. Since this is still an experimental feature the default is set to 1,
  466 +# which efficively disables parallel processing. Please report any issues you
  467 +# encounter. Generating dot graphs in parallel is controlled by the
  468 +# DOT_NUM_THREADS setting.
  469 +# Minimum value: 0, maximum value: 32, default value: 1.
  470 +
  471 +NUM_PROC_THREADS = 1
  472 +
417 473 #---------------------------------------------------------------------------
418 474 # Build related configuration options
419 475 #---------------------------------------------------------------------------
... ... @@ -434,6 +490,12 @@ EXTRACT_ALL = YES
434 490  
435 491 EXTRACT_PRIVATE = NO
436 492  
  493 +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
  494 +# methods of a class will be included in the documentation.
  495 +# The default value is: NO.
  496 +
  497 +EXTRACT_PRIV_VIRTUAL = NO
  498 +
437 499 # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
438 500 # scope will be included in the documentation.
439 501 # The default value is: NO.
... ... @@ -488,8 +550,8 @@ HIDE_UNDOC_MEMBERS = NO
488 550 HIDE_UNDOC_CLASSES = NO
489 551  
490 552 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
491   -# (class|struct|union) declarations. If set to NO, these declarations will be
492   -# included in the documentation.
  553 +# declarations. If set to NO, these declarations will be included in the
  554 +# documentation.
493 555 # The default value is: NO.
494 556  
495 557 HIDE_FRIEND_COMPOUNDS = NO
... ... @@ -512,7 +574,7 @@ INTERNAL_DOCS = NO
512 574 # names in lower-case letters. If set to YES, upper-case letters are also
513 575 # allowed. This is useful if you have classes or files whose names only differ
514 576 # in case and if your file system supports case sensitive file names. Windows
515   -# and Mac users are advised to set this option to NO.
  577 +# (including Cygwin) and Mac users are advised to set this option to NO.
516 578 # The default value is: system dependent.
517 579  
518 580 CASE_SENSE_NAMES = NO
... ... @@ -639,7 +701,7 @@ GENERATE_DEPRECATEDLIST= YES
639 701 # sections, marked by \if <section_label> ... \endif and \cond <section_label>
640 702 # ... \endcond blocks.
641 703  
642   -ENABLED_SECTIONS =
  704 +ENABLED_SECTIONS =
643 705  
644 706 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
645 707 # initial value of a variable or macro / define can have for it to appear in the
... ... @@ -681,7 +743,7 @@ SHOW_NAMESPACES = YES
681 743 # by doxygen. Whatever the program writes to standard output is used as the file
682 744 # version. For an example see the documentation.
683 745  
684   -FILE_VERSION_FILTER =
  746 +FILE_VERSION_FILTER =
685 747  
686 748 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
687 749 # by doxygen. The layout file controls the global structure of the generated
... ... @@ -694,17 +756,17 @@ FILE_VERSION_FILTER =
694 756 # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
695 757 # tag is left empty.
696 758  
697   -LAYOUT_FILE =
  759 +LAYOUT_FILE =
698 760  
699 761 # The CITE_BIB_FILES tag can be used to specify one or more bib files containing
700 762 # the reference definitions. This must be a list of .bib files. The .bib
701 763 # extension is automatically appended if omitted. This requires the bibtex tool
702   -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
  764 +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
703 765 # For LaTeX the style of the bibliography can be controlled using
704 766 # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
705 767 # search path. See also \cite for info how to create references.
706 768  
707   -CITE_BIB_FILES =
  769 +CITE_BIB_FILES =
708 770  
709 771 #---------------------------------------------------------------------------
710 772 # Configuration options related to warning and progress messages
... ... @@ -744,7 +806,8 @@ WARN_IF_DOC_ERROR = YES
744 806 # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
745 807 # are documented, but have no documentation for their parameters or return
746 808 # value. If set to NO, doxygen will only warn about wrong or incomplete
747   -# parameter documentation, but not about the absence of documentation.
  809 +# parameter documentation, but not about the absence of documentation. If
  810 +# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
748 811 # The default value is: NO.
749 812  
750 813 WARN_NO_PARAMDOC = NO
... ... @@ -769,7 +832,7 @@ WARN_FORMAT = &quot;$file:$line: $text&quot;
769 832 # messages should be written. If left blank the output is written to standard
770 833 # error (stderr).
771 834  
772   -WARN_LOGFILE =
  835 +WARN_LOGFILE =
773 836  
774 837 #---------------------------------------------------------------------------
775 838 # Configuration options related to the input files
... ... @@ -783,12 +846,13 @@ WARN_LOGFILE =
783 846  
784 847 INPUT = include/hueplusplus \
785 848 src \
786   - doc/markdown
  849 + doc/markdown \
  850 + examples
787 851  
788 852 # This tag can be used to specify the character encoding of the source files
789 853 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
790 854 # libiconv (or the iconv built into libc) for the transcoding. See the libiconv
791   -# documentation (see: http://www.gnu.org/software/libiconv) for the list of
  855 +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of
792 856 # possible encodings.
793 857 # The default value is: UTF-8.
794 858  
... ... @@ -805,8 +869,10 @@ INPUT_ENCODING = UTF-8
805 869 # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
806 870 # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
807 871 # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
808   -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl,
809   -# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js.
  872 +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment),
  873 +# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen
  874 +# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,
  875 +# *.vhdl, *.ucf, *.qsf and *.ice.
810 876  
811 877 FILE_PATTERNS = *.c \
812 878 *.cc \
... ... @@ -866,7 +932,7 @@ RECURSIVE = YES
866 932 # Note that relative paths are relative to the directory from which doxygen is
867 933 # run.
868 934  
869   -EXCLUDE =
  935 +EXCLUDE =
870 936  
871 937 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
872 938 # directories that are symbolic links (a Unix file system feature) are excluded
... ... @@ -882,7 +948,7 @@ EXCLUDE_SYMLINKS = NO
882 948 # Note that the wildcards are matched against the file with absolute path, so to
883 949 # exclude all test directories for example use the pattern */test/*
884 950  
885   -EXCLUDE_PATTERNS =
  951 +EXCLUDE_PATTERNS =
886 952  
887 953 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
888 954 # (namespaces, classes, functions, etc.) that should be excluded from the
... ... @@ -899,14 +965,14 @@ EXCLUDE_SYMBOLS = *::detail
899 965 # that contain example code fragments that are included (see the \include
900 966 # command).
901 967  
902   -EXAMPLE_PATH =
  968 +EXAMPLE_PATH = examples
903 969  
904 970 # If the value of the EXAMPLE_PATH tag contains directories, you can use the
905 971 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
906 972 # *.h) to filter out the source-files in the directories. If left blank all
907 973 # files are included.
908 974  
909   -EXAMPLE_PATTERNS = *
  975 +EXAMPLE_PATTERNS = *.cpp
910 976  
911 977 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
912 978 # searched for input files to be used with the \include or \dontinclude commands
... ... @@ -919,7 +985,7 @@ EXAMPLE_RECURSIVE = NO
919 985 # that contain images that are to be included in the documentation (see the
920 986 # \image command).
921 987  
922   -IMAGE_PATH =
  988 +IMAGE_PATH =
923 989  
924 990 # The INPUT_FILTER tag can be used to specify a program that doxygen should
925 991 # invoke to filter for each input file. Doxygen will invoke the filter program
... ... @@ -940,7 +1006,7 @@ IMAGE_PATH =
940 1006 # need to set EXTENSION_MAPPING for the extension otherwise the files are not
941 1007 # properly processed by doxygen.
942 1008  
943   -INPUT_FILTER =
  1009 +INPUT_FILTER =
944 1010  
945 1011 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
946 1012 # basis. Doxygen will compare the file name with each pattern and apply the
... ... @@ -953,7 +1019,7 @@ INPUT_FILTER =
953 1019 # need to set EXTENSION_MAPPING for the extension otherwise the files are not
954 1020 # properly processed by doxygen.
955 1021  
956   -FILTER_PATTERNS =
  1022 +FILTER_PATTERNS =
957 1023  
958 1024 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
959 1025 # INPUT_FILTER) will also be used to filter the input files that are used for
... ... @@ -968,7 +1034,7 @@ FILTER_SOURCE_FILES = NO
968 1034 # *.ext= (so without naming a filter).
969 1035 # This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
970 1036  
971   -FILTER_SOURCE_PATTERNS =
  1037 +FILTER_SOURCE_PATTERNS =
972 1038  
973 1039 # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
974 1040 # is part of the input, its contents will be placed on the main page
... ... @@ -1004,7 +1070,7 @@ INLINE_SOURCES = NO
1004 1070 STRIP_CODE_COMMENTS = YES
1005 1071  
1006 1072 # If the REFERENCED_BY_RELATION tag is set to YES then for each documented
1007   -# function all documented functions referencing it will be listed.
  1073 +# entity all documented functions referencing it will be listed.
1008 1074 # The default value is: NO.
1009 1075  
1010 1076 REFERENCED_BY_RELATION = NO
... ... @@ -1036,12 +1102,12 @@ SOURCE_TOOLTIPS = YES
1036 1102 # If the USE_HTAGS tag is set to YES then the references to source code will
1037 1103 # point to the HTML generated by the htags(1) tool instead of doxygen built-in
1038 1104 # source browser. The htags tool is part of GNU's global source tagging system
1039   -# (see http://www.gnu.org/software/global/global.html). You will need version
  1105 +# (see https://www.gnu.org/software/global/global.html). You will need version
1040 1106 # 4.8.6 or higher.
1041 1107 #
1042 1108 # To use it do the following:
1043 1109 # - Install the latest version of global
1044   -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
  1110 +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
1045 1111 # - Make sure the INPUT points to the root of the source tree
1046 1112 # - Run doxygen as normal
1047 1113 #
... ... @@ -1069,7 +1135,7 @@ VERBATIM_HEADERS = YES
1069 1135 # rich C++ code for which doxygen's built-in parser lacks the necessary type
1070 1136 # information.
1071 1137 # Note: The availability of this option depends on whether or not doxygen was
1072   -# generated with the -Duse-libclang=ON option for CMake.
  1138 +# generated with the -Duse_libclang=ON option for CMake.
1073 1139 # The default value is: NO.
1074 1140  
1075 1141 CLANG_ASSISTED_PARSING = NO
... ... @@ -1080,7 +1146,20 @@ CLANG_ASSISTED_PARSING = NO
1080 1146 # specified with INPUT and INCLUDE_PATH.
1081 1147 # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
1082 1148  
1083   -CLANG_OPTIONS =
  1149 +CLANG_OPTIONS =
  1150 +
  1151 +# If clang assisted parsing is enabled you can provide the clang parser with the
  1152 +# path to the directory containing a file called compile_commands.json. This
  1153 +# file is the compilation database (see:
  1154 +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
  1155 +# options used when the source files were built. This is equivalent to
  1156 +# specifying the "-p" option to a clang tool, such as clang-check. These options
  1157 +# will then be passed to the parser. Any options specified with CLANG_OPTIONS
  1158 +# will be added as well.
  1159 +# Note: The availability of this option depends on whether or not doxygen was
  1160 +# generated with the -Duse_libclang=ON option for CMake.
  1161 +
  1162 +CLANG_DATABASE_PATH =
1084 1163  
1085 1164 #---------------------------------------------------------------------------
1086 1165 # Configuration options related to the alphabetical class index
... ... @@ -1106,7 +1185,7 @@ COLS_IN_ALPHA_INDEX = 5
1106 1185 # while generating the index headers.
1107 1186 # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1108 1187  
1109   -IGNORE_PREFIX =
  1188 +IGNORE_PREFIX =
1110 1189  
1111 1190 #---------------------------------------------------------------------------
1112 1191 # Configuration options related to the HTML output
... ... @@ -1150,7 +1229,7 @@ HTML_FILE_EXTENSION = .html
1150 1229 # of the possible markers and block names see the documentation.
1151 1230 # This tag requires that the tag GENERATE_HTML is set to YES.
1152 1231  
1153   -HTML_HEADER =
  1232 +HTML_HEADER =
1154 1233  
1155 1234 # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
1156 1235 # generated HTML page. If the tag is left blank doxygen will generate a standard
... ... @@ -1160,7 +1239,7 @@ HTML_HEADER =
1160 1239 # that doxygen normally uses.
1161 1240 # This tag requires that the tag GENERATE_HTML is set to YES.
1162 1241  
1163   -HTML_FOOTER =
  1242 +HTML_FOOTER =
1164 1243  
1165 1244 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
1166 1245 # sheet that is used by each HTML page. It can be used to fine-tune the look of
... ... @@ -1172,7 +1251,7 @@ HTML_FOOTER =
1172 1251 # obsolete.
1173 1252 # This tag requires that the tag GENERATE_HTML is set to YES.
1174 1253  
1175   -HTML_STYLESHEET =
  1254 +HTML_STYLESHEET =
1176 1255  
1177 1256 # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1178 1257 # cascading style sheets that are included after the standard style sheets
... ... @@ -1185,7 +1264,7 @@ HTML_STYLESHEET =
1185 1264 # list). For an example see the documentation.
1186 1265 # This tag requires that the tag GENERATE_HTML is set to YES.
1187 1266  
1188   -HTML_EXTRA_STYLESHEET =
  1267 +HTML_EXTRA_STYLESHEET =
1189 1268  
1190 1269 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
1191 1270 # other source files which should be copied to the HTML output directory. Note
... ... @@ -1195,12 +1274,12 @@ HTML_EXTRA_STYLESHEET =
1195 1274 # files will be copied as-is; there are no commands or markers available.
1196 1275 # This tag requires that the tag GENERATE_HTML is set to YES.
1197 1276  
1198   -HTML_EXTRA_FILES =
  1277 +HTML_EXTRA_FILES =
1199 1278  
1200 1279 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
1201 1280 # will adjust the colors in the style sheet and background images according to
1202 1281 # this color. Hue is specified as an angle on a colorwheel, see
1203   -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
  1282 +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
1204 1283 # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
1205 1284 # purple, and 360 is red again.
1206 1285 # Minimum value: 0, maximum value: 359, default value: 220.
... ... @@ -1236,13 +1315,24 @@ HTML_COLORSTYLE_GAMMA = 80
1236 1315  
1237 1316 HTML_TIMESTAMP = NO
1238 1317  
  1318 +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
  1319 +# documentation will contain a main index with vertical navigation menus that
  1320 +# are dynamically created via JavaScript. If disabled, the navigation index will
  1321 +# consists of multiple levels of tabs that are statically embedded in every HTML
  1322 +# page. Disable this option to support browsers that do not have JavaScript,
  1323 +# like the Qt help browser.
  1324 +# The default value is: YES.
  1325 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1326 +
  1327 +HTML_DYNAMIC_MENUS = YES
  1328 +
1239 1329 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
1240 1330 # documentation will contain sections that can be hidden and shown after the
1241 1331 # page has loaded.
1242 1332 # The default value is: NO.
1243 1333 # This tag requires that the tag GENERATE_HTML is set to YES.
1244 1334  
1245   -HTML_DYNAMIC_SECTIONS = NO
  1335 +HTML_DYNAMIC_SECTIONS = YES
1246 1336  
1247 1337 # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
1248 1338 # shown in the various tree structured indices initially; the user can expand
... ... @@ -1259,13 +1349,13 @@ HTML_INDEX_NUM_ENTRIES = 100
1259 1349  
1260 1350 # If the GENERATE_DOCSET tag is set to YES, additional index files will be
1261 1351 # generated that can be used as input for Apple's Xcode 3 integrated development
1262   -# environment (see: http://developer.apple.com/tools/xcode/), introduced with
1263   -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
  1352 +# environment (see: https://developer.apple.com/xcode/), introduced with OSX
  1353 +# 10.5 (Leopard). To create a documentation set, doxygen will generate a
1264 1354 # Makefile in the HTML output directory. Running make will produce the docset in
1265 1355 # that directory and running make install will install the docset in
1266 1356 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
1267   -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
1268   -# for more information.
  1357 +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
  1358 +# genXcode/_index.html for more information.
1269 1359 # The default value is: NO.
1270 1360 # This tag requires that the tag GENERATE_HTML is set to YES.
1271 1361  
... ... @@ -1304,7 +1394,7 @@ DOCSET_PUBLISHER_NAME = Publisher
1304 1394 # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
1305 1395 # additional HTML index files: index.hhp, index.hhc, and index.hhk. The
1306 1396 # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
1307   -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
  1397 +# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
1308 1398 # Windows.
1309 1399 #
1310 1400 # The HTML Help Workshop contains a compiler that can convert all HTML output
... ... @@ -1324,7 +1414,7 @@ GENERATE_HTMLHELP = NO
1324 1414 # written to the html output directory.
1325 1415 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1326 1416  
1327   -CHM_FILE =
  1417 +CHM_FILE =
1328 1418  
1329 1419 # The HHC_LOCATION tag can be used to specify the location (absolute path
1330 1420 # including file name) of the HTML help compiler (hhc.exe). If non-empty,
... ... @@ -1332,10 +1422,10 @@ CHM_FILE =
1332 1422 # The file has to be specified with full path.
1333 1423 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1334 1424  
1335   -HHC_LOCATION =
  1425 +HHC_LOCATION =
1336 1426  
1337 1427 # The GENERATE_CHI flag controls if a separate .chi index file is generated
1338   -# (YES) or that it should be included in the master .chm file (NO).
  1428 +# (YES) or that it should be included in the main .chm file (NO).
1339 1429 # The default value is: NO.
1340 1430 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1341 1431  
... ... @@ -1345,7 +1435,7 @@ GENERATE_CHI = NO
1345 1435 # and project file content.
1346 1436 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1347 1437  
1348   -CHM_INDEX_ENCODING =
  1438 +CHM_INDEX_ENCODING =
1349 1439  
1350 1440 # The BINARY_TOC flag controls whether a binary table of contents is generated
1351 1441 # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
... ... @@ -1376,11 +1466,11 @@ GENERATE_QHP = NO
1376 1466 # the HTML output folder.
1377 1467 # This tag requires that the tag GENERATE_QHP is set to YES.
1378 1468  
1379   -QCH_FILE =
  1469 +QCH_FILE =
1380 1470  
1381 1471 # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
1382 1472 # Project output. For more information please see Qt Help Project / Namespace
1383   -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
  1473 +# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
1384 1474 # The default value is: org.doxygen.Project.
1385 1475 # This tag requires that the tag GENERATE_QHP is set to YES.
1386 1476  
... ... @@ -1388,7 +1478,7 @@ QHP_NAMESPACE = org.doxygen.Project
1388 1478  
1389 1479 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
1390 1480 # Help Project output. For more information please see Qt Help Project / Virtual
1391   -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
  1481 +# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-
1392 1482 # folders).
1393 1483 # The default value is: doc.
1394 1484 # This tag requires that the tag GENERATE_QHP is set to YES.
... ... @@ -1397,33 +1487,33 @@ QHP_VIRTUAL_FOLDER = doc
1397 1487  
1398 1488 # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
1399 1489 # filter to add. For more information please see Qt Help Project / Custom
1400   -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
  1490 +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
1401 1491 # filters).
1402 1492 # This tag requires that the tag GENERATE_QHP is set to YES.
1403 1493  
1404   -QHP_CUST_FILTER_NAME =
  1494 +QHP_CUST_FILTER_NAME =
1405 1495  
1406 1496 # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
1407 1497 # custom filter to add. For more information please see Qt Help Project / Custom
1408   -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
  1498 +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
1409 1499 # filters).
1410 1500 # This tag requires that the tag GENERATE_QHP is set to YES.
1411 1501  
1412   -QHP_CUST_FILTER_ATTRS =
  1502 +QHP_CUST_FILTER_ATTRS =
1413 1503  
1414 1504 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
1415 1505 # project's filter section matches. Qt Help Project / Filter Attributes (see:
1416   -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
  1506 +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
1417 1507 # This tag requires that the tag GENERATE_QHP is set to YES.
1418 1508  
1419   -QHP_SECT_FILTER_ATTRS =
  1509 +QHP_SECT_FILTER_ATTRS =
1420 1510  
1421 1511 # The QHG_LOCATION tag can be used to specify the location of Qt's
1422 1512 # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
1423 1513 # generated .qhp file.
1424 1514 # This tag requires that the tag GENERATE_QHP is set to YES.
1425 1515  
1426   -QHG_LOCATION =
  1516 +QHG_LOCATION =
1427 1517  
1428 1518 # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
1429 1519 # generated, together with the HTML files, they form an Eclipse help plugin. To
... ... @@ -1497,6 +1587,17 @@ TREEVIEW_WIDTH = 250
1497 1587  
1498 1588 EXT_LINKS_IN_WINDOW = NO
1499 1589  
  1590 +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
  1591 +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
  1592 +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
  1593 +# the HTML output. These images will generally look nicer at scaled resolutions.
  1594 +# Possible values are: png (the default) and svg (looks nicer but requires the
  1595 +# pdf2svg or inkscape tool).
  1596 +# The default value is: png.
  1597 +# This tag requires that the tag GENERATE_HTML is set to YES.
  1598 +
  1599 +HTML_FORMULA_FORMAT = png
  1600 +
1500 1601 # Use this tag to change the font size of LaTeX formulas included as images in
1501 1602 # the HTML documentation. When you change the font size after a successful
1502 1603 # doxygen run you need to manually remove any form_*.png images from the HTML
... ... @@ -1506,7 +1607,7 @@ EXT_LINKS_IN_WINDOW = NO
1506 1607  
1507 1608 FORMULA_FONTSIZE = 10
1508 1609  
1509   -# Use the FORMULA_TRANPARENT tag to determine whether or not the images
  1610 +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
1510 1611 # generated for formulas are transparent PNGs. Transparent PNGs are not
1511 1612 # supported properly for IE 6.0, but are supported on all modern browsers.
1512 1613 #
... ... @@ -1517,8 +1618,14 @@ FORMULA_FONTSIZE = 10
1517 1618  
1518 1619 FORMULA_TRANSPARENT = YES
1519 1620  
  1621 +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
  1622 +# to create new LaTeX commands to be used in formulas as building blocks. See
  1623 +# the section "Including formulas" for details.
  1624 +
  1625 +FORMULA_MACROFILE =
  1626 +
1520 1627 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
1521   -# http://www.mathjax.org) which uses client side Javascript for the rendering
  1628 +# https://www.mathjax.org) which uses client side JavaScript for the rendering
1522 1629 # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
1523 1630 # installed or if you want to formulas look prettier in the HTML output. When
1524 1631 # enabled you may also need to install MathJax separately and configure the path
... ... @@ -1545,8 +1652,8 @@ MATHJAX_FORMAT = HTML-CSS
1545 1652 # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
1546 1653 # Content Delivery Network so you can quickly see the result without installing
1547 1654 # MathJax. However, it is strongly recommended to install a local copy of
1548   -# MathJax from http://www.mathjax.org before deployment.
1549   -# The default value is: http://cdn.mathjax.org/mathjax/latest.
  1655 +# MathJax from https://www.mathjax.org before deployment.
  1656 +# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2.
1550 1657 # This tag requires that the tag USE_MATHJAX is set to YES.
1551 1658  
1552 1659 MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
... ... @@ -1556,7 +1663,7 @@ MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
1556 1663 # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
1557 1664 # This tag requires that the tag USE_MATHJAX is set to YES.
1558 1665  
1559   -MATHJAX_EXTENSIONS =
  1666 +MATHJAX_EXTENSIONS =
1560 1667  
1561 1668 # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
1562 1669 # of code that will be used on startup of the MathJax code. See the MathJax site
... ... @@ -1564,7 +1671,7 @@ MATHJAX_EXTENSIONS =
1564 1671 # example see the documentation.
1565 1672 # This tag requires that the tag USE_MATHJAX is set to YES.
1566 1673  
1567   -MATHJAX_CODEFILE =
  1674 +MATHJAX_CODEFILE =
1568 1675  
1569 1676 # When the SEARCHENGINE tag is enabled doxygen will generate a search box for
1570 1677 # the HTML output. The underlying search engine uses javascript and DHTML and
... ... @@ -1588,7 +1695,7 @@ MATHJAX_CODEFILE =
1588 1695 SEARCHENGINE = YES
1589 1696  
1590 1697 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
1591   -# implemented using a web server instead of a web client using Javascript. There
  1698 +# implemented using a web server instead of a web client using JavaScript. There
1592 1699 # are two flavors of web server based searching depending on the EXTERNAL_SEARCH
1593 1700 # setting. When disabled, doxygen will generate a PHP script for searching and
1594 1701 # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
... ... @@ -1607,7 +1714,7 @@ SERVER_BASED_SEARCH = NO
1607 1714 #
1608 1715 # Doxygen ships with an example indexer (doxyindexer) and search engine
1609 1716 # (doxysearch.cgi) which are based on the open source search engine library
1610   -# Xapian (see: http://xapian.org/).
  1717 +# Xapian (see: https://xapian.org/).
1611 1718 #
1612 1719 # See the section "External Indexing and Searching" for details.
1613 1720 # The default value is: NO.
... ... @@ -1620,11 +1727,11 @@ EXTERNAL_SEARCH = NO
1620 1727 #
1621 1728 # Doxygen ships with an example indexer (doxyindexer) and search engine
1622 1729 # (doxysearch.cgi) which are based on the open source search engine library
1623   -# Xapian (see: http://xapian.org/). See the section "External Indexing and
  1730 +# Xapian (see: https://xapian.org/). See the section "External Indexing and
1624 1731 # Searching" for details.
1625 1732 # This tag requires that the tag SEARCHENGINE is set to YES.
1626 1733  
1627   -SEARCHENGINE_URL =
  1734 +SEARCHENGINE_URL =
1628 1735  
1629 1736 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
1630 1737 # search data is written to a file for indexing by an external tool. With the
... ... @@ -1640,7 +1747,7 @@ SEARCHDATA_FILE = searchdata.xml
1640 1747 # projects and redirect the results back to the right project.
1641 1748 # This tag requires that the tag SEARCHENGINE is set to YES.
1642 1749  
1643   -EXTERNAL_SEARCH_ID =
  1750 +EXTERNAL_SEARCH_ID =
1644 1751  
1645 1752 # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
1646 1753 # projects other than the one defined by this configuration file, but that are
... ... @@ -1650,7 +1757,7 @@ EXTERNAL_SEARCH_ID =
1650 1757 # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
1651 1758 # This tag requires that the tag SEARCHENGINE is set to YES.
1652 1759  
1653   -EXTRA_SEARCH_MAPPINGS =
  1760 +EXTRA_SEARCH_MAPPINGS =
1654 1761  
1655 1762 #---------------------------------------------------------------------------
1656 1763 # Configuration options related to the LaTeX output
... ... @@ -1672,21 +1779,35 @@ LATEX_OUTPUT = latex
1672 1779 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
1673 1780 # invoked.
1674 1781 #
1675   -# Note that when enabling USE_PDFLATEX this option is only used for generating
1676   -# bitmaps for formulas in the HTML output, but not in the Makefile that is
1677   -# written to the output directory.
1678   -# The default file is: latex.
  1782 +# Note that when not enabling USE_PDFLATEX the default is latex when enabling
  1783 +# USE_PDFLATEX the default is pdflatex and when in the later case latex is
  1784 +# chosen this is overwritten by pdflatex. For specific output languages the
  1785 +# default can have been set differently, this depends on the implementation of
  1786 +# the output language.
1679 1787 # This tag requires that the tag GENERATE_LATEX is set to YES.
1680 1788  
1681 1789 LATEX_CMD_NAME = latex
1682 1790  
1683 1791 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
1684 1792 # index for LaTeX.
  1793 +# Note: This tag is used in the Makefile / make.bat.
  1794 +# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
  1795 +# (.tex).
1685 1796 # The default file is: makeindex.
1686 1797 # This tag requires that the tag GENERATE_LATEX is set to YES.
1687 1798  
1688 1799 MAKEINDEX_CMD_NAME = makeindex
1689 1800  
  1801 +# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
  1802 +# generate index for LaTeX. In case there is no backslash (\) as first character
  1803 +# it will be automatically added in the LaTeX code.
  1804 +# Note: This tag is used in the generated output file (.tex).
  1805 +# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
  1806 +# The default value is: makeindex.
  1807 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1808 +
  1809 +LATEX_MAKEINDEX_CMD = makeindex
  1810 +
1690 1811 # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
1691 1812 # documents. This may be useful for small projects and may help to save some
1692 1813 # trees in general.
... ... @@ -1714,7 +1835,7 @@ PAPER_TYPE = a4
1714 1835 # If left blank no extra packages will be included.
1715 1836 # This tag requires that the tag GENERATE_LATEX is set to YES.
1716 1837  
1717   -EXTRA_PACKAGES =
  1838 +EXTRA_PACKAGES =
1718 1839  
1719 1840 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
1720 1841 # generated LaTeX document. The header should contain everything until the first
... ... @@ -1730,7 +1851,7 @@ EXTRA_PACKAGES =
1730 1851 # to HTML_HEADER.
1731 1852 # This tag requires that the tag GENERATE_LATEX is set to YES.
1732 1853  
1733   -LATEX_HEADER =
  1854 +LATEX_HEADER =
1734 1855  
1735 1856 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
1736 1857 # generated LaTeX document. The footer should contain everything after the last
... ... @@ -1741,7 +1862,7 @@ LATEX_HEADER =
1741 1862 # Note: Only use a user-defined footer if you know what you are doing!
1742 1863 # This tag requires that the tag GENERATE_LATEX is set to YES.
1743 1864  
1744   -LATEX_FOOTER =
  1865 +LATEX_FOOTER =
1745 1866  
1746 1867 # The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1747 1868 # LaTeX style sheets that are included after the standard style sheets created
... ... @@ -1752,7 +1873,7 @@ LATEX_FOOTER =
1752 1873 # list).
1753 1874 # This tag requires that the tag GENERATE_LATEX is set to YES.
1754 1875  
1755   -LATEX_EXTRA_STYLESHEET =
  1876 +LATEX_EXTRA_STYLESHEET =
1756 1877  
1757 1878 # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
1758 1879 # other source files which should be copied to the LATEX_OUTPUT output
... ... @@ -1760,7 +1881,7 @@ LATEX_EXTRA_STYLESHEET =
1760 1881 # markers available.
1761 1882 # This tag requires that the tag GENERATE_LATEX is set to YES.
1762 1883  
1763   -LATEX_EXTRA_FILES =
  1884 +LATEX_EXTRA_FILES =
1764 1885  
1765 1886 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
1766 1887 # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
... ... @@ -1771,9 +1892,11 @@ LATEX_EXTRA_FILES =
1771 1892  
1772 1893 PDF_HYPERLINKS = YES
1773 1894  
1774   -# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
1775   -# the PDF file directly from the LaTeX files. Set this option to YES, to get a
1776   -# higher quality PDF documentation.
  1895 +# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
  1896 +# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
  1897 +# files. Set this option to YES, to get a higher quality PDF documentation.
  1898 +#
  1899 +# See also section LATEX_CMD_NAME for selecting the engine.
1777 1900 # The default value is: YES.
1778 1901 # This tag requires that the tag GENERATE_LATEX is set to YES.
1779 1902  
... ... @@ -1807,7 +1930,7 @@ LATEX_SOURCE_CODE = NO
1807 1930  
1808 1931 # The LATEX_BIB_STYLE tag can be used to specify the style to use for the
1809 1932 # bibliography, e.g. plainnat, or ieeetr. See
1810   -# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
  1933 +# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
1811 1934 # The default value is: plain.
1812 1935 # This tag requires that the tag GENERATE_LATEX is set to YES.
1813 1936  
... ... @@ -1821,6 +1944,14 @@ LATEX_BIB_STYLE = plain
1821 1944  
1822 1945 LATEX_TIMESTAMP = NO
1823 1946  
  1947 +# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
  1948 +# path from which the emoji images will be read. If a relative path is entered,
  1949 +# it will be relative to the LATEX_OUTPUT directory. If left blank the
  1950 +# LATEX_OUTPUT directory will be used.
  1951 +# This tag requires that the tag GENERATE_LATEX is set to YES.
  1952 +
  1953 +LATEX_EMOJI_DIRECTORY =
  1954 +
1824 1955 #---------------------------------------------------------------------------
1825 1956 # Configuration options related to the RTF output
1826 1957 #---------------------------------------------------------------------------
... ... @@ -1860,22 +1991,22 @@ COMPACT_RTF = NO
1860 1991  
1861 1992 RTF_HYPERLINKS = NO
1862 1993  
1863   -# Load stylesheet definitions from file. Syntax is similar to doxygen's config
1864   -# file, i.e. a series of assignments. You only have to provide replacements,
1865   -# missing definitions are set to their default value.
  1994 +# Load stylesheet definitions from file. Syntax is similar to doxygen's
  1995 +# configuration file, i.e. a series of assignments. You only have to provide
  1996 +# replacements, missing definitions are set to their default value.
1866 1997 #
1867 1998 # See also section "Doxygen usage" for information on how to generate the
1868 1999 # default style sheet that doxygen normally uses.
1869 2000 # This tag requires that the tag GENERATE_RTF is set to YES.
1870 2001  
1871   -RTF_STYLESHEET_FILE =
  2002 +RTF_STYLESHEET_FILE =
1872 2003  
1873 2004 # Set optional variables used in the generation of an RTF document. Syntax is
1874   -# similar to doxygen's config file. A template extensions file can be generated
1875   -# using doxygen -e rtf extensionFile.
  2005 +# similar to doxygen's configuration file. A template extensions file can be
  2006 +# generated using doxygen -e rtf extensionFile.
1876 2007 # This tag requires that the tag GENERATE_RTF is set to YES.
1877 2008  
1878   -RTF_EXTENSIONS_FILE =
  2009 +RTF_EXTENSIONS_FILE =
1879 2010  
1880 2011 # If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
1881 2012 # with syntax highlighting in the RTF output.
... ... @@ -1920,7 +2051,7 @@ MAN_EXTENSION = .3
1920 2051 # MAN_EXTENSION with the initial . removed.
1921 2052 # This tag requires that the tag GENERATE_MAN is set to YES.
1922 2053  
1923   -MAN_SUBDIR =
  2054 +MAN_SUBDIR =
1924 2055  
1925 2056 # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
1926 2057 # will generate one additional man file for each entity documented in the real
... ... @@ -1958,6 +2089,13 @@ XML_OUTPUT = xml
1958 2089  
1959 2090 XML_PROGRAMLISTING = YES
1960 2091  
  2092 +# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
  2093 +# namespace members in file scope as well, matching the HTML output.
  2094 +# The default value is: NO.
  2095 +# This tag requires that the tag GENERATE_XML is set to YES.
  2096 +
  2097 +XML_NS_MEMB_FILE_SCOPE = NO
  2098 +
1961 2099 #---------------------------------------------------------------------------
1962 2100 # Configuration options related to the DOCBOOK output
1963 2101 #---------------------------------------------------------------------------
... ... @@ -1990,14 +2128,18 @@ DOCBOOK_PROGRAMLISTING = NO
1990 2128 #---------------------------------------------------------------------------
1991 2129  
1992 2130 # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
1993   -# AutoGen Definitions (see http://autogen.sf.net) file that captures the
1994   -# structure of the code including all documentation. Note that this feature is
1995   -# still experimental and incomplete at the moment.
  2131 +# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
  2132 +# the structure of the code including all documentation. Note that this feature
  2133 +# is still experimental and incomplete at the moment.
1996 2134 # The default value is: NO.
1997 2135  
1998 2136 GENERATE_AUTOGEN_DEF = NO
1999 2137  
2000 2138 #---------------------------------------------------------------------------
  2139 +# Configuration options related to Sqlite3 output
  2140 +#---------------------------------------------------------------------------
  2141 +
  2142 +#---------------------------------------------------------------------------
2001 2143 # Configuration options related to the Perl module output
2002 2144 #---------------------------------------------------------------------------
2003 2145  
... ... @@ -2033,7 +2175,7 @@ PERLMOD_PRETTY = YES
2033 2175 # overwrite each other's variables.
2034 2176 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
2035 2177  
2036   -PERLMOD_MAKEVAR_PREFIX =
  2178 +PERLMOD_MAKEVAR_PREFIX =
2037 2179  
2038 2180 #---------------------------------------------------------------------------
2039 2181 # Configuration options related to the preprocessor
... ... @@ -2074,7 +2216,7 @@ SEARCH_INCLUDES = YES
2074 2216 # preprocessor.
2075 2217 # This tag requires that the tag SEARCH_INCLUDES is set to YES.
2076 2218  
2077   -INCLUDE_PATH =
  2219 +INCLUDE_PATH =
2078 2220  
2079 2221 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
2080 2222 # patterns (like *.h and *.hpp) to filter out the header-files in the
... ... @@ -2082,7 +2224,7 @@ INCLUDE_PATH =
2082 2224 # used.
2083 2225 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2084 2226  
2085   -INCLUDE_FILE_PATTERNS =
  2227 +INCLUDE_FILE_PATTERNS =
2086 2228  
2087 2229 # The PREDEFINED tag can be used to specify one or more macro names that are
2088 2230 # defined before the preprocessor is started (similar to the -D option of e.g.
... ... @@ -2092,7 +2234,7 @@ INCLUDE_FILE_PATTERNS =
2092 2234 # recursively expanded use the := operator instead of the = operator.
2093 2235 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2094 2236  
2095   -PREDEFINED =
  2237 +PREDEFINED =
2096 2238  
2097 2239 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
2098 2240 # tag can be used to specify a list of macro names that should be expanded. The
... ... @@ -2101,7 +2243,7 @@ PREDEFINED =
2101 2243 # definition found in the source code.
2102 2244 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2103 2245  
2104   -EXPAND_AS_DEFINED =
  2246 +EXPAND_AS_DEFINED =
2105 2247  
2106 2248 # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
2107 2249 # remove all references to function-like macros that are alone on a line, have
... ... @@ -2130,13 +2272,13 @@ SKIP_FUNCTION_MACROS = YES
2130 2272 # the path). If a tag file is not located in the directory in which doxygen is
2131 2273 # run, you must also specify the path to the tagfile here.
2132 2274  
2133   -TAGFILES =
  2275 +TAGFILES =
2134 2276  
2135 2277 # When a file name is specified after GENERATE_TAGFILE, doxygen will create a
2136 2278 # tag file that is based on the input files it reads. See section "Linking to
2137 2279 # external documentation" for more information about the usage of tag files.
2138 2280  
2139   -GENERATE_TAGFILE =
  2281 +GENERATE_TAGFILE =
2140 2282  
2141 2283 # If the ALLEXTERNALS tag is set to YES, all external class will be listed in
2142 2284 # the class index. If set to NO, only the inherited external classes will be
... ... @@ -2159,12 +2301,6 @@ EXTERNAL_GROUPS = YES
2159 2301  
2160 2302 EXTERNAL_PAGES = YES
2161 2303  
2162   -# The PERL_PATH should be the absolute path and name of the perl script
2163   -# interpreter (i.e. the result of 'which perl').
2164   -# The default file (with absolute path) is: /usr/bin/perl.
2165   -
2166   -PERL_PATH = /usr/bin/perl
2167   -
2168 2304 #---------------------------------------------------------------------------
2169 2305 # Configuration options related to the dot tool
2170 2306 #---------------------------------------------------------------------------
... ... @@ -2178,21 +2314,12 @@ PERL_PATH = /usr/bin/perl
2178 2314  
2179 2315 CLASS_DIAGRAMS = NO
2180 2316  
2181   -# You can define message sequence charts within doxygen comments using the \msc
2182   -# command. Doxygen will then run the mscgen tool (see:
2183   -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
2184   -# documentation. The MSCGEN_PATH tag allows you to specify the directory where
2185   -# the mscgen tool resides. If left empty the tool is assumed to be found in the
2186   -# default search path.
2187   -
2188   -MSCGEN_PATH =
2189   -
2190 2317 # You can include diagrams made with dia in doxygen documentation. Doxygen will
2191 2318 # then run dia to produce the diagram and insert it in the documentation. The
2192 2319 # DIA_PATH tag allows you to specify the directory where the dia binary resides.
2193 2320 # If left empty dia is assumed to be found in the default search path.
2194 2321  
2195   -DIA_PATH =
  2322 +DIA_PATH =
2196 2323  
2197 2324 # If set to YES the inheritance and collaboration graphs will hide inheritance
2198 2325 # and usage relations if the target is undocumented or is not a class.
... ... @@ -2241,7 +2368,7 @@ DOT_FONTSIZE = 10
2241 2368 # the path where dot can find it using this tag.
2242 2369 # This tag requires that the tag HAVE_DOT is set to YES.
2243 2370  
2244   -DOT_FONTPATH =
  2371 +DOT_FONTPATH =
2245 2372  
2246 2373 # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
2247 2374 # each documented class showing the direct and indirect inheritance relations.
... ... @@ -2392,19 +2519,19 @@ DOT_PATH = /usr/local/bin
2392 2519 # command).
2393 2520 # This tag requires that the tag HAVE_DOT is set to YES.
2394 2521  
2395   -DOTFILE_DIRS =
  2522 +DOTFILE_DIRS =
2396 2523  
2397 2524 # The MSCFILE_DIRS tag can be used to specify one or more directories that
2398 2525 # contain msc files that are included in the documentation (see the \mscfile
2399 2526 # command).
2400 2527  
2401   -MSCFILE_DIRS =
  2528 +MSCFILE_DIRS =
2402 2529  
2403 2530 # The DIAFILE_DIRS tag can be used to specify one or more directories that
2404 2531 # contain dia files that are included in the documentation (see the \diafile
2405 2532 # command).
2406 2533  
2407   -DIAFILE_DIRS =
  2534 +DIAFILE_DIRS =
2408 2535  
2409 2536 # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
2410 2537 # path where java can find the plantuml.jar file. If left blank, it is assumed
... ... @@ -2412,12 +2539,17 @@ DIAFILE_DIRS =
2412 2539 # generate a warning when it encounters a \startuml command in this case and
2413 2540 # will not generate output for the diagram.
2414 2541  
2415   -PLANTUML_JAR_PATH =
  2542 +PLANTUML_JAR_PATH =
  2543 +
  2544 +# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
  2545 +# configuration file for plantuml.
  2546 +
  2547 +PLANTUML_CFG_FILE =
2416 2548  
2417 2549 # When using plantuml, the specified paths are searched for files specified by
2418 2550 # the !include statement in a plantuml block.
2419 2551  
2420   -PLANTUML_INCLUDE_PATH =
  2552 +PLANTUML_INCLUDE_PATH =
2421 2553  
2422 2554 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
2423 2555 # that will be shown in the graph. If the number of nodes in a graph becomes
... ...
doc/markdown/Build.md
1 1 # Build and install {#build}
2 2  
  3 +[TOC]
  4 +
3 5 # Basic installation {#basic-install}
4 6  
5 7 ## Clone from github {#clone}
... ... @@ -74,11 +76,11 @@ make coveragetest
74 76 ```
75 77  
76 78 ## Building examples {#build-examples}
77   -There are some small example programs using this library in the examples folder. To build them,
78   -set `hueplusplus_SAMPLES=ON`. The target `hueplusplus_examples` builds all examples into build/examples.
  79 +There are some small [example programs](@ref examples) using this library in the examples folder. To build them,
  80 +set `hueplusplus_EXAMPLES=ON`. The target `hueplusplus_examples` builds all examples into build/examples.
79 81 ```{.sh}
80 82 mkdir build
81 83 cd build
82   -cmake .. -Dhueplusplus_SAMPLES=ON
  84 +cmake .. -Dhueplusplus_EXAMPLES=ON
83 85 make hueplusplus_examples
84 86 ```
... ...
doc/markdown/Getting_Started.md
... ... @@ -6,54 +6,34 @@ The options are a [WinHttpHandler](@ref hueplusplus::WinHttpHandler) (for window
6 6  
7 7 Then create a [BridgeFinder](@ref hueplusplus::BridgeFinder) object with the handler.
8 8 The handler is needed, because it tells the finder which functions to use to communicate with a bridge or your local network.
9   -After that you can call [findBridges()](@ref hueplusplus::HueFinder::findBridges), which will return a vector containing the ip and mac address of all found Bridges.
10   -```{.cpp}
11   -// For windows use std::make_shared<hueplusplus::WinHttpHandler>();
12   -auto handler = std::make_shared<hueplusplus::LinHttpHandler>();
13   -hueplusplus::BridgeFinder finder(handler);
14   -std::vector<hueplusplus::BridgeFinder::BridgeIdentification> bridges = finder.findBridges();
15   -if (bridges.empty())
16   -{
17   - std::cerr << "No bridges found\n";
18   - return;
19   -}
20   -```
  9 +After that you can call [findBridges()](@ref hueplusplus::BridgeFinder::findBridges), which will return a vector containing the ip and mac address of all found Bridges.
  10 +\snippet Snippets.cpp search-bridge
21 11  
22 12 ## Authenticate Bridges
23 13 If you have found the Bridge you were looking for, you can then move on with the authentication process.
24 14 To get a new username from the Bridge (for now) you simply call [getBridge(bridges[\<index\>])](@ref hueplusplus::BridgeFinder::getBridge),
25 15 where index is your preferred Bridge from the part [Searching for Bridges](#searchingBridges). This requires the user to press the link button.
26   -```{.cpp}
27   -hueplusplus::Bridge bridge = finder.getBridge(bridges[0]);
28   -```
  16 +\snippet Snippets.cpp get-bridge-1
  17 +
29 18 If you on the other hand already have a username you can add your bridge like so
30   -```{.cpp}
31   -finder.addUsername(bridges[0].mac, "<username>");
32   -hueplusplus::Bridge bridge = finder.getBridge(bridges[0]);
33   -```
34   -If you do not want to use the HueFinder or you already know the ip and username of your bridge you have the option to create your own Hue object.
  19 +\snippet Snippets.cpp get-bridge-2
  20 +
  21 +If you do not want to use the BridgeFinder or you already know the ip and username of your bridge you have the option to create your own Hue object.
35 22 Here you will need to provide the ip address, the port number, a username and an HttpHandler
36   -```{.cpp}
37   -// For windows use std::make_shared<hueplusplus::WinHttpHandler>();
38   -auto handler = std::make_shared<hueplusplus::LinHttpHandler>();
39   -hueplusplus::Bridge bridge("192.168.2.102", 80, "<username>", handler);
40   -```
  23 +\snippet Snippets.cpp get-bridge-3
  24 +
41 25 At this point you may want to decide whether to use a [shared state](@ref shared-state) cache model or keep the default settings.
42 26  
43 27 ### Controlling lights
44 28  
45   -```{.cpp}
46   -hueplusplus::Light light = bridge.getLight(1);
47   -light1.On();
48   -light1.Off();
49   -```
  29 +\snippet Snippets.cpp control-lights
  30 +
  31 +Use [transactions](@ref transactions) to change multiple properties at once.
50 32  
51 33 ### Controlling groups
52 34  
53   -```{.cpp}
54   -hueplusplus::Group group = bridge.getGroup(1);
55   -group.setOn(true);
56   -```
  35 +\snippet Snippets.cpp control-groups
57 36  
58 37 ## More information
59   -- [Transactions](@ref transactions)
60 38 \ No newline at end of file
  39 +- [Transactions](@ref transactions)
  40 +- [Shared state cache](@ref shared-state)
... ...
doc/markdown/Mainpage.md
1 1 # Documentation for the hueplusplus library
2 2 A simple and easy to use library for Philips Hue Lights.
3 3  
  4 +[TOC]
  5 +
4 6 ## Features
5 7 * find bridges with SSDP or set an ip manually
6 8 * all common light functions (brightness, color, temperature)
... ... @@ -17,85 +19,57 @@ A simple and easy to use library for Philips Hue Lights.
17 19 * Espressif ESP32 SDK & Arduino
18 20  
19 21 ## How to use
20   -- [Getting Started](@ref getting-started)
  22 +[Getting started](@ref getting-started)
21 23 ### Searching for Bridges
22 24 To start searching for a Hue Bridge you will need to choose an IHttpHandler and create one. The options are a [WinHttpHandler](@ref hueplusplus::WinHttpHandler) (for windows) or a [LinHttpHandler](@ref hueplusplus::LinHttpHandler) (for linux or linux-like).
23 25  
24 26 Then create a [BridgeFinder](@ref hueplusplus::BridgeFinder) object with the handler.
25 27 The handler is needed, because it tells the finder which functions to use to communicate with a bridge or your local network.
26 28 After that you can call [findBridges()](@ref hueplusplus::BridgeFinder::findBridges), which will return a vector containing the ip and mac address of all found Bridges.
27   -```{.cpp}
28   -// For windows use std::make_shared<hueplusplus::WinHttpHandler>();
29   -handler = std::make_shared<hueplusplus::LinHttpHandler>();
30   -hueplusplus::BridgeFinder finder(handler);
31   -std::vector<hueplusplus::BridgeFinder::BridgeIdentification> bridges = finder.findBridges();
32   -if (bridges.empty())
33   -{
34   - std::cerr << "No bridges found\n";
35   - return;
36   -}
  29 +\snippet Snippets.cpp search-bridge
37 30  
38   -```
  31 +At this point you may want to decide whether to use a [shared state](@ref shared-state) cache model or keep the default settings.
39 32  
40 33 ### Authenticate Bridges
41 34 If you have found the Bridge you were looking for, you can then move on with the authentication process.
42 35 To get a new username from the Bridge (for now) you simply call [getBridge(bridges[\<index\>])](@ref hueplusplus::BridgeFinder::getBridge),
43 36 where index is your preferred Bridge from the part [Searching for Bridges](#searchingBridges). This requires the user to press the link button.
44   -```{.cpp}
45   -hueplusplus::Bridge bridge = finder.getBridge(bridges[0]);
46   -```
  37 +\snippet Snippets.cpp get-bridge-1
  38 +
47 39 If you on the other hand already have a username you can add your bridge like so
48   -```{.cpp}
49   -finder.addUsername(bridges[0].mac, "<username>");
50   -hueplusplus::Bridge bridge = finder.getBridge(bridges[0]);
51   -```
  40 +\snippet Snippets.cpp get-bridge-2
  41 +
52 42 If you do not want to use the BridgeFinder or you already know the ip and username of your bridge you have the option to create your own Bridge object.
53 43 Here you will need to provide the ip address, the port number, a username and an HttpHandler
54   -```{.cpp}
55   -// For windows use std::make_shared<hueplusplus::WinHttpHandler>();
56   -handler = std::make_shared<hueplusplus::LinHttpHandler>();
57   -hueplusplus::Bridge bridge("192.168.2.102", 80, "<username>", handler);
58   -```
  44 +\snippet Snippets.cpp get-bridge-3
  45 +
59 46  
60 47 ### Controlling lights
61 48 If you have your Bridge all set up, you can now control its lights.
62 49 For that create a new Light object and call [lights().get(\<id\>)](@ref hueplusplus::ResourceList::get) on your bridge object to get a reference to a specific light, where id
63 50 is the id of the light set internally by the Hue Bridge.
64   -```{.cpp}
65   -hueplusplus::Light light1 = bridge.lights().get(1);
66   -```
  51 +\snippet Snippets.cpp light-1
  52 +
67 53 If you don't know the id of a specific light or want to get an overview over all lights that are controlled by your bridge,
68 54 you can get a vector containing them by calling [getAll()](@ref hueplusplus::ResourceList::getAll) on your bridge object. If no lights are found the vector will be empty.
69   -```{.cpp}
70   -std::vector<hueplusplus::Light> lights = bridge.lights().getAll();
71   -```
  55 +\snippet Snippets.cpp light-2
  56 +
72 57 If you now want to control a light, call a specific function of it.
73   -```{.cpp}
74   -light1.on();
75   -light1.setBrightness(120);
76   -light1.alertHueSaturation(25500, 255);
77   -light1.setColorLoop(true);
78   -light1.setColorRGB(255, 128, 0);
79   -lights[1].off();
80   -lights.at(1).setColorHue(4562);
81   -```
  58 +\snippet Snippets.cpp light-3
  59 +
82 60 But keep in mind that some light types do not have all functions available. So you might call a
83 61 specific function, but nothing will happen. For that you might want to check what type
84 62 of a light you are controlling. For that you can call the function [getColorType()](@ref hueplusplus::Light::getColorType()), which will return
85 63 a ColorType.
86   -```{.cpp}
87   -hueplusplus::ColorType type1 = light1.getColorType();
88   -```
  64 +\snippet Snippets.cpp light-4
  65 +
89 66 There's also a new way to check whether specific functions of a light are available:
90   -```{.cpp}
91   -light1.hasBrightnessControl();
92   -light1.hasTemperatureControl();
93   -light1.hasColorControl();
94   -```
  67 +\snippet Snippets.cpp light-5
  68 +
95 69 These will either return true(light has specified function) or false(light lacks specified function).
96 70  
97 71 ## Build and install
98   -- [Build and install guide](@ref build)
  72 +[Build and install guide](@ref build)
99 73  
100 74 ### Basic installation
101 75 If you want to build the library you can use cmake (at least version 3.8). First create a build folder and then execute cmake.
... ... @@ -155,3 +129,11 @@ If you also want to execute coverage tests you will need to install gcov and lco
155 129 ```bash
156 130 make coveragetest
157 131 ```
  132 +
  133 +
  134 +## Other pages
  135 +- [Getting started](@ref getting-started)
  136 +- [Build and install](@ref build)
  137 +- [Shared state cache](@ref shared-state)
  138 +- [Transactions](@ref transactions)
  139 +- [Sensors](@ref sensors)
... ...
doc/markdown/Sensors.md
1 1 # Sensors {#sensors}
2 2  
  3 +[TOC]
  4 +
3 5 ## Sensor support
4 6 The library supports the sensor types listed on the Hue developer documentation.
  7 +Include `hueplusplus/ZLLSensors.h` for ZigBee sensors and `hueplusplus/CLIPSensors.h` for CLIP sensors.
5 8 Other sensors can be used with the generic [Sensor](@ref hueplusplus::Sensor) class.
6 9  
7 10 ### Working with a known sensor
... ... @@ -9,41 +12,19 @@ In most cases, the type of the sensors is known in advance, such as a switch.
9 12 The classes in the [sensors](@ref hueplusplus::sensors) namespace provide the documented
10 13 functionality. The type can be specified when accessing the sensor. When it does not match,
11 14 an exception is thrown.
12   -```{.cpp}
13   -hueplusplus::sensors::ZLLSwitch switchSensor = bridge.sensors().getAsType<hueplusplus::sensors::ZLLSwitch>(2);
14   -```
  15 +\snippet Snippets.cpp known-sensor-1
15 16  
16 17 You can also get all sensors of a specified type by using [getAllByType<T>()](@ref hueplusplus::SensorList::getAllByType).
17   -```{.cpp}
18   -std::vector<hueplusplus::sensors::ZLLSwitch> allSwitches = bridge.sensors().getAllByType<hueplusplus::sensors::ZLLSwitch>();
19   -```
  18 +\snippet Snippets.cpp known-sensor-2
20 19  
21 20 ### Working with an unknown sensor
22 21 When the sensor type is not known, use the generic sensor class. In this case, some attributes might not
23 22 exist, so they have to be checked first. This applies to all attributes that have a `hasXXX` method.
24   -
25   -```{.cpp}
26   -hueplusplus::Sensor genericSensor = bridge.sensors().get(1);
27   -if(genericSensor.hasOn())
28   -{
29   - // Now can check whether it is on
30   - if(genericSensor.isOn())
31   - {
32   - // ...
33   - }
34   -}
35   -```
  23 +\snippet Snippets.cpp generic-sensor-1
36 24  
37 25 It is easiest to compare the sensor type to the existing ones (`typeStr` on the specific sensor classes)
38 26 and then convert the sensor to that type.
39   -```{.cpp}
40   -hueplusplus::Sensor genericSensor = bridge.sensors().get(1);
41   -if(genericSensor.getType() == hueplusplus::sensors::ZLLSwitch::typeStr)
42   -{
43   - hueplusplus::sensors::ZLLSwitch switchSensor = genericSensor.asSensorType<hueplusplus::sensors::ZLLSwitch>();
44   - // ...
45   -}
46   -```
  27 +\snippet Snippets.cpp generic-sensor-2
47 28  
48 29 ## ZLL sensors vs. CLIP sensors
49 30 ZLL sensors (defined in `ZLLSensors.h`) are physical device sensors which send their data
... ... @@ -60,19 +41,7 @@ Conditions can be created from the specific sensor types using `makeCondition()`
60 41 These functions return a helper class with methods for the [possible operators](@ref hueplusplus::Condition::Operator) valid for the state.
61 42  
62 43 For some sensors, which have multiple possible states, there exist multiple variations of makeCondition.
63   -
64   -```{.cpp}
65   -hueplusplus::sensors::ZLLSwitch switchSensor = ...;
66   -// ZLLSwitch conditions operate on `buttonEvent`, use makeConditionLastUpdate()
67   -// to trigger on the last update time.
68   -
69   -// Some examples:
70   -hueplusplus::Condition upPressed = makeCondition(switchSensor).eq(hueplusplus::sensors::ZLLSwitch::c_UP_INITIAL_PRESS);
71   -hueplusplus::Condition buttonChanged = makeCondition(switchSensor).dx();
72   -
73   -hueplusplus::time::TimeInterval interval(std::chrono::hours(12), std::chrono::hours(13));
74   -hueplusplus::Condition updatedAtNoon = makeConditionLastUpdate(switchSensor).in(interval);
75   -```
  44 +\snippet Snippets.cpp sensor-conditions
76 45  
77 46 For generic sensors, the conditions must be created manually using the [Condition](@ref hueplusplus::Condition::Condition)
78   -constructor with a proper address to the sensor state.
79 47 \ No newline at end of file
  48 +constructor with a proper address to the sensor state.
... ...
doc/markdown/Shared_State.md
1 1 # Shared state cache {#shared-state}
2 2  
  3 +[TOC]
  4 +
3 5 ## What shared state means
4 6 There are two ways in which the API state (internally JSON) can be handled:
5 7 1. Every resource instance holds its own cache of the state (default).
6   -2. All instances share the cache for the entire bridge.
  8 +2. All instances share the cache of the entire bridge.
7 9  
8 10 ### Advantages of shared state
9 11 * Different resources are always consistent on the library level.
... ... @@ -23,12 +25,8 @@ Because of these considerations, shared state is disabled by default.
23 25 Shared state can be configured when the bridge is first constructed, either in [getBridge()](@ref hueplusplus::BridgeFinder::getBridge)
24 26 or in the [constructor](@ref hueplusplus::Bridge::Bridge). Set `sharedState` to `true` to keep all resources
25 27 connected to the bridge cache.
26   -```{.cpp}
27   -hueplusplus::Bridge bridge = finder.getBridge(bridges[0], true);
28   -```
29   -```{.cpp}
30   -hueplusplus::Bridge bridge("192.168.2.102", 80, "<username>", handler, std::chrono::seconds(10), true);
31   -```
  28 +\snippet Snippets.cpp shared-bridge-1
  29 +\snippet Snippets.cpp shared-bridge-2
32 30  
33 31 ## Shared state and refreshing
34 32 When shared cache is used, refreshes use a hierarchichal structure to determine how much should be requested from the bridge.
... ... @@ -38,13 +36,7 @@ Otherwise, only the lowest necessary level is requested from the bridge to be mo
38 36  
39 37 ### Example:
40 38  
41   -```{.cpp}
42   -bridge.setRefreshDuration(std::chrono::minutes(1));
43   -bridge.lights().setRefreshDuration(std::chrono::seconds(30));
44   -hueplusplus::Light light = bridge.lights().get(1);
45   -// ... wait some time
46   -bool on = light.isOn();
47   -```
  39 +\snippet Snippets.cpp refresh-example
48 40 [isOn()](@ref hueplusplus::Light::isOn) is a non-const method (in this case). That means it will refresh the
49 41 state if it is outdated. The default refresh time is inherited from `bridge.lights()`, so it is 30 seconds.
50 42 After 30 seconds, the state of `light` *and* `bridge.lights()` is outdated. Therefore, the entire list of lights is
... ...
doc/markdown/Transactions.md
1 1 # Transactions {#transactions}
2 2  
  3 +[TOC]
  4 +
3 5 ## Using a transaction for lights
4   -Often, you want to change more than one variable on a light at the same time,
  6 +Often, you want to change more than one property on a light at the same time,
5 7 for example brightness and color. This is done using transactions ([StateTransaction](@ref hueplusplus::StateTransaction)).
  8 +\snippet Snippets.cpp transaction-lights
6 9  
7   -```{.cpp}
8   -light.transaction().setOn(true).setBrightness(29).setColorHue(3000).setColorSaturation(128).commit();
9   -```
10 10 The request is reduced to only the variables that need to be changed based on the current state.
11 11 For example, if the light is already on, that part of the transaction is ignored.
12 12  
... ... @@ -16,13 +16,7 @@ because that invalidates the reference.
16 16  
17 17 ### Advanced usage
18 18 Another way to use the transaction is by storing it and building up the calls separately.
19   -
20   -```{.cpp}
21   -hueplusplus::StateTransaction t = light.transaction();
22   -if(shouldTurnOn)
23   - t.setOn(true);
24   -t.commit();
25   -```
  19 +\snippet Snippets.cpp transaction-advanced
26 20  
27 21 In this case, it is especially important that the light and the state of the light __MUST NOT__ invalidate. That means
28 22 * the light variable has to live longer than the transaction
... ... @@ -34,17 +28,11 @@ In general, this method is easier to screw up and should only be used when reall
34 28 The same principles of transactions for lights also apply for groups. The main difference is that
35 29 for groups, there are no checks of the current state. Even if all lights in the group are already on,
36 30 the request to turn on all lights on the group is still sent.
37   -
38   -```{.cpp}
39   -group.transaction().setOn(true).setBrightness(64).commit();
40   -```
  31 +\snippet Snippets.cpp transaction-groups
41 32  
42 33  
43 34 ## Creating Actions
44 35 In a [Schedule](@ref hueplusplus::Schedule) or [Rule](@ref hueplusplus::Rule),
45 36 the bridge can set the state of lights and groups. To configure this, a transaction
46 37 can be saved for later instead of committing it directly.
47   -```{.cpp}
48   -hueplusplus::Action action = light.transaction().setOn(true).setBrightness(255).toAction();
49   -schedule.setCommand(action);
50   -```
  38 +\snippet Snippets.cpp transaction-action
... ...
examples/BridgeSetup.cpp
... ... @@ -18,7 +18,8 @@
18 18 You should have received a copy of the GNU Lesser General Public License
19 19 along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
20 20  
21   - \brief This example connects to a bridge with hardcoded mac and username.
  21 + \example{lineno} BridgeSetup.cpp
  22 + This example connects to a bridge with hardcoded mac and username.
22 23 **/
23 24  
24 25  
... ... @@ -45,7 +46,7 @@ namespace hue = hueplusplus;
45 46 const std::string macAddress = "";
46 47 const std::string username = "";
47 48  
48   -//! \brief Connects to a bridge and returns it.
  49 +// Connects to a bridge and returns it.
49 50 hue::Bridge connectToBridge()
50 51 {
51 52 hue::BridgeFinder finder(std::make_shared<SystemHttpHandler>());
... ...
examples/CMakeLists.txt
... ... @@ -15,4 +15,10 @@ set_property(TARGET lights_off PROPERTY CXX_EXTENSIONS OFF)
15 15 target_link_libraries(username_config hueplusplusstatic)
16 16  
17 17 add_custom_target(hueplusplus_examples)
18   -add_dependencies(hueplusplus_examples bridge_setup lights_off)
19 18 \ No newline at end of file
  19 +add_dependencies(hueplusplus_examples bridge_setup lights_off username_config)
  20 +
  21 +# Snippets for documentation, not included with the examples target
  22 +add_executable(hueplusplus_snippets Snippets.cpp)
  23 +set_property(TARGET hueplusplus_snippets PROPERTY CXX_STANDARD 14)
  24 +set_property(TARGET hueplusplus_snippets PROPERTY CXX_EXTENSIONS OFF)
  25 +target_link_libraries(hueplusplus_snippets hueplusplusstatic)
... ...
examples/LightsOff.cpp
... ... @@ -18,7 +18,8 @@
18 18 You should have received a copy of the GNU Lesser General Public License
19 19 along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
20 20  
21   - \brief This example turns off all lights for 20 seconds, then turns them on again.
  21 + \example{lineno} LightsOff.cpp
  22 + This example turns off all lights for 20 seconds, then turns them on again.
22 23 **/
23 24  
24 25 #include <thread>
... ... @@ -43,7 +44,7 @@ namespace hue = hueplusplus;
43 44 const std::string macAddress = "";
44 45 const std::string username = "";
45 46  
46   -//! \brief Connects to a bridge and returns it.
  47 +// Connects to a bridge and returns it.
47 48 hue::Bridge connectToBridge()
48 49 {
49 50 hue::BridgeFinder finder(std::make_shared<SystemHttpHandler>());
... ... @@ -79,9 +80,8 @@ hue::Bridge connectToBridge()
79 80 return finder.getBridge(*it);
80 81 }
81 82  
82   -//! \brief Turns off the lights on the bridge for 20 seconds.
83   -//!
84   -//! Only turns the lights back on that were on before.
  83 +// Turns off the lights on the bridge for 20 seconds.
  84 +// Only turns the lights back on that were on before.
85 85 void lightsOff(hue::Bridge& hue)
86 86 {
87 87 std::vector<hue::Light> lights = hue.lights().getAll();
... ...
examples/Snippets.cpp 0 โ†’ 100644
  1 +/**
  2 + \file Snippets.cpp
  3 + Copyright Notice\n
  4 + Copyright (C) 2021 Jan Rogall - developer\n
  5 +
  6 + This file is part of hueplusplus.
  7 +
  8 + hueplusplus is free software: you can redistribute it and/or modify
  9 + it under the terms of the GNU Lesser General Public License as published by
  10 + the Free Software Foundation, either version 3 of the License, or
  11 + (at your option) any later version.
  12 +
  13 + hueplusplus is distributed in the hope that it will be useful,
  14 + but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16 + GNU Lesser General Public License for more details.
  17 +
  18 + You should have received a copy of the GNU Lesser General Public License
  19 + along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
  20 +
  21 + \brief Contains code snippets used in the documentation, performs no useful functions.
  22 +**/
  23 +
  24 +#include <hueplusplus/Bridge.h>
  25 +#include <hueplusplus/CLIPSensors.h>
  26 +#include <hueplusplus/ZLLSensors.h>
  27 +
  28 +#ifdef _MSC_VER
  29 +#include <hueplusplus/WinHttpHandler.h>
  30 +
  31 +namespace hueplusplus
  32 +{
  33 +// Dirty hack to make the snippets compile under windows. Dont do this,
  34 +// instead use your own alias which is set to either type like in BridgeSetup.cpp!
  35 +using LinHttpHandler = WinHttpHandler;
  36 +} // namespace hueplusplus
  37 +
  38 +#else
  39 +#include <hueplusplus/LinHttpHandler.h>
  40 +
  41 +#endif
  42 +
  43 +void snippet1()
  44 +{
  45 + // Main page
  46 + //! [search-bridge]
  47 + // For windows use std::make_shared<hueplusplus::WinHttpHandler>();
  48 + auto handler = std::make_shared<hueplusplus::LinHttpHandler>();
  49 + hueplusplus::BridgeFinder finder(handler);
  50 + std::vector<hueplusplus::BridgeFinder::BridgeIdentification> bridges = finder.findBridges();
  51 + if (bridges.empty())
  52 + {
  53 + std::cerr << "No bridges found\n";
  54 + return;
  55 + }
  56 + //! [search-bridge]
  57 + //! [get-bridge-2]
  58 + finder.addUsername(bridges[0].mac, "<username>");
  59 + //! [get-bridge-1]
  60 + hueplusplus::Bridge bridge = finder.getBridge(bridges[0]);
  61 + //! [get-bridge-1]
  62 + //! [get-bridge-2]
  63 + //! [light-1]
  64 + hueplusplus::Light light1 = bridge.lights().get(1);
  65 + //! [light-1]
  66 + //! [light-2]
  67 + std::vector<hueplusplus::Light> lights = bridge.lights().getAll();
  68 + //! [light-2]
  69 + //! [light-3]
  70 + light1.on();
  71 + light1.setBrightness(120);
  72 + light1.alertHueSaturation({25500, 254});
  73 + light1.setColorLoop(true);
  74 + light1.setColorRGB({255, 128, 0});
  75 + lights[1].off();
  76 + lights.at(1).setColorHue(4562);
  77 + //! [light-3]
  78 + //! [light-4]
  79 + hueplusplus::ColorType type1 = light1.getColorType();
  80 + //! [light-4]
  81 + //! [light-5]
  82 + light1.hasBrightnessControl();
  83 + light1.hasTemperatureControl();
  84 + light1.hasColorControl();
  85 + //! [light-5]
  86 +
  87 + // Getting started
  88 + //! [control-lights]
  89 + hueplusplus::Light light = bridge.lights().get(1);
  90 + light.on();
  91 + light.off();
  92 + //! [control-lights]
  93 + //! [control-groups]
  94 + hueplusplus::Group group = bridge.groups().get(1);
  95 + group.setOn(true);
  96 + //! [control-groups]
  97 +
  98 + // Sensors
  99 + //! [sensor-conditions]
  100 + //! [known-sensor-1]
  101 + hueplusplus::sensors::ZLLSwitch switchSensor = bridge.sensors().getAsType<hueplusplus::sensors::ZLLSwitch>(2);
  102 + //! [known-sensor-1]
  103 + // ZLLSwitch conditions operate on `buttonEvent`, use makeConditionLastUpdate()
  104 + // to trigger on the last update time.
  105 +
  106 + // Some examples:
  107 + hueplusplus::Condition upPressed
  108 + = makeCondition(switchSensor).eq(hueplusplus::sensors::ZLLSwitch::c_UP_INITIAL_PRESS);
  109 + hueplusplus::Condition buttonChanged = makeCondition(switchSensor).dx();
  110 +
  111 + hueplusplus::time::TimeInterval interval(std::chrono::hours(12), std::chrono::hours(13));
  112 + hueplusplus::Condition updatedAtNoon = makeConditionLastUpdate(switchSensor).in(interval);
  113 + //! [sensor-conditions]
  114 + //! [known-sensor-2]
  115 + std::vector<hueplusplus::sensors::ZLLSwitch> allSwitches
  116 + = bridge.sensors().getAllByType<hueplusplus::sensors::ZLLSwitch>();
  117 + //! [known-sensor-2]
  118 + //! [generic-sensor-1]
  119 + hueplusplus::Sensor genericSensor = bridge.sensors().get(1);
  120 + if (genericSensor.hasOn())
  121 + {
  122 + // Now can check whether it is on
  123 + if (genericSensor.isOn())
  124 + {
  125 + // ...
  126 + }
  127 + }
  128 + //! [generic-sensor-1]
  129 +
  130 + // Transactions
  131 + //! [transaction-lights]
  132 + light.transaction().setOn(true).setBrightness(29).setColorHue(3000).setColorSaturation(128).commit();
  133 + //! [transaction-lights]
  134 + bool shouldTurnOn = true;
  135 + //! [transaction-advanced]
  136 + hueplusplus::StateTransaction t = light.transaction();
  137 + if (shouldTurnOn)
  138 + t.setOn(true);
  139 + t.commit();
  140 + //! [transaction-advanced]
  141 + //! [transaction-groups]
  142 + group.transaction().setOn(true).setBrightness(64).commit();
  143 + //! [transaction-groups]
  144 + hueplusplus::Schedule schedule = bridge.schedules().get(1);
  145 + //! [transaction-action]
  146 + hueplusplus::Action action = light.transaction().setOn(true).setBrightness(254).toAction();
  147 + schedule.setCommand(action);
  148 + //! [transaction-action]
  149 +}
  150 +void snippet2()
  151 +{
  152 + // Main page
  153 + //! [get-bridge-3]
  154 + // For windows use std::make_shared<hueplusplus::WinHttpHandler>();
  155 + auto handler = std::make_shared<hueplusplus::LinHttpHandler>();
  156 + hueplusplus::Bridge bridge("192.168.2.102", 80, "<username>", handler);
  157 + //! [get-bridge-3]
  158 +
  159 + // Sensors
  160 + //! [generic-sensor-2]
  161 + hueplusplus::Sensor genericSensor = bridge.sensors().get(1);
  162 + if (genericSensor.getType() == hueplusplus::sensors::ZLLSwitch::typeStr)
  163 + {
  164 + hueplusplus::sensors::ZLLSwitch switchSensor = genericSensor.asSensorType<hueplusplus::sensors::ZLLSwitch>();
  165 + // ...
  166 + }
  167 + //! [generic-sensor-2]
  168 +}
  169 +
  170 +void snippet3()
  171 +{
  172 + // Shared state
  173 + auto handler = std::make_shared<hueplusplus::LinHttpHandler>();
  174 + hueplusplus::BridgeFinder finder(handler);
  175 + std::vector<hueplusplus::BridgeFinder::BridgeIdentification> bridges = finder.findBridges();
  176 + //! [shared-bridge-1]
  177 + hueplusplus::Bridge bridge = finder.getBridge(bridges[0], true);
  178 + //! [shared-bridge-1]
  179 + //! [refresh-example]
  180 + bridge.setRefreshDuration(std::chrono::minutes(1));
  181 + bridge.lights().setRefreshDuration(std::chrono::seconds(30));
  182 + hueplusplus::Light light = bridge.lights().get(1);
  183 + // ... wait some time
  184 + bool on = light.isOn();
  185 + //! [refresh-example]
  186 +}
  187 +void snippet4()
  188 +{
  189 + // Shared state
  190 + auto handler = std::make_shared<hueplusplus::LinHttpHandler>();
  191 + //! [shared-bridge-2]
  192 + hueplusplus::Bridge bridge("192.168.2.102", 80, "<username>", handler, "", std::chrono::seconds(10), true);
  193 + //! [shared-bridge-2]
  194 +}
  195 +
  196 +int main(int argc, char** argv)
  197 +{
  198 + return 0;
  199 +}
0 200 \ No newline at end of file
... ...
examples/UsernameConfig.cpp
... ... @@ -18,7 +18,8 @@
18 18 You should have received a copy of the GNU Lesser General Public License
19 19 along with hueplusplus. If not, see <http://www.gnu.org/licenses/>.
20 20  
21   - \brief This example reads the username and mac address from a config file.
  21 + \example{lineno} UsernameConfig.cpp
  22 + This example reads the username and mac address from a config file.
22 23 **/
23 24  
24 25 #include <algorithm>
... ... @@ -42,9 +43,9 @@ using SystemHttpHandler = hueplusplus::LinHttpHandler;
42 43  
43 44 namespace hue = hueplusplus;
44 45  
45   -//! \brief Reads a json config file.
46   -//! \param filename Path to the config file
47   -//! \returns Parsed json or an empty object if not successful.
  46 +// Reads a json config file.
  47 +// filename: Path to the config file
  48 +// returns parsed json or an empty object if not successful.
48 49 nlohmann::json readConfigFile(const std::string& filename)
49 50 {
50 51 std::ifstream stream(filename);
... ... @@ -64,20 +65,20 @@ nlohmann::json readConfigFile(const std::string&amp; filename)
64 65 }
65 66 }
66 67  
67   -//! \brief Saves a json file.
68   -//! \param filename Path to the config file
69   -//! \param config Json value to save
  68 +// Saves a json file.
  69 +// filename: Path to the config file
  70 +// config: Json value to save
70 71 void saveConfigFile(const std::string& filename, const nlohmann::json& config)
71 72 {
72 73 std::ofstream stream(filename);
73 74 stream << std::setw(4) << config;
74 75 }
75 76  
76   -//! \brief Connects to a bridge and returns it
77   -//! \param username Already existing username, can be left empty.
78   -//! \param macAddress MAC address of the bridge, can be left empty.
79   -//! \throws std::runtime_error When the bridge was not found.
80   -//! \returns A connected bridge.
  77 +// Connects to a bridge and returns it
  78 +// username: Already existing username, can be left empty.
  79 +// macAddress: MAC address of the bridge, can be left empty.
  80 +// throws std::runtime_error when the bridge was not found.
  81 +// returns a connected bridge.
81 82 hue::Bridge connectToBridge(const std::string& username, const std::string& macAddress)
82 83 {
83 84 hue::BridgeFinder finder(std::make_shared<SystemHttpHandler>());
... ... @@ -113,12 +114,12 @@ hue::Bridge connectToBridge(const std::string&amp; username, const std::string&amp; macA
113 114 return finder.getBridge(*it);
114 115 }
115 116  
116   -//! Connects to a bridge. The steps are:
117   -//! - read "config.json" for an existing config
118   -//! - connect to the bridge
119   -//! - save the username to the config file for the next run
120   -//!
121   -//! Also prints out the IP and username.
  117 +// Connects to a bridge. The steps are:
  118 +// - read "config.json" for an existing config
  119 +// - connect to the bridge
  120 +// - save the username to the config file for the next run
  121 +//
  122 +// Also prints out the IP and username.
122 123 int main(int argc, char** argv)
123 124 {
124 125  
... ...