diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 38b1d7b68..252310af6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -129,7 +129,7 @@ jobs: - name: 'Find previous comment' if: ${{ !github.event.pull_request.head.repo.fork && matrix.target == env.DEFAULT_TARGET && github.event.pull_request }} - uses: peter-evans/find-comment@v2 + uses: peter-evans/find-comment@v3 id: find-comment with: issue-number: ${{ github.event.pull_request.number }} @@ -138,7 +138,7 @@ jobs: - name: 'Create or update comment' if: ${{ !github.event.pull_request.head.repo.fork && matrix.target == env.DEFAULT_TARGET && github.event.pull_request }} - uses: peter-evans/create-or-update-comment@v3 + uses: peter-evans/create-or-update-comment@v4 with: comment-id: ${{ steps.find-comment.outputs.comment-id }} issue-number: ${{ github.event.pull_request.number }} @@ -147,6 +147,7 @@ jobs: - [📦 Update package](https://update.flipperzero.one/builds/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-update-${{steps.names.outputs.suffix}}.tgz) - [📥 DFU file](https://update.flipperzero.one/builds/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-full-${{steps.names.outputs.suffix}}.dfu) - [☁️ Web/App updater](https://lab.flipper.net/?url=https://update.flipperzero.one/builds/firmware/${{steps.names.outputs.branch_name}}/flipper-z-${{steps.names.outputs.default_target}}-update-${{steps.names.outputs.suffix}}.tgz&channel=${{steps.names.outputs.branch_name}}&version=${{steps.names.outputs.commit_sha}}) + - [📊 Size report](https://fw-reports.flipp.dev/?branch=${{steps.names.outputs.branch_name}}) edit-mode: replace - name: 'SDK submission to staging catalog' diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index e6e53ee01..690bcbe19 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -4,6 +4,7 @@ on: push: branches: - dev + pull_request: env: TARGETS: f7 @@ -37,12 +38,17 @@ jobs: python3 scripts/get_env.py "--event_file=${{ github.event_path }}" "--type=$TYPE" - name: 'Generate documentation' - uses: mattnotmitt/doxygen-action@v1.9.8 + uses: mattnotmitt/doxygen-action@edge + env: + DOXY_SRC_ROOT: "${{ github.workspace }}" + DOXY_CONFIG_DIR: "${{ github.workspace }}/documentation/doxygen" + DOXY_OUTPUT_DIR: "${{ github.workspace }}/documentation/doxygen/build" with: working-directory: 'documentation/' doxyfile-path: './doxygen/Doxyfile-awesome.cfg' - name: 'Upload documentation' + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/dev' }} uses: jakejarvis/s3-sync-action@v0.5.1 env: AWS_S3_BUCKET: "${{ secrets.FW_DOCS_AWS_BUCKET }}" diff --git a/.github/workflows/pvs_studio.yml b/.github/workflows/pvs_studio.yml index 4527e2920..8eb6fea48 100644 --- a/.github/workflows/pvs_studio.yml +++ b/.github/workflows/pvs_studio.yml @@ -48,6 +48,9 @@ jobs: WARNINGS=0 ./fbt COMPACT=1 PVSNOBROWSER=1 firmware_pvs || WARNINGS=1 echo "warnings=${WARNINGS}" >> $GITHUB_OUTPUT + if [[ $WARNINGS -ne 0 ]]; then + echo "report-url=https://pvs.flipp.dev/${{steps.names.outputs.branch_name}}/${{steps.names.outputs.default_target}}-${{steps.names.outputs.suffix}}/index.html" >> $GITHUB_OUTPUT + fi - name: 'Upload report' if: ${{ !github.event.pull_request.head.repo.fork && (steps.pvs-warn.outputs.warnings != 0) }} @@ -62,7 +65,7 @@ jobs: - name: 'Find Previous Comment' if: ${{ !github.event.pull_request.head.repo.fork && github.event.pull_request && (steps.pvs-warn.outputs.warnings != 0) }} - uses: peter-evans/find-comment@v2 + uses: peter-evans/find-comment@v3 id: fc with: issue-number: ${{ github.event.pull_request.number }} @@ -71,18 +74,19 @@ jobs: - name: 'Create or update comment' if: ${{ !github.event.pull_request.head.repo.fork && github.event.pull_request && (steps.pvs-warn.outputs.warnings != 0) }} - uses: peter-evans/create-or-update-comment@v1 + uses: peter-evans/create-or-update-comment@v4 with: comment-id: ${{ steps.fc.outputs.comment-id }} issue-number: ${{ github.event.pull_request.number }} body: | **PVS-Studio report for commit `${{steps.names.outputs.commit_sha}}`:** - - [Report](https://pvs.flipp.dev/${{steps.names.outputs.branch_name}}/${{steps.names.outputs.default_target}}-${{steps.names.outputs.suffix}}/index.html) + - [Report](${{ steps.pvs-warn.outputs.report-url }}) edit-mode: replace - name: 'Raise exception' if: ${{ steps.pvs-warn.outputs.warnings != 0 }} run: | echo "Please fix all PVS warnings before merge" + echo "Report: ${{ steps.pvs-warn.outputs.report-url }}" + echo "[PVS report](${{ steps.pvs-warn.outputs.report-url }})" >> $GITHUB_STEP_SUMMARY exit 1 - diff --git a/SConstruct b/SConstruct index 2bc0128cc..26505fe8c 100644 --- a/SConstruct +++ b/SConstruct @@ -7,7 +7,7 @@ # construction of certain targets behind command-line options. import os -from fbt.util import path_as_posix +from fbt.util import path_as_posix, open_browser_action DefaultEnvironment(tools=[]) @@ -42,6 +42,7 @@ distenv = coreenv.Clone( "openocd", "blackmagic", "jflash", + "doxygen", ], ENV=os.environ, UPDATE_BUNDLE_DIR="dist/${DIST_DIR}/f${TARGET_HW}-update-${DIST_SUFFIX}", @@ -419,3 +420,18 @@ distenv.PhonyTarget( "env", "@echo $( ${FBT_SCRIPT_DIR.abspath}/toolchain/fbtenv.sh $)", ) + +doxy_build = distenv.DoxyBuild( + "documentation/doxygen/build/html/index.html", + "documentation/doxygen/Doxyfile-awesome.cfg", + doxy_env_variables={ + "DOXY_SRC_ROOT": Dir(".").abspath, + "DOXY_BUILD_DIR": Dir("documentation/doxygen/build").abspath, + "DOXY_CONFIG_DIR": "documentation/doxygen", + }, +) +distenv.Alias("doxygen", doxy_build) +distenv.AlwaysBuild(doxy_build) + +# Open generated documentation in browser +distenv.PhonyTarget("doxy", open_browser_action, source=doxy_build) diff --git a/applications/services/gui/view_holder.h b/applications/services/gui/view_holder.h index bc313a926..90ce82b37 100644 --- a/applications/services/gui/view_holder.h +++ b/applications/services/gui/view_holder.h @@ -94,8 +94,9 @@ void view_holder_start(ViewHolder* view_holder); void view_holder_stop(ViewHolder* view_holder); /** View Update Handler - * @param view, View Instance - * @param context, ViewHolder instance + * + * @param view View Instance + * @param context ViewHolder instance */ void view_holder_update(View* view, void* context); diff --git a/documentation/doxygen/Doxyfile-awesome.cfg b/documentation/doxygen/Doxyfile-awesome.cfg index e4c4c95cd..b289055dd 100644 --- a/documentation/doxygen/Doxyfile-awesome.cfg +++ b/documentation/doxygen/Doxyfile-awesome.cfg @@ -1,11 +1,10 @@ -@INCLUDE = doxygen/Doxyfile.cfg +@INCLUDE = $(DOXY_CONFIG_DIR)/Doxyfile.cfg GENERATE_TREEVIEW = YES # required! DISABLE_INDEX = NO FULL_SIDEBAR = NO -HTML_EXTRA_STYLESHEET = doxygen/doxygen-awesome-css/doxygen-awesome.css \ - doxygen/doxygen-awesome-css/doxygen-awesome-sidebar-only.css \ - doxygen/doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css +HTML_EXTRA_STYLESHEET = $(DOXY_CONFIG_DIR)/doxygen-awesome-css/doxygen-awesome.css \ + $(DOXY_CONFIG_DIR)/doxygen-awesome-css/doxygen-awesome-sidebar-only.css \ + $(DOXY_CONFIG_DIR)/doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css HTML_COLORSTYLE = LIGHT # required with Doxygen >= 1.9.5 -HTML_HEADER = doxygen/header.html -HTML_EXTRA_FILES = doxygen/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js - +HTML_HEADER = $(DOXY_CONFIG_DIR)/header.html +HTML_EXTRA_FILES = $(DOXY_CONFIG_DIR)/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js diff --git a/documentation/doxygen/Doxyfile.cfg b/documentation/doxygen/Doxyfile.cfg index 28ac19e02..2596d161f 100644 --- a/documentation/doxygen/Doxyfile.cfg +++ b/documentation/doxygen/Doxyfile.cfg @@ -1,4 +1,4 @@ -# Doxyfile 1.9.2 +# Doxyfile 1.10.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -12,6 +12,16 @@ # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options @@ -51,30 +61,43 @@ PROJECT_BRIEF = # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. -PROJECT_LOGO = doxygen/logo.png +PROJECT_LOGO = $(DOXY_CONFIG_DIR)/logo.png # With the PROJECT_ICON tag one can specify an icon that is included in the tabs -# when the HTML document is shown. Doxygen will copy the logo to the output directory. +# when the HTML document is shown. Doxygen will copy the logo to the output +# directory. -PROJECT_ICON = doxygen/favicon.ico +PROJECT_ICON = $(DOXY_CONFIG_DIR)/favicon.ico # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = doxygen/build +OUTPUT_DIRECTORY = $(DOXY_CONFIG_DIR)/build -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes -# performance problems for the file system. +# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# number of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode @@ -86,14 +109,14 @@ ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English @@ -167,7 +190,7 @@ FULL_PATH_NAMES = NO # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. -STRIP_FROM_PATH = +STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which @@ -176,7 +199,7 @@ STRIP_FROM_PATH = # specify the list of include paths that are normally passed to the compiler # using the -I flag. -STRIP_FROM_INC_PATH = +STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't @@ -346,13 +369,24 @@ MARKDOWN_SUPPORT = YES TOC_INCLUDE_HEADINGS = 5 +# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to +# generate identifiers for the Markdown headings. Note: Every identifier is +# unique. +# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0 and GITHUB use the lower case version of title +# with any whitespace replaced by '-' and punctuation characters removed. +# The default value is: DOXYGEN. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_ID_STYLE = DOXYGEN + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. -AUTOLINK_SUPPORT = NO +AUTOLINK_SUPPORT = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this @@ -457,7 +491,7 @@ TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 -# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use +# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use # during processing. When set to 0 doxygen will based this on the number of # cores available in the system. You can set it explicitly to a value larger # than 0 to get more control over the balance between CPU load and processing @@ -470,6 +504,14 @@ LOOKUP_CACHE_SIZE = 0 NUM_PROC_THREADS = 4 +# If the TIMESTAMP tag is set different from NO then each generated page will +# contain the date or date and time when the page was generated. Setting this to +# NO can help when comparing the output of multiple runs. +# Possible values are: YES, NO, DATETIME and DATE. +# The default value is: NO. + +TIMESTAMP = NO + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -551,7 +593,8 @@ HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. +# will also hide undocumented C++ concepts if enabled. This option has no effect +# if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO @@ -582,14 +625,15 @@ INTERNAL_DOCS = NO # filesystem is case sensitive (i.e. it supports files in the same directory # whose names only differ in casing), the option must be set to YES to properly # deal with such files in case they appear in the input. For filesystems that -# are not case sensitive the option should be be set to NO to properly deal with +# are not case sensitive the option should be set to NO to properly deal with # output files written for symbols that only differ in casing, such as for two # classes, one named CLASS and the other named Class, and to also support # references to files without having to specify the exact matching casing. On # Windows (including Cygwin) and MacOS, users should typically set this option # to NO, whereas on Linux or other Unix flavors it should typically be set to # YES. -# The default value is: system dependent. +# Possible values are: SYSTEM, NO and YES. +# The default value is: SYSTEM. CASE_SENSE_NAMES = NO @@ -798,7 +842,7 @@ CITE_BIB_FILES = # messages are off. # The default value is: NO. -QUIET = NO +QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES @@ -814,7 +858,7 @@ WARNINGS = YES # will automatically be disabled. # The default value is: YES. -WARN_IF_UNDOCUMENTED = YES +WARN_IF_UNDOCUMENTED = NO # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as documenting some parameters in @@ -839,16 +883,31 @@ WARN_IF_INCOMPLETE_DOC = YES # WARN_IF_INCOMPLETE_DOC # The default value is: NO. -WARN_NO_PARAMDOC = NO +WARN_NO_PARAMDOC = YES + +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about +# undocumented enumeration values. If set to NO, doxygen will accept +# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: NO. + +WARN_IF_UNDOC_ENUM_VAL = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the doxygen process doxygen will return with a non-zero status. -# Possible values are: NO, YES and FAIL_ON_WARNINGS. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not +# write the warning messages in between other messages but write them at the end +# of a run, in case a WARN_LOGFILE is defined the warning messages will be +# besides being in the defined file also be shown at the end of a run, unless +# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case +# the behavior will remain as with the setting FAIL_ON_WARNINGS. +# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. # The default value is: NO. -WARN_AS_ERROR = NO +WARN_AS_ERROR = FAIL_ON_WARNINGS # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which @@ -856,13 +915,27 @@ WARN_AS_ERROR = NO # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard -# error (stderr). +# error (stderr). In case the file specified cannot be opened for writing the +# warning and error messages are written to standard error. When as file - is +# specified the warning and error messages are written to standard output +# (stdout). WARN_LOGFILE = @@ -876,23 +949,34 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = ../applications \ - ../documentation \ - ../targets \ - ../assets \ - ../lib \ - ../furi \ - ../.vscode \ +INPUT = $(DOXY_SRC_ROOT)/applications \ + $(DOXY_SRC_ROOT)/documentation \ + $(DOXY_SRC_ROOT)/targets \ + $(DOXY_SRC_ROOT)/assets \ + $(DOXY_SRC_ROOT)/lib \ + $(DOXY_SRC_ROOT)/furi \ + $(DOXY_SRC_ROOT)/.vscode # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: # https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# See also: INPUT_FILE_ENCODING # The default value is: UTF-8. INPUT_ENCODING = UTF-8 +# This tag can be used to specify the character encoding of the source files +# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify +# character encoding on a per file pattern basis. Doxygen will compare the file +# name with each pattern and apply the encoding instead of the default +# INPUT_ENCODING) if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding +# "INPUT_ENCODING" for further information on supported encodings. + +INPUT_FILE_ENCODING = + # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. @@ -904,12 +988,12 @@ INPUT_ENCODING = UTF-8 # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, -# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C -# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, -# *.vhdl, *.ucf, *.qsf and *.ice. +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, +# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, +# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, +# *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to +# be provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.c \ *.cc \ @@ -937,47 +1021,45 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = \ - ../lib/mlib \ - ../lib/STM32CubeWB \ - ../lib/littlefs \ - ../lib/nanopb \ - ../assets/protobuf \ - ../lib/libusb_stm32 \ - ../lib/FreeRTOS-Kernel \ - ../lib/microtar \ - ../lib/mbedtls \ - ../lib/cxxheaderparser \ - ../lib/ST25RFAL002 \ - ../lib/fatfs \ - ../lib/mlib \ - ../lib/stm32wb_cmsis \ - ../lib/stm32wb_copro \ - ../lib/stm32wb_hal_driver \ - ../lib/stm32wb_hal \ - ../lib/cmsis_core \ - ../targets/f7/fatfs/ \ - ../applications/plugins/dap_link/lib/free-dap \ - ../applications/debug \ - ../applications/main \ - ../applications/settings \ - ../lib/micro-ecc \ - ../lib/ReadMe.md \ - ../lib/callback-connector \ - ../lib/app-scened-template \ - ../applications/ReadMe.md \ - ../targets/ReadMe.md \ - ../web \ - ../assets/protobuf \ - ../lib/libusb_stm32 \ - ../lib/FreeRTOS-Kernel \ - ../lib/microtar \ - ../lib/mbedtls \ - ../lib/cxxheaderparser \ - ../applications/external/dap_link/lib/free-dap \ - ../lib/heatshrink \ - ./doxygen/doxygen-awesome-css - +EXCLUDE = $(DOXY_SRC_ROOT)/lib/mlib \ + $(DOXY_SRC_ROOT)/lib/STM32CubeWB \ + $(DOXY_SRC_ROOT)/lib/littlefs \ + $(DOXY_SRC_ROOT)/lib/nanopb \ + $(DOXY_SRC_ROOT)/assets/protobuf \ + $(DOXY_SRC_ROOT)/lib/libusb_stm32 \ + $(DOXY_SRC_ROOT)/lib/FreeRTOS-Kernel \ + $(DOXY_SRC_ROOT)/lib/microtar \ + $(DOXY_SRC_ROOT)/lib/mbedtls \ + $(DOXY_SRC_ROOT)/lib/cxxheaderparser \ + $(DOXY_SRC_ROOT)/lib/ST25RFAL002 \ + $(DOXY_SRC_ROOT)/lib/fatfs \ + $(DOXY_SRC_ROOT)/lib/mlib \ + $(DOXY_SRC_ROOT)/lib/stm32wb_cmsis \ + $(DOXY_SRC_ROOT)/lib/stm32wb_copro \ + $(DOXY_SRC_ROOT)/lib/stm32wb_hal_driver \ + $(DOXY_SRC_ROOT)/lib/stm32wb_hal \ + $(DOXY_SRC_ROOT)/lib/cmsis_core \ + $(DOXY_SRC_ROOT)/targets/f7/fatfs/ \ + $(DOXY_SRC_ROOT)/applications/plugins/dap_link/lib/free-dap \ + $(DOXY_SRC_ROOT)/applications/debug \ + $(DOXY_SRC_ROOT)/applications/main \ + $(DOXY_SRC_ROOT)/applications/settings \ + $(DOXY_SRC_ROOT)/lib/micro-ecc \ + $(DOXY_SRC_ROOT)/lib/ReadMe.md \ + $(DOXY_SRC_ROOT)/lib/callback-connector \ + $(DOXY_SRC_ROOT)/lib/app-scened-template \ + $(DOXY_SRC_ROOT)/applications/ReadMe.md \ + $(DOXY_SRC_ROOT)/targets/ReadMe.md \ + $(DOXY_SRC_ROOT)/web \ + $(DOXY_SRC_ROOT)/assets/protobuf \ + $(DOXY_SRC_ROOT)/lib/libusb_stm32 \ + $(DOXY_SRC_ROOT)/lib/FreeRTOS-Kernel \ + $(DOXY_SRC_ROOT)/lib/microtar \ + $(DOXY_SRC_ROOT)/lib/mbedtls \ + $(DOXY_SRC_ROOT)/lib/cxxheaderparser \ + $(DOXY_SRC_ROOT)/applications/external/dap_link/lib/free-dap \ + $(DOXY_SRC_ROOT)/lib/heatshrink \ + $(DOXY_CONFIG_DIR)/doxygen-awesome-css # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded @@ -999,10 +1081,7 @@ EXCLUDE_PATTERNS = # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* +# ANamespace::AClass, ANamespace::*Test EXCLUDE_SYMBOLS = @@ -1047,6 +1126,11 @@ IMAGE_PATH = # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # +# Note that doxygen will use the data processed and written to standard output +# for further processing, therefore nothing else, like debug statements or used +# commands (so in case of a Windows batch file always use @echo OFF), should be +# written to standard output. +# # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. @@ -1088,6 +1172,15 @@ FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = +# The Fortran standard specifies that for fixed formatted Fortran code all +# characters from position 72 are to be considered as comment. A common +# extension is to allow longer lines before the automatic comment starts. The +# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can +# be processed before the automatic comment starts. +# Minimum value: 7, maximum value: 10000, default value: 72. + +FORTRAN_COMMENT_AFTER = 72 + #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- @@ -1102,7 +1195,8 @@ USE_MDFILE_AS_MAINPAGE = SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. +# multi-line macros, enums or list initialized variables directly into the +# documentation. # The default value is: NO. INLINE_SOURCES = NO @@ -1185,10 +1279,11 @@ VERBATIM_HEADERS = YES ALPHABETICAL_INDEX = YES -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. +# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) +# that should be ignored while generating the index headers. The IGNORE_PREFIX +# tag works for classes, function and member names. The entity will be placed in +# the alphabetical list under the first letter of the entity name that remains +# after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = @@ -1267,7 +1362,12 @@ HTML_STYLESHEET = # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. +# list). +# Note: Since the styling of scrollbars can currently not be overruled in +# Webkit/Chromium, the styling will be left out of the default doxygen.css if +# one or more extra stylesheets have been specified. So if scrollbar +# customization is desired it has to be added explicitly. For an example see the +# documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @@ -1282,6 +1382,19 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generate light mode output, DARK always +# generate dark mode output, AUTO_LIGHT automatically set the mode according to +# the user preference, use light mode if no preference is set (the default), +# AUTO_DARK automatically set the mode according to the user preference, use +# dark mode if no preference is set and TOGGLE allow to user to switch between +# light and dark mode via a button. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE = AUTO_LIGHT + # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a color-wheel, see @@ -1312,15 +1425,6 @@ HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will @@ -1340,6 +1444,33 @@ HTML_DYNAMIC_MENUS = YES HTML_DYNAMIC_SECTIONS = NO +# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be +# dynamically folded and expanded in the generated HTML source code. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_CODE_FOLDING = YES + +# If the HTML_COPY_CLIPBOARD tag is set to YES then doxygen will show an icon in +# the top right corner of code and text fragments that allows the user to copy +# its content to the clipboard. Note this only works if supported by the browser +# and the web page is served via a secure context (see: +# https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file: +# protocol. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COPY_CLIPBOARD = YES + +# Doxygen stores a couple of settings persistently in the browser (via e.g. +# cookies). By default these settings apply to all HTML pages generated by +# doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store +# the settings under a project specific key, such that the user preferences will +# be stored separately. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_PROJECT_COOKIE = + # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to @@ -1376,6 +1507,13 @@ GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" +# This tag determines the URL of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDURL = + # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. @@ -1463,6 +1601,16 @@ BINARY_TOC = NO TOC_EXPAND = NO +# The SITEMAP_URL tag is used to specify the full URL of the place where the +# generated documentation will be placed on the server by the user during the +# deployment of the documentation. The generated sitemap is called sitemap.xml +# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL +# is specified no sitemap is generated. For information about the sitemap +# protocol see https://www.sitemaps.org +# This tag requires that the tag GENERATE_HTML is set to YES. + +SITEMAP_URL = + # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help @@ -1580,7 +1728,7 @@ GENERATE_TREEVIEW = NO # area (value NO) or if it should extend to the full height of the window (value # YES). Setting this to YES gives a layout similar to # https://docs.readthedocs.io with more room for contents, but less room for the -# project logo, title, and description. If either GENERATOR_TREEVIEW or +# project logo, title, and description. If either GENERATE_TREEVIEW or # DISABLE_INDEX is set to NO, this option has no effect. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1611,6 +1759,13 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email +# addresses. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +OBFUSCATE_EMAILS = YES + # If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for @@ -1631,17 +1786,6 @@ HTML_FORMULA_FORMAT = png FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANSPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. @@ -1703,8 +1847,8 @@ MATHJAX_RELPATH = # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example -# for MathJax version 2 (see https://docs.mathjax.org/en/v2.7-latest/tex.html -# #tex-and-latex-extensions): +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # For example for MathJax version 3 (see # http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): @@ -1955,9 +2099,16 @@ PDF_HYPERLINKS = YES USE_PDFLATEX = YES -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. +# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error. +# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch +# mode nothing is printed on the terminal, errors are scrolled as if is +# hit at every error; missing files that TeX tries to input or request from +# keyboard input (\read on a not open input stream) cause the job to abort, +# NON_STOP In nonstop mode the diagnostic message will appear on the terminal, +# but there is no possibility of user interaction just like in batch mode, +# SCROLL In scroll mode, TeX will stop only for missing files to input or if +# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at +# each error, asking for user intervention. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1978,14 +2129,6 @@ LATEX_HIDE_INDICES = NO LATEX_BIB_STYLE = plain -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # path from which the emoji images will be read. If a relative path is entered, # it will be relative to the LATEX_OUTPUT directory. If left blank the @@ -2151,13 +2294,39 @@ DOCBOOK_OUTPUT = docbook #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures +# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures # the structure of the code including all documentation. Note that this feature # is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to Sqlite3 output +#--------------------------------------------------------------------------- + +# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3 +# database with symbols found by doxygen stored in tables. +# The default value is: NO. + +GENERATE_SQLITE3 = NO + +# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be +# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put +# in front of it. +# The default directory is: sqlite3. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_OUTPUT = sqlite3 + +# The SQLITE3_RECREATE_DB tag is set to YES, the existing doxygen_sqlite3.db +# database file will be recreated with each doxygen run. If set to NO, doxygen +# will warn if a database file is already found and not modify it. +# The default value is: YES. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_RECREATE_DB = YES + #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- @@ -2232,7 +2401,8 @@ SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the -# preprocessor. +# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of +# RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = @@ -2299,15 +2469,15 @@ TAGFILES = GENERATE_TAGFILE = -# If the ALLEXTERNALS tag is set to YES, all external class will be listed in -# the class index. If set to NO, only the inherited external classes will be -# listed. +# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces +# will be listed in the class and namespace index. If set to NO, only the +# inherited external classes will be listed. # The default value is: NO. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will be +# in the topic index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. @@ -2321,25 +2491,9 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- -# Configuration options related to the dot tool +# Configuration options related to diagram generator tools #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - # If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. @@ -2348,7 +2502,7 @@ HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz (see: -# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is # set to NO # The default value is: NO. @@ -2365,49 +2519,77 @@ HAVE_DOT = NO DOT_NUM_THREADS = 0 -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. +# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of +# subgraphs. When you want a differently looking font in the dot files that +# doxygen generates you can specify fontname, fontcolor and fontsize attributes. +# For details please see Node, +# Edge and Graph Attributes specification You need to make sure dot is able +# to find the font, which can be done by putting it in a standard location or by +# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. Default graphviz fontsize is 14. +# The default value is: fontname=Helvetica,fontsize=10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTNAME = Helvetica +DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10" -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. +# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can +# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. Complete documentation about +# arrows shapes. +# The default value is: labelfontname=Helvetica,labelfontsize=10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTSIZE = 10 +DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10" -# By default doxygen will tell dot to use the default font as specified with -# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set -# the path where dot can find it using this tag. +# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes +# around nodes set 'shape=plain' or 'shape=plaintext' Shapes specification +# The default value is: shape=box,height=0.2,width=0.4. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" + +# You can set the path where dot can find font specified with fontname in +# DOT_COMMON_ATTR and others dot attributes. # This tag requires that the tag HAVE_DOT is set to YES. DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for -# each documented class showing the direct and indirect inheritance relations. -# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will +# generate a graph for each documented class showing the direct and indirect +# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and +# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case +# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the +# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used. +# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance +# relations will be shown as texts / links. Explicit enabling an inheritance +# graph or choosing a different representation for an inheritance graph of a +# specific class, can be accomplished by means of the command \inheritancegraph. +# Disabling an inheritance graph can be accomplished by means of the command +# \hideinheritancegraph. +# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a # graph for each documented class showing the direct and indirect implementation # dependencies (inheritance, containment, and class references variables) of the -# class with other documented classes. +# class with other documented classes. Explicit enabling a collaboration graph, +# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the +# command \collaborationgraph. Disabling a collaboration graph can be +# accomplished by means of the command \hidecollaborationgraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. +# groups, showing the direct groups dependencies. Explicit enabling a group +# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means +# of the command \groupgraph. Disabling a directory graph can be accomplished by +# means of the command \hidegroupgraph. See also the chapter Grouping in the +# manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2449,8 +2631,8 @@ DOT_UML_DETAILS = NO # The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters # to display on a single line. If the actual line length exceeds this threshold -# significantly it will wrapped across multiple lines. Some heuristics are apply -# to avoid ugly line breaks. +# significantly it will be wrapped across multiple lines. Some heuristics are +# applied to avoid ugly line breaks. # Minimum value: 0, maximum value: 1000, default value: 17. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2467,7 +2649,9 @@ TEMPLATE_RELATIONS = NO # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to # YES then doxygen will generate a graph for each documented file showing the # direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO, +# can be accomplished by means of the command \includegraph. Disabling an +# include graph can be accomplished by means of the command \hideincludegraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2476,7 +2660,10 @@ INCLUDE_GRAPH = YES # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are # set to YES then doxygen will generate a graph for each documented file showing # the direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set +# to NO, can be accomplished by means of the command \includedbygraph. Disabling +# an included by graph can be accomplished by means of the command +# \hideincludedbygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2516,16 +2703,26 @@ GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the # dependencies a directory has on other directories in a graphical way. The # dependency relations are determined by the #include relations between the -# files in the directories. +# files in the directories. Explicit enabling a directory graph, when +# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command +# \directorygraph. Disabling a directory graph can be accomplished by means of +# the command \hidedirectorygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. DIRECTORY_GRAPH = YES +# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels +# of child directories generated in directory dependency graphs by dot. +# Minimum value: 1, maximum value: 25, default value: 1. +# This tag requires that the tag DIRECTORY_GRAPH is set to YES. + +DIR_GRAPH_MAX_DEPTH = 1 + # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: -# http://www.graphviz.org/)). +# https://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). @@ -2562,11 +2759,12 @@ DOT_PATH = DOTFILE_DIRS = -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. -MSCFILE_DIRS = +DIA_PATH = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile @@ -2575,10 +2773,10 @@ MSCFILE_DIRS = DIAFILE_DIRS = # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the -# path where java can find the plantuml.jar file. If left blank, it is assumed -# PlantUML is not used or called during a preprocessing step. Doxygen will -# generate a warning when it encounters a \startuml command in this case and -# will not generate output for the diagram. +# path where java can find the plantuml.jar file or to the filename of jar file +# to be used. If left blank, it is assumed PlantUML is not used or called during +# a preprocessing step. Doxygen will generate a warning when it encounters a +# \startuml command in this case and will not generate output for the diagram. PLANTUML_JAR_PATH = @@ -2616,18 +2814,6 @@ DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = NO - # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support @@ -2640,6 +2826,8 @@ DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page # explaining the meaning of the various boxes and arrows in the dot generated # graphs. +# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal +# graphical representation for inheritance and collaboration diagrams is used. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2653,3 +2841,19 @@ GENERATE_LEGEND = YES # The default value is: YES. DOT_CLEANUP = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will +# use a built-in version of mscgen tool to produce the charts. Alternatively, +# the MSCGEN_TOOL tag can also specify the name an external tool. For instance, +# specifying prog as the value, doxygen will call the tool as prog -T +# -o . The external tool should support +# output file formats "png", "eps", "svg", and "ismap". + +MSCGEN_TOOL = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = diff --git a/documentation/fbt.md b/documentation/fbt.md index a7df5615b..8e083349f 100644 --- a/documentation/fbt.md +++ b/documentation/fbt.md @@ -79,6 +79,7 @@ To use language servers other than the default VS Code C/C++ language server, us - `lint`, `format` - run clang-format on the C source code to check and reformat it according to the `.clang-format` specs. Supports `ARGS="..."` to pass extra arguments to clang-format. - `lint_py`, `format_py` - run [black](https://black.readthedocs.io/en/stable/index.html) on the Python source code, build system files & application manifests. Supports `ARGS="..."` to pass extra arguments to black. - `firmware_pvs` - generate a PVS Studio report for the firmware. Requires PVS Studio to be available on your system's `PATH`. +- `doxygen` - generate Doxygen documentation for the firmware. `doxy` target also opens web browser to view the generated documentation. - `cli` - start a Flipper CLI session over USB. ### Firmware targets diff --git a/lib/flipper_application/flipper_application.h b/lib/flipper_application/flipper_application.h index a119cf530..3daca5bc0 100644 --- a/lib/flipper_application/flipper_application.h +++ b/lib/flipper_application/flipper_application.h @@ -33,15 +33,13 @@ typedef enum { FlipperApplicationLoadStatusMissingImports, } FlipperApplicationLoadStatus; -/** - * @brief Get text description of preload status +/** Get text description of preload status * @param status Status code * @return String pointer to description */ const char* flipper_application_preload_status_to_string(FlipperApplicationPreloadStatus status); -/** - * @brief Get text description of load status +/** Get text description of load status * @param status Status code * @return String pointer to description */ @@ -61,8 +59,7 @@ typedef struct { uint8_t* debug_link; } FlipperApplicationState; -/** - * @brief Initialize FlipperApplication object +/** Initialize FlipperApplication object * @param storage Storage instance * @param api_interface ELF API interface to use for pre-loading and symbol resolving * @return Application instance @@ -70,44 +67,44 @@ typedef struct { FlipperApplication* flipper_application_alloc(Storage* storage, const ElfApiInterface* api_interface); -/** - * @brief Destroy FlipperApplication object +/** Destroy FlipperApplication object * @param app Application pointer */ void flipper_application_free(FlipperApplication* app); -/** - * @brief Validate elf file and load application metadata - * @param app Application pointer - * @return Preload result code +/** Validate elf file and load application metadata + * + * @param app Application pointer + * @param[in] path The path to fap file + * + * @return Preload result code */ FlipperApplicationPreloadStatus flipper_application_preload(FlipperApplication* app, const char* path); -/** - * @brief Validate elf file and load application manifest - * @param app Application pointer - * @return Preload result code +/** Validate elf file and load application manifest + * + * @param app Application pointer + * @param[in] path The path to fap file + * + * @return Preload result code */ FlipperApplicationPreloadStatus flipper_application_preload_manifest(FlipperApplication* app, const char* path); -/** - * @brief Get pointer to application manifest for preloaded application +/** Get pointer to application manifest for preloaded application * @param app Application pointer * @return Pointer to application manifest */ const FlipperApplicationManifest* flipper_application_get_manifest(FlipperApplication* app); -/** - * @brief Load sections and process relocations for already pre-loaded application +/** Load sections and process relocations for already pre-loaded application * @param app Application pointer * @return Load result code */ FlipperApplicationLoadStatus flipper_application_map_to_memory(FlipperApplication* app); -/** - * @brief Allocate application thread at entry point address, using app name and +/** Allocate application thread at entry point address, using app name and * stack size from metadata. Returned thread isn't started yet. * Can be only called once for application instance. * @param app Applicaiton pointer @@ -116,20 +113,17 @@ FlipperApplicationLoadStatus flipper_application_map_to_memory(FlipperApplicatio */ FuriThread* flipper_application_alloc_thread(FlipperApplication* app, const char* args); -/** - * @brief Check if application is a plugin (not a runnable standalone app) +/** Check if application is a plugin (not a runnable standalone app) * @param app Application pointer * @return true if application is a plugin, false otherwise */ bool flipper_application_is_plugin(FlipperApplication* app); -/** - * @brief Entry point prototype for standalone applications +/** Entry point prototype for standalone applications */ typedef int32_t (*FlipperApplicationEntryPoint)(void*); -/** - * @brief An object that describes a plugin - must be returned by plugin's entry point +/** An object that describes a plugin - must be returned by plugin's entry point */ typedef struct { const char* appid; @@ -137,21 +131,18 @@ typedef struct { const void* entry_point; } FlipperAppPluginDescriptor; -/** - * @brief Entry point prototype for plugins +/** Entry point prototype for plugins */ typedef const FlipperAppPluginDescriptor* (*FlipperApplicationPluginEntryPoint)(void); -/** - * @brief Get plugin descriptor for preloaded plugin +/** Get plugin descriptor for preloaded plugin * @param app Application pointer * @return Pointer to plugin descriptor */ const FlipperAppPluginDescriptor* flipper_application_plugin_get_descriptor(FlipperApplication* app); -/** - * @brief Load name and icon from FAP file. +/** Load name and icon from FAP file. * * @param path Path to FAP file. * @param storage Storage instance. diff --git a/lib/flipper_format/flipper_format.h b/lib/flipper_format/flipper_format.h index c8f5278ed..46f78e255 100644 --- a/lib/flipper_format/flipper_format.h +++ b/lib/flipper_format/flipper_format.h @@ -1,20 +1,20 @@ -/** - * @file flipper_format.h - * Flipper File Format helper library. - * +/** @file flipper_format.h Flipper File Format helper library. + * * Flipper File Format is a fairly simple format for storing data in a file. - * + * * Flipper file structure: - * + * * ~~~~~~~~~~~~~~~~~~~~~ * # Commentary * Field name: field value * ~~~~~~~~~~~~~~~~~~~~~ - * - * Lines starting with the # character are ignored (considered as comments). The separator between the name of the value and the value itself is the string ": ". + * + * Lines starting with the # character are ignored (considered as comments). The + * separator between the name of the value and the value itself is the string + * ": ". * * Currently supported types: - * + * * ~~~~~~~~~~~~~~~~~~~~~ * String: text * Int32: 1 2 -3 4 @@ -22,13 +22,15 @@ * Float: 1.0 1234.654 * Hex: A4 B3 C2 D1 12 FF * ~~~~~~~~~~~~~~~~~~~~~ - * + * * End of line is LF when writing, but CR is supported when reading. - * - * The library is designed in such a way that comments and field values are completely ignored when searching for keys, that is, they do not consume memory. - * - * File example: - * + * + * The library is designed in such a way that comments and field values are + * completely ignored when searching for keys, that is, they do not consume + * memory. + * + * File example: + * * ~~~~~~~~~~~~~~~~~~~~~ * Filetype: Flipper Test File * Version: 1 @@ -37,59 +39,49 @@ * UINT: 1234 * Hex: 00 01 FF A3 * ~~~~~~~~~~~~~~~~~~~~~ - * + * * Writing: - * + * * ~~~~~~~~~~~~~~~~~~~~~ * FlipperFormat* format = flipper_format_file_alloc(storage); - * - * do { - * const uint32_t version = 1; - * const char* string_value = "String value"; - * const uint32_t uint32_value = 1234; - * const uint16_t array_size = 4; - * const uint8_t* array[array_size] = {0x00, 0x01, 0xFF, 0xA3}; - * - * if(!flipper_format_file_open_new(format, EXT_PATH("flipper_format_test"))) break; - * if(!flipper_format_write_header_cstr(format, "Flipper Test File", version)) break; - * if(!flipper_format_write_comment_cstr(format, "Just test file")) break; - * if(!flipper_format_write_string_cstr(format, "String", string_value)) break; - * if(!flipper_format_write_uint32(format, "UINT", &uint32_value, 1)) break; - * if(!flipper_format_write_hex(format, "Hex Array", array, array_size)) break; - * - * // signal that the file was written successfully - * } while(0); - * + * + * do { const uint32_t version = 1; const char* string_value = "String value"; + * const uint32_t uint32_value = 1234; const uint16_t array_size = 4; const + * uint8_t* array[array_size] = {0x00, 0x01, 0xFF, 0xA3}; + * + * if(!flipper_format_file_open_new(format, EXT_PATH("flipper_format_test"))) + * break; if(!flipper_format_write_header_cstr(format, "Flipper Test File", + * version)) break; if(!flipper_format_write_comment_cstr(format, + * "Just test file")) break; if(!flipper_format_write_string_cstr(format, + * "String", string_value)) break; if(!flipper_format_write_uint32(format, + * "UINT", &uint32_value, 1)) break; if(!flipper_format_write_hex(format, + * "Hex Array", array, array_size)) break; + * + * // signal that the file was written successfully } while(0); + * * flipper_format_free(file); * ~~~~~~~~~~~~~~~~~~~~~ - * + * * Reading: - * + * * ~~~~~~~~~~~~~~~~~~~~~ * FlipperFormat* file = flipper_format_file_alloc(storage); - * - * do { - * uint32_t version = 1; - * FuriString* file_type; - * FuriString* string_value; - * uint32_t uint32_value = 1; - * uint16_t array_size = 4; - * uint8_t* array[array_size] = {0}; - * file_type = furi_string_alloc(); - * string_value = furi_string_alloc(); - * - * if(!flipper_format_file_open_existing(file, EXT_PATH("flipper_format_test"))) break; - * if(!flipper_format_read_header(file, file_type, &version)) break; - * if(!flipper_format_read_string(file, "String", string_value)) break; - * if(!flipper_format_read_uint32(file, "UINT", &uint32_value, 1)) break; - * if(!flipper_format_read_hex(file, "Hex Array", array, array_size)) break; - * - * // signal that the file was read successfully - * } while(0); - * + * + * do { uint32_t version = 1; FuriString* file_type; FuriString* string_value; + * uint32_t uint32_value = 1; uint16_t array_size = 4; uint8_t* + * array[array_size] = {0}; file_type = furi_string_alloc(); string_value = + * furi_string_alloc(); + * + * if(!flipper_format_file_open_existing(file, EXT_PATH("flipper_format_test"))) + * break; if(!flipper_format_read_header(file, file_type, &version)) break; + * if(!flipper_format_read_string(file, "String", string_value)) break; + * if(!flipper_format_read_uint32(file, "UINT", &uint32_value, 1)) break; + * if(!flipper_format_read_hex(file, "Hex Array", array, array_size)) break; + * + * // signal that the file was read successfully } while(0); + * * flipper_format_free(file); * ~~~~~~~~~~~~~~~~~~~~~ - * */ #pragma once @@ -102,215 +94,240 @@ extern "C" { typedef struct FlipperFormat FlipperFormat; -/** - * Allocate FlipperFormat as string. - * @return FlipperFormat* pointer to a FlipperFormat instance +/** Allocate FlipperFormat as string. + * + * @return FlipperFormat* pointer to a FlipperFormat instance */ FlipperFormat* flipper_format_string_alloc(void); -/** - * Allocate FlipperFormat as file. - * @return FlipperFormat* pointer to a FlipperFormat instance +/** Allocate FlipperFormat as file. + * + * @param storage The storage + * + * @return FlipperFormat* pointer to a FlipperFormat instance */ FlipperFormat* flipper_format_file_alloc(Storage* storage); -/** - * Allocate FlipperFormat as file, buffered mode. - * @return FlipperFormat* pointer to a FlipperFormat instance +/** Allocate FlipperFormat as file, buffered mode. + * + * @param storage The storage + * + * @return FlipperFormat* pointer to a FlipperFormat instance */ FlipperFormat* flipper_format_buffered_file_alloc(Storage* storage); -/** - * Open existing file. - * Use only if FlipperFormat allocated as a file. - * @param flipper_format Pointer to a FlipperFormat instance - * @param path File path - * @return True on success +/** Open existing file. Use only if FlipperFormat allocated as a file. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param path File path + * + * @return True on success */ bool flipper_format_file_open_existing(FlipperFormat* flipper_format, const char* path); -/** - * Open existing file, buffered mode. - * Use only if FlipperFormat allocated as a buffered file. - * @param flipper_format Pointer to a FlipperFormat instance - * @param path File path - * @return True on success +/** Open existing file, buffered mode. Use only if FlipperFormat allocated as a + * buffered file. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param path File path + * + * @return True on success */ bool flipper_format_buffered_file_open_existing(FlipperFormat* flipper_format, const char* path); -/** - * Open existing file for writing and add values to the end of file. - * Use only if FlipperFormat allocated as a file. - * @param flipper_format Pointer to a FlipperFormat instance - * @param path File path - * @return True on success +/** Open existing file for writing and add values to the end of file. Use only if + * FlipperFormat allocated as a file. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param path File path + * + * @return True on success */ bool flipper_format_file_open_append(FlipperFormat* flipper_format, const char* path); -/** - * Open file. Creates a new file, or deletes the contents of the file if it already exists. - * Use only if FlipperFormat allocated as a file. - * @param flipper_format Pointer to a FlipperFormat instance - * @param path File path - * @return True on success +/** Open file. Creates a new file, or deletes the contents of the file if it + * already exists. Use only if FlipperFormat allocated as a file. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param path File path + * + * @return True on success */ bool flipper_format_file_open_always(FlipperFormat* flipper_format, const char* path); -/** - * Open file. Creates a new file, or deletes the contents of the file if it already exists, buffered mode. - * Use only if FlipperFormat allocated as a buffered file. - * @param flipper_format Pointer to a FlipperFormat instance - * @param path File path - * @return True on success +/** Open file. Creates a new file, or deletes the contents of the file if it + * already exists, buffered mode. Use only if FlipperFormat allocated as a + * buffered file. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param path File path + * + * @return True on success */ bool flipper_format_buffered_file_open_always(FlipperFormat* flipper_format, const char* path); -/** - * Open file. Creates a new file, fails if file already exists. - * Use only if FlipperFormat allocated as a file. - * @param flipper_format Pointer to a FlipperFormat instance - * @param path File path - * @return True on success +/** Open file. Creates a new file, fails if file already exists. Use only if + * FlipperFormat allocated as a file. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param path File path + * + * @return True on success */ bool flipper_format_file_open_new(FlipperFormat* flipper_format, const char* path); -/** - * Closes the file, use only if FlipperFormat allocated as a file. - * @param flipper_format - * @return true - * @return false +/** Closes the file, use only if FlipperFormat allocated as a file. + * + * @param flipper_format The flipper format + * + * @return true + * @return false */ bool flipper_format_file_close(FlipperFormat* flipper_format); -/** - * Closes the file, use only if FlipperFormat allocated as a buffered file. - * @param flipper_format - * @return true - * @return false +/** Closes the file, use only if FlipperFormat allocated as a buffered file. + * + * @param flipper_format The flipper format + * + * @return true + * @return false */ bool flipper_format_buffered_file_close(FlipperFormat* flipper_format); -/** - * Free FlipperFormat. - * @param flipper_format Pointer to a FlipperFormat instance +/** Free FlipperFormat. + * + * @param flipper_format Pointer to a FlipperFormat instance */ void flipper_format_free(FlipperFormat* flipper_format); -/** - * Set FlipperFormat mode. - * @param flipper_format Pointer to a FlipperFormat instance - * @param strict_mode True obligates not to skip valid fields. False by default. +/** Set FlipperFormat mode. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param strict_mode True obligates not to skip valid fields. False by + * default. */ void flipper_format_set_strict_mode(FlipperFormat* flipper_format, bool strict_mode); -/** - * Rewind the RW pointer. - * @param flipper_format Pointer to a FlipperFormat instance - * @return True on success +/** Rewind the RW pointer. + * + * @param flipper_format Pointer to a FlipperFormat instance + * + * @return True on success */ bool flipper_format_rewind(FlipperFormat* flipper_format); -/** - * Move the RW pointer at the end. Can be useful if you want to add some data after reading. - * @param flipper_format Pointer to a FlipperFormat instance - * @return True on success +/** Move the RW pointer at the end. Can be useful if you want to add some data + * after reading. + * + * @param flipper_format Pointer to a FlipperFormat instance + * + * @return True on success */ bool flipper_format_seek_to_end(FlipperFormat* flipper_format); -/** - * Check if the key exists. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @return true key exists - * @return false key is not exists +/** Check if the key exists. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * + * @return true key exists + * @return false key is not exists */ bool flipper_format_key_exist(FlipperFormat* flipper_format, const char* key); -/** - * Read the header (file type and version). - * @param flipper_format Pointer to a FlipperFormat instance - * @param filetype File type string - * @param version Version Value - * @return True on success +/** Read the header (file type and version). + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param filetype File type string + * @param version Version Value + * + * @return True on success */ bool flipper_format_read_header( FlipperFormat* flipper_format, FuriString* filetype, uint32_t* version); -/** - * Write the header (file type and version). - * @param flipper_format Pointer to a FlipperFormat instance - * @param filetype File type string - * @param version Version Value - * @return True on success +/** Write the header (file type and version). + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param filetype File type string + * @param version Version Value + * + * @return True on success */ bool flipper_format_write_header( FlipperFormat* flipper_format, FuriString* filetype, const uint32_t version); -/** - * Write the header (file type and version). Plain C string version. - * @param flipper_format Pointer to a FlipperFormat instance - * @param filetype File type string - * @param version Version Value - * @return True on success +/** Write the header (file type and version). Plain C string version. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param filetype File type string + * @param version Version Value + * + * @return True on success */ bool flipper_format_write_header_cstr( FlipperFormat* flipper_format, const char* filetype, const uint32_t version); -/** - * Get the count of values by key - * @param flipper_format Pointer to a FlipperFormat instance - * @param key - * @param count - * @return bool +/** Get the count of values by key + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key The key + * @param count The count + * + * @return bool */ bool flipper_format_get_value_count( FlipperFormat* flipper_format, const char* key, uint32_t* count); -/** - * Read a string by key - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Read a string by key + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * + * @return True on success */ bool flipper_format_read_string(FlipperFormat* flipper_format, const char* key, FuriString* data); -/** - * Write key and string - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Write key and string + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * + * @return True on success */ bool flipper_format_write_string(FlipperFormat* flipper_format, const char* key, FuriString* data); -/** - * Write key and string. Plain C string version. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Write key and string. Plain C string version. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * + * @return True on success */ bool flipper_format_write_string_cstr( FlipperFormat* flipper_format, const char* key, const char* data); -/** - * Read array of uint64 in hex format by key - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @param data_size Values count - * @return True on success +/** Read array of uint64 in hex format by key + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param data_size Values count + * + * @return True on success */ bool flipper_format_read_hex_uint64( FlipperFormat* flipper_format, @@ -318,13 +335,14 @@ bool flipper_format_read_hex_uint64( uint64_t* data, const uint16_t data_size); -/** - * Write key and array of uint64 in hex format - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @param data_size Values count - * @return True on success +/** Write key and array of uint64 in hex format + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param data_size Values count + * + * @return True on success */ bool flipper_format_write_hex_uint64( FlipperFormat* flipper_format, @@ -332,13 +350,14 @@ bool flipper_format_write_hex_uint64( const uint64_t* data, const uint16_t data_size); -/** - * Read array of uint32 by key - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @param data_size Values count - * @return True on success +/** Read array of uint32 by key + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param data_size Values count + * + * @return True on success */ bool flipper_format_read_uint32( FlipperFormat* flipper_format, @@ -346,13 +365,14 @@ bool flipper_format_read_uint32( uint32_t* data, const uint16_t data_size); -/** - * Write key and array of uint32 - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @param data_size Values count - * @return True on success +/** Write key and array of uint32 + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param data_size Values count + * + * @return True on success */ bool flipper_format_write_uint32( FlipperFormat* flipper_format, @@ -360,13 +380,14 @@ bool flipper_format_write_uint32( const uint32_t* data, const uint16_t data_size); -/** - * Read array of int32 by key - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @param data_size Values count - * @return True on success +/** Read array of int32 by key + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param data_size Values count + * + * @return True on success */ bool flipper_format_read_int32( FlipperFormat* flipper_format, @@ -374,13 +395,14 @@ bool flipper_format_read_int32( int32_t* data, const uint16_t data_size); -/** - * Write key and array of int32 - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @param data_size Values count - * @return True on success +/** Write key and array of int32 + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param data_size Values count + * + * @return True on success */ bool flipper_format_write_int32( FlipperFormat* flipper_format, @@ -388,13 +410,14 @@ bool flipper_format_write_int32( const int32_t* data, const uint16_t data_size); -/** - * Read array of bool by key - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @param data_size Values count - * @return True on success +/** Read array of bool by key + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param data_size Values count + * + * @return True on success */ bool flipper_format_read_bool( FlipperFormat* flipper_format, @@ -402,13 +425,14 @@ bool flipper_format_read_bool( bool* data, const uint16_t data_size); -/** - * Write key and array of bool - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @param data_size Values count - * @return True on success +/** Write key and array of bool + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param data_size Values count + * + * @return True on success */ bool flipper_format_write_bool( FlipperFormat* flipper_format, @@ -416,13 +440,14 @@ bool flipper_format_write_bool( const bool* data, const uint16_t data_size); -/** - * Read array of float by key - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @param data_size Values count - * @return True on success +/** Read array of float by key + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param data_size Values count + * + * @return True on success */ bool flipper_format_read_float( FlipperFormat* flipper_format, @@ -430,13 +455,14 @@ bool flipper_format_read_float( float* data, const uint16_t data_size); -/** - * Write key and array of float - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @param data_size Values count - * @return True on success +/** Write key and array of float + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param data_size Values count + * + * @return True on success */ bool flipper_format_write_float( FlipperFormat* flipper_format, @@ -444,13 +470,14 @@ bool flipper_format_write_float( const float* data, const uint16_t data_size); -/** - * Read array of hex-formatted bytes by key - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @param data_size Values count - * @return True on success +/** Read array of hex-formatted bytes by key + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param data_size Values count + * + * @return True on success */ bool flipper_format_read_hex( FlipperFormat* flipper_format, @@ -458,13 +485,14 @@ bool flipper_format_read_hex( uint8_t* data, const uint16_t data_size); -/** - * Write key and array of hex-formatted bytes - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @param data_size Values count - * @return True on success +/** Write key and array of hex-formatted bytes + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param data_size Values count + * + * @return True on success */ bool flipper_format_write_hex( FlipperFormat* flipper_format, @@ -472,57 +500,68 @@ bool flipper_format_write_hex( const uint8_t* data, const uint16_t data_size); -/** - * Write comment - * @param flipper_format Pointer to a FlipperFormat instance - * @param data Comment text - * @return True on success +/** Write comment + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param data Comment text + * + * @return True on success */ bool flipper_format_write_comment(FlipperFormat* flipper_format, FuriString* data); -/** - * Write comment. Plain C string version. - * @param flipper_format Pointer to a FlipperFormat instance - * @param data Comment text - * @return True on success +/** Write comment. Plain C string version. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param data Comment text + * + * @return True on success */ bool flipper_format_write_comment_cstr(FlipperFormat* flipper_format, const char* data); -/** - * Removes the first matching key and its value. Sets the RW pointer to a position of deleted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @return True on success +/** Removes the first matching key and its value. Sets the RW pointer to a + * position of deleted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * + * @return True on success */ bool flipper_format_delete_key(FlipperFormat* flipper_format, const char* key); -/** - * Updates the value of the first matching key to a string value. Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to a string value. Sets the RW + * pointer to a position at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * + * @return True on success */ bool flipper_format_update_string(FlipperFormat* flipper_format, const char* key, FuriString* data); -/** - * Updates the value of the first matching key to a string value. Plain C version. Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to a string value. Plain C + * version. Sets the RW pointer to a position at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * + * @return True on success */ bool flipper_format_update_string_cstr( FlipperFormat* flipper_format, const char* key, const char* data); -/** - * Updates the value of the first matching key to a uint32 array value. Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to a uint32 array value. Sets the + * RW pointer to a position at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param[in] data_size The data size + * + * @return True on success */ bool flipper_format_update_uint32( FlipperFormat* flipper_format, @@ -530,12 +569,15 @@ bool flipper_format_update_uint32( const uint32_t* data, const uint16_t data_size); -/** - * Updates the value of the first matching key to a int32 array value. Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to a int32 array value. Sets the + * RW pointer to a position at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param[in] data_size The data size + * + * @return True on success */ bool flipper_format_update_int32( FlipperFormat* flipper_format, @@ -543,12 +585,15 @@ bool flipper_format_update_int32( const int32_t* data, const uint16_t data_size); -/** - * Updates the value of the first matching key to a bool array value. Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to a bool array value. Sets the + * RW pointer to a position at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param[in] data_size The data size + * + * @return True on success */ bool flipper_format_update_bool( FlipperFormat* flipper_format, @@ -556,12 +601,15 @@ bool flipper_format_update_bool( const bool* data, const uint16_t data_size); -/** - * Updates the value of the first matching key to a float array value. Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to a float array value. Sets the + * RW pointer to a position at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param[in] data_size The data size + * + * @return True on success */ bool flipper_format_update_float( FlipperFormat* flipper_format, @@ -569,12 +617,15 @@ bool flipper_format_update_float( const float* data, const uint16_t data_size); -/** - * Updates the value of the first matching key to an array of hex-formatted bytes. Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to an array of hex-formatted + * bytes. Sets the RW pointer to a position at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param[in] data_size The data size + * + * @return True on success */ bool flipper_format_update_hex( FlipperFormat* flipper_format, @@ -582,40 +633,46 @@ bool flipper_format_update_hex( const uint8_t* data, const uint16_t data_size); -/** - * Updates the value of the first matching key to a string value, or adds the key and value if the key did not exist. - * Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to a string value, or adds the + * key and value if the key did not exist. Sets the RW pointer to a position at + * the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * + * @return True on success */ bool flipper_format_insert_or_update_string( FlipperFormat* flipper_format, const char* key, FuriString* data); -/** - * Updates the value of the first matching key to a string value, or adds the key and value if the key did not exist. - * Plain C version. - * Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to a string value, or adds the + * key and value if the key did not exist. Plain C version. Sets the RW pointer + * to a position at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * + * @return True on success */ bool flipper_format_insert_or_update_string_cstr( FlipperFormat* flipper_format, const char* key, const char* data); -/** - * Updates the value of the first matching key to a uint32 array value, or adds the key and value if the key did not exist. - * Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to a uint32 array value, or adds + * the key and value if the key did not exist. Sets the RW pointer to a position + * at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param[in] data_size The data size + * + * @return True on success */ bool flipper_format_insert_or_update_uint32( FlipperFormat* flipper_format, @@ -623,13 +680,16 @@ bool flipper_format_insert_or_update_uint32( const uint32_t* data, const uint16_t data_size); -/** - * Updates the value of the first matching key to a int32 array value, or adds the key and value if the key did not exist. - * Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to a int32 array value, or adds + * the key and value if the key did not exist. Sets the RW pointer to a position + * at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param[in] data_size The data size + * + * @return True on success */ bool flipper_format_insert_or_update_int32( FlipperFormat* flipper_format, @@ -637,13 +697,16 @@ bool flipper_format_insert_or_update_int32( const int32_t* data, const uint16_t data_size); -/** - * Updates the value of the first matching key to a bool array value, or adds the key and value if the key did not exist. - * Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to a bool array value, or adds + * the key and value if the key did not exist. Sets the RW pointer to a position + * at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param[in] data_size The data size + * + * @return True on success */ bool flipper_format_insert_or_update_bool( FlipperFormat* flipper_format, @@ -651,13 +714,16 @@ bool flipper_format_insert_or_update_bool( const bool* data, const uint16_t data_size); -/** - * Updates the value of the first matching key to a float array value, or adds the key and value if the key did not exist. - * Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to a float array value, or adds + * the key and value if the key did not exist. Sets the RW pointer to a position + * at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param[in] data_size The data size + * + * @return True on success */ bool flipper_format_insert_or_update_float( FlipperFormat* flipper_format, @@ -665,13 +731,16 @@ bool flipper_format_insert_or_update_float( const float* data, const uint16_t data_size); -/** - * Updates the value of the first matching key to an array of hex-formatted bytes, or adds the key and value if the key did not exist. - *Sets the RW pointer to a position at the end of inserted data. - * @param flipper_format Pointer to a FlipperFormat instance - * @param key Key - * @param data Value - * @return True on success +/** Updates the value of the first matching key to an array of hex-formatted + * bytes, or adds the key and value if the key did not exist. Sets the RW + * pointer to a position at the end of inserted data. + * + * @param flipper_format Pointer to a FlipperFormat instance + * @param key Key + * @param data Value + * @param[in] data_size The data size + * + * @return True on success */ bool flipper_format_insert_or_update_hex( FlipperFormat* flipper_format, diff --git a/lib/lfrfid/lfrfid_worker.h b/lib/lfrfid/lfrfid_worker.h index 22135097e..3bee1d146 100644 --- a/lib/lfrfid/lfrfid_worker.h +++ b/lib/lfrfid/lfrfid_worker.h @@ -1,5 +1,4 @@ -/** - * @file lfrfid_worker.h +/** @file lfrfid_worker.h * * LFRFID worker */ @@ -54,37 +53,35 @@ typedef void (*LFRFIDWorkerEmulateRawCallback)(LFRFIDWorkerEmulateRawResult resu typedef struct LFRFIDWorker LFRFIDWorker; -/** - * Allocate LF-RFID worker +/** Allocate LF-RFID worker * @return LFRFIDWorker* */ LFRFIDWorker* lfrfid_worker_alloc(ProtocolDict* dict); -/** - * Free LF-RFID worker - * @param worker +/** Free LF-RFID worker + * + * @param worker The worker */ void lfrfid_worker_free(LFRFIDWorker* worker); -/** - * Start LF-RFID worker thread - * @param worker +/** Start LF-RFID worker thread + * + * @param worker The worker */ void lfrfid_worker_start_thread(LFRFIDWorker* worker); -/** - * Stop LF-RFID worker thread - * @param worker +/** Stop LF-RFID worker thread + * + * @param worker The worker */ void lfrfid_worker_stop_thread(LFRFIDWorker* worker); -/** - * @brief Start read mode - * - * @param worker - * @param type - * @param callback - * @param context +/** Start read mode + * + * @param worker The worker + * @param type The type + * @param callback The callback + * @param context The context */ void lfrfid_worker_read_start( LFRFIDWorker* worker, @@ -92,13 +89,12 @@ void lfrfid_worker_read_start( LFRFIDWorkerReadCallback callback, void* context); -/** - * @brief Start write mode - * - * @param worker - * @param protocol - * @param callback - * @param context +/** Start write mode + * + * @param worker The worker + * @param protocol The protocol + * @param callback The callback + * @param context The context */ void lfrfid_worker_write_start( LFRFIDWorker* worker, @@ -106,20 +102,20 @@ void lfrfid_worker_write_start( LFRFIDWorkerWriteCallback callback, void* context); -/** - * Start emulate mode - * @param worker +/** Start emulate mode + * + * @param worker The worker + * @param[in] protocol The protocol */ void lfrfid_worker_emulate_start(LFRFIDWorker* worker, LFRFIDProtocol protocol); -/** - * @brief Start raw read mode - * - * @param worker - * @param filename - * @param type - * @param callback - * @param context +/** Start raw read mode + * + * @param worker The worker + * @param filename The filename + * @param type The type + * @param callback The callback + * @param context The context */ void lfrfid_worker_read_raw_start( LFRFIDWorker* worker, @@ -128,12 +124,12 @@ void lfrfid_worker_read_raw_start( LFRFIDWorkerReadRawCallback callback, void* context); -/** - * Emulate raw read mode - * @param worker - * @param filename - * @param callback - * @param context +/** Emulate raw read mode + * + * @param worker The worker + * @param filename The filename + * @param callback The callback + * @param context The context */ void lfrfid_worker_emulate_raw_start( LFRFIDWorker* worker, @@ -141,9 +137,9 @@ void lfrfid_worker_emulate_raw_start( LFRFIDWorkerEmulateRawCallback callback, void* context); -/** - * Stop all modes - * @param worker +/** Stop all modes + * + * @param worker The worker */ void lfrfid_worker_stop(LFRFIDWorker* worker); diff --git a/lib/toolbox/compress.h b/lib/toolbox/compress.h index b61bdb022..f844802ec 100644 --- a/lib/toolbox/compress.h +++ b/lib/toolbox/compress.h @@ -43,27 +43,29 @@ typedef struct Compress Compress; /** Allocate encoder and decoder * - * @param compress_buff_size size of decoder and encoder buffer to allocate + * @param compress_buff_size size of decoder and encoder buffer to + * allocate * - * @return Compress instance + * @return Compress instance */ Compress* compress_alloc(uint16_t compress_buff_size); /** Free encoder and decoder * - * @param compress Compress instance + * @param compress Compress instance */ void compress_free(Compress* compress); /** Encode data * - * @param compress Compress instance - * @param data_in pointer to input data - * @param data_in_size size of input data - * @param data_out maximum size of output data - * @param data_res_size pointer to result output data size + * @param compress Compress instance + * @param data_in pointer to input data + * @param data_in_size size of input data + * @param data_out maximum size of output data + * @param[in] data_out_size The data out size + * @param data_res_size pointer to result output data size * - * @return true on success + * @return true on success */ bool compress_encode( Compress* compress, @@ -75,13 +77,14 @@ bool compress_encode( /** Decode data * - * @param compress Compress instance - * @param data_in pointer to input data - * @param data_in_size size of input data - * @param data_out maximum size of output data - * @param data_res_size pointer to result output data size + * @param compress Compress instance + * @param data_in pointer to input data + * @param data_in_size size of input data + * @param data_out maximum size of output data + * @param[in] data_out_size The data out size + * @param data_res_size pointer to result output data size * - * @return true on success + * @return true on success */ bool compress_decode( Compress* compress, diff --git a/scripts/fbt/util.py b/scripts/fbt/util.py index a6a631303..42fc296f3 100644 --- a/scripts/fbt/util.py +++ b/scripts/fbt/util.py @@ -1,5 +1,8 @@ import os import re +import subprocess +import sys +import webbrowser import SCons from SCons.Errors import StopError @@ -83,3 +86,10 @@ def path_as_posix(path): if SCons.Platform.platform_default() == "win32": return path.replace(os.path.sep, os.path.altsep) return path + + +def open_browser_action(target, source, env): + if sys.platform == "darwin": + subprocess.run(["open", source[0].abspath]) + else: + webbrowser.open(source[0].abspath) diff --git a/scripts/fbt_tools/doxygen.py b/scripts/fbt_tools/doxygen.py new file mode 100644 index 000000000..319cb9e5d --- /dev/null +++ b/scripts/fbt_tools/doxygen.py @@ -0,0 +1,40 @@ +from SCons.Script import Action, Builder + + +def exists(env): + return True + + +def DoxyBuild(env, target, source, doxy_env_variables=None): + if doxy_env_variables: + doxy_env = env.Clone() + doxy_env.Append(ENV=doxy_env_variables) + else: + doxy_env = env + + return doxy_env._DoxyBuilder(target, source) + + +def generate(env): + if not env["VERBOSE"]: + env.SetDefault( + DOXYGENCOMSTR="\tDOXY\t${TARGET}", + ) + + env.SetDefault( + DOXYGEN="doxygen", + ) + + env.AddMethod(DoxyBuild) + env.Append( + BUILDERS={ + "_DoxyBuilder": Builder( + action=[ + Action( + [["$DOXYGEN", "$SOURCE"]], + "$DOXYGENCOMSTR", + ), + ], + ) + } + ) diff --git a/scripts/fbt_tools/pvsstudio.py b/scripts/fbt_tools/pvsstudio.py index ecf9d4b06..d74aae768 100644 --- a/scripts/fbt_tools/pvsstudio.py +++ b/scripts/fbt_tools/pvsstudio.py @@ -32,7 +32,7 @@ def atexist_handler(): for bf in GetBuildFailures(): for node in Flatten(bf.node): - if node.exists and node.name.endswith(".html"): + if node.exists and "pvs" in node.name and node.name.endswith(".html"): # macOS if sys.platform == "darwin": subprocess.run(["open", node.abspath]) diff --git a/site_scons/fbt_extra/util.py b/site_scons/fbt_extra/util.py index c670c01d4..e99d62c91 100644 --- a/site_scons/fbt_extra/util.py +++ b/site_scons/fbt_extra/util.py @@ -1,5 +1,5 @@ -from fbt.util import link_dir from ansi.color import fg +from fbt.util import link_dir def link_elf_dir_as_latest(env, elf_node):