├── .clang-format
├── .editorconfig
├── .gitignore
├── .gitlab-ci.yml
├── .gitmodules
├── .idea
├── .name
├── ccsds-tm-packets.iml
├── codeStyles
│ └── codeStyleConfig.xml
├── misc.xml
├── modules.xml
└── vcs.xml
├── CMakeLists.txt
├── LICENSE
├── README.md
├── ci
├── .clang-tidy
├── clang-format.sh
├── clang-tidy.sh
├── cppcheck-misra.sh
├── cppcheck.sh
├── lcovrc
├── page_style
│ ├── custom_format.css
│ ├── doxygen_dark_theme
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── custom.css
│ │ ├── custom_dark_theme.css
│ │ ├── html_footer.html
│ │ └── html_header.html
│ └── epilog.html
├── pages_deploy.sh
├── summarizer.py
├── vera.profile
└── vera.sh
├── doxygen.conf
├── inc
├── Alert.hpp
├── CCSDSChannel.hpp
├── CCSDSLogger.h
├── CCSDSLoggerImpl.h
├── CCSDSServiceChannel.hpp
├── CCSDS_Definitions.hpp
├── CLCW.hpp
├── FrameAcceptanceReporting.hpp
├── FrameOperationProcedure.hpp
├── Logger.hpp
├── MemoryPool.hpp
├── TransferFrame.hpp
├── TransferFrameTC.hpp
├── TransferFrameTM.hpp
├── etl
│ └── String.hpp
├── etl_profile.h
└── logOperators.h
├── servicesAndBuffersGraph.mmd
├── src
├── CCSDSChannel.cpp
├── CCSDSServiceChannel.cpp
├── CLCW.cpp
├── FrameAcceptanceReporting.cpp
├── FrameOperationProcedure.cpp
├── Logger.cpp
├── MemoryPool.cpp
├── Packet.cpp
├── Platform
│ └── x86
│ │ └── Logger.cpp
├── TransferFrameTC.cpp
├── logOperators.cpp
└── main.cpp
└── test
├── CCSDSChannel.cpp
├── CCSDSServiceChannel.cpp
├── FrameOperationProcedure.cpp
├── MemoryPool.cpp
├── TmFunctionalTesting.cpp
├── TransferFrame.cpp
├── tests
└── tests.cpp
/.clang-format:
--------------------------------------------------------------------------------
1 | ---
2 | Language: Cpp
3 | # BasedOnStyle: LLVM
4 | AccessModifierOffset: -4
5 | AlignAfterOpenBracket: Align
6 | AlignConsecutiveAssignments: false
7 | AlignConsecutiveDeclarations: false
8 | AlignEscapedNewlines: Right
9 | AlignOperands: true
10 | AlignTrailingComments: false
11 | AllowAllParametersOfDeclarationOnNextLine: true
12 | AllowShortBlocksOnASingleLine: false
13 | AllowShortCaseLabelsOnASingleLine: false
14 | AllowShortFunctionsOnASingleLine: Empty
15 | AllowShortIfStatementsOnASingleLine: true
16 | AllowShortLoopsOnASingleLine: false
17 | AlwaysBreakAfterDefinitionReturnType: None
18 | AlwaysBreakAfterReturnType: None
19 | AlwaysBreakBeforeMultilineStrings: false
20 | AlwaysBreakTemplateDeclarations: Yes
21 | BinPackArguments: true
22 | BinPackParameters: true
23 | BreakBeforeBinaryOperators: None
24 | BreakBeforeBraces: Custom
25 | BraceWrapping:
26 | AfterClass: false
27 | AfterControlStatement: false
28 | AfterEnum: false
29 | AfterFunction: false
30 | AfterNamespace: true
31 | AfterStruct: false
32 | AfterUnion: false
33 | AfterExternBlock: false
34 | BeforeCatch: false
35 | BeforeElse: false
36 | SplitEmptyFunction: false
37 | SplitEmptyRecord: false
38 | SplitEmptyNamespace: false
39 | BreakBeforeInheritanceComma: false
40 | BreakInheritanceList: BeforeColon
41 | BreakBeforeTernaryOperators: true
42 | BreakConstructorInitializersBeforeComma: false
43 | BreakConstructorInitializers: BeforeColon
44 | BreakAfterJavaFieldAnnotations: false
45 | BreakStringLiterals: true
46 | ColumnLimit: 120
47 | CommentPragmas: '^ IWYU pragma:'
48 | CompactNamespaces: false
49 | ConstructorInitializerAllOnOneLineOrOnePerLine: false
50 | ConstructorInitializerIndentWidth: 4
51 | ContinuationIndentWidth: 4
52 | Cpp11BracedListStyle: true
53 | DerivePointerAlignment: false
54 | DisableFormat: false
55 | ExperimentalAutoDetectBinPacking: false
56 | FixNamespaceComments: true
57 | ForEachMacros:
58 | - foreach
59 | - Q_FOREACH
60 | - BOOST_FOREACH
61 | IncludeBlocks: Merge
62 | IncludeCategories:
63 | - Regex: '^"'
64 | Priority: 2
65 | - Regex: '^<'
66 | Priority: 3
67 | - Regex: '.*'
68 | Priority: 1
69 | IncludeIsMainRegex: '(Test)?$'
70 | IndentCaseLabels: true
71 | IndentPPDirectives: None
72 | IndentWidth: 4
73 | IndentWrappedFunctionNames: false
74 | JavaScriptQuotes: Leave
75 | JavaScriptWrapImports: true
76 | KeepEmptyLinesAtTheStartOfBlocks: false
77 | MacroBlockBegin: ''
78 | MacroBlockEnd: ''
79 | MaxEmptyLinesToKeep: 1
80 | NamespaceIndentation: None
81 | ObjCBinPackProtocolList: Auto
82 | ObjCBlockIndentWidth: 2
83 | ObjCSpaceAfterProperty: false
84 | ObjCSpaceBeforeProtocolList: true
85 | PenaltyBreakAssignment: 2
86 | PenaltyBreakBeforeFirstCallParameter: 19
87 | PenaltyBreakComment: 300
88 | PenaltyBreakFirstLessLess: 120
89 | PenaltyBreakString: 1000
90 | PenaltyBreakTemplateDeclaration: 10
91 | PenaltyExcessCharacter: 1000000
92 | PenaltyReturnTypeOnItsOwnLine: 60
93 | PointerAlignment: Left
94 | ReflowComments: true
95 | SortIncludes: false
96 | SortUsingDeclarations: true
97 | SpaceAfterCStyleCast: false
98 | SpaceAfterTemplateKeyword: true
99 | SpaceBeforeAssignmentOperators: true
100 | SpaceBeforeCpp11BracedList: false
101 | SpaceBeforeCtorInitializerColon: true
102 | SpaceBeforeInheritanceColon: true
103 | SpaceBeforeParens: ControlStatements
104 | SpaceBeforeRangeBasedForLoopColon: true
105 | SpaceInEmptyParentheses: false
106 | SpacesBeforeTrailingComments: 1
107 | SpacesInAngles: false
108 | SpacesInContainerLiterals: true
109 | SpacesInCStyleCastParentheses: false
110 | SpacesInParentheses: false
111 | SpacesInSquareBrackets: false
112 | Standard: Cpp11
113 | TabWidth: 4
114 | UseTab: ForIndentation
115 | ...
116 |
117 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig file: https://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | # Unix-style newlines with a newline ending every file
7 | [*]
8 | end_of_line = lf
9 | insert_final_newline = true
10 |
11 | # 4 space indentation
12 | [*.{c,cpp,h,hpp}, CMakeLists.txt]
13 | indent_style = tab
14 | indent_size = 4
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Build files
2 | build
3 | cmake-build-debug
4 | docs
5 |
6 | # Dump and continuous integration files
7 | *.dump
8 | __pycache__
9 | /ci/cppcheckdata.py
10 | /ci/misra.py
11 | /ci/report.msr
12 |
13 | # Prerequisites
14 | *.d
15 |
16 | # Hidden files
17 | .*
18 |
19 | # Don't ignore gitignore :(
20 | !/.gitignore
21 |
22 | # Compiled Object files
23 | *.slo
24 | *.lo
25 | *.o
26 | *.obj
27 |
28 | # Precompiled Headers
29 | *.gch
30 | *.pch
31 |
32 | # Compiled Dynamic libraries
33 | *.so
34 | *.dylib
35 | *.dll
36 |
37 | # Fortran module files
38 | *.mod
39 | *.smod
40 |
41 | # Compiled Static libraries
42 | *.lai
43 | *.la
44 | *.a
45 | *.lib
46 |
47 | # Executables
48 | *.exe
49 | *.out
50 | *.app
51 |
52 | # User-specific stuff
53 | .idea/**/workspace.xml
54 | .idea/**/tasks.xml
55 | .idea/**/usage.statistics.xml
56 | .idea/**/dictionaries
57 | .idea/**/shelf
58 |
59 | # Generated files
60 | .idea/**/contentModel.xml
61 |
62 | # Sensitive or high-churn files
63 | .idea/**/dataSources/
64 | .idea/**/dataSources.ids
65 | .idea/**/dataSources.local.xml
66 | .idea/**/sqlDataSources.xml
67 | .idea/**/dynamic.xml
68 | .idea/**/uiDesigner.xml
69 | .idea/**/dbnavigator.xml
70 | .idea/**/markdown-*
71 |
72 | # Virtual environment
73 | venv/**
74 |
75 | # IDEs
76 | .vscode
--------------------------------------------------------------------------------
/.gitlab-ci.yml:
--------------------------------------------------------------------------------
1 | variables:
2 | GIT_SUBMODULE_STRATEGY: recursive
3 |
4 | stages:
5 | - build
6 | - analyze
7 | - test
8 | - deploy
9 |
10 |
11 | check-build:
12 | image: spacedot/build-base # TODO: push build-base
13 | stage: build
14 | variables:
15 | GCC_COLORS: "error=31;1:warning=35;1:note=36;1:range1=32:range2=34:locus=39;1:quote=39;1:fixit-insert=32:fixit-delete=31:diff-filename=39;1:diff-hunk=32:diff-delete=31:diff-insert=32:type-diff=32;1"
16 | CLICOLOR_FORCE: 1 # Necessary for cmake to output colours
17 | script:
18 | - mkdir build
19 | - cd build
20 | - cmake .. -DCMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -fdiagnostics-color=always"
21 | - make -j$(nproc)
22 |
23 | cppcheck:
24 | image: spacedot/cppcheck:2.5
25 | stage: analyze
26 | before_script:
27 | - cppcheck --version
28 | allow_failure: true
29 | script:
30 | - cd $CI_PROJECT_DIR
31 | - cppcheck --enable=all --addon=misra --suppress=misra-c2012-3.1 --suppress=misra-c2012-5.1 --suppress=misra-c2012-5.2 \
32 | --suppress=misra-c2012-5.3 --suppress=misra-c2012-12.3 --suppress=misra-c2012-13.4 --suppress=misra-c2012-14.4 \
33 | --suppress=misra-c2012-15.5 --suppress=misra-c2012-16.3 --suppress=misra-c2012-18.4 --suppress=misra-c2012-18.8 \
34 | --suppress=unusedFunction --suppress=noExplicitConstructor --force --inline-suppr --error-exitcode=1 \
35 | --xml --xml-version=2 2>report.xml -I ./inc ./src
36 | after_script:
37 | - mkdir cppcheck-html-report
38 | - cppcheck-htmlreport --source-dir=. --title=html-report --file=report.xml --report-dir=cppcheck-html-report
39 | artifacts:
40 | when: on_failure
41 | paths:
42 | - ./cppcheck-html-report
43 |
44 | clang-tidy:
45 | image: spacedot/clang-tools:13.0.0-html-1.4.1
46 | stage: analyze
47 | script:
48 | - cd $CI_PROJECT_DIR
49 | - cmake -B ./build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
50 | - clang-tidy -p $CI_PROJECT_DIR/build/compile_commands.json --checks=* `find $CI_PROJECT_DIR/src -type f -regextype posix-egrep -regex '.*\.(cpp|hpp|c|h)'` >> clang-tidy-output.log
51 | after_script:
52 | - mkdir clang-tidy-html-report
53 | - clang-tidy-html clang-tidy-output.log
54 | - mv clang.html clang-tidy-html-report
55 | artifacts:
56 | paths:
57 | - ./clang-tidy-html-report
58 |
59 | clang-analyzer:
60 | image: spacedot/clang-tools:13.0.0-html-1.3.7
61 | stage: analyze
62 | before_script:
63 | - mkdir scan-build-html-report
64 | script:
65 | - cd $CI_PROJECT_DIR/scan-build-html-report
66 | - scan-build cmake ../ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
67 | - scan-build -o ./scan-build-html-report make
68 | artifacts:
69 | paths:
70 | - ./scan-build-html-report
71 |
72 | doxygen:
73 | image: spacedot/doxygen:1.9.4-4-awesomecss-1.6.0
74 | stage: analyze
75 | script:
76 | - cd $CI_PROJECT_DIR
77 | - doxygen doxygen.conf
78 | artifacts:
79 | paths:
80 | - ./docs
81 |
82 | ikos:
83 | image: spacedot/ikos:3.0
84 | stage: analyze
85 | before_script:
86 | - mkdir ikos-report
87 | script:
88 | - cd $CI_PROJECT_DIR/ikos-report
89 | - ikos-scan cmake ..
90 | - ikos-scan make
91 | - ikos-report -o=ikos-report.txt ccsds_tm_packets.db
92 | artifacts:
93 | paths:
94 | - ./ikos-report
95 | tests:
96 | image: spacedot/coverage:gcovr-5.0-lcov-1.15
97 | stage: test
98 | when: always
99 | before_script:
100 | - mkdir gcovr
101 | script:
102 | - cd $CI_PROJECT_DIR
103 | - mkdir build
104 | - cd build
105 | - cmake .. -DCMAKE_CXX_FLAGS="-g -O0 --coverage" && make tests -j$(nproc)
106 | - lcov -q --capture --initial --directory . -o coverage_base
107 | - ./tests --colour-mode ansi
108 | - lcov -q --capture --directory . -o coverage_tests
109 | - lcov -q -a coverage_base -a coverage_tests -o coverage_total_unfiltered
110 | - lcov -q --remove coverage_total_unfiltered "${PWD}/lib/*" "${PWD}/CMakeFiles/*" "${PWD}/test/*" "${PWD}/src/main.cpp" -o coverage_total_filtered
111 | - gcovr -s -p -e "^.*(test|lib|main.cpp|CMakeFiles)" --html --html-details --html-title "Code coverage ${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}" -o ../gcovr/gcovr.html
112 | - gcovr -e "^.*(test|lib|main.cpp|CMakeFiles)"
113 | - genhtml --demangle-cpp -t "${CI_COMMIT_REF_NAME}" --html-epilog ../ci/page_style/epilog.html -o ../gcovr coverage_total_filtered
114 | artifacts:
115 | paths:
116 | - ./gcovr
117 | pages:
118 | image: spacedot/build-base:latest # TODO: Latest tag is temporary
119 | stage: deploy
120 | script:
121 | - mkdir .public
122 | - cp -r ./{docs,gcovr,ikos-report,scan-build-html-report,clang-tidy-html-report,cppcheck-html-report} ./.public/
123 | - ls ./.public
124 | - find ./.public
125 | - mv .public public
126 | artifacts:
127 | paths:
128 | - public # Upload the resulting website
129 | # only:
130 | # - branches # Deploy on all branches
131 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "lib/Catch2"]
2 | path = lib/Catch2
3 | url = https://github.com/catchorg/Catch2.git
4 | [submodule "lib/etl"]
5 | path = lib/etl
6 | url = https://github.com/ETLCPP/etl.git
7 |
8 |
--------------------------------------------------------------------------------
/.idea/.name:
--------------------------------------------------------------------------------
1 | ccsds_tm_packets
--------------------------------------------------------------------------------
/.idea/ccsds-tm-packets.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | ApexVCS
21 |
22 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.7)
2 | project(ccsds_tm_packets)
3 |
4 | # Set C++ version to c++17
5 | set(CMAKE_CXX_STANDARD 17)
6 |
7 | # Specify the directories for #includes
8 | include_directories("${PROJECT_SOURCE_DIR}/inc" "${PROJECT_SOURCE_DIR}/lib/etl/include")
9 |
10 | add_compile_options(-Wvla)
11 |
12 | add_custom_target(check
13 | COMMAND ./cppcheck.sh
14 | COMMAND ./vera.sh
15 | COMMAND ./clang-tidy.sh
16 | COMMAND ./cppcheck-misra.sh
17 | WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/ci")
18 |
19 | # Specify the .cpp files common across all targets
20 | add_library(common OBJECT
21 | src/Logger.cpp
22 | src/Platform/x86/Logger.cpp
23 | src/CCSDSServiceChannel.cpp
24 | src/CCSDSChannel.cpp
25 | src/FrameOperationProcedure.cpp
26 | src/FrameAcceptanceReporting.cpp
27 | src/logOperators.cpp
28 | src/MemoryPool.cpp
29 | src/CLCW.cpp
30 | )
31 |
32 | # Specify the .cpp files for the executables
33 | file(GLOB x86_main_SRC "src/Platform/x86/*.cpp")
34 | add_executable(ccsds_tm_packets
35 | src/main.cpp
36 | $
37 | # ${x86_main_SRC}
38 | )
39 |
40 | IF (EXISTS "${PROJECT_SOURCE_DIR}/lib/Catch2/CMakeLists.txt")
41 | # Gather all the .cpp files corresponding to tests
42 | file(GLOB test_main_SRC "test/*.cpp")
43 | file(GLOB test_SRC "test/**/*.cpp")
44 |
45 | add_subdirectory(lib/Catch2)
46 | add_executable(tests
47 | $
48 | ${test_main_SRC}
49 | ${test_SRC})
50 | target_link_libraries(tests Catch2::Catch2WithMain)
51 | ENDIF ()
52 | set_target_properties(common PROPERTIES COMPILE_DEFINITIONS LOGLEVEL_TRACE)
53 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ")
54 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 AcubeSAT / Communications / Software
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CCSDS Data Link
2 |
3 | Implementation of the CCSDS TM and TC Data Link standards (232.0-B-4, CCSDS 232.1-B-2, 132.0-B-3).
4 |
5 | For more information refer to
6 | the [wiki](https://gitlab.com/acubesat/comms/software/ccsds-telemetry-packets/-/wikis/Creating-a-Service-Channel) (WIP).
7 |
8 | (Note: There is no planned support for SDLS)
9 |
--------------------------------------------------------------------------------
/ci/.clang-tidy:
--------------------------------------------------------------------------------
1 | ---
2 | Checks: >
3 | -clang-diagnostic-error,
4 | clang-analyzer-*,
5 | bugprone-*,
6 | cert-*,
7 | cppcoreguidelines-*,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-cppcoreguidelines-pro-type-reinterpret-cast,-cppcoreguidelines-pro-bounds-constant-array-index,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-avoid-c-arrays,
8 | misc-*,-misc-non-private-member-variables-in-classes,
9 | fuchsia-multiple-inheritance,
10 | google-*,-google-readability-todo,
11 | fuchsia-statically-constructed-objects,
12 | hicpp-exception-baseclass,
13 | hicpp-signed-bitwise,
14 | llvm-*,-llvm-include-order,-llvm-header-guard,
15 | modernize-use-auto,
16 | modernize-use-equals-default,
17 | misc-*,
18 | -misc-non-private-member-variables-in-classes,
19 | performance-*,
20 | readability-*,-readability-magic-numbers,
21 | zircon-*
22 | WarningsAsErrors: '*,-misc-unused-parameters,-llvm-header-guard,-cppcoreguidelines-pro-type-member-init,-google-runtime-references,-clang-diagnostic-tautological-constant-out-of-range-compare,-readability-redundant-declaration,-modernize-use-equals-default,-fuchsia-statically-constructed-objects,-hicpp-signed-bitwise,-cert-err58-cpp,-clang-diagnostic-error,-misc-noexcept-move-constructor'
23 | HeaderFilterRegex: 'ecss-services\/((?!lib\/).)*$'
24 | AnalyzeTemporaryDtors: false
25 | ...
26 |
27 |
--------------------------------------------------------------------------------
/ci/clang-format.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | #
4 | # Edit files, performing code style corrections using clang-format
5 | #
6 | # Usage:
7 | # $ ci/clang-format.sh
8 | #
9 |
10 | echo -e "\033[0;34mRunning clang-format...\033[0m"
11 |
12 | cd "$(dirname "$0")"
13 | clang-format-7 -i `find ../src/ ../inc/ ../test/ -type f -regextype posix-egrep -regex '.*\.(cpp|hpp|c|h)'` \
14 | -verbose $@
15 |
--------------------------------------------------------------------------------
/ci/clang-tidy.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | #
4 | # Code style checks using clang-tidy
5 | #
6 | # Usage:
7 | # $ ci/clang-tidy.sh
8 | #
9 |
10 | echo -e "\033[0;34mRunning clang-tidy...\033[0m"
11 |
12 | cd "$(dirname "$0")"
13 | GCCVERSION=`g++ -dumpversion`
14 |
15 | clang-tidy `find ../src/ -type f -regextype posix-egrep -regex '.*\.(cpp|hpp|c|h)'` \
16 | -extra-arg=-fcolor-diagnostics -- -std=c++17 -I../inc -I../lib/etl/include -I../inc/Platform/x86 \
17 | -I/usr/include/c++/$GCCVERSION -I/usr/include/x86_64-linux-gnu/c++/$GCCVERSION \
18 | -I/usr/include/c++/$GCCVERSION/$MACHTYPE]
19 |
20 |
21 |
--------------------------------------------------------------------------------
/ci/cppcheck-misra.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | #
4 | # Static code analysis for MISRA C-2012 compliance using cppcheck
5 | #
6 | # Usage:
7 | # $ ci/cppcheck-misra.sh
8 | #
9 |
10 | # make sure we are in the correct directory, regardless of where the script was called from
11 | cd "$(dirname "$0")/.."
12 |
13 | echo -e "\u001b[34;1mGetting prerequisites...\u001b[0m"
14 | # get the current cppcheck version
15 | CPCVERSION=`cppcheck --version | awk '{print $2}'`
16 |
17 | # grab the MISRA addon and the cppcheck addon interface from github
18 | curl https://raw.githubusercontent.com/danmar/cppcheck/$CPCVERSION/addons/misra.py > ci/misra.py
19 | curl https://raw.githubusercontent.com/danmar/cppcheck/$CPCVERSION/addons/cppcheckdata.py > ci/cppcheckdata.py
20 |
21 | # generate dump files (XML representations of AST etc.) for all headers, source files etc.
22 | echo -e "\u001b[34;1mGenerating dump files...\u001b[0m"
23 | find inc/ src/ -type f \( -iname "*.cpp" -or -iname "*.hpp" \) | xargs cppcheck --dump
24 |
25 | # run the MISRA checks against the dumps and send the results to a file
26 | echo -e "\u001b[34;1mRunning MISRA C(2012) rule compliance tests...\u001b[0m"
27 | find inc/ src/ -type f -name "*.dump" | xargs python3 ci/misra.py >> ci/report.msr 2>&1
28 |
29 | # pre-process the generated report to remove all useless strings
30 | echo -e "\u001b[34;1mPre-processing report...\u001b[0m"
31 | sed -i -r 's/(.*Script.*)|(.*Checking.*)|(.*MISRA.*)|(.*Undefined: .*)|(.* \(-\):.*)//gm; /(^$)/d; s/(\s\(.*\)\s)//gm; s/(\]|\[)//gm; s/(misra-c2012-)/:/gm' ci/report.msr
32 |
33 | # run the summarizer for a nice, clean summary of errors
34 | echo -e "\u001b[34;1mSummarizing results...\u001b[0m"
35 | python3 ci/summarizer.py --report ci/report.msr --suppress 3.1 5.1 5.2 5.3 12.3 13.4 14.4 15.5 16.3 18.4 18.8
36 | EXIT_CODE=$?
37 |
38 | # clean up old files
39 | echo -e "\u001b[34;1mRemoving dump files...\u001b[0m"
40 | echo > ci/report.msr # clear the report file
41 | find inc/ src/ -type f -name "*.dump" | xargs rm -rf
42 |
43 | # finally return the return value of the summarizer.py script
44 | exit $EXIT_CODE
45 |
46 |
--------------------------------------------------------------------------------
/ci/cppcheck.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | #
4 | # Static code analysis using cppcheck
5 | #
6 | # Usage:
7 | # $ ci/cppcheck.sh
8 | #
9 |
10 | echo -e "\u001b[34;1mStarting cppcheck...\u001b[0m"
11 |
12 | echo -e "\u001b[34;1mRunning cppcheck with default checklist...\u001b[0m"
13 |
14 | cd "$(dirname "$0")/.."
15 | cppcheck --enable=all --suppress=unusedFunction --suppress=noExplicitConstructor \
16 | --force --inline-suppr --error-exitcode=1 -I inc src test
17 |
--------------------------------------------------------------------------------
/ci/lcovrc:
--------------------------------------------------------------------------------
1 | # genhtml configuration
2 |
3 | # External style sheet file
4 | #genhtml_css_file = gcov.css
5 |
6 | # Width of line coverage field in source code view
7 | genhtml_line_field_width = 12
8 |
9 | # Width of branch coverage field in source code view
10 | genhtml_branch_field_width = 16
11 |
12 | # Width of overview image
13 | genhtml_overview_width = 80
14 |
15 | # Resolution of overview navigation
16 | genhtml_nav_resolution = 4
17 |
18 | # Offset for source code navigation
19 | genhtml_nav_offset = 10
20 |
21 | # Do not remove unused test descriptions if non-zero
22 | genhtml_keep_descriptions = 1
23 |
24 | # Do not remove prefix from directory names if non-zero
25 | genhtml_no_prefix = 0
26 |
27 | # Specify size of tabs
28 | # genhtml_num_spaces = 8
29 |
30 | # Highlight lines with converted-only data if non-zero
31 | genhtml_highlight = 1
32 |
33 | # Include color legend in HTML output if non-zero
34 | genhtml_legend = 1
35 |
36 | # Compress all generated html files with gzip.
37 | genhtml_html_gzip = 0
38 |
39 | # Include sorted overview pages
40 | genhtml_sort = 1
41 |
42 | # Include function coverage data display
43 | genhtml_function_coverage = 1
44 |
45 | # Include branch coverage data display
46 | genhtml_branch_coverage = 1
47 |
48 | # Specify the character set of all generated HTML pages
49 | genhtml_charset=UTF-8
50 |
51 |
52 |
53 |
54 |
55 | # geninfo configuration
56 |
57 | # Calculate a checksum for each line if non-zero
58 | geninfo_checksum = 0
59 |
60 | # Enable libtool compatibility mode if non-zero
61 | geninfo_compat_libtool = 0
62 |
63 | # Specify whether to capture coverage data for external source
64 | # files
65 | geninfo_external = 0
66 |
67 | # Use gcov's --all-blocks option if non-zero
68 | geninfo_gcov_all_blocks = 1
69 |
70 | # Specify if geninfo should try to automatically determine
71 | # the base-directory when collecting coverage data.
72 | geninfo_auto_base = 1
73 |
74 |
75 |
76 |
77 |
78 | # lcov configuration
79 |
80 | # Show full paths during list operation if non-zero
81 | lcov_list_full_path = 1
82 |
83 | # Specify the maximum width for list output. This value is
84 | # ignored when lcov_list_full_path is non-zero.
85 | #lcov_list_width = 80
86 |
87 | # Specify the maximum percentage of file names which may be
88 | # truncated when choosing a directory prefix in list output.
89 | # This value is ignored when lcov_list_full_path is non-zero.
90 | #lcov_list_truncate_max = 20
91 |
92 | # Specify if function coverage data should be collected and processed.
93 | lcov_function_coverage = 1
94 |
95 | # Specify if branch coverage data should be collected andprocessed.
96 | lcov_branch_coverage = 1
97 |
--------------------------------------------------------------------------------
/ci/page_style/custom_format.css:
--------------------------------------------------------------------------------
1 | .coverLegendCovLo, .coverLegendCovMed, .coverLegendCovHi {
2 | border-radius: 15px;
3 | }
4 |
5 | #td.headerCovTableEntry {
6 | border-radius: 15px;
7 | }
8 |
9 | .headerCovTableEntryLo, .headerCovTableEntryMed, .headerCovTableEntryHi {
10 | border-radius: 15px;
11 | }
12 |
13 | .headerCovTableEntry {
14 | border-radius: 15px;
15 | }
16 |
--------------------------------------------------------------------------------
/ci/page_style/doxygen_dark_theme/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Tilen Majerle
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/ci/page_style/doxygen_dark_theme/README.md:
--------------------------------------------------------------------------------
1 | # Doxygen dark theme
2 |
3 | Theme implements dark colors implementation for doxygen documentation generator. Selected colors are inspiration from
4 | Sublime Text syntax highligher for C language.
5 |
6 | ## Demo
7 |
8 | Demo of the dark theme is available at https://majerle.eu/documentation/esp_at/html/index.html
9 |
10 | # How to use it
11 |
12 | Usage is very simple. You just need to modify your doxygen input file
13 |
14 | ```
15 | # Add files to extra stylesheet
16 |
17 | HTML_EXTRA_STYLESHEET = "custom.css" \
18 | "custom_dark_theme.css"
19 | ```
20 |
21 | If you wish to use custom made HTML header and footer, enable this feature with
22 |
23 | ```
24 | # Custom header
25 | HTML_HEADER = "html_header.html"
26 |
27 | # Custom footer
28 | HTML_FOOTER = "html_footer.html"
29 | ```
30 |
--------------------------------------------------------------------------------
/ci/page_style/doxygen_dark_theme/custom.css:
--------------------------------------------------------------------------------
1 | div.fragment, pre.fragment {
2 | margin: 0;
3 | padding: 4px;
4 | }
5 |
6 | /*********************************************/
7 | /** Main content **/
8 | /*********************************************/
9 | .contents {
10 | margin: 10px auto !important;
11 | padding: 0 10px;
12 | max-width: 1200px;
13 | }
14 |
15 | /*********************************************/
16 | /** Inline code **/
17 | /*********************************************/
18 | p code,
19 | li code,
20 | td code,
21 | dd code {
22 | display: inline;
23 | padding: 0px 6px;
24 | -webkit-border-radius: 4px;
25 | -moz-border-radius: 4px;
26 | border-radius: 4px;
27 |
28 | background-color: #CCCCCC;
29 | border: 1px solid #333333;
30 |
31 | color: #333333;
32 | }
33 |
34 | /*********************************************/
35 | /** Table of Contents (ToC) **/
36 | /*********************************************/
37 | div.toc {
38 | margin: 0 !important;
39 | border-radius: 4px !important;
40 | }
41 |
42 | div.toc h3 {
43 | font-size: 150%;
44 | color: inherit;
45 | }
46 |
47 | /*********************************************/
48 | /** Content table **/
49 | /*********************************************/
50 | .contents table.doxtable {
51 | margin: 0 auto;
52 | }
53 |
54 | /*********************************************/
55 | /** Field table **/
56 | /*********************************************/
57 | .fieldtable {
58 | box-shadow: none !important;
59 | -webkit-box-shadow: none;
60 | -moz-box-shadow: none;
61 | }
62 |
63 | /*********************************************/
64 | /** Memitem and memtitle **/
65 | /*********************************************/
66 | .memitem,
67 | .memproto,
68 | .memdoc {
69 | box-shadow: none;
70 | -webkit-box-shadow: none;
71 | -moz-box-shadow: none;
72 | background-image: none;
73 | }
74 |
75 | /*********************************************/
76 | /** TOP navigation **/
77 | /*********************************************/
78 | .tablist a:hover,
79 | .tablist li.current a {
80 | text-shadow: none;
81 | -moz-text-shadow: none;
82 | -webkit-text-shadow: none;
83 | }
84 |
85 | /*********************************************/
86 | /** H1 in textblocks **/
87 | /*********************************************/
88 | .textblock h1 {
89 | border-bottom: 1px solid #32363d;
90 | border-left: 3px solid #32363d;
91 | margin: 40px 0px 10px 0px;
92 | padding-bottom: 10px;
93 | padding-top: 10px;
94 | padding-left: 5px;
95 | }
96 |
97 | .textblock h1:first-child {
98 | margin-top: 10px;
99 | }
100 |
101 | /*********************************************/
102 | /** Note, warning **/
103 | /*********************************************/
104 | dl.note,
105 | dl.warning,
106 | dl.todo,
107 | dl.deprecated,
108 | dl.reflist {
109 | border: 0;
110 | padding: 0px;
111 | margin: 4px 0px 4px 0px;
112 | border-radius: 4px;
113 | }
114 |
115 | dl.note dt,
116 | dl.warning dt,
117 | dl.todo dt,
118 | dl.deprecated dt,
119 | dl.reflist dt {
120 | margin: 0;
121 | font-size: 14px;
122 | padding: 2px 4px;
123 |
124 | border: none;
125 | border-top-left-radius: 0px;
126 | border-top-right-radius: 0px;
127 |
128 | font-weight: bold;
129 | text-transform: uppercase;
130 | color: #FFFFFF !important;
131 |
132 | box-shadow: none;
133 | -webkit-box-shadow: none;
134 | -moz-box-shadow: none;
135 | text-shadow: none;
136 | }
137 |
138 | dl.note dd,
139 | dl.warning dd,
140 | dl.todo dd,
141 | dl.deprecated dd,
142 | dl.reflist dd {
143 | margin: 0;
144 | padding: 4px;
145 | background: none;
146 |
147 | color: #222222;
148 |
149 | border: 1px solid;
150 | border-bottom-left-radius: 0px;
151 | border-bottom-right-radius: 0px;
152 | border-top: none;
153 |
154 | box-shadow: none;
155 | -webkit-box-shadow: none;
156 | -moz-box-shadow: none;
157 | text-shadow: none;
158 | }
159 |
160 | dl.reflist dd {
161 | margin-bottom: 15px;
162 | }
163 |
164 | /* Background colors */
165 | dl.note {
166 | }
167 |
168 | dl.warning {
169 | }
170 |
171 | dl.todo {
172 | }
173 |
174 | dl.deprecated {
175 | }
176 |
177 | dl.reflist {
178 | }
179 |
180 | /* Header */
181 | dl.note dt {
182 | background-color: #cbc693;
183 | }
184 |
185 | dl.warning dt {
186 | background-color: #bf5f82;
187 | }
188 |
189 | dl.todo dt {
190 | background-color: #82b3c9;
191 | }
192 |
193 | dl.deprecated dt {
194 | background-color: #af8eb5;
195 | }
196 |
197 | dl.reflist dt {
198 | background-color: #cbae82;
199 | }
200 |
201 | /* Content */
202 | dl.note dd {
203 | background-color: #fff9c4;
204 | border-color: #cbc693;
205 | }
206 |
207 | dl.warning dd {
208 | background-color: #f48fb1;
209 | border-color: #bf5f82;
210 | }
211 |
212 | dl.todo dd {
213 | background-color: #b3e5fc;
214 | border-color: #82b3c9;
215 | }
216 |
217 | dl.deprecated dd {
218 | background-color: #e1bee7;
219 | border-color: #af8eb5;
220 | }
221 |
222 | dl.reflist dd {
223 | background-color: #ffe0b2;
224 | border-color: #cbae82;
225 | }
226 |
227 | /*********************************************/
228 | /** Reference list **/
229 | /**Similar to warning/note/todo/... messages**/
230 | /*********************************************/
231 | dl.reflist {
232 |
233 | }
234 |
235 | /*********************************************/
236 | /** Note, warning **/
237 | /*********************************************/
238 | #docs_list {
239 | padding: 0 10px;
240 | }
241 |
242 | #docs_list ul {
243 | margin: 0;
244 | padding: 0;
245 | list-style: none;
246 | }
247 |
248 | #docs_list ul li {
249 | display: inline-block;
250 | border-right: 1px solid #BFBFBF;
251 | }
252 |
253 | #docs_list ul li:last-child {
254 | border-right: none;
255 | }
256 |
257 | #docs_list ul li a {
258 | display: block;
259 | padding: 8px 13px;
260 | font-weight: bold;
261 | font-size: 15px;
262 | }
263 |
264 | #docs_list ul li a:hover,
265 | #docs_list ul li a.docs_current {
266 | text-decoration: underline;
267 | }
268 |
269 | /*********************************************/
270 | /** Resizable UI **/
271 | /*********************************************/
272 | .ui-resizable-e {
273 | width: 3px;
274 | }
275 |
276 | /*********************************************/
277 | /** Download url **/
278 | /*********************************************/
279 | .download_url {
280 | font-weight: bold;
281 | font-size: 150%;
282 | line-height: 150%;
283 | }
284 |
285 | /*********************************************/
286 | /** Syntax folor **/
287 | /*********************************************/
288 | div.line a {
289 | text-decoration: underline;
290 | }
291 |
292 | span.lineno a {
293 | text-decoration: none;
294 | }
295 |
296 | /*********************************************/
297 | /** Modules/Directory table **/
298 | /*********************************************/
299 | .directory .arrow {
300 | height: initial;
301 | }
302 |
303 | .directory td.entry {
304 | padding: 3px 6px;
305 | }
306 |
307 | /*********************************************/
308 | /** Mem items **/
309 | /*********************************************/
310 | .memproto table td {
311 | font-family: monospace, fixed !important;
312 | }
313 |
314 | td.memItemLeft, td.memItemRight {
315 | font-family: monospace, fixed;
316 | }
317 |
318 | .paramname, .paramname em {
319 | font-style: italic;
320 | }
321 |
322 | .memdoc {
323 | text-shadow: none;
324 | }
325 |
326 | .memItem {
327 | font-family: monospace, fixed;
328 | }
329 |
330 | .memItem table {
331 | font-family: inherit;
332 | }
333 |
334 | /*********************************************/
335 | /** Footer **/
336 | /*********************************************/
337 | img.footer {
338 | height: 22px;
339 | }
340 |
341 | /*********************************************/
342 | /** Custom scrollbar **/
343 | /*********************************************/
344 |
345 | /*********************************************/
346 | /** Custom scrollbar **/
347 | /*********************************************/
348 |
--------------------------------------------------------------------------------
/ci/page_style/doxygen_dark_theme/custom_dark_theme.css:
--------------------------------------------------------------------------------
1 | /* Light background: #3 5 3 6 2 9; */
2 | /* New light dark background #3 2 3 6 3 d */
3 | /* Dark background: #d f e 5 f 2; */
4 |
5 | /* TOP MENU */
6 | .sm-dox {
7 | background: #dfe5f2 !important;
8 | }
9 |
10 | .sm-dox a {
11 | background: none;
12 | }
13 |
14 | body {
15 | background: #282923;
16 | background-image: none;
17 | color: #D8D8D8;
18 | }
19 |
20 | div.fragment, pre.fragment {
21 | border: 1px solid #000000;
22 | background: #32363d;
23 | }
24 |
25 | a, a:link, a:visited {
26 | color: #67d8ef !important;
27 | }
28 |
29 | .highlighted {
30 | background: none !important;
31 | }
32 |
33 | a.highlighted {
34 | background: none !important;
35 | }
36 |
37 | /*********************************************/
38 | /** Top main menu **/
39 | /*********************************************/
40 | #main-nav {
41 | /* display: none; */
42 | border-bottom: 1px solid #32363d;
43 | }
44 |
45 | #main-nav .sm-dox {
46 | background: transparent !important;
47 | }
48 |
49 | .sm-dox a {
50 | text-shadow: none !important;
51 | background: transparent !important;
52 | }
53 |
54 | .sm-dox a:hover {
55 | background: #282923 !important;
56 | }
57 |
58 | .sm-dox {
59 | text-shadow: none !important;
60 | box-shadow: none !important;
61 | }
62 |
63 | .sm-dox ul {
64 | border: 1px solid #000000;
65 | background: #32363d;
66 | }
67 |
68 | .directory tr.even {
69 | background: #32363d;
70 | }
71 |
72 |
73 | /*********************************************/
74 | /** Top search **/
75 | /*********************************************/
76 | #MSearchSelectWindow {
77 | border: 1px solid #000000;
78 | background: #32363d;
79 | }
80 |
81 | a.selectItem {
82 | padding: 3px;
83 | }
84 |
85 | a.SelectItem:hover {
86 | background: #282923 !important;
87 | }
88 |
89 | #MSearchResultsWindow {
90 | border: 1px solid #000000;
91 | background: #32363d;
92 | color: #67d8ef !important;;
93 | }
94 |
95 | /*********************************************/
96 | /** Main menu **/
97 | /*********************************************/
98 | #nav-tree {
99 | background: transparent;
100 | }
101 |
102 | #nav-tree .selected {
103 | background-image: none;
104 | background: #32363d;
105 | }
106 |
107 | /*********************************************/
108 | /** Main content **/
109 | /*********************************************/
110 |
111 | /*********************************************/
112 | /** Inline code **/
113 | /*********************************************/
114 | p code,
115 | li code,
116 | td code,
117 | dd code {
118 | background-color: #000000;
119 | border: 1px solid #A8B8D9;
120 |
121 | color: #D8D8D8;
122 | }
123 |
124 | /*********************************************/
125 | /** Table of Contents (ToC) **/
126 | /*********************************************/
127 | div.toc {
128 | background: #32363d;
129 | border: 1px solid #000000;
130 | }
131 |
132 | div.toc h3 {
133 | font-size: 150%;
134 | color: inherit;
135 | }
136 |
137 | /*********************************************/
138 | /** Content table **/
139 | /*********************************************/
140 | table.doxtable tr:nth-child(even) td {
141 | background: #32363d;
142 | }
143 |
144 | div.header {
145 | background: transparent;
146 | border-bottom: 1px solid #32363d;
147 | }
148 |
149 | /*********************************************/
150 | /** Field table **/
151 | /*********************************************/
152 | .fieldtable th {
153 | background: #282923;
154 | color: inherit;
155 | }
156 |
157 | /*********************************************/
158 | /** Memitem and memtitle **/
159 | /*********************************************/
160 | .memdoc {
161 | border: 1px solid #A8B8D9;
162 | }
163 |
164 | /*********************************************/
165 | /** TOP navigation **/
166 | /*********************************************/
167 | .tabs, .tabs2, .tabs3 {
168 | background: #DDDDDD;
169 | }
170 |
171 | .tablist li {
172 | background: transparent !important;
173 | }
174 |
175 | .tablist a {
176 | background-image: none;
177 | border-right: 1px solid #999999;
178 |
179 | color: #32363d;
180 | }
181 |
182 | .tablist a:hover,
183 | .tablist li.current a {
184 | text-decoration: none;
185 | color: #000000;
186 | background: #CCCCCC;
187 | background-image: none;
188 | }
189 |
190 | /*********************************************/
191 | /** H1 in textblocks **/
192 | /*********************************************/
193 |
194 | /*********************************************/
195 | /** Note, warning **/
196 | /*********************************************/
197 |
198 | /*********************************************/
199 | /** Reference list **/
200 | /**Similar to warning/note/todo/... messages**/
201 | /*********************************************/
202 | dl.reflist {
203 |
204 | }
205 |
206 |
207 | /*********************************************/
208 | /** Note, warning **/
209 | /*********************************************/
210 | #docs_list {
211 | background: #32363d;
212 | }
213 |
214 | #docs_list ul li {
215 | border-right: 1px solid #BFBFBF;
216 | }
217 |
218 | #docs_list ul li a {
219 | color: #1b1e21;
220 | }
221 |
222 | #docs_list ul li a:hover,
223 | #docs_list ul li a.docs_current {
224 | background: #282923;
225 | }
226 |
227 | /*********************************************/
228 | /** Resizable UI **/
229 | /*********************************************/
230 | .ui-resizable-e {
231 | background: #32363d;
232 | }
233 |
234 | /*********************************************/
235 | /** Download url **/
236 | /*********************************************/
237 |
238 | /*********************************************/
239 | /** Syntax folor **/
240 | /*********************************************/
241 | div.line {
242 | background: transparent;
243 | color: inherit;
244 | }
245 |
246 | div.line a {
247 | color: inherit;
248 | }
249 |
250 | span.keyword {
251 | color: #f92472;
252 | font-style: italic;
253 | }
254 |
255 | span.keywordtype {
256 | color: #67cfc1;
257 | font-style: italic;
258 | }
259 |
260 | span.keywordflow {
261 | color: #f92472;
262 | font-style: italic;
263 | }
264 |
265 | span.comment {
266 | color: #74705a;
267 | }
268 |
269 | span.preprocessor {
270 | color: #a6e22b;
271 | }
272 |
273 | span.stringliteral {
274 | color: #e7db74;
275 | }
276 |
277 | span.charliteral {
278 | color: #e7db74;
279 | }
280 |
281 | span.vhdldigit {
282 | color: #ff00ff;
283 | }
284 |
285 | span.vhdlchar {
286 | color: #000000;
287 | }
288 |
289 | span.vhdlkeyword {
290 | color: #700070;
291 | }
292 |
293 | span.vhdllogic {
294 | color: #ff0000;
295 | }
296 |
297 | span.lineno {
298 | background: transparent;
299 | }
300 |
301 | span.lineno a {
302 | background: transparent;
303 | }
304 |
305 | /*********************************************/
306 | /** Modules/Directory table **/
307 | /*********************************************/
308 | .mdescLeft, .mdescRight, .memItemLeft, .memItemRight,
309 | .memTemplItemLeft, .memTemplItemRight, .memTemplParams {
310 | background: #32363d;
311 | color: inherit;
312 | }
313 |
314 | .memSeparator {
315 | border: none;
316 | background: transparent;
317 | }
318 |
319 | h2.groupheader {
320 | color: #67d8ef;
321 | }
322 |
323 | /*********************************************/
324 | /** Mem items **/
325 | /*********************************************/
326 | .memtitle {
327 | background: #32363d !important;
328 | border-color: #000000;
329 | }
330 |
331 | .memitem {
332 | background: #32363d !important;
333 | color: inherit;
334 | text-shadow: none;
335 | }
336 |
337 | .memproto {
338 | background: inherit;
339 | border-color: #000000;
340 | color: inherit;
341 | text-shadow: none;
342 | }
343 |
344 | .memproto table td {
345 | font-family: monospace, fixed !important;
346 | }
347 |
348 | td.memItemLeft, td.memItemRight {
349 | font-family: monospace, fixed;
350 | }
351 |
352 | .paramname, .paramname em {
353 | color: #bf5f82;
354 | }
355 |
356 | .memdoc {
357 | background: inherit;
358 | border-color: #000000;
359 | }
360 |
361 |
362 | /*********************************************/
363 | /** Footer **/
364 | /*********************************************/
365 | .titlearea {
366 | border-bottom: 1px solid #32363d;
367 | }
368 |
369 | /*********************************************/
370 | /** Footer **/
371 | /*********************************************/
372 | #nav-path {
373 | background: transparent;
374 | }
375 |
376 | #nav-path ul {
377 | background: transparent;
378 | color: inherit;
379 | border: none;
380 | border-top: 1px solid #32363d;
381 | }
382 |
383 | .navpath li.footer {
384 | color: inherit;
385 | }
386 |
387 | .navpath li.navelem a {
388 | text-shadow: none;
389 | }
390 |
391 | /*********************************************/
392 | /** Custom scrollbar **/
393 | /*********************************************/
394 | ::-webkit-scrollbar {
395 | width: 10px;
396 | }
397 |
398 | /* Track */
399 | ::-webkit-scrollbar-track {
400 | border-radius: 10px;
401 | }
402 |
403 | /* Handle */
404 | ::-webkit-scrollbar-thumb {
405 | background: #234567;
406 | border: none;
407 | }
408 |
409 | /* Handle on hover */
410 | ::-webkit-scrollbar-thumb:hover {
411 | background: #32363d;
412 | }
413 |
414 | /*********************************************/
415 | /** Custom scrollbar **/
416 | /*********************************************/
417 | h1.glow, h2.glow, h3.glow,
418 | h4.glow, h5.glow, h6.glow {
419 | text-shadow: 0 0 15px #67d8ef;
420 | }
--------------------------------------------------------------------------------
/ci/page_style/doxygen_dark_theme/html_footer.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
14 |
15 |
16 |
17 |