From 2274ae703b1b70f749f221bc50e5987006adde59 Mon Sep 17 00:00:00 2001 From: MMS Date: Thu, 4 Nov 2021 15:08:54 -0400 Subject: [PATCH] 6.9.4rc3 updated doxygen directory --- doxygen/Doxyfile | 806 +++++++++++++++++++-------------------- doxygen/Doxyfile-CHM | 26 +- doxygen/Doxyfile-DOC | 21 +- doxygen/doxygen.xml | 226 ----------- doxygen/exa_mware.dox | 18 +- doxygen/history.dox | 12 +- doxygen/images/AN-QL.png | Bin 0 -> 67603 bytes doxygen/main.dox | 29 +- doxygen/srs.dox | 2 +- 9 files changed, 465 insertions(+), 675 deletions(-) delete mode 100644 doxygen/doxygen.xml create mode 100644 doxygen/images/AN-QL.png diff --git a/doxygen/Doxyfile b/doxygen/Doxyfile index 1991b010..e5214d7a 100644 --- a/doxygen/Doxyfile +++ b/doxygen/Doxyfile @@ -1,403 +1,403 @@ -# Doxyfile 1.9.1 - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- -DOXYFILE_ENCODING = UTF-8 -PROJECT_NAME = "QP/C" -PROJECT_NUMBER = "6.9.4" -PROJECT_BRIEF = "Real-Time Embedded Framework" -PROJECT_LOGO = images/logo_ql.png -OUTPUT_DIRECTORY = -CREATE_SUBDIRS = NO -ALLOW_UNICODE_NAMES = NO -OUTPUT_LANGUAGE = English -OUTPUT_TEXT_DIRECTION = None -BRIEF_MEMBER_DESC = YES -REPEAT_BRIEF = YES -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the -ALWAYS_DETAILED_SEC = NO -INLINE_INHERITED_MEMB = NO -FULL_PATH_NAMES = NO -STRIP_FROM_PATH = -STRIP_FROM_INC_PATH = -SHORT_NAMES = NO -JAVADOC_AUTOBRIEF = NO -JAVADOC_BANNER = NO -QT_AUTOBRIEF = NO -MULTILINE_CPP_IS_BRIEF = NO -PYTHON_DOCSTRING = YES -INHERIT_DOCS = YES -SEPARATE_MEMBER_PAGES = NO -TAB_SIZE = 4 -ALIASES = "next{1}=
Next: @ref \1

" \ - "description=@par Description" \ - "amplification=@par Amplification" \ - "rationale=@par Rationale" \ - "caption{1}=
\1
" \ - "hint=@par Hint" \ - "usage=@par Usage" \ - "termref{2}=\2" \ - "reqdef{1}=@anchor \1 @xrefitem reqdef \"Requirement\" \"Requirement Index\" @ref \1" \ - "reqref{1}=@ref \1 \"\1\"" -OPTIMIZE_OUTPUT_FOR_C = YES -OPTIMIZE_OUTPUT_JAVA = NO -OPTIMIZE_FOR_FORTRAN = NO -OPTIMIZE_OUTPUT_VHDL = NO -OPTIMIZE_OUTPUT_SLICE = NO -EXTENSION_MAPPING = lnt=Objective-C -MARKDOWN_SUPPORT = YES -TOC_INCLUDE_HEADINGS = 4 -AUTOLINK_SUPPORT = YES -BUILTIN_STL_SUPPORT = NO -CPP_CLI_SUPPORT = NO -SIP_SUPPORT = NO -IDL_PROPERTY_SUPPORT = YES -DISTRIBUTE_GROUP_DOC = NO -GROUP_NESTED_COMPOUNDS = NO -SUBGROUPING = YES -INLINE_GROUPED_CLASSES = YES -INLINE_SIMPLE_STRUCTS = YES -TYPEDEF_HIDES_STRUCT = YES -LOOKUP_CACHE_SIZE = 0 -NUM_PROC_THREADS = 1 -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- -EXTRACT_ALL = YES -EXTRACT_PRIVATE = YES -EXTRACT_PRIV_VIRTUAL = NO -EXTRACT_PACKAGE = YES -EXTRACT_STATIC = YES -EXTRACT_LOCAL_CLASSES = YES -EXTRACT_LOCAL_METHODS = NO -EXTRACT_ANON_NSPACES = NO -RESOLVE_UNNAMED_PARAMS = YES -HIDE_UNDOC_MEMBERS = NO -HIDE_UNDOC_CLASSES = NO -HIDE_FRIEND_COMPOUNDS = NO -HIDE_IN_BODY_DOCS = NO -INTERNAL_DOCS = NO -CASE_SENSE_NAMES = NO -HIDE_SCOPE_NAMES = YES -HIDE_COMPOUND_REFERENCE= NO -SHOW_INCLUDE_FILES = YES -SHOW_GROUPED_MEMB_INC = NO -FORCE_LOCAL_INCLUDES = NO -INLINE_INFO = YES -SORT_MEMBER_DOCS = NO -SORT_BRIEF_DOCS = NO -SORT_MEMBERS_CTORS_1ST = NO -SORT_GROUP_NAMES = NO -SORT_BY_SCOPE_NAME = NO -STRICT_PROTO_MATCHING = NO -GENERATE_TODOLIST = YES -GENERATE_TESTLIST = YES -GENERATE_BUGLIST = YES -GENERATE_DEPRECATEDLIST= YES -ENABLED_SECTIONS = -MAX_INITIALIZER_LINES = 30 -SHOW_USED_FILES = YES -SHOW_FILES = YES -SHOW_NAMESPACES = YES -FILE_VERSION_FILTER = -LAYOUT_FILE = -CITE_BIB_FILES = -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- -QUIET = NO -WARNINGS = YES -WARN_IF_UNDOCUMENTED = YES -WARN_IF_DOC_ERROR = YES -WARN_NO_PARAMDOC = NO -WARN_AS_ERROR = NO -WARN_FORMAT = "$file:$line: $text" -WARN_LOGFILE = -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- -INPUT = main.dox \ - gs.dox \ - struct.dox \ - api.dox \ - exa.dox \ - exa_apps.dox \ - exa_native.dox \ - ../../doxygen/exa_low-power.dox \ - exa_rtos.dox \ - exa_os.dox \ - exa_qutest.dox \ - exa_mware.dox \ - ports.dox \ - ports_native.dox \ - ../../doxygen/ports_arm-cm.dox \ - ports_rtos.dox \ - ports_os.dox \ - history.dox \ - macros.h \ - metrics.dox \ - modules.dox \ - ../include \ - ../src \ - ../ports/lint-plus \ - ../../doxygen/help.dox -INPUT_ENCODING = UTF-8 -FILE_PATTERNS = *.dox \ - *.h \ - *.c \ - *.cpp \ - *.s \ - *.asm \ - *.lnt -RECURSIVE = YES -EXCLUDE = ../include/qs_dummy.h -EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = -EXCLUDE_SYMBOLS = QP_IMPL -EXAMPLE_PATH = snippets \ - ../include \ - ../src \ - ../ports \ - ../examples -EXAMPLE_PATTERNS = * -EXAMPLE_RECURSIVE = NO -IMAGE_PATH = images \ - ../../doxygen/images -INPUT_FILTER = -FILTER_PATTERNS = -FILTER_SOURCE_FILES = NO -FILTER_SOURCE_PATTERNS = -USE_MDFILE_AS_MAINPAGE = -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- -SOURCE_BROWSER = YES -INLINE_SOURCES = NO -STRIP_CODE_COMMENTS = YES -REFERENCED_BY_RELATION = NO -REFERENCES_RELATION = NO -REFERENCES_LINK_SOURCE = YES -SOURCE_TOOLTIPS = YES -USE_HTAGS = NO -VERBATIM_HEADERS = YES -CLANG_ASSISTED_PARSING = NO -CLANG_ADD_INC_PATHS = YES -CLANG_OPTIONS = -CLANG_DATABASE_PATH = -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- -ALPHABETICAL_INDEX = YES -IGNORE_PREFIX = -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- -GENERATE_HTML = YES -HTML_OUTPUT = ../html -HTML_FILE_EXTENSION = .html -HTML_HEADER = ../../doxygen/header-awesome.html -HTML_FOOTER = ../../doxygen/footer-awesome.html -HTML_STYLESHEET = -HTML_EXTRA_STYLESHEET = ../../doxygen/doxygen-awesome.css \ - ../../doxygen/ql-awesome.css -HTML_EXTRA_FILES = ../../doxygen/doxygen-awesome-darkmode-toggle.js -HTML_COLORSTYLE_HUE = 209 -HTML_COLORSTYLE_SAT = 255 -HTML_COLORSTYLE_GAMMA = 113 -HTML_TIMESTAMP = NO -HTML_DYNAMIC_MENUS = YES -HTML_DYNAMIC_SECTIONS = NO -HTML_INDEX_NUM_ENTRIES = 100 -GENERATE_DOCSET = NO -DOCSET_FEEDNAME = "Doxygen generated docs" -DOCSET_BUNDLE_ID = com.state-machine.doc -DOCSET_PUBLISHER_ID = com.state-machine.doc -DOCSET_PUBLISHER_NAME = QuantumLeaps -GENERATE_HTMLHELP = NO -CHM_FILE = ../qpc.chm -HHC_LOCATION = -GENERATE_CHI = NO -CHM_INDEX_ENCODING = -BINARY_TOC = YES -TOC_EXPAND = NO -GENERATE_QHP = NO -QCH_FILE = -QHP_NAMESPACE = com.state-machine.qp -QHP_VIRTUAL_FOLDER = doc -QHP_CUST_FILTER_NAME = -QHP_CUST_FILTER_ATTRS = -QHP_SECT_FILTER_ATTRS = -QHG_LOCATION = -GENERATE_ECLIPSEHELP = NO -ECLIPSE_DOC_ID = com.state-machine.qp -DISABLE_INDEX = YES -GENERATE_TREEVIEW = YES -ENUM_VALUES_PER_LINE = 4 -TREEVIEW_WIDTH = 300 -EXT_LINKS_IN_WINDOW = NO -HTML_FORMULA_FORMAT = png -FORMULA_FONTSIZE = 10 -FORMULA_TRANSPARENT = YES -FORMULA_MACROFILE = -USE_MATHJAX = NO -MATHJAX_FORMAT = HTML-CSS -MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@2 -MATHJAX_EXTENSIONS = -MATHJAX_CODEFILE = -SEARCHENGINE = YES -SERVER_BASED_SEARCH = NO -EXTERNAL_SEARCH = NO -SEARCHENGINE_URL = -SEARCHDATA_FILE = searchdata.xml -EXTERNAL_SEARCH_ID = -EXTRA_SEARCH_MAPPINGS = -#--------------------------------------------------------------------------- -# Configuration options related to the LaTeX output -#--------------------------------------------------------------------------- -GENERATE_LATEX = NO -LATEX_OUTPUT = latex -LATEX_CMD_NAME = latex -MAKEINDEX_CMD_NAME = makeindex -LATEX_MAKEINDEX_CMD = makeindex -COMPACT_LATEX = NO -PAPER_TYPE = letter -EXTRA_PACKAGES = -LATEX_HEADER = -LATEX_FOOTER = -LATEX_EXTRA_STYLESHEET = -LATEX_EXTRA_FILES = -PDF_HYPERLINKS = YES -USE_PDFLATEX = YES -LATEX_BATCHMODE = NO -LATEX_HIDE_INDICES = NO -LATEX_SOURCE_CODE = NO -LATEX_BIB_STYLE = plain -LATEX_TIMESTAMP = NO -LATEX_EMOJI_DIRECTORY = -#--------------------------------------------------------------------------- -# Configuration options related to the RTF output -#--------------------------------------------------------------------------- -GENERATE_RTF = NO -RTF_OUTPUT = rtf -COMPACT_RTF = NO -RTF_HYPERLINKS = NO -RTF_STYLESHEET_FILE = -RTF_EXTENSIONS_FILE = -RTF_SOURCE_CODE = NO -#--------------------------------------------------------------------------- -# Configuration options related to the man page output -#--------------------------------------------------------------------------- -GENERATE_MAN = NO -MAN_OUTPUT = man -MAN_EXTENSION = .3 -MAN_SUBDIR = -MAN_LINKS = NO -#--------------------------------------------------------------------------- -# Configuration options related to the XML output -#--------------------------------------------------------------------------- -GENERATE_XML = NO -XML_OUTPUT = xml -XML_PROGRAMLISTING = YES -XML_NS_MEMB_FILE_SCOPE = NO -#--------------------------------------------------------------------------- -# Configuration options related to the DOCBOOK output -#--------------------------------------------------------------------------- -GENERATE_DOCBOOK = NO -DOCBOOK_OUTPUT = docbook -DOCBOOK_PROGRAMLISTING = NO -#--------------------------------------------------------------------------- -# Configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- -GENERATE_AUTOGEN_DEF = NO -#--------------------------------------------------------------------------- -# Configuration options related to the Perl module output -#--------------------------------------------------------------------------- -GENERATE_PERLMOD = NO -PERLMOD_LATEX = NO -PERLMOD_PRETTY = YES -PERLMOD_MAKEVAR_PREFIX = -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- -ENABLE_PREPROCESSING = YES -MACRO_EXPANSION = NO -EXPAND_ONLY_PREDEF = NO -SEARCH_INCLUDES = YES -INCLUDE_PATH = -INCLUDE_FILE_PATTERNS = -PREDEFINED = Q_SPY \ - QP_IMPL \ - Q_UTEST \ - QK_ON_CONTEXT_SW \ - QXK_ON_CONTEXT_SW \ - QF_MAX_ACTIVE \ - QF_MAX_TICK_RATE \ - QF_MAX_EPOOL \ - QF_EVENT_SIZ_SIZE \ - QF_EQUEUE_CTR_SIZE \ - QF_MPOOL_SIZ_SIZE \ - QF_MPOOL_CTR_SIZE \ - QF_TIMEEVT_CTR_SIZE \ - QF_ACTIVE_STOP \ - QS_TIME_SIZE -EXPAND_AS_DEFINED = -SKIP_FUNCTION_MACROS = YES -#--------------------------------------------------------------------------- -# Configuration options related to external references -#--------------------------------------------------------------------------- -TAGFILES = -GENERATE_TAGFILE = -ALLEXTERNALS = NO -EXTERNAL_GROUPS = YES -EXTERNAL_PAGES = YES -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- -CLASS_DIAGRAMS = YES -DIA_PATH = -HIDE_UNDOC_RELATIONS = YES -HAVE_DOT = YES -DOT_NUM_THREADS = 0 -DOT_FONTNAME = Helvetica -DOT_FONTSIZE = 10 -DOT_FONTPATH = -CLASS_GRAPH = YES -COLLABORATION_GRAPH = YES -GROUP_GRAPHS = YES -UML_LOOK = YES -UML_LIMIT_NUM_FIELDS = 10 -DOT_UML_DETAILS = NO -DOT_WRAP_THRESHOLD = 17 -TEMPLATE_RELATIONS = NO -INCLUDE_GRAPH = YES -INCLUDED_BY_GRAPH = YES -CALL_GRAPH = NO -CALLER_GRAPH = NO -GRAPHICAL_HIERARCHY = YES -DIRECTORY_GRAPH = YES -DOT_IMAGE_FORMAT = png -INTERACTIVE_SVG = NO -DOT_PATH = C:/tools/graphviz/bin -DOTFILE_DIRS = -MSCFILE_DIRS = -DIAFILE_DIRS = -PLANTUML_JAR_PATH = -PLANTUML_CFG_FILE = -PLANTUML_INCLUDE_PATH = -DOT_GRAPH_MAX_NODES = 50 -MAX_DOT_GRAPH_DEPTH = 0 -DOT_TRANSPARENT = NO -DOT_MULTI_TARGETS = NO -GENERATE_LEGEND = YES -DOT_CLEANUP = YES +# Doxyfile 1.9.2 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = QP/C +PROJECT_NUMBER = 6.9.4 +PROJECT_BRIEF = "Real-Time Embedded Framework" +PROJECT_LOGO = images/logo_ql.png +OUTPUT_DIRECTORY = +CREATE_SUBDIRS = NO +ALLOW_UNICODE_NAMES = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +JAVADOC_BANNER = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +PYTHON_DOCSTRING = YES +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 4 +ALIASES = "next{1}=
Next: @ref \1

" \ + "description=@par Description" \ + "amplification=@par Amplification" \ + "rationale=@par Rationale" \ + "caption{1}=
\1
" \ + "hint=@par Hint" \ + "usage=@par Usage" \ + "termref{2}=\2" \ + "reqdef{1}=@anchor \1 @xrefitem reqdef \"Requirement\" \"Requirement Index\" @ref \1" \ + "reqref{1}=@ref \1 \"\1\"" +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +OPTIMIZE_OUTPUT_SLICE = NO +EXTENSION_MAPPING = lnt=Objective-C +MARKDOWN_SUPPORT = YES +TOC_INCLUDE_HEADINGS = 4 +AUTOLINK_SUPPORT = YES +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +GROUP_NESTED_COMPOUNDS = NO +SUBGROUPING = YES +INLINE_GROUPED_CLASSES = YES +INLINE_SIMPLE_STRUCTS = YES +TYPEDEF_HIDES_STRUCT = YES +LOOKUP_CACHE_SIZE = 0 +NUM_PROC_THREADS = 1 +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_PRIV_VIRTUAL = NO +EXTRACT_PACKAGE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +RESOLVE_UNNAMED_PARAMS = YES +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = NO +HIDE_SCOPE_NAMES = YES +HIDE_COMPOUND_REFERENCE= NO +SHOW_HEADERFILE = YES +SHOW_INCLUDE_FILES = YES +SHOW_GROUPED_MEMB_INC = NO +FORCE_LOCAL_INCLUDES = NO +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +STRICT_PROTO_MATCHING = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_FILES = YES +SHOW_NAMESPACES = YES +FILE_VERSION_FILTER = +LAYOUT_FILE = +CITE_BIB_FILES = +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_IF_INCOMPLETE_DOC = YES +WARN_NO_PARAMDOC = NO +WARN_AS_ERROR = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = main.dox \ + gs.dox \ + struct.dox \ + api.dox \ + exa.dox \ + exa_apps.dox \ + exa_native.dox \ + ../../ql-doxygen/exa_low-power.dox \ + exa_rtos.dox \ + exa_os.dox \ + exa_qutest.dox \ + exa_mware.dox \ + ports.dox \ + ports_native.dox \ + ../../ql-doxygen/ports_arm-cm.dox \ + ports_rtos.dox \ + ports_os.dox \ + history.dox \ + macros.h \ + metrics.dox \ + modules.dox \ + ../include \ + ../src \ + ../ports/lint-plus \ + ../../ql-doxygen/help.dox +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.dox \ + *.h \ + *.c \ + *.cpp \ + *.s \ + *.asm \ + *.lnt +RECURSIVE = YES +EXCLUDE = ../include/qs_dummy.h +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = QP_IMPL +EXAMPLE_PATH = snippets \ + ../include \ + ../src \ + ../ports \ + ../examples +EXAMPLE_PATTERNS = * +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = images \ + ../../ql-doxygen/images +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +USE_MDFILE_AS_MAINPAGE = +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +SOURCE_TOOLTIPS = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +CLANG_ASSISTED_PARSING = NO +CLANG_ADD_INC_PATHS = YES +CLANG_OPTIONS = +CLANG_DATABASE_PATH = +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = ../html +HTML_FILE_EXTENSION = .html +HTML_HEADER = ../../ql-doxygen/header-awesome.html +HTML_FOOTER = ../../ql-doxygen/footer-awesome.html +HTML_STYLESHEET = +HTML_EXTRA_STYLESHEET = ../../ql-doxygen/doxygen-awesome.css \ + ../../ql-doxygen/ql-awesome.css +HTML_EXTRA_FILES = ../../ql-doxygen/doxygen-awesome-darkmode-toggle.js +HTML_COLORSTYLE_HUE = 209 +HTML_COLORSTYLE_SAT = 255 +HTML_COLORSTYLE_GAMMA = 113 +HTML_TIMESTAMP = NO +HTML_DYNAMIC_MENUS = YES +HTML_DYNAMIC_SECTIONS = NO +HTML_INDEX_NUM_ENTRIES = 100 +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = com.state-machine.doc +DOCSET_PUBLISHER_ID = com.state-machine.doc +DOCSET_PUBLISHER_NAME = QuantumLeaps +GENERATE_HTMLHELP = NO +CHM_FILE = ../qpc.chm +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = YES +TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = com.state-machine.qp +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = com.state-machine.qp +DISABLE_INDEX = YES +GENERATE_TREEVIEW = YES +FULL_SIDEBAR = NO +ENUM_VALUES_PER_LINE = 4 +TREEVIEW_WIDTH = 300 +EXT_LINKS_IN_WINDOW = NO +HTML_FORMULA_FORMAT = png +FORMULA_FONTSIZE = 10 +FORMULA_TRANSPARENT = YES +FORMULA_MACROFILE = +USE_MATHJAX = NO +MATHJAX_VERSION = MathJax_2 +MATHJAX_FORMAT = HTML-CSS +MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@2 +MATHJAX_EXTENSIONS = +MATHJAX_CODEFILE = +SEARCHENGINE = YES +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SEARCHENGINE_URL = +SEARCHDATA_FILE = searchdata.xml +EXTERNAL_SEARCH_ID = +EXTRA_SEARCH_MAPPINGS = +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +LATEX_MAKEINDEX_CMD = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = letter +EXTRA_PACKAGES = +LATEX_HEADER = +LATEX_FOOTER = +LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_FILES = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +LATEX_BIB_STYLE = plain +LATEX_TIMESTAMP = NO +LATEX_EMOJI_DIRECTORY = +#--------------------------------------------------------------------------- +# Configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# Configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_SUBDIR = +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# Configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_PROGRAMLISTING = YES +XML_NS_MEMB_FILE_SCOPE = NO +#--------------------------------------------------------------------------- +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- +GENERATE_DOCBOOK = NO +DOCBOOK_OUTPUT = docbook +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = Q_SPY \ + QP_IMPL \ + Q_UTEST \ + QK_ON_CONTEXT_SW \ + QXK_ON_CONTEXT_SW \ + QF_MAX_ACTIVE \ + QF_MAX_TICK_RATE \ + QF_MAX_EPOOL \ + QF_EVENT_SIZ_SIZE \ + QF_EQUEUE_CTR_SIZE \ + QF_MPOOL_SIZ_SIZE \ + QF_MPOOL_CTR_SIZE \ + QF_TIMEEVT_CTR_SIZE \ + QF_ACTIVE_STOP \ + QS_TIME_SIZE +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration options related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +DIA_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +DOT_NUM_THREADS = 0 +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 +DOT_FONTPATH = +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = YES +UML_LIMIT_NUM_FIELDS = 10 +DOT_UML_DETAILS = NO +DOT_WRAP_THRESHOLD = 17 +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +INTERACTIVE_SVG = NO +DOT_PATH = C:/tools/graphviz/bin +DOTFILE_DIRS = +MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +PLANTUML_CFG_FILE = +PLANTUML_INCLUDE_PATH = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES diff --git a/doxygen/Doxyfile-CHM b/doxygen/Doxyfile-CHM index 98e2601d..80ff4d01 100644 --- a/doxygen/Doxyfile-CHM +++ b/doxygen/Doxyfile-CHM @@ -1,13 +1,13 @@ -# Doxyfile 1.9.0 - -@INCLUDE = Doxyfile - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- -HTML_OUTPUT = tmp -HTML_HEADER = ../../doxygen/header.html -HTML_FOOTER = ../../doxygen/footer.html -HTML_EXTRA_STYLESHEET = ../../doxygen/ql.css -HTML_EXTRA_FILES = -GENERATE_HTMLHELP = YES +# Doxyfile 1.9.0 + +@INCLUDE = Doxyfile + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- +HTML_OUTPUT = tmp +HTML_HEADER = ../../ql-doxygen/header.html +HTML_FOOTER = ../../ql-doxygen/footer.html +HTML_EXTRA_STYLESHEET = ../../ql-doxygen/ql.css +HTML_EXTRA_FILES = +GENERATE_HTMLHELP = YES diff --git a/doxygen/Doxyfile-DOC b/doxygen/Doxyfile-DOC index a5cce1be..8f596dff 100644 --- a/doxygen/Doxyfile-DOC +++ b/doxygen/Doxyfile-DOC @@ -1,11 +1,10 @@ -# Doxyfile 1.9.0 - -@INCLUDE = Doxyfile - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- -INPUT = main.dox \ - srs.dox \ - modules.dox - ../../doxygen/help.dox +# Doxyfile 1.9.0 + +@INCLUDE = Doxyfile + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = main.dox \ + srs.dox \ + modules.dox diff --git a/doxygen/doxygen.xml b/doxygen/doxygen.xml deleted file mode 100644 index bb404d07..00000000 --- a/doxygen/doxygen.xml +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doxygen/exa_mware.dox b/doxygen/exa_mware.dox index cbaf37d9..479382cd 100644 --- a/doxygen/exa_mware.dox +++ b/doxygen/exa_mware.dox @@ -19,21 +19,31 @@ lwIP example for Texas Instruments EK-LM3S6965 (Cortex-M3) with GNU-ARM and IAR- @image html bd_EK-LM3S6965_lwip.jpg QP-lwIP on EK-LM3S6965 @n@n -@image html under_construction.jpg +@section lwip_AN Application Note: QP and lwIP TCP/IP Stack +The [Application Note](https://www.state-machine.com/doc/AN_QP_and_lwIP.pdf) describes how to use the lightweight TCP/IP stack called lwIP with the QP real-time embedded frameworks. + +[![Application Note: QP and lwIP TCP/IP](AN-QL.png)](https://www.state-machine.com/doc/AN_QP_and_lwIP.pdf) +@htmlonly +
+Application Note: QP and lwIP TCP/IP Stack +
+@endhtmlonly + +@next{ exa_emwin} */ /*##########################################################################*/ /*! @page exa_emwin emWin Embedded GUI -

The Application Note "QP and emWin Embedded GUI" describes how to use QP™ with the emWin™ Embedded GUI from SEGGER and also uC/GUI from Micrium, which technically are the same products. +

The Application Note "QP and emWin Embedded GUI" describes how to use QP™ with the emWin™ Embedded GUI from SEGGER and also µC/GUI from Micrium, which technically are the same products.

@image html emWin_demo.jpg QP-emWin demo (DPP) running on Windows -To demonstrate the working examples, this Application Note uses the emWin Simulation on Windows, which is available for a free download from the SEGGER (requires registration). You need only a Windows-based PC to execute the examples provided in this Application Note. Additionally, you’d need Microsoft Visual Studio 2013 (could be the free Express Edition) or higher to re-build and debug the provided examples. +To demonstrate the working examples, this Application Note uses the emWin Simulation on Windows, which is available for a free download from the SEGGER (requires registration). You need only a Windows-based PC to execute the examples provided in this Application Note. Additionally, you'd need Microsoft Visual Studio 2013 (could be the free Express Edition) or higher to re-build and debug the provided examples. @note -Although the QP-emWin (µC/GUI) integration runs on Windows, the application-level code uses exclusively the embedded emWin™ API and is designed to run without any modifications on embedded targets. +Although the QP-emWin (µC/GUI) integration runs on Windows, the application-level code uses exclusively the embedded emWin™ API and is designed to run without any modifications on embedded targets. */ diff --git a/doxygen/history.dox b/doxygen/history.dox index db450363..7fe662bf 100644 --- a/doxygen/history.dox +++ b/doxygen/history.dox @@ -1,6 +1,16 @@ /** @page history Revision History + +@section qpc_6_9_4 Version 6.9.4, 2021-10-31 + +- removed unused `ARM_ARCH` symbol from Makefiles for GNU-ARM +- imoroved the Doxygen documentation for member functions of classes in C +- introudced new styling for the HTML documentation +- updated links in the documentation + + + @section qpc_6_9_3 Version 6.9.3, 2021-04-12 __Feature Requests:__ @@ -616,7 +626,7 @@ This release does not change any of the QP/C APIs. @section qpc_6_0_1 Version 6.0.1, 2017-11-10 The main focus of this release is to fix the remaining problems with transitions out of eXit-Points in sub-machines. Specifically, this release modifies the QMsm-based state machine implementation strategy (file src/qf/qep_msm.c to properly handle transitions from eXit-Points to Entry-Points and from eXit-Points to History connectors in sub-machines. These changes are part of fixing the following bugs reported for QM: -- [bug#190 "Exit-Point segment targeting History doesn't work](https://sourceforge.net/p/qpc/bugs/190/) +- [bug#190 "Exit-Point segment targeting History doesn't work"](https://sourceforge.net/p/qpc/bugs/190/) - [bug#189 "Exit-Point segment targeting an Entry-Point to sub-machine state doesn't work"](https://sourceforge.net/p/qpc/bugs/189/) diff --git a/doxygen/images/AN-QL.png b/doxygen/images/AN-QL.png new file mode 100644 index 0000000000000000000000000000000000000000..1cbeddfcd94bb40370db4f480f8930d50c029530 GIT binary patch literal 67603 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%0D)6!%gaJM$o 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™). -- to provide portability layer and ready-to-use ports to @ref ports_rtos "3rd-party RTOSes" and desktop operating systems such as @ref posix "Linux" and @ref win32 "Windows". -- to provide a target for modeling and automatic code generation from the QM™ modeling tool. - +- to provide portability layer and ready-to-use ports to @ref ports_rtos "3rd-party RTOSes" and general purpose operating systems such as @ref posix "Linux" and @ref win32 "Windows". +- to provide a target for modeling and automatic code generation from the QM™ modeling tool. @section ab_special What's special about it? @@ -40,13 +40,13 @@ The main goals of the QP/C™ framework are: The QP/C™ Real-Time Embedded Framework (RTEF) is a unique offering on the embedded software market. It provides a modern, reusable **architecture** of embedded applications, which combines object-orientation with the particular model of concurrency, known as active objects (actors). This architecture is generally **safer**, more responsive and easier to understand than "free threading" with a traditional Real-Time Operating System (RTOS). It also provides sufficiently high level of abstraction and the right abstractions to effectively apply modeling and code generation to deeply embedded systems. - @subsection oop Object Orientation -Even though it is written in @ref misra "MISRA-compliant" ANSI-C, QP/C™ is fundamentally an **object-oriented** framework, which means that the framework itself and your applications derived from the framework are fundamentally composed of classes and only classes can have @ref sm "state machines" associated with them.
+Even though it is written in @ref misra "MISRA-compliant" ISO-C, QP/C™ is fundamentally an **object-oriented** framework, which means that the framework itself and your applications derived from the framework are fundamentally composed of classes and only classes can have @ref sm "state machines" associated with them. +@n @note If you program in C and object-oriented programming is new to you, please refer to the Application Note "Object-Oriented Programming in C", which describes how you can implement the concepts of _classes_, _inheritance_, and _polymorphism_ to portable ANSI-C. -
+@n @htmlonly

@@ -57,18 +57,15 @@ Application Note: Object-Oriented Programming in C @endhtmlonly - @subsection lightweight Lightweight The most unique characteristic of the QP/C™ framework is its very small footprint, especially in RAM. In this respect, QP/C™ requires less resources than even the smallest conventional Real-Time Operating System (RTOS) kernel. At the same time, QP gives you a much higher level of abstraction than a conventional RTOS. With QP, you work at the level of active objects, state machines and events, as opposed to "naked" threads of an RTOS. - @subsection hsms Hierarchical State Machines -The behavior of active objects is specified in QP by means of -hierarchical state machines (UML statecharts). The framework supports @ref sm "manual coding of UML state machines in C" (or C++ in case of QP/C++) as well as fully **automatic code generation** by means of the free graphical QM™ model-based design (MBD) tool. +The behavior of active objects is specified in QP/C by means of hierarchical state machines (UML statecharts). The framework supports @ref sm "manual coding of UML state machines in C" (or C++ in case of QP/C++) as well as fully **automatic code generation** by means of the free graphical QM™ model-based design (MBD) tool. @remarks -State machines can be an incredibly powerful technique, but they require an event-driven **infrastructure** (framework) that provides, at a minimum: a run-to-completion (RTC) execution context for each state machine, queuing of events, and event-based timing services. This is really the pivotal point. Without an event-driven framewok (like QP/C), state machines are like cars without an infrastructure of roads. +State machines can be an incredibly powerful technique, but they require an event-driven **infrastructure** (framework) that provides, at a minimum: a run-to-completion (RTC) execution context for each state machine, queuing of events, and event-based timing services. This is really the pivotal point. Without an event-driven framework (like QP/C), state machines are like cars without an infrastructure of roads. @subsection kernels Built-in Kernels @@ -80,7 +77,7 @@ QP/C can also work with many traditional @ref exa_rtos "RTOSes" and @ref exa_rto @subsection popular Popularity & Maturity -With over 15 years of continuous development and 60,000 downloads a year, the QP™ RTEF family is the most mature and popular such solution on the embedded software market. The QP™ frameworks are used in millions of products worldwide in medical devices, consumer electronics, wired and wireless telecommunications, industrial automation, transportation, aerospace, robotics, and many more. +With over 15 years of continuous development and 60,000 downloads a year, the QP™ RTEF family is the most mature and popular such solution on the embedded software market. The QP™ frameworks are used in millions of products worldwide in medical devices, consumer electronics, wired and wireless telecommunications, industrial automation, transportation, aerospace, robotics, and many more. @subsection psicc2 Book @@ -90,17 +87,17 @@ The book, dual licensing model, in which both the open source software distribution mechanism and traditional closed source software distribution models are combined. +QP/C is licensed under the sustainable dual licensing model, in which both the open source software distribution mechanism and traditional closed source software distribution models are combined. @note If your company has a policy forbidding open source in your product, all QP frameworks can be licensed commercially, in which case you don't use any open source license and you do not violate your policy. @subsection open-source Open Source Projects -If you are developing and distributing open source applications under the GNU General Public License (GPL), as published by the Free Software Foundation, then you are free to use the Quantum Leaps software under the GPL version 3 of the License, or (at your option) any later version. Please note that GPL requires that all modifications to the original code as well as your application code (Derivative Works as defined in the Copyright Law) must also be released under the terms of the GPL open source license. +If you are developing and distributing **open source** applications under the GNU General Public License (GPL), as published by the Free Software Foundation, then you are free to use the Quantum Leaps software under the GPL version 3 of the License, or (at your option) any later version. Please note that GPL requires that all modifications to the original code as well as your application code (Derivative Works as defined in the Copyright Law) must also be released under the terms of the GPL open source license. @subsection closed-source Closed Source Projects -If you are developing and distributing traditional closed source applications, you can purchase one of Quantum Leaps commercial licenses, which are specifically designed for users interested in retaining the proprietary status of their code. All Quantum Leaps commercial licenses expressly supersede the GPL open source license. This means that when you license Quantum Leaps software under a commercial license, you specifically do not use the software under the open source license and therefore you are not subject to any of its terms. +If you are developing and distributing traditional **closed source** applications, you can purchase one of Quantum Leaps commercial licenses, which are specifically designed for users interested in retaining the proprietary status of their code. All Quantum Leaps commercial licenses expressly supersede the GPL open source license. This means that when you license Quantum Leaps software under a commercial license, you specifically do not use the software under the open source license and therefore you are not subject to any of its terms. @section support How to get help? @@ -115,7 +112,7 @@ Training and consulting services are also available from Quantum Leaps. Please r - Quantum Leaps Web site: state-machine.com -- Quantum Leaps licensing: state-machine.com/licensing +- Quantum Leaps licensing: state-machine.com/licensing - QP/QM on SourceForge.net: sourceforge.net/projects/qpc diff --git a/doxygen/srs.dox b/doxygen/srs.dox index 3d0bcf7a..4f9447c9 100644 --- a/doxygen/srs.dox +++ b/doxygen/srs.dox @@ -84,7 +84,7 @@ Requirement definitions use consistent terminology to indicate whether something @section srs_qep State Machine Event Processor (QEP) -The QP/C Event Processor (QEP) is a sub-component of the QP/C framework that implements processing of events according to state machine machine semantics. Specifically, according to that semantics each event is processed to completion (Run-to-Completion) before the processing of the next event can begin. +The QP/C Event Processor (QEP) is a sub-component of the QP/C framework that implements processing of events according to state machine semantics. Specifically, according to that semantics each event is processed to completion (Run-to-Completion) before the processing of the next event can begin. @reqdef{RQPC101} QEP shall process events according to the Run-To-Completion (RTC) semantics.