1
mirror of https://github.com/DarkFlippers/unleashed-firmware.git synced 2025-12-12 04:34:43 +04:00

fbt: doxygen target (#3510)

* fbt: doxygen target
* github: adjustments for doxygen
* github: always generate docs, only upload for dev
* doxygen: fixed exclusion path for awesome-css
* github: stricter check for push ref
* github: bumped action version to fix node.js deprecation
* github: added PVS report url to workflow summary
* github: pvs: reworked report URL handling
* github: added size report to summary
* docs: added `doxygen` target
* fbt: common naming scheme for COMSTR
* Documentation: fix warnings and errors
* Doxygen: stricter warning checks
* fbt: "doxy" target, opens generated doxygen documentation in browser
* github: doxygen: now using edge (1.10) version

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
hedger
2024-03-20 20:32:53 +04:00
committed by GitHub
parent 558f75672f
commit ee36c66572
16 changed files with 1021 additions and 680 deletions

View File

@@ -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'

View File

@@ -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 }}"

View File

@@ -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

View File

@@ -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)

View File

@@ -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);

View File

@@ -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

View File

@@ -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
@@ -346,6 +369,17 @@ 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
@@ -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 <return> 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 <a href=https://graphviz.org/doc/info/attrs.html>Node,
# Edge and Graph Attributes specification</a> 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'. <a
# href=https://graphviz.org/doc/info/arrows.html>Complete documentation about
# arrows shapes.</a>
# 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' <a
# href=https://www.graphviz.org/doc/info/shapes.html>Shapes specification</a>
# 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
# <outfile_format> -o <outputfile> <inputfile>. 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 =

View File

@@ -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

View File

@@ -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
/** 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
/** 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.

View File

@@ -1,6 +1,4 @@
/**
* @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.
*
@@ -11,7 +9,9 @@
* 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:
*
@@ -25,7 +25,9 @@
*
* 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.
* 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:
*
@@ -43,22 +45,19 @@
* ~~~~~~~~~~~~~~~~~~~~~
* 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};
* 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;
* 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);
* // signal that the file was written successfully } while(0);
*
* flipper_format_free(file);
* ~~~~~~~~~~~~~~~~~~~~~
@@ -68,28 +67,21 @@
* ~~~~~~~~~~~~~~~~~~~~~
* 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();
* 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_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);
* // signal that the file was read successfully } while(0);
*
* flipper_format_free(file);
* ~~~~~~~~~~~~~~~~~~~~~
*
*/
#pragma once
@@ -102,135 +94,153 @@ extern "C" {
typedef struct FlipperFormat FlipperFormat;
/**
* Allocate FlipperFormat as string.
/** Allocate FlipperFormat as string.
*
* @return FlipperFormat* pointer to a FlipperFormat instance
*/
FlipperFormat* flipper_format_string_alloc(void);
/**
* Allocate FlipperFormat as file.
/** 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.
/** 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.
/** 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.
/** 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.
/** 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.
/** 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.
/** 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.
/** 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
/** 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
/** 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.
/** Free FlipperFormat.
*
* @param flipper_format Pointer to a FlipperFormat instance
*/
void flipper_format_free(FlipperFormat* flipper_format);
/**
* Set FlipperFormat mode.
/** Set FlipperFormat mode.
*
* @param flipper_format Pointer to a FlipperFormat instance
* @param strict_mode True obligates not to skip valid fields. False by default.
* @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.
/** 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.
/** 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.
/** 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).
/** 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(
@@ -238,11 +248,12 @@ bool flipper_format_read_header(
FuriString* filetype,
uint32_t* version);
/**
* Write the header (file type and 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
*/
bool flipper_format_write_header(
@@ -250,11 +261,12 @@ bool flipper_format_write_header(
FuriString* filetype,
const uint32_t version);
/**
* Write the header (file type and version). Plain C string 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
*/
bool flipper_format_write_header_cstr(
@@ -262,11 +274,12 @@ bool flipper_format_write_header_cstr(
const char* filetype,
const uint32_t version);
/**
* Get the count of values by key
/** Get the count of values by key
*
* @param flipper_format Pointer to a FlipperFormat instance
* @param key
* @param count
* @param key The key
* @param count The count
*
* @return bool
*/
bool flipper_format_get_value_count(
@@ -274,29 +287,32 @@ bool flipper_format_get_value_count(
const char* key,
uint32_t* count);
/**
* Read a string by key
/** 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
/** 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.
/** 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(
@@ -304,12 +320,13 @@ bool flipper_format_write_string_cstr(
const char* key,
const char* data);
/**
* Read array of uint64 in hex format by key
/** 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(
@@ -318,12 +335,13 @@ bool flipper_format_read_hex_uint64(
uint64_t* data,
const uint16_t data_size);
/**
* Write key and array of uint64 in hex format
/** 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(
@@ -332,12 +350,13 @@ bool flipper_format_write_hex_uint64(
const uint64_t* data,
const uint16_t data_size);
/**
* Read array of uint32 by key
/** 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(
@@ -346,12 +365,13 @@ bool flipper_format_read_uint32(
uint32_t* data,
const uint16_t data_size);
/**
* Write key and array of uint32
/** 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(
@@ -360,12 +380,13 @@ bool flipper_format_write_uint32(
const uint32_t* data,
const uint16_t data_size);
/**
* Read array of int32 by key
/** 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(
@@ -374,12 +395,13 @@ bool flipper_format_read_int32(
int32_t* data,
const uint16_t data_size);
/**
* Write key and array of int32
/** 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(
@@ -388,12 +410,13 @@ bool flipper_format_write_int32(
const int32_t* data,
const uint16_t data_size);
/**
* Read array of bool by key
/** 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(
@@ -402,12 +425,13 @@ bool flipper_format_read_bool(
bool* data,
const uint16_t data_size);
/**
* Write key and array of bool
/** 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(
@@ -416,12 +440,13 @@ bool flipper_format_write_bool(
const bool* data,
const uint16_t data_size);
/**
* Read array of float by key
/** 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(
@@ -430,12 +455,13 @@ bool flipper_format_read_float(
float* data,
const uint16_t data_size);
/**
* Write key and array of float
/** 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(
@@ -444,12 +470,13 @@ bool flipper_format_write_float(
const float* data,
const uint16_t data_size);
/**
* Read array of hex-formatted bytes by key
/** 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(
@@ -458,12 +485,13 @@ bool flipper_format_read_hex(
uint8_t* data,
const uint16_t data_size);
/**
* Write key and array of hex-formatted bytes
/** 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(
@@ -472,44 +500,52 @@ bool flipper_format_write_hex(
const uint8_t* data,
const uint16_t data_size);
/**
* Write comment
/** 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.
/** 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.
/** 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.
/** 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.
/** 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(
@@ -517,11 +553,14 @@ bool flipper_format_update_string_cstr(
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.
/** 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(
@@ -530,11 +569,14 @@ 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.
/** 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(
@@ -543,11 +585,14 @@ 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.
/** 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(
@@ -556,11 +601,14 @@ 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.
/** 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(
@@ -569,11 +617,14 @@ 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.
/** 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(
@@ -582,12 +633,14 @@ 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.
/** 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(
@@ -595,13 +648,14 @@ bool flipper_format_insert_or_update_string(
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.
/** 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(
@@ -609,12 +663,15 @@ bool flipper_format_insert_or_update_string_cstr(
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.
/** 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(
@@ -623,12 +680,15 @@ 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.
/** 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(
@@ -637,12 +697,15 @@ 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.
/** 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(
@@ -651,12 +714,15 @@ 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.
/** 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(
@@ -665,12 +731,15 @@ 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.
/** 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(

View File

@@ -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
/** Start read mode
*
* @param worker
* @param type
* @param callback
* @param context
* @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
/** Start write mode
*
* @param worker
* @param protocol
* @param callback
* @param context
* @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
/** Start raw read mode
*
* @param worker
* @param filename
* @param type
* @param callback
* @param context
* @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);

View File

@@ -43,7 +43,8 @@ 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
*/
@@ -61,6 +62,7 @@ void compress_free(Compress* compress);
* @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
@@ -79,6 +81,7 @@ bool compress_encode(
* @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

View File

@@ -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)

View File

@@ -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",
),
],
)
}
)

View File

@@ -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])

View File

@@ -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):