From ed4e634d0bb9db4e2fe4dc3ebd8beb6fa6c57a08 Mon Sep 17 00:00:00 2001 From: Charlie Kushelevsky Date: Wed, 29 May 2024 16:05:06 -0700 Subject: [PATCH] fix: addressed issues with PR #43 --- .gitignore | 3 +- .vscode/c_cpp_properties.json | 40 +- .vscode/launch.json | 49 - .vscode/settings.json | 3 - .vscode/tasks.json | 14 - docs/RideTask.puml | 66 - docs/scheduler_gantt.py | 64 - gtests/CMakeLists.txt | 18 +- gtests/gtest.cpp | 1 - latex/delayed.png | Bin 35226 -> 0 bytes latex/intended.png | Bin 26554 -> 0 bytes latex/main.tex | 24 - latex/sf.pdf | Bin 70959 -> 0 bytes package-lock.json | 6 - src/Doxyfile | 2854 -------------------------- src/cellular/dataUpload.cpp | 2 +- src/cli/menuItems/systemCommands.cpp | 2 +- src/product.hpp | 302 +-- src/rideTask.cpp | 2 +- src/rideTask.hpp | 14 - src/scheduler.cpp | 34 - 21 files changed, 211 insertions(+), 3287 deletions(-) delete mode 100644 .vscode/tasks.json delete mode 100644 docs/RideTask.puml delete mode 100644 docs/scheduler_gantt.py delete mode 100644 latex/delayed.png delete mode 100644 latex/intended.png delete mode 100644 latex/main.tex delete mode 100644 latex/sf.pdf delete mode 100644 package-lock.json delete mode 100644 src/Doxyfile diff --git a/.gitignore b/.gitignore index 75311924..a1af4b09 100644 --- a/.gitignore +++ b/.gitignore @@ -294,4 +294,5 @@ target/ nul out/docs/application/Service Diagram.png out/docs/fw_flow/Firmware Flowchart.png -tests/outputs/ \ No newline at end of file +tests/outputs/ +build/** diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 111acee7..aa8b5af9 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -1,14 +1,48 @@ { - "configurations": - [ + "configurations": [ { "name": "Particle", + "includePath": [ + "${workspaceFolder}\\src", + "~/.particle/toolchains/deviceOS/5.3.0/user/inc" + ], + "defines": [ + "_DEBUG", + "UNICODE", + "_UNICODE" + ], + "windowsSdkVersion": "10.0.22000.0", + "compilerPath": "~\\.particle\\toolchains\\gcc-arm\\10.2.1\\bin\\arm-none-eabi-gcc.exe", + "intelliSenseMode": "windows-gcc-arm", + "cStandard": "c11", + "cppStandard": "c++11", + "configurationProvider": "particle.particle-vscode-core", + "mergeConfigurations": true, + "browse": { + "limitSymbolsToIncludedHeaders": true, + "path": [ + "${default}", + "~\\.particle\\toolchains\\deviceOS\\5.3.0\\user\\inc", + "~\\.particle\\toolchains\\deviceOS\\5.3.0\\hal\\inc", + "~\\.particle\\toolchains\\deviceOS\\5.3.0\\hal\\shared", + "~\\.particle\\toolchains\\deviceOS\\5.3.0\\hal\\src\\gcc", + "~\\.particle\\toolchains\\deviceOS\\5.3.0\\hal\\src\\nRF52840\\posix", + "~\\.particle\\toolchains\\deviceOS\\5.3.0\\services\\inc", + "~\\.particle\\toolchains\\deviceOS\\5.3.0\\system", + "~\\.particle\\toolchains\\deviceOS\\5.3.0\\wiring", + "~\\.particle\\toolchains\\deviceOS\\5.3.0\\third_party\\nrf5_sdk\\nrf5_sdk\\modules\\nrfx\\mdk", + "${workspaceFolder}\\src" + ] + } + }, + { + "name": "Particle_nix", "includePath": [ "${workspaceFolder}/src", "~/.particle/toolchains/deviceOS/5.3.0/user/inc", "/usr/include/" - + ], "defines": [ diff --git a/.vscode/launch.json b/.vscode/launch.json index da0b2cdc..5e3e71db 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,55 +1,6 @@ { "version": "0.2.0", "configurations": [ - { - "name": "(gdb) Launch Scheduler Test", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/tests/test.o", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - }, - { - "description": "Set Disassembly Flavor to Intel", - "text": "-gdb-set disassembly-flavor intel", - "ignoreFailures": true - } - ] - }, - { - "name": "(gdb) Launch Scheduler Google Test", - "type": "cppdbg", - "request": "launch", - "program": "${workspaceFolder}/gtests/test_scheduler", - "args": [], - "stopAtEntry": false, - "cwd": "${workspaceFolder}", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - }, - { - "description": "Set Disassembly Flavor to Intel", - "text": "-gdb-set disassembly-flavor intel", - "ignoreFailures": true - } - ] - }, - { "name": "Semantic Release", "type": "debugpy", diff --git a/.vscode/settings.json b/.vscode/settings.json index d5237ffc..1cf2bbba 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -78,8 +78,5 @@ "C_Cpp.vcFormat.newLine.beforeOpenBrace.block": "newLine", "C_Cpp.vcFormat.indent.preserveWithinParentheses": true, "C_Cpp.vcFormat.indent.preprocessor": "oneLeft", - "C_Cpp.errorSquiggles": "enabled", - "C_Cpp.vcFormat.wrap.preserveBlocks": "never", - "C_Cpp.vcFormat.newLine.beforeOpenBrace.function": "newLine", } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json deleted file mode 100644 index 20377435..00000000 --- a/.vscode/tasks.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "type": "particle", - "name": "Compile application & DeviceOS (local)", - "problemMatcher": [ - "$particle-gcc" - ], - "group": "build", - "label": "Particle: Compile application & DeviceOS (local)" - } - ] -} \ No newline at end of file diff --git a/docs/RideTask.puml b/docs/RideTask.puml deleted file mode 100644 index da47c30b..00000000 --- a/docs/RideTask.puml +++ /dev/null @@ -1,66 +0,0 @@ -@startuml - -skinparam rectangle { - BackgroundColor PaleGreen - BorderColor DarkSlateGray - BorderThickness 2 -} - -package "ride.cpp System Overview" { - rectangle "RideInitTask" { - :init(); - :run(); - :exit(); - } - - rectangle "RideTask" { - :init(); - :run(); - :exit(); - } - - rectangle "Scheduler" { - note right - Manages the scheduling of various tasks - end note - :SCH_initializeSchedule(); - :SCH_getNextEvent(); - } - - rectangle "Deployment Schedule[]" { - note right - Contains the functions and intervals for scheduled tasks - end note - :SS_ensemble10Func(); - :SS_ensemble10Init(); - :SS_ensemble07Func(); - :SS_ensemble07Init(); - :SS_ensemble08Func(); - :SS_ensemble08Init(); - :SS_fwVerFunc(); - :SS_fwVerInit(); - } - - rectangle "Sensor and Data Handling" { - note right - Manages sensor readings and data collection - end note - :pTempSensor->getTemp(); - :pWaterSensor->getCurrentReading(); - :pGPS->gpsModuleInit(); - :pIMU->open(); - :pCompass->open(); - :SS_ensemble10Func(); // data collection function example - } - - rectangle "System Utilities" { - note right - Provides support functions and utilities - end note - :RIDE_setFileName(); - :digitalWrite(); - :delay(); - } -} - -@enduml diff --git a/docs/scheduler_gantt.py b/docs/scheduler_gantt.py deleted file mode 100644 index 5d5a0baf..00000000 --- a/docs/scheduler_gantt.py +++ /dev/null @@ -1,64 +0,0 @@ -import matplotlib.pyplot as plt -import numpy as np - - -def plot_gantt(tasks, title): - fig, ax = plt.subplots(figsize=(10, 3)) - task_dict = {} - - - for task in tasks: - if task['label'] not in task_dict: - task_dict[task['label']] = [] - task_dict[task['label']].append((task['start'], task['duration'])) - - - y_pos = range(len(task_dict)) - colors = ['skyblue', 'lightgreen', 'salmon', 'grey'] - color_idx = 0 - - for i, (label, segments) in enumerate(task_dict.items()): - for start, duration in segments: - ax.barh(i, duration, left=start, color=colors[color_idx % len(colors)]) - ax.text(start + duration / 2, i, f"{label} ({start} - {start+duration})", - va='center', ha='center', color='black') - color_idx += 1 - - ax.set_yticks(y_pos) - ax.set_yticklabels(task_dict.keys()) - ax.set_xlabel('Time (seconds)') - ax.set_title(title) - ax.grid(True) - - plt.show() - #plt.save(str(title) + ".jpg") - -tasks_intended = [ - {'label': 'A', 'start': 0, 'duration': 40}, - {'label': 'B', 'start': 50, 'duration': 20}, - {'label': 'C', 'start': 80, 'duration': 70}, - {'label': 'A', 'start': 200, 'duration': 40}, - {'label': 'B', 'start': 250, 'duration': 30}, - {'label': 'C', 'start': 280, 'duration': 70} -] -#plot_gantt(tasks_intended, "Intended") - -tasks_delay1 = [ - {'label': 'A', 'start': 0, 'duration': 60}, - {'label': 'B', 'start': 60, 'duration': 20}, - {'label': 'C', 'start': 80, 'duration': 70}, - {'label': 'A', 'start': 200, 'duration': 40}, - {'label': 'B', 'start': 250, 'duration': 30}, - {'label': 'C', 'start': 280, 'duration': 70} -] -#plot_gantt(tasks_delay1, "Delay but no overlap") - -tasks_delay2 = [ - {'label': 'A', 'start': 0, 'duration': 60}, - {'label': 'B', 'start': 60, 'duration': 20}, - {'label': 'C', 'start': 80, 'duration': 140}, - {'label': 'B', 'start': 250, 'duration': 30}, - {'label': 'C', 'start': 280, 'duration': 70} - {'label': 'A', 'start': 350, 'duration': 40}, -] -plot_gantt(tasks_delay2, "Delay but overlap 1") diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index 55934058..c7f46d22 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -4,15 +4,19 @@ project(TestScheduler) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -add_definitions(-DTEST_VERSION=1 -DGTESTING=1) -include_directories($ENV{HOME}/local/include) -link_directories($ENV{HOME}/local/lib) +add_compile_definitions(TEST_VERSION=1 GTESTING=1) + +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../external/googletest ${CMAKE_CURRENT_BINARY_DIR}/googletest) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../external/googletest/include) set(SOURCE_FILES - ../tests/scheduler_test_system.cpp - ../src/scheduler.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/../tests/scheduler_test_system.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/../src/scheduler.cpp ${CMAKE_CURRENT_SOURCE_DIR}/scheduler_functions.cpp ${CMAKE_CURRENT_SOURCE_DIR}/gtest.cpp) -add_executable(test_scheduler.o ${SOURCE_FILES}) -target_link_libraries(test_scheduler.o gtest gtest_main pthread) \ No newline at end of file + +add_executable(test_scheduler ${SOURCE_FILES}) + + +target_link_libraries(test_scheduler gtest gtest_main pthread) \ No newline at end of file diff --git a/gtests/gtest.cpp b/gtests/gtest.cpp index 87aa5214..06d763b2 100644 --- a/gtests/gtest.cpp +++ b/gtests/gtest.cpp @@ -1,5 +1,4 @@ #include -#include #include "../tests/scheduler_test_system.hpp" #include "scheduler_functions.hpp" class SchedulerTest : public ::testing::Test diff --git a/latex/delayed.png b/latex/delayed.png deleted file mode 100644 index 659ad2d55494957ea8825900e24bea1cdc532570..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35226 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
)#MHE{`cp%Ln5d|m3W)x4Gj|GLzEH>-_6gVy z?cxZkI)1^%<}?*9pQ4INeS3Q~N{;ZSDf#)q=+`o6*ZcYTxs`W6kB%<$LjCq-c-S-? zC4b0`q~zpi04UnW3tqf@IS9toaT(k#`BhkXb_HR0A(I22j-;q>DS6#J{t?Y%-z0hI z)DL|w{IkplFOkrm+C2~64KGSmcaKv&5h-5yA;8MYT3zzpPQ?B|9B-F%0BRS9cX+ho z5)v>|{tnh2p5cnBDy~VKTaLX*>H7j~+G`)*juOsrffy`*wmnr`<;z^lg?ZW8*}}F< zI%-MECMG7IGq3G*zru-ubmx8c4Q6du($hPF!q`J4ZdKI+*(bjNK<)mz@DAuR%xAjfGf9lAU|;EF5NK-BiMP zjGf&)qsG&7(~r&~(=ybiUcSEDkx%rP(jB!uf~Q3tI0l@l;JHUx~Qw2 zQ4;Lqx493(T3$`dRA9Ur#zNL-HZIaOG--OT3Y*&OkT>lg$yT}42GrM177*U zk2m(LJ`v3kbn>g~`*3X9Kn3m7%7HE|4K&76O@>F zD+;>02XUfcvIFF3)fgH;!)>x_+r93)effIj+pze-V>zR5(l;>pgvj6m_L8-fZ))APtm{`xW(KX7%3#-*I_b)CJ1yD+K4 z2vGTVE%(*0DZHI|_Sasxx;Kc4Ei1MDvpN3zFI?A7yB$~cw=AP0rG2Vf&MH# z9UUEm^4&XHbaaOX=;#jc|9Tjn>790Qf*=2KyQQr2D?I#uwfqbIee}s)LpM4)#)ruN z4`j(_+QO69-4zVnwVkcqy&k$+(K$YJf8yZm?qK`qf~S?Mo2|2xh~PCrVg3t`-QAx^ z2?_nj-vymrZGpU zg#kWe{*BAVYt|CQ0WpJG&VANzRqZB>veV2)^?^q99 zmb`wjIx*r%M37tiM#5%5gAXxov(>BpniV{b!iE2Qocb$@ApP%u+;F*3%l7Yo9MpJn zKYpMQ|JHq;}22qr3a4vCAm+e z-l{Y4>FI1N3^Mea`}tMfyAqY5_TH{X4!H-Vzpt6wGS|3N@7}%8=g*(-b$A{eY3LpLIS#>>+8P^3bH5T49kZ$nq&BAovK1j!^7qQ0ReWy)daXFhdv{IX2RYUmHzng=*r5< zJsLjH_RA}V@^Bs=9%Z4brRVUr%*urd)fisg&NmltM@L3J>=L|q@us@`Zjp?v?8N+h z?g=(2ZXTZO3yfTF58pp>mmP$ko^PU~)70KeWxGwa$IAy+8J$iKNOdt-DygT&=10_l|vQ3xmcSilG{mJX0~}AsN}_uP2ck)Y8&& zUE8fa!rqO(th&}Ny*NFU6sU(cBdo#qW4#uK$euGZGj?QL+*?7@oQ>f?^FkY<-h&6p zQts0a#&08w`1)}*9^`g<+(T%@m@v6deo>xdnh=eoL zM(dQjT9NSP!`9n!{#(Wel$ma9i3MF(LAZ}0lfno-)mpQ zpwTHkJq9sC=4R;bB3te9@^ahnpPr%Sizzy(iVVn`U0ht^C7css@VJ!ihN{XtySiv3 zeRG!0C%?e$oOs59ti-2m|2llwC}h6Zj+B%BC5Um@z5n2m6OW0BvgBLdii)pjcvxmC z_wIEM5qup>ngqSgea+FhjZ&B-x8UC^Pa(9XriOE-O=4JQdwt%`Q9IYDIIxH~mx6-fZGJ0YZ<+{;SfJkAcfZ(< z)cNt@7uP}kCr>_lB$b=G$Ao0S_#~I5d_Msnc|D72^T7s|S^Prvwv*#&(i-K{uenWK>#zj#5bJ8hn2)$%qtI9Lk; zjc$p9;bkr^K0!e>;}VCCx!%J44u9kw@1?!SHc9?hPM3CX={eu|*Y6zT6BAZl zp3~nxz^;oskD9(nqf*piy>``woMvKY$HNc%&wn1})z3?S<(mV0SqBy+35LRbW6;Zf zd9==`!18q@<4L&I?^nwn^CCZ!Aq0u}tXRI6^EYb4NKg(k$|MWb>}Yk8ddJR*JG_aA zh}c_A+Rrj9v_{RO$F8*q)gZr@x(CAA(AwYI6@!3UY)?@`MkGPf&9(IrBRzd*#(hk8 zm5-bM&T@lYN6O0z_nDNYC@!q$d>?szVPU~2|ItebgBcP--nZ4|Hq-WYR@MFCA`kgK zfQzC#V$}?f0xu-={CsfFz8gWN4tYF1@b`*9et$ssbI6fj>CQZT{@-%a;pCq)jXeE7 zzTC#wi>}O6SVSb|&6^AA>gtdRe7*k3Sf1#Zm~@C0yw|TAsHwFozjEO&8w-zo^CtPt zo8NrBkktr}6Qk1|smK@;DxW?2^SSiGnZ(3IbQ;96Y@KW^&jp63RR;Xb0;Ux@Fr2Xv z*9esdzaMVo(-3{5n>>91|7kwz?b{6aM0>)oSLqLV4O}Zw=NOxr;el`?y>a-489#Ff z%*n*WL|xGFPqmTy$&W8!Z*<%=d)6P(b>hq8gydiUz7RUP|4qsEX(1%@x%z2zC{8iOtSk>pqH>9da-Royp;w4t-cSKtMODFlC!}Akyl-5mz z^5w|cp~>eZtrzo7DI+n>+q(?re}0hZlt`?QxgMmzwe7{4{z|?&a!J>FU*b41GIB96 zFc66taMLAu&Jff9;XuyS{OyMp8pusIQ%qw(SSS<%NAl!MhJQ>Uf`G)crO%~XOW z{W&q^+j@Czk(Kuw(5J*4OMV&JH%XWOVUk;&7{$S{*)-|Atfadb;ykfgqnWeb%jsY4 zQh6ZaRkuy8@XN4xPPiqWAF0cB@@|Ri3HREI=hH)vli2p}=SdO+7@GMo=pwf%H8H#H zyG~9{yv8NCS0~u)MA{)e*#k~8Dzpx}XmPv4T1OA>kvjD;)uy;N+7P*MOpRLM>4`pZ zc|#hDcs%a&RmCZfXI*~4Oom-11b!9+AB zq_7^>pVDBxlP0^1;`!EfTVGg&HXT|{|HO;ZoJi!}yj6kPJ(bI^oK%dugO2uGMjQFd zDuwaBeC)WW))y$HK-?|5bKa|bniMq4{J3gLfLYMh!B@tr$=| z+8^!4dFmaLE{)|R6g`NmAcm1s81wRKTqlB!N}X~6k>(l}DrTxD>6JPSMnj;xW>Igj z(Uq#i7{(%^2nk2jw`)Ea>l~A2rFE<)Vo9jw!v%|)MmsQ63FhN@FS%YikvmX0| z_`d4&N8y~)6ACR8iz6B9VmZvy*UIIyLK6w46}PHnW6%MbxAp6?XcBHki}D1W&rP1y zwU`z?zMihz(&0%(h5_^T8fLxsR8_SBHpPqDri7i705s@7J4C3Ik&zL7@QF?t-Rq#& z5Y8rM-Fjx1YQE14cT~g@N3x%wu?o@~#-y2T3}d}8GM0q-N%Xc-^p2&6711Vo-BO|; z_!ki=y!^sYX6&R;*M9t-Y8YRP{@a2g>JJ_&N{MLyS7~PWaqn8|-mh)aYfX!o?i7_e z)_KX2QO|2qSc&b>*=a-Bz}^(tr5yyTUy9QDqtI!!eB{|>7J1t?H@1m!%kAtK3qFnO z5J4JC0Y)}j3L}VoWohZ7U=3j8Zpb?_rTy_wOpZiplV%rG$X1!{nbaGuIn{ne<#vY- z-$lO?v(GwuuGD^`sf&JX?OVZ%ASN$i!w@t7TeW7FFDtW)JEu(r7^QrO5PcJiH5Bn$ z=%@?ji(fN{Zf$SRF|0S=R?mE_(`voTl@fk0qpJD41ZA`OEIO}!x;%1TnM;hhX^@xUSql(LH{M)+ce#O`o`Hcd;qu`}ImyAPw?N^@304g%IXAZ@Wg#yu z%f8^OQM1yv8W*)COd5A+!#@)pi{i4fvqTVL{hHRu9t$jGlNgsvstwtip$xyuyPwJ1X24J z1*E+VhUEwKI*yDwuDifmdb#vOS+YpzRle69nf=Y9`p$M{)gz+r; z!eZa2bhnZ>zs$Pq6UY;!9aY2q`Dq`4k@0Ab%++<)Z`xwmoU~0r%mk~ki!?0K9X~~n zHC&#o>pi&azNK3>KIQS3l~1yVXvHx$*iL-lurn%uUM$d{m%Q{ug@tYtosfW=o_-AB zhcX#(qZS-8d5S zmNQp6KG|1g+c0Dv-Cd=kU|Qj-VEjjfala_eK+Srprba##r=@w+hR7!;miuX}I__Ak z!0gJGOaA29NRyC5)QBt1{SGC}{g<=N?tZLlv(7cG)I%fX9)LQiJkY0@n9@~a1#MR+ z+sIZ-ygC{)o$19W+UzaX--F|yTdtN42WSIw%{8ALpJ=UXS@Ccy9?F|FSJ_)|iZ8Ir z6tpqXtf))LHulU`e451TZ9b?UP*A@2IOP)Frz^1d{vk)T>w+yz{n|aJzHYWK`x6B8 zV*IL@Mkj1d19k>{2%>>;8FE9n7Rp<*+UCWkw;bxfe$CQMRTRdwi914pe2Sgj*%Shy zsUbhJW6#Ihk1ih`^MvAt<|IvY3Z&eo&LfF=!(Zxm&)_5e;pPX2vIRBbX2~c2b+n+v15jr7-uSt>M(30+UO_| zXVdxgEzy>qf)7n6XH9OYU5N^)nMB!HGI5&#OETW_?BEe3D1ZF;F|cZWq+5i(I`535 zaNL?3g{w$lIZcIuorAccXuDR?X7sI`;J3#+2Px{NRi5wIICV0oQYBiWv-}vP$feXa z%3m74+RbA79jzPu>ruVRkG$o1>QY{22hK~@)G;nS(bfWNFRrZ2tDOglGo+Hsw*{*Ssua}kSyF2C5f9)T(%USFH+dme9|V8^B( zVYCm(Y?v?^oiz^Gu@spZ@QG>fsK3n;7boR$ahE+}3UyN4A!_mCwG}owMb#5u?OiBb z?i6!&xq^a%wE=b2?n);C63@AJ)b;Y}!=|xq11lK+?YET~g+gQ&Jn0|BzTyTen(SFj(Cq^@o?nAg1B8O}LF*nA?p+r4~kvn-zE z(9C~%KjuTq8;bq?-U8K!d+Db%_ZIWf`U6giHa|1JESA=MsA){_G@;m`SkRXW8A~dtq7+}5ymvHrLN0$Lg^725BqK&vy0NX-FsgK} zb4(A~FQdc!ikMu02CT<5KeF>?CXh+ff{kQQ_QiadO|u)u@(WK`!d0}rbHuk#uUCm6Gd4p-;g{NmJiNr=yonaDw zIHyQ8mKMms-s-kJP=8^f)jIsz_;TQ_fJFyn0Er_hZ%AeydwaroYnDI+?rfQ>QOJLe z(K8C()_ZtbaY}3zzf0)&m`Kz49SLLUk>I4~mR&&9Nqa4{dYInolT=W{uSaJ0{=!!nwR>GC@!s~fC3LB3yBV%k2T&r1fpb{*Y0Bq=S~M3mhS`eo7!HLxYp zUnPip*Va$sch)alSYOp8xZdR59hus)B_5DR_;B|@U2*10lyWy+2lzBE1ao|0S> zFk>kDiCED(H-}TH9+GmMv|Gk;Pk6w*Ry@czz`|YjX_pQ#^WWUmWpR z9#vTJJ%a2hpA)C+aP^7T1yrpwp6~JAeWTm+qQi#($h-Bj%H!b~OR8{744+g&ytV9< zn`Se$TcEN#!^rB8iI>#z6(r~3CZ|N~G@Em3f-rsqCdDfe98xZO&--++{I7AplpZ|f zb&5q+cE!3^F@S=Qd-ajKCsA>738 zc+fVU->rU==lGiIl-G(~&BlARj*_n@Riu1rZ6?W?L3VGKOE;s^esdPmU7@{o_qd|1 z6BCSbsTIzZk58s4om?B;v9i+@(*d{=#R)vL3Dl_?v4W;W9#lO6^J){IH+29OI|_~# zIt@z2wN0LrBbSK`+KFSJNLigC@`;O+EBG(YCtS*G*MmAj&SCGPTB5psXYVR`iohwx zkedvlXtwn6%TcvNy}8%gD5s%6V2fwFr2nS8*)qB6vDg(UVv7<$#lQ>5Fh8PJErNtC z4K}8)>`mEQPiTh`)WMN$Yvd(*lh|&?EpghWxU3SLhRuws5U=#w-c&)~^7q$i-<~~k z217}fDd^3&P>O4__E;Q(Wj)_HQ0^w?_u~m|ad>!A>@jVY1dv^KqB-Umz+FeAOeQ`A z00U@%P|B-_iMY%oHxU{zv=Nl}o}dBSl=`8j{n&0qVZ8Tq+~?mECrK?N+!U4E`7P#} zk>>?7U-iq>;bZuKS3aYO*vxk>YgN|LPoxyEjQiP%8tR`Ze`Kl z9M%g}SrK|K6ScO1El5ybRVeV_!G!Gm&kfWU$ULV1pH02qv;Do}VnA!$d zG9Oxfk*V|;9?G*8SlIg0%&_Rz@8)W;cnsF;byn*Bol`qu&7TQ@)8#&@xKio;k9W~) zo~c`?%%_Tg!{swCiN5y&qq2lE(a6HsP?fneD&5j?mRZf&2c-`Zi?NyK1Co<2t%$H)HN^ zx4hU^MSuQ9#n!2zVQnbqjI7MEv}9ab-_7*mkE>&3s?azWCdQ8-R?{_h_RKD}-gzMJ zfjXmqU%_kIPDyDqsn@WEeNWqh?5L@-r4Yk2lNYGVooVhXo7#DKH7Uv7{KZOhMrmp3 zTLI$?81@{e!HN|cO&9oJQcYkW#=k8=Qk&qrfshJoNOkjM4L78l@+TytlzeLG?0{9s zttyoqE0P9bFsoYS`b40aM)=0D!qZW@r`~n=>_Xw>>glQ#QQo0aYB^o&`pl?vUU_rR zP*aE+xs1I z*GqmmWYJu)=QaNHAjl#yo^w4P;QE@!D)_82GcuYR8m2O~@2aXs!99T>b6H-#22&E` z!hiel2JCC$&tz@ zBhRHg=NgZDoe5`Ic;ekVd~~<#*n{fLNsRc^2~{A0?%w?iNTAO=R!$-$mk*74_Vd%;tltCUeUs z#kTML`m}?)?90d?2oSc|t`73VYc2SJ)b^cG1jZ664GEPU(Wi^H>lBl}&8+5tjK z20)Lv%_ji^1bS`mJh&0M(^XIV`1-c=_Zyp5xNE}JZmSN5Kw0A0-~8pv?Y+IdSqeT$ z(7f8gbU5SwIglLN-d#)mv|InawvpcnpZ>;*m!w3jZc%b6=7FZ#8TUFq+zz6b5kKXx$Sz%o zsK9{yVBiWQ7p|ks@E$Xrmq8LU1|tfnNQHu2_>V!K8{vYq!9yTWUQxk&^{U4H-bPI> zHCRROw180>Tn2IpaMy@gqYdU|t`>;1fig`nFvNhI?C0-K0%;gCrlr|P1?;c}ib^w- z#b#z^20V<#TC`UlB9K*ROXjU%6tpxiaDE>8XbicXTSd4}|QM`|)YO zoC`Ko@MvckY{b5Mmjx)qkdmIB&Lb?W1@%y0nM-PYC`)RLg}xnW3X5}8W0%VnlJ?8~ zw)Np`nO$-`q3@o2^>S(nao8-`<<*~m_N?&%P`v%>cw|se5UA|7jugOOuwd?YbaVuV zhm&DSk=dqh@#*Jfc~HqxfqPY8#7SMO-d00`_R|9g9TxCP5$Df}Sl@fL6)GK~X*f{j zQ~1j-zpO!}#w#wa_u?=^C&sxtJKv&VvS%;WJRra6D@TOPBU7*GZx_M3pu%uYyqlbB zOd}gRPc)8xUlL$}S=emZOx^%(zh~z|pxWdX5z#jHTYmY-!h$xF znPdkB02DR16z2$Tmp2?;nwpw+-C2<;v4R3T8irTcZ+G9G? zRk1#+lag|N-`lO$^0m>(Ix;G@nCRo2)cHTqD(g<)cw@xRZ1alZF0twdcm*%5?zbk*VfjcG3+x!KPDS zsjRGJVv+!Os~BoM5>{Uwy$1Fho=cZ*`ED%e!t52f&uGmL5sYC86f-l)ZH}Krsw_}? zqGDrXIkTbOLSn(*k1l-|k!dWlJqbRrckj;Z{uql87g^?PA`*p&Rci09 z-kfNOr66Vy0OQ*2{8&DF?a`l{$hHK5l`PJsp4bf*CQ;i?PHMq`nH$VjW+aDFPT>9? z*?h!Az8!X|?bpA4M~%Mb!fhkIv%T%%{aG06Dn!Y-y452Yu;ZPckum$;Yp8=Lzn?%| z509tVHI#5z!~Oeu57iYXV8jS2%E}$zKHO&dmLhyLSvT)-fg!P0B^`tyr-JC{bI6Z52*D*owJu%jd{81CpVQqs739qyjvgFc<>oL5!fO5p1t-jPg4m>BAMl zPAE0>^k-gew%>X61G7Gp)NFsew|Z~OzPz%M+QgMqB-k=9#s%0C%!uSwze(|S_(I3N zq9$wR?iY-5S*c19vw-6dhy7ZoaC5c7cf*N+O-jc+aJM)iVI`oF+UO%2uv3QGSjcs* z-c$r@j)bGS*+a%dO|y^*qvPVTVGCzNNI)Dfi2+--Y_cfPpEC#`dm8)_uCA_H;HUsY zWOsp;YF&N(WI2Q3OTsBmJVKa&XA23_zy%rG)DF85Wf6zLePg9IY*JEEjy^sQ!i&)q zF-adbe)W&hW8nN!^qB2#@;J9b|6Nb>$r1Y6&o7VZ!p4i?H`D^74PrX1-rw6k7cdQ} zgh=BWgNfW1^<8(^1y2TQGR_83f*IK51}fyh>uA*+o!?t8@<|(%b(#BU_w}!aK5y4s zJFbXuXiupnRZh5=Id`W0+*ydB3bSXmzq4Qj(pAZxyHM%1A6r|qd6f$VB~5x@)e;I z@};gfmL_IMNe3Z7k3DcFzd2SYiRu}iNWtOwk=P4h=0bGymFAi2VI78Y#O#f-?p?Of(*kKPzUJHaZY=($oYvmjIjigJ}>F@XIS!5xRo(%*+-NNvvT7E~I~J z5iE_WXvFtXIAAH<>k#E%%Z!;Qx$o-i7RGo*~(4Z!-e@nO+xs77kw@S?T{ZLKkL)qzhLHWgxDOGM3P%Mkt9K;T4V zZz{f~Jzr4XqEQ_)$0%fZ7VYBWzuG3DOF(&G226<^t5V=V02qR}6v&-M=N@BzN7p7bmO$Pj>;lbgX_C+sNxA zpSlvCn3$I+>zi})#o>5Kw+y6Egj}8lVG#j2wCA`!)gcfp)|fq_Mslj1L_Wu^}Z1h8H2j)`f7QPp&Jb`-c7t$(Ui z!o1ktx?I>V2C-o9ZiE3-3TJIv-DBgymWR~>I1v>UrCfWX3nJr$2Q1OxhzNbKi+gzP zgtCZ?Q>h5jnu)VXZ1OM3Mi{E{K-b4cSisLjh5 zz^IjwkPr>w&jz!!^aSw5cE)yJg$LHe)HGM#Hw11T_Nw*nOfKiVVY$-K%^_ahz1i|O zJ~<6dU;X*wUSeX5?R=w^Vp8h~7Bx;lRq#_FXPd3NR^X*nhEOZMW{+ z`4dS^bqzxhTfkmQ(NVGt^iTf2{;7QWLr{x4ZH96N7vx ztF-4mF!PXiH-_wotB+8Mmuc#FbpJF9Jgc& z|E{-+8u@%kQc|)PY&F&X^R&9Wsk=UHi3$O`+vZ$cnXDEU@O1RS&!vO^To|luu@pAk z2VZn|io&t^p8PLErY$7MF45qkPfO#htE-!th&3mdyG?Zil#nTX4ZdIp2V9#204C;X zEWWxk&$QBg>HAG&HzS1uh-A+1Y2^RJ-_u$e&AWf3*OMjgFrY*=nv;0qr61>^*RR+P zmQsuM`e~@~;fOQBLm*a6L%eOFb)NzZq7Q{Jve^K6tAQs+8*mp13RDOx_rVq7<3`HT zybai;1HwE4^pUz7@MKB5+#AdH^QV9R{o&mj%^jAQy17Tb5MH-77M%yDfE~}QB z@a*aNZI7h0gr2M$5em0%JxBT`Kv)7Q{1%|sqVO@)aNs^cSXdY;(M(pVt8W{NoL?Do z3I1(OjtQ^`JArd`TnE#M9dM)HCad0+xv|7hz{HIOLY7jEWOtP>n*oo9!>fgYtFi+&S!dSyW?hZ+YXm z7;LQS>T2Xek#!4v@JunqtP4u=?g|fkOvyOYjhmp7o?;O&D*A@BR+tigZR&Tf$rX3( z8(8AXT>pcO&2jh2a95Z1!-o&!WqnH!7(6AuG31Mf54Cr@s0bc%*j;MiXVQlRbnEtQ zG52W=3=3*#Xb9PpTkG>!$cD`nihkI(sNPt0;Bc(@A$i&T-PJAIZ|X)OwqaEV38cLj z>lOGx|5u@2E8|UI(R2vs%eTRR_yCC4#&j5p!6Ih}>G6Nrhe22o(na zoNibE4(lS2@&MZ@1IB!{cCIc-(=Y+9S1nN{8=5fe;T_}>a0-1aZ|v}0BxC}B!NP~- zz?@uBPjql=Z-yDO1rIw4@)d1!Dv9s<_3KK^d?ajI-pNY4<)ykUpC7~(>~yA6R7Liq z!QewEe#EARtaw-nlJuUvnFEbr-RA^{ml=$?hO z=EkS@4Ovx_u^dyhqzm}6!O+%Opi6S~&HZ&@v%HOpib60GLeQ`zhbNLEg7w@+UJLmRw1ZN0cfQ`5XbDQhQHSbORj>Fl077T zB=Lcz)E$KV$3s;<6^nBH#5!d9;|lWjqZzIzLp0$N6VsL7U5oPQ1)7Kkd6xS1^~p`C zDMKTp_$mSc2A2o3njwh>q-GC|BM{Ol40zT+kyI^3mL6<^*|LAS#zqnbsh9cr?*Wlg z(5`o988Na#3k(#m&65W=<}G!YS5vP~ipetrnL{!2y)W%K_oh%}c>lESIO%$Lyzc8N z<|CFQgYbC$0wb9>`eWDa^e(T=au-nVAjx9WLsmm0?W{s41htE z+As8tAm(>puZ9n-Qto#F6sGos_dn-nt_H2t9{OSYKHYd0`9EXz&|#M>AX_4EG!1(s zGdcN!fJxa^qVvFiCwQbQS4dfWdX#@EAjnxWNzR`$`-Z=$)jOx5EV{YnAJ8_%CnGcP zVSn*K=-j@A@4orD$hsZwaG$mafW;>0v317H+h$=Fiw#SPjrJW%dSO+?4(yg9~6*Oq>yegp^JsiS}dfgNfPg;H2q3se|DTA4ub8$#EF#!Gr8R|gUArSB%h zAaRg3+7JBQz3?B>29MQ)>+}oUf4E8qZ9`Ez4jotfJ5%yMk(fhN|M3kNBw)Rmv0dNB zt^He?j;V6dC#Hd{?}D0+#LA&i&*Y^FfHRuFJD)k4Z@9D zcXoD;FD|Orvb`FM7UnMa4-i2`754HM_9j@AhlHr+2acg9Ov;8+nKl|2!$;H_bMBaF z%DkaGuRM8PzK7jVtp5Gdna_KT_O*jYBiQL*P5nxL4AJ~S0SD?6&B+5W8cIac-#N@! zdIRZ%K^~xK{Q5dPTu(#e4QJE;5T6`|!~YQ_p2Ca%dMD+PgLK+0I{p1dx*Lhm)A(=M zf-d;r|HBrK|DU}46Vgripi1A*9O=dwKMBM(ND-$PzyKxH$oF*gub;hMKZoppsq^Lk zwPE>r;ZCJQugg?HJio8k7`rdW!0?bMofB5wD?u+qyF>aOG*i6(kCqrZ4fktb{y)+} z`tlK=B&dkGdkbym2V))~987m(B**+9!zq`aZ6ar0Rx!)1(5L>CCJtQZg@J#HF{<>; zRRMJ$g6g<02CBGh=i%y=wY6wYXeCgAw#O`BP{v0_K0we$a-n3&HV|jsprtdQvQp&i zjPPfY5(c! zn=*~!axyL?9d*^;niJWKeTokEpEZhaN={S__fN5E&0lPGPQnt1dcnrbzLHhIP zN!Ow{fYHDjUj#D`q`Ain1Lfk>VV@~B!1VWQZEX*oKNoz2qX3nQkqx4ffGtQwsj$l# z5kJ6FtJzJc8U+D@PvFx|Vq#M_x33u4oeJM`up1XTCdzB4 zCOW0CpZ4b zEnfzovVvElIVsBiiCUkB-j|nL#?vk6AmWt-($$7QPNaVXMr9^e;L zH(*&tIt8I;4aA`nw7FhwU}s5yym5}u`{c76FOk)4>(3Eq8r$2*;?i$hNh!ZOW0mpy(-SOwI@hYIGpct&wNCEy ze;a$^u;JQWGb2S&Ixe*uV3#G`Ol+#xG> ze|U({FlDkI$Qrm{dCvNb^tGUuEVoZc2C*uR7%S_v#^IgYgR1#da-8o>KRxxz^2D$o zUq-?s#oco~OzeXjsuotG(Tds<4#i(j?qxJzNY0yw|pnyOGXXWNiQX>sK+S zfu1>`xeYz#zI=y7@wWFVWipKd+*OS!!eMaYJF@%sUfiDo8f?%@W?6;V8p&RL)p2AAJK zucIxn1;F{0TbM#yGW6x8gGEOf4M@7!y6r5|m3x#4!%Z2|G_RI5vtis%J1uW2q-=Cv z>TaBVCn>O>r^$`m zv~>saZpLz)mD#Tk#$XH?U`xVo>_+hQd08V!y224h;W>yBh(20^aJk6*xUYqglw@yl z&@=qo3*fu11E`RUH+Lqx1Ly`~5$RfPEkQaik!Dli{Bu#J+$h|8lKcwG9yDsufUV;G z@aW{O&1}m{L9DdAIgVYzKi%_1gZ;=ir}$H}LX*LPw!K(tEC=@EQTquoIXN>}3nYjp zr+)kGN&guAHbIPI9-ZNtgOytp&@R4`>ty_ez*J(HTa{->{s2%37U~FSe3x?8D3pjn4<@Ht_{VV^;4# z|2S~@(YZk{wtwY=J?>RxN8$w{hWo;W8&H{&N9#gpzVg_?YX3?ITx*s1_wn&Lz+=Y~ zQ&Uq(A8sEBi9g$RzH8>kbvM$z(LLFmp|yNtyFOl*;jsM=P3;wVBFo!41lw~V@w07x z@5IRN^R5-amBxGVbBG`ZMTb4a!cy5QQc^}hM=(1gwGHf&Xxcs{&b$p;&7C{QWiA$o z00eqZjfh`E6)91{ArHHjpgQ=3?^wy6LkTb8PFroe0?pF^FIk0Ypi ztgNgEf}a>4=Y|R)$$vc#6g&7AXZ8}5wi9-|ntiu@tLgPU$sSgwEgG%*BP*z^43+I4 zaj?fey$C<*MfZvA<;$1Z&^(WJ!ts{-Z5EU`^tv`!gtN;Fnwt+xlW{PC*REY-uCc>J zM{`2sY)A$A{6q}qeJ)?D;9ay}lDeL9#EOqyrx2$qI?t>kYak(^O3Z3s-$HI< zD;hE2)iG_oLcERL1YaO!EcFVuNWHF~Y*OwXiTi8~@dXg*4AeqfJF7&b3>PpgxRals zkF+EiYWFPWo>otK6N$k(h79S)F7IpMXF}Y?XlQ0ak7=(V<+6+OOGiUKJTmk^T!=pW z{4Wp@vFQ2UCzdYr(oi$VouhbuG*#Yc%Z(gLPa<0(R z{c#c!z4YC?cfUcYMjLP=Dx+E1*hqyo>Tbv0?O0k`LWBF|;XUA{vdwD(j6Obi27H2J zhYdWIcP8mCg{=2?51A9i1uzUVJr647^p#U}sx zLUb_cJG?OC`c{UFbH~g8Ghs3#oe-1|$K(G&oec zE?3R5vFQ%%){{jpxA@Gi__UBD^#v34n+hcKmQM+p>aCwRQQ_A@pV-2)k1dZe_Hhm~ z_}x}cXdz%~(dW7s|IK6jL-!+O28|t$gcVNr1I0?tGsOaxb+=+UU}AEzxuZi9>QoBo z{7|vIw_#F)!VhK{+G`(HpDx9gd!!TF91k|f*6bFK)IMm#?e!9$JZzrLf5)b>C24l# z{Ohauo9I1~_zlOyp_)N~f6hK`J<--v{S24#$xs9@Cnx9X?ydteWNXQ%PdAhi!WFCo z^t%L7?m!sMdvo8JaSLtLoPEcZ(ao4;A@?Jb{UqFeIT95?>2xXqRqh@f1cI=+U@$bA zUOihnB46P?nYNd2NhoLZC-Njsw~kVMRZ=WXq(cI+32Z!=u1S`B}7oCTd(1KDwFz28}&FMMtwgZ>#~ z%gFvl2~H<7GJLMjQ}uotFUj`~dVE^vUiCAYyQO}#LK{&!wKd*Y^14)x$>qRRm&~IZ zZc2={BX2TE$*Sreta8`X1Kr(=>b7Z<80Ti7kKn`$6lhCrRK!M6=K`dK7C3cUWo1^e zwr~K3LO-M*o%}}%F?ZbhgbRc+YU2w(uy-r2IaI-W|KI!FN4;=j&An7msmt zM%hVgYK|y1%Vy9f4w? z6lg*?ga?0hk0YG?fSlTqq7dS~5c{QXRkv*2k10>j-%QlrsOst+`Ne^Ztjp{OdrF;e`EQsJ;i!Omw_V*P;-CYbyMF=ktr|SfePi zU9WFeCoxHTYtyYF!F33C^!V{2Z#-vMYmeTL$*6BofD>v!G5Y3Bn3pb zMVvPv*FJ_KZg#k)22^bvFqo>mJ3hJOv@qdLt>Ve|8kgCnamcEqjYk%EJ&6uXWkxsh z(cMMAU-mV}Go1PZn0T!w^yT6wBe&ROyb(360z1|Pbj!j*osqhl;6> zG*9j>D)jBmu%;);bK!&Ra$3qtb&5Ys1i!1K%{O!vTkTc)^r>$D;8~**&@0v+a3jbZ z37S?|cAST{P3Q}s&P)nGgD(6JSsW4%S^*V&E+nA4*1p|loPp95X(Mml1EWJzON;6` z2`3$x_x;Y|57Pyndd?o1#3gVPdwljtgQShoVBvo_>{}i_SAuqfkW5NzZc4TiS=r z_88)^EvnAgqKz;|nX=N)%-!Ih)X4Y!MR4m< z8><&#qqayShd&RxuaRC62JWI$0uocNwY0TYchTnGi4Q)rDSSpKxv{ZSFytWTC?P!t z;A3#t$JhQTt?>~#z6a^1huf~gjv@Vk|3K%7zS9K!S)N8*`+I49IH3u_6ZCTlW&1n5 zIF)f)#3k%U=7rpi^FA+&-%xxbsz&jTKC^Am8#gE4H7K@=flv=fIvF|l0Eq5U8-*Jq z;+BoSA*L`m(WvBnvwurdlQMLQm(Z?ie2paeM&LdhHBt%SfD{;~4RL_*giYBP(~^0E zC=?*cdf1WAm_&uVYzZDub1~05ZkIt4^|(6yKs>G*Y~_# zIP4|b-79GrQ><_;Q>)e*9N>G00@MbQ_U`Eg8mpTvhT=ZQmz53~k28_)m@Nvd1lI%; zPb@H%MBn@n3umPOFAKt%3b^^uX(L~PsDR0hs{MSb8}5VK0c>N6iR<8K!g?={Za7p0 zl3~ikTt@GJ&qW<5h?4W+x~%d6Ce8%f+sXF#d>~#JGyZ)%%MG+UZC01C^!b&(#P`!inwp$hXUQ%+Dd|gvlDh~9EG*FY9f!MdR z@L#SwjqG=DZr+CYA=)n@B7&UU1&js{2gmIQ+4XnU#Kc^HKJj9p^&lP(C>gkv5lH~) z&j4djAMSN%Xg3lX0bydpST;(56>%J@GF0+A$K2%4*U(M-Nc-*SFSpH}r98udZP(`z zeS6#c-{|c5P=TniXJ|-MpdH#xw#GrzeaW;hm|adm%NY#v@VWt@NIX0v5d-N9^yk)UNJ+dPSb_I38vKz6-wlDn2!J*uLpZVw zPQrlY)(I^)oP#}?Pd+_80J8j5a~qH%&PuswA)#`||H2I&t7-dvDft5Ul>f0> zZ=6rkAK>$|<)ttFpC`yd+Hb36i7pD;5_runn{Di5YHe_s!DeN{PMJ?wm3{Zy%2<3a zb7??vfrtog?p)!7ser~{g+~_$34ntvJSJON*yICtgu<=?%z%?-kQ116K!}&wg+WJ7 zNcxfc3v_TpZbk&{SWeKApf$tve!S>4dw_quUS3{>if9CngM-T!J~7btzg?{UT7djf z#^_t46>IPQnrN#4xC-b({-D5dPkB9Uqc(aatUc*}#+pqCz2XM?r~QmpES&1NFe8y5Nak_F>2j&>CnRmYHdjXdx>r z+ZK-jG_e#Lc=sQs|CA^0$r0Q%fGp~`x_p*XL*`}W6XD@GCwJ1;afSg6V+F$arfh?u z-ASM}yD{<)8W&Zy!35=kxUPU4teS83n5mzoA?N3*zU42c3Ym)?|1$cnpDoZnj1%0+ zvw+mRJOuy#y5y{fFQp$SAeFF_XUWiv4#h#_`0W$nYRz{mIf0&W_BDCkX%!Rc*_6`O z_C*`+RG<$X zCcqRz05f&~WJ1L0tc-@HBFG4_Q?$Tc8bxNT(t9}t>}DVO!~Z#Xs?7ZA$O!{wHP4du z0D_8osJ}J|Q<6V@EHJw!;D>c_yu8G8NyFB^x;0mXf&}__Nsej%S99kcR%5>Q@igo( z>}E*h5PO6&R7ehqVJOS7Qi+gb8byplXJyd5Gp4W_HboPejY1(6Md%7eq0=Z$g{DSQ z=|m^?=dNbEp&_dv=%NzXTn5<44srD#xFo}r40#gAjS+|(0;LVi4WIKn)%Vp!ieD@~v2 zudi)*7+mc=qQKe6Into8e|W*Mfq5nqXDhWU>wbuR;JY}|Vekp#kIY`(e^EAmU77~- z^yP)PZyHCdtE+psyW7Q3`{IYP$El~(VeX3HfNKe2vmu=zk}@+AWnAf69|`l@UVaLv z>#LxJQxEDO-I<9{VT^;hl8101>-561qa__y%gdHqI)?1C*X!Bhbj9l7@y7*)gX*5|GuS|-i)E(5G{L_}xVgIQ zMGMa&?iE$o_k9g6fMiZ;`JmoeM-Ptz1gvFy(3=g}5oub;uTJUSMNKX8>)+D4 zjO}2!Zrajx*(r+DZ`Zz#{KRhIqPOpZU6Zcw-ksm0-}$P;>5BqNH>U5XD!)?qHoB`K z^M3vPC9ctN6CoNyjX4q1Lrv`|0y5sl18r@{yR@#cVLfd;tg*zZjrZ?}>D1UTFaD#w zGhb}-**5yMa%|MH!&|>o$^m<9;+7c{@z%6HE~XmoYoj=H&Fw+DIs*p|s(%vpO`iV0 z!f+vciPbf_-mv{0eyX>$D?8S$id`qbj*g%IcdvJapI1}Sh*>p#owVhzR;j!jw5Hti z9^#(dWR+^Q1Aiu}bqf1^_1-@-<7{v4`R~6jc6!xGrAvxo4}}$$1x`_yDg9L%Q`6Ei zsj1P}nc41|5%?dck;bu@7$e1p5Che7d%L+!G1OlcKSUuKhyZg5cqGm4_7GFkPt?_I zYiw%D_tcGlX!tBp&Hs99K-8$sZf<1;`d@r%ff@f&ca2Z~@|l&a5||PE-C7dZ%I$lc(js>WSwk9iLRu z*iISu=hyu8EC27;foiwS2m73&=t@gTnZ<6FP0#FNs#APJLI_Q3?hU2S3PQb#UQ>^A z+Af>>6}uwh7K%%;6YOkyIbvThMX=CONPQN4*K1f^TvF?NDwj)VIIS$9IwXFNR*pTC zP32{%!_du1!I0Dy6%`_5x*U+Gx;L3(B8Li_ZR-rBtmnID-}V_Wz`23ckj?ipGIG&w zMaXsLZw4 zA^l^6#4zDcoS-e~dV&zX%?Hh=Q0sgD{3Dd!9`GGzx zcs!0U19;*vIsL$*jC8aR_ZvCm#OSHGBMzqLnSRY?EHO(&xN8_OGX!k`&`w(Z zBq!ef%*ZI)iJkIBD>pDjB)>iS8QwgJmS>Y0#aYi}M0?dkR_-;abp9pEVKEv!5cJXc z6u$My5}!I*-`qWn!%=B1i!GCU%#%RZ`<6`xC#GC=)L*k^%^^g{mM@Ta(g0l+hJZ!7 zA@kICOR^-&H6bC$wOF4Un8y>frQ#f&pGq9qIY>y*zRb%Hr+yBoPRgvq$C{%In^Q+x zxW~BUSqW1^eLqaWC$bpi(<4INXY}&u;-}WO$ra2MDhvoAF)?ve{`JH}goSIvEjy|I zJ=swDpDTO?o=@dk$EqDyr)+t?XUU>-c4H)7bzyq?iy);E8u)10F@&Wh1L8lXu9ryI zKD~Pfo!&2VT+}TD@1pFo?LB;+z}n-n{|GpaL7jn|2|#cNhJ{``?bfa7%ok4(pL#&} zxz7u`tEj6EFL?7sG}2r5P5sP5ja70dP=1TSMJ8uWUF*?hg-f?4c-Hi6*&>z{5}L$J zeKkJ5#NK>Gr>DSwHeh{5R0;|!CSrZo!f9ZB9_3l5_b)NG?ex^1o>>g&(oaIyigTA0 z@EgwnTUjvNhDxP_i{9?$rJ%E7DcrLhDN-%;)Ml)(}rE9VJ_h?%IdjW5B&CSgxO`bdw(*^SS6TrXeqYf^< z8SCxsZH-N3pFp=rcjhn#8pA~mDAV8cZNXNFA7IfLp$?yae6mg3bL1e6k3tAMPqs6H zkw@oGpgiM+OuE)|!yb4UmWjbDcGIu2qb#jk3{8Z1PxETx&em%uPo8|R3}3ayf&~jS z$FF}FDsz;aOFxjC>`sj8Ruic(K zo%h9x_Ktc*86T&*H6Sqs~%y ze!XSOV?>G?T3Tnt3IT%>tF67cNXyve$nE50kz#W4l-K-r{~81nq!m&)9TO81m?|e6 zh26V$4wm$;<8PfSI2XHZ(9Wu;$I1$LzL7 zq8Pw;7hxZ#zobj|gYVwC3l=9Ac5!uz+!j`$-}m-iVSyWroo-6k9>tvu-71%bGg@Z6 zjG)U9r8f(k!>*Nq3%V3#45V?|5JQ8)>W`awNs zDyMl91$gBf$2-aB*q8dm|z$5XRP9ny}f1na1xPW@j-Q3+-M;? z;GD%`asFE=z>XYgOTMkViQmgRJ|W?LMuz^vr|0d{T=0l;Y4T3^O#>V;l7Yi+vovYv zb<)2f7xhd(wA5bntdH=}XLrVz$Xvt$V*{IzMVneR@rIbvFhzxqv_0n(dz>mAy@k!u zvFof)&g>>8+#>JVfIMI1;1Y!{I!LyCjb6PZWhSJRv~XJfV77?iOfs9Avpz{GDu1h! zzY!2&-ImCn$6f7|%c2${c=8eJL@I>KNzjoPTuvJyR73-D56?1&#YMKZhnL_xILGRe zGKN`e1059V974gz+R@>+u$(twCw2UZgHqHvs9v83R;e>k76-cT>?T8A?RSLtgIR^M z79#1K${&Y+d+hje5tJ{#;k`r>=LI=?^vFVyDOD5t@EM%nix`$GKFvGo34v#gFXlLR z^$G;TjO0+)+{guHfmg{p4(VFX5E}wO_OM^=E*2r2?x{V+P8dQOc8;hVLQXgSdd)^z zm-cy-6G~iZc~Hb>Z@s z7k7wkX>xdH(3!!p>)X~w-88L<@@<`q#`{29VtQ0!&G&)YrXx`YDwbDn=N?gyXsXEWs5=Z5&Ea>I9CTn=9lWGr#MaLDA}tI9XxmftT6%ww(^why#W0( zyO?k~ZCVmO#fcim$sYl;B1t>qDPzQ(IjF^2gQw&(g)qAG>M7&hy}Tk3w+loIY9hPy zzE|h40`}_No4WXOFRz^*eHo9~yG3)@kNmt&;p8q&^78OFOL46kR0Nt_8c|8u7G#RE z`0M5z9`)5!VJso;O1%QHlTtR=#qa{s`&k0?F{$o$Hve?=t|}R_laIwj%hZnkg}K1NGX%}#I}-qp9&?wZ*xl= zo@}^w{d%{jH;Q75UM}sKd~cEO=hLQ5qxlip-q+i==j=1MaRxWvl8TRf5tZ~YSkdBk zS2VgB8pGTFEJYaqE5>@bW;PGUH`TSZSQTN#UU73C`K>K2MmPop02gn8<|w-%3i0Vn zCuMWiYS=>$(KWJx$zDdin(B58&h{F)!+8xwAKou+XlRJA48Jq@S}tV~aJ@4|a7TN_ zSr{kFvhwnXq}JE2O{m$~nv6va4_4*)K`I1XVfx$nzp|(lgIBh^FcW8JKD-+h)P~CaQ(c}IO604^k#A_9)waCj9Glj!kp!;|0$I*Vo#tbBY&v4xH!S{r?&b29TFUF^ME_n zeX(UrdAMuWuJR`r!?6rl^SHhDd*H?v^8i+_To;I-#{~O}4<1NN5B-yP8Ffe0jLejovyKz?B(qDmX)KQTai0ZA-Qr z7KaHg?y?IP$dOB_AwYx8H%B~Oz-;sij=qxSy7HFl6{p8DL;=RGK}Oy`K=Blr^u^LL zMf!et@3wsfH&wji(zs2V+CuBYW;bESj6pSritlmmmwJX$9Yeg0_kHi(aZpdn_vAw= zD({2gJar+;X>8?KuixB#51l>fU9KQH{Ah}Bq5a3N&tFTIYTsGWDrPO1 Kd11!NZ~hH^KsS{D diff --git a/latex/main.tex b/latex/main.tex deleted file mode 100644 index 2f13a1f4..00000000 --- a/latex/main.tex +++ /dev/null @@ -1,24 +0,0 @@ -\documentclass{beamer} -\usepackage{graphicx} - -\begin{document} - -\begin{frame} -\frametitle{Scheduler Implementation} -\begin{columns} - -\begin{column}{1.2\textwidth} - - \includegraphics[width=\linewidth]{intended.png} - - - \includegraphics[width=\linewidth]{delayed.png} -\end{column} - -% Column for the tall image - - -\end{columns} -\end{frame} - -\end{document} \ No newline at end of file diff --git a/latex/sf.pdf b/latex/sf.pdf deleted file mode 100644 index 1ce092c4fb28724cc2a6f756eb93bc44d1f6bca9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70959 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 CN%1)V diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index a0a3f47b..00000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "smartfin-fw3", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/src/Doxyfile b/src/Doxyfile deleted file mode 100644 index f3a09eea..00000000 --- a/src/Doxyfile +++ /dev/null @@ -1,2854 +0,0 @@ -# Doxyfile 1.10.0 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# 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 -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the configuration -# file that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# https://www.gnu.org/software/libiconv/ for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = "My Project" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify a logo or an icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy -# the logo to the output directory. - -PROJECT_LOGO = - -# 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. - -PROJECT_ICON = - -# 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 = - -# 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. 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 -# U+3044. -# The default value is: NO. - -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, 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 - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = NO - -# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line -# such as -# /*************** -# as being the beginning of a Javadoc-style comment "banner". If set to NO, the -# Javadoc-style will behave just like regular comments and it will not be -# interpreted by doxygen. -# The default value is: NO. - -JAVADOC_BANNER = NO - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# By default Python docstrings are displayed as preformatted text and doxygen's -# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the -# doxygen's special commands can be used and the contents of the docstring -# documentation blocks is shown as doxygen documentation. -# The default value is: YES. - -PYTHON_DOCSTRING = YES - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new -# page for each member. If set to NO, the documentation of a member will be part -# of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:^^" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". Note that you cannot put \n's in the value part of an alias -# to insert newlines (in the resulting output). You can put ^^ in the value part -# of an alias to insert a newline as if a physical newline was in the original -# file. When you need a literal { or } or , in the value part of an alias you -# have to escape them by means of a backslash (\), this can lead to conflicts -# with the commands \{ and \} for these it is advised to use the version @{ and -# @} or use a double escape (\\{ and \\}) - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice -# sources only. Doxygen will then generate output that is more tailored for that -# language. For instance, namespaces will be presented as modules, types will be -# separated into more groups, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_SLICE = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, -# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, -# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: -# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser -# tries to guess whether the code is fixed or free formatted code, this is the -# default for Fortran type files). For instance to make doxygen treat .inc files -# as Fortran files (default is PHP), and .f files as C (default is Fortran), -# use: inc=Fortran f=C. -# -# Note: For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. When specifying no_extension you should add -# * to the FILE_PATTERNS. -# -# Note see also the list of default file extension mappings. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See https://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up -# to that level are automatically included in the table of contents, even if -# they do not have an id attribute. -# Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 5. -# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. - -TOC_INCLUDE_HEADINGS = 5 - -# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to -# generate identifiers for the Markdown headings. Note: Every identifier is -# unique. -# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a -# sequence number starting at 0 and GITHUB use the lower case version of title -# with any whitespace replaced by '-' and punctuation characters removed. -# The default value is: DOXYGEN. -# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. - -MARKDOWN_ID_STYLE = DOXYGEN - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# If one adds a struct or class to a group and this option is enabled, then also -# any nested class or struct is added to the same group. By default this option -# is disabled and one has to add nested compounds explicitly via \ingroup. -# The default value is: NO. - -GROUP_NESTED_COMPOUNDS = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -# 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 -# speed. At this moment only the input processing can be done using multiple -# threads. Since this is still an experimental feature the default is set to 1, -# which effectively disables parallel processing. Please report any issues you -# encounter. Generating dot graphs in parallel is controlled by the -# DOT_NUM_THREADS setting. -# Minimum value: 0, maximum value: 32, default value: 1. - -NUM_PROC_THREADS = 1 - -# 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 -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual -# methods of a class will be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIV_VIRTUAL = NO - -# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO, -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. If set to YES, local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO, only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If this flag is set to YES, the name of an unnamed parameter in a declaration -# will be determined by the corresponding definition. By default unnamed -# parameters remain unnamed in the output. -# The default value is: YES. - -RESOLVE_UNNAMED_PARAMS = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -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 -# 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 - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# declarations. If set to NO, these declarations will be included in the -# documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO, these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# With the correct setting of option CASE_SENSE_NAMES doxygen will better be -# able to match the capabilities of the underlying filesystem. In case the -# 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 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. -# Possible values are: SYSTEM, NO and YES. -# The default value is: SYSTEM. - -CASE_SENSE_NAMES = SYSTEM - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES, the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will -# append additional text to a page's title, such as Class Reference. If set to -# YES the compound reference will be hidden. -# The default value is: NO. - -HIDE_COMPOUND_REFERENCE= NO - -# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class -# will show which file needs to be included to use the class. -# The default value is: YES. - -SHOW_HEADERFILE = YES - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo -# list. This list is created by putting \todo commands in the documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test -# list. This list is created by putting \test commands in the documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES, the -# list will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. See also section "Changing the -# layout of pages" for information. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# 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 -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# 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 -# a documented function twice, or documenting parameters that don't exist or -# using markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete -# function parameter documentation. If set to NO, doxygen will accept that some -# parameters have no documentation without warning. -# The default value is: YES. - -WARN_IF_INCOMPLETE_DOC = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong parameter -# documentation, but not about the absence of documentation. If EXTRACT_ALL is -# set to YES then this flag will automatically be disabled. See also -# WARN_IF_INCOMPLETE_DOC -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# 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. -# 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 - -# 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 -# will be replaced by the file and line number from which the warning originated -# 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). 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 = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - -INPUT = - -# 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. -# -# 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 -# read by doxygen. -# -# 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, *.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 \ - *.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 \ - *.py \ - *.pyw \ - *.f90 \ - *.f95 \ - *.f03 \ - *.f08 \ - *.f18 \ - *.f \ - *.for \ - *.vhd \ - *.vhdl \ - *.ucf \ - *.qsf \ - *.ice - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# 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 -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (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, -# ANamespace::AClass, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# 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. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. -# -# 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. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -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 -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# multi-line macros, enums or list initialized variables directly into the -# documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# entity all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see https://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# 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 = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs 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: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefore more robust against future updates. -# 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). -# 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 = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -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 -# https://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use gray-scales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# 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 -# consists of multiple levels of tabs that are statically embedded in every HTML -# page. Disable this option to support browsers that do not have JavaScript, -# like the Qt help browser. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_MENUS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to 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 -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: -# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To -# create a documentation set, doxygen will generate a Makefile in the HTML -# output directory. Running make will produce the docset in that directory and -# running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy -# genXcode/_index.html for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name 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. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -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. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# on Windows. In the beginning of 2021 Microsoft took the original page, with -# a.o. the download links, offline the HTML help workshop was already many years -# in maintenance mode). You can download the HTML help workshop from the web -# archives at Installation executable (see: -# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo -# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the main .chm file (NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated -# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -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 -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location (absolute path -# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to -# run qhelpgenerator on the generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine tune the look of the index (see "Fine-tuning the output"). As an -# example, the default style sheet generated by doxygen has an example that -# shows how to put an image at the root of the tree instead of the PROJECT_NAME. -# Since the tree basically has the same information as the tab index, you could -# consider setting DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the -# FULL_SIDEBAR option determines if the side bar is limited to only the treeview -# 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 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. - -FULL_SIDEBAR = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -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 -# the HTML output. These images will generally look nicer at scaled resolutions. -# Possible values are: png (the default) and svg (looks nicer but requires the -# pdf2svg or inkscape tool). -# The default value is: png. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FORMULA_FORMAT = png - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# 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. - -FORMULA_MACROFILE = - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# https://www.mathjax.org) which uses client side JavaScript for the rendering -# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. -# Note that the different versions of MathJax have different requirements with -# regards to the different settings, so it is possible that also other MathJax -# settings have to be changed when switching between the different MathJax -# versions. -# Possible values are: MathJax_2 and MathJax_3. -# The default value is: MathJax_2. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_VERSION = MathJax_2 - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. For more details about the output format see MathJax -# version 2 (see: -# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 -# (see: -# http://docs.mathjax.org/en/latest/web/components/output.html). -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility. This is the name for Mathjax version 2, for MathJax version 3 -# this will be translated into chtml), NativeMML (i.e. MathML. Only supported -# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This -# is the name for Mathjax version 3, for MathJax version 2 this will be -# translated into HTML-CSS) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from https://www.mathjax.org before deployment. The default value is: -# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 -# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 -# This tag requires that the tag USE_MATHJAX is set to YES. - -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): -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# For example for MathJax version 3 (see -# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): -# MATHJAX_EXTENSIONS = ams -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: -# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /
Node, -# Edge and Graph Attributes specification You need to make sure dot is able -# to find the font, which can be done by putting it in a standard location or by -# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the -# directory containing the font. Default graphviz fontsize is 14. -# The default value is: fontname=Helvetica,fontsize=10. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10" - -# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can -# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. Complete documentation about -# arrows shapes. -# The default value is: labelfontname=Helvetica,labelfontsize=10. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10" - -# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes -# around nodes set 'shape=plain' or 'shape=plaintext' Shapes specification -# The default value is: shape=box,height=0.2,width=0.4. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" - -# You can set the path where dot can find font specified with fontname in -# DOT_COMMON_ATTR and others dot attributes. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTPATH = - -# If the CLASS_GRAPH tag is set to YES 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. - -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. 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. 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. - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -UML_LOOK = NO - -# If the UML_LOOK tag is enabled, the fields and methods are shown inside the -# class node. If there are many fields or methods and many nodes the graph may -# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the -# number of items for each type to make the size more manageable. Set this to 0 -# for no limit. Note that the threshold may be exceeded by 50% before the limit -# is enforced. So when you set the threshold to 10, up to 15 fields may appear, -# but if the number exceeds 15, the total amount of fields shown is limited to -# 10. -# Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag UML_LOOK is set to YES. - -UML_LIMIT_NUM_FIELDS = 10 - -# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and -# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS -# tag is set to YES, doxygen will add type and arguments for attributes and -# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen -# will not generate fields with class member information in the UML graphs. The -# class diagrams will look similar to the default class diagrams but using UML -# notation for the relationships. -# Possible values are: NO, YES and NONE. -# The default value is: NO. -# This tag requires that the tag UML_LOOK is set to YES. - -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 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. - -DOT_WRAP_THRESHOLD = 17 - -# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and -# collaboration graphs will show the relations between templates and their -# instances. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -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. 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. - -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. 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. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH tag is set to YES then doxygen will generate a call -# dependency graph for every global function or class method. -# -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. Disabling a call graph can be -# accomplished by means of the command \hidecallgraph. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller -# dependency graph for every global function or class method. -# -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. Disabling a caller graph can be -# accomplished by means of the command \hidecallergraph. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical -# hierarchy of all classes instead of a textual one. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -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. 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: -# 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). -# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, -# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and -# png:gdiplus:gdiplus. -# The default value is: png. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_IMAGE_FORMAT = png - -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. -# -# Note that this requires a modern browser other than Internet Explorer. Tested -# and working are Firefox, Chrome, Safari, and Opera. -# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make -# the SVG files visible. Older versions of IE do not have SVG support. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -INTERACTIVE_SVG = NO - -# The DOT_PATH tag can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the \dotfile -# command). -# This tag requires that the tag HAVE_DOT is set to YES. - -DOTFILE_DIRS = - -# 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 = - -# 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 -# command). - -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 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 = - -# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a -# configuration file for plantuml. - -PLANTUML_CFG_FILE = - -# When using plantuml, the specified paths are searched for files specified by -# the !include statement in a plantuml block. - -PLANTUML_INCLUDE_PATH = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes -# that will be shown in the graph. If the number of nodes in a graph becomes -# larger than this value, doxygen will truncate the graph, which is visualized -# by representing a node as a red box. Note that doxygen if the number of direct -# children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that -# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. -# Minimum value: 0, maximum value: 10000, default value: 50. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs -# generated by dot. A depth value of 3 means that only nodes reachable from the -# root by following a path via at most 3 edges will be shown. Nodes that lay -# further from the root node will be omitted. Note that setting this option to 1 -# or 2 may greatly reduce the computation time needed for large code bases. Also -# note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. -# Minimum value: 0, maximum value: 1000, default value: 0. -# This tag requires that the tag HAVE_DOT is set to YES. - -MAX_DOT_GRAPH_DEPTH = 0 - -# 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 -# this, this feature is disabled by default. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -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. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate -# files that are used to generate the various graphs. -# -# Note: This setting is not only used for dot files but also for msc temporary -# files. -# The default value is: YES. - -DOT_CLEANUP = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will -# use a built-in version of mscgen tool to produce the charts. Alternatively, -# the MSCGEN_TOOL tag can also specify the name an external tool. For instance, -# specifying prog as the value, doxygen will call the tool as prog -T -# -o . The external tool should support -# output file formats "png", "eps", "svg", and "ismap". - -MSCGEN_TOOL = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). - -MSCFILE_DIRS = diff --git a/src/cellular/dataUpload.cpp b/src/cellular/dataUpload.cpp index fe2d626b..62545b97 100644 --- a/src/cellular/dataUpload.cpp +++ b/src/cellular/dataUpload.cpp @@ -66,7 +66,7 @@ STATES_e DataUpload::run(void) if (!this->initSuccess) { - SF_OSAL_printf("Failed to init\n"); + SF_OSAL_printf("Failed to init" __NL__); return STATE_DEEP_SLEEP; } diff --git a/src/cli/menuItems/systemCommands.cpp b/src/cli/menuItems/systemCommands.cpp index e105d2fd..bcd02c73 100644 --- a/src/cli/menuItems/systemCommands.cpp +++ b/src/cli/menuItems/systemCommands.cpp @@ -56,7 +56,7 @@ void CLI_doUpload(void) void CLI_self_identify(void) { - SF_OSAL_printf("Smartfin ID: %s\n", pSystemDesc->deviceID); + SF_OSAL_printf("Smartfin ID: %s" __NL__, pSystemDesc->deviceID); VERS_printBanner(); } diff --git a/src/product.hpp b/src/product.hpp index fea77879..9bcc8f95 100644 --- a/src/product.hpp +++ b/src/product.hpp @@ -4,92 +4,92 @@ /****************************************************************************** * Pin Definitions *****************************************************************************/ -/** - * USB Power Detection Pin TODO - */ + /** + * USB Power Detection Pin TODO + */ #define SF_USB_PWR_DETECT_PIN A4 -/** - * Pin for the Battery Status LED - */ + /** + * Pin for the Battery Status LED + */ #define STAT_LED_PIN A5 -/** - * Water Detect Enable Pin - */ + /** + * Water Detect Enable Pin + */ #define WATER_DETECT_EN_PIN A2 -/** - * Water Detect Pin - */ + /** + * Water Detect Pin + */ #define WATER_DETECT_PIN A6 -/** - * @brief Manufacturing Water Detect Pin - * - */ + /** + * @brief Manufacturing Water Detect Pin + * + */ #define WATER_MFG_TEST_EN A3 -/** - * @brief ICM20648 Address - * - */ + /** + * @brief ICM20648 Address + * + */ #define SF_ICM20648_ADDR (0x68 << 1) -/** - * @brief Wakeup pin - * - */ + /** + * @brief Wakeup pin + * + */ #define WKP_PIN A7 -/******************************************************************************* - * Peripheral Configurations - ******************************************************************************/ + /******************************************************************************* + * Peripheral Configurations + ******************************************************************************/ #define SERIAL_DEBUG_BAUD_RATE 115200 -/** - * SPI Flash Size - */ + /** + * SPI Flash Size + */ #define SF_FLASH_SIZE_MB 4 -/** - * window sizes are how many water detect samples are looked at in a moving - * average to determine if we are in or out of the water. Generally a sample - * happens 1/second - */ + /** + * window sizes are how many water detect samples are looked at in a moving + * average to determine if we are in or out of the water. Generally a sample + * happens 1/second + */ #define WATER_DETECT_SURF_SESSION_INIT_WINDOW 40 -/** - * How long (in us) to turn on water detection circuit when looking for water - */ + /** + * How long (in us) to turn on water detection circuit when looking for water + */ #define WATER_DETECT_EN_TIME_US 1000 -/** - * Charging voltage (mV) - */ + /** + * Charging voltage (mV) + */ #define SF_CHARGE_VOLTAGE 4112 -/** - * @brief Below what battery voltage should the system shutdown - * - */ + /** + * @brief Below what battery voltage should the system shutdown + * + */ #define SF_BATTERY_SHUTDOWN_VOLTAGE 3.0 -/** - * @brief Particle IO device - * - */ + /** + * @brief Particle IO device + * + */ #define PARTICLE_IO 1 -/** - * @brief hardware revision - * - */ + /** + * @brief hardware revision + * + */ #define HARDWARE_REV 3 -/******************************************************************************* - * System Configuration - ******************************************************************************/ + /******************************************************************************* + * System Configuration + ******************************************************************************/ #define RIDE_DATA_DIR "ridedata" @@ -97,27 +97,39 @@ #define USE_ICM_TEMP_SENSOR 0 -/** - * how long to stay in CLI mode if there are no key presses at all - */ + /** + * how long to stay in CLI mode if there are no key presses at all + */ #define CLI_NO_INPUT_TIMEOUT_MS 600000 -/** - * The default state that the Smartfin comes up in - */ + /** + * The default state that the Smartfin comes up in + */ #define SF_DEFAULT_STATE STATE_CHARGE -/** - * The CLI RGB LED Color - */ + /** + * The CLI RGB LED Color + */ #define SF_CLI_RGB_LED_COLOR RGB_COLOR_RED #define SF_CLI_RGB_LED_PATTERN LED_PATTERN_SOLID #define SF_CLI_RGB_LED_PERIOD 3000 #define SF_CLI_RGB_LED_PRIORITY LED_PRIORITY_IMPORTANT - -/** - * The Data Upload RGB LED Color - */ + /** + * The Ride RGB LED Color + */ +#define RIDE_RGB_LED_COLOR RGB_COLOR_WHITE +#define RIDE_RGB_LED_PATTERN_GPS LED_PATTERN_BLINK +#define RIDE_RGB_LED_PERIOD_GPS 500 +#define RIDE_RGB_LED_PATTERN_NOGPS LED_PATTERN_SOLID +#define RIDE_RGB_LED_PERIOD_NOGPS 0 +#define RIDE_RGB_LED_PRIORITY LED_PRIORITY_IMPORTANT +#define RIDE_GPS_STARTUP_MS 500 +#define RIDE_WATER_DETECT_SURF_SESSION_INIT_WINDOW WATER_DETECT_SURF_SESSION_INIT_WINDOW +#define RIDE_INIT_WATER_TIMEOUT_MS SURF_SESSION_GET_INTO_WATER_TIMEOUT_MS + + /** + * The Data Upload RGB LED Color + */ #define SF_DUP_RGB_LED_COLOR RGB_COLOR_BLUE #define SF_DUP_RGB_LED_PERIOD 500 @@ -126,110 +138,110 @@ #define SF_TCAL_RGB_LED_PERIOD 3000 #define SF_TCAL_RGB_LED_PRIORITY LED_PRIORITY_IMPORTANT -/** - * Minimum battery voltage to start an upload - */ + /** + * Minimum battery voltage to start an upload + */ #define SF_BATTERY_UPLOAD_VOLTAGE 3.6 -/** - * how long to stay in data upload without a cell signal/connection/succesful upload - */ + /** + * how long to stay in data upload without a cell signal/connection/succesful upload + */ #define SF_CELL_SIGNAL_TIMEOUT_MS 300000 -/** - * Max size of the window/how large the FIFO array is - */ + /** + * Max size of the window/how large the FIFO array is + */ #define WATER_DETECT_ARRAY_SIZE 200 -/** - * @brief Seconds to sleep between upload attempts - * - */ + /** + * @brief Seconds to sleep between upload attempts + * + */ #define SF_UPLOAD_REATTEMPT_DELAY_SEC 600 - /** - * @brief Milliseconds between transmit attempts - * - */ + /** + * @brief Milliseconds between transmit attempts + * + */ #define SF_UPLOAD_MS_PER_TRANSMIT 1000 -/** - * @brief how many ms is a GPS data point valid for a given data log - * - */ + /** + * @brief how many ms is a GPS data point valid for a given data log + * + */ #define GPS_AGE_VALID_MS 5000 -/** - * @brief How long to wait for a cell connection in during manufacturing test - * - */ + /** + * @brief How long to wait for a cell connection in during manufacturing test + * + */ #define MANUFACTURING_CELL_TIMEOUT_MS 180000 -/** - * @brief A voltage that's slightly higher than the max battery voltage - * - */ + /** + * @brief A voltage that's slightly higher than the max battery voltage + * + */ #define SF_BATTERY_MAX_VOLTAGE 4.3 -/** - * @brief Lost Bird Smartfin Z7 Product ID - * - */ + /** + * @brief Lost Bird Smartfin Z7 Product ID + * + */ #define PRODUCT_ID_SMARTFIN_Z7 8977 -/** - * @brief UCSD Smartfin Product ID - * - */ + /** + * @brief UCSD Smartfin Product ID + * + */ #define PRODUCT_ID_UCSD_SMARTFIN 17293 -/** - * @brief Set to use a hexadecimal product version, otherwise use a decimal - * product version - * - */ + /** + * @brief Set to use a hexadecimal product version, otherwise use a decimal + * product version + * + */ #define PRODUCT_VERSION_USE_HEX 0 -/** - * @brief Enable initialization delay - * - */ -// #define SF_ENABLE_DEBUG_DELAY 15 + /** + * @brief Enable initialization delay + * + */ + // #define SF_ENABLE_DEBUG_DELAY 15 -/** - * @brief Base85 encoding flag - * - */ + /** + * @brief Base85 encoding flag + * + */ #define SF_UPLOAD_BASE85 1 -/** - * @brief Base64 encoding flag - * - */ + /** + * @brief Base64 encoding flag + * + */ #define SF_UPLOAD_BASE64 2 -/** - * @brief Base64url encoding flag - * - */ + /** + * @brief Base64url encoding flag + * + */ #define SF_UPLOAD_BASE64URL 3 #define SF_UPLOAD_ENCODING SF_UPLOAD_BASE64URL #if SF_UPLOAD_ENCODING == SF_UPLOAD_BASE85 - /** - * How many bytes to store chunks of data in on the SPI flash. - * - * 816 * 5/4 (base85 encoding compression rate) = 1020 which is less than 1024 - * bytes which is the maximum size of publish events. - */ + /** + * How many bytes to store chunks of data in on the SPI flash. + * + * 816 * 5/4 (base85 encoding compression rate) = 1020 which is less than 1024 + * bytes which is the maximum size of publish events. + */ #define SF_PACKET_SIZE 816 #define SF_RECORD_SIZE 1020 #elif SF_UPLOAD_ENCODING == SF_UPLOAD_BASE64 || SF_UPLOAD_ENCODING == SF_UPLOAD_BASE64URL - /** - * How many bytes to store chunks of data in on the SPI flash. - * - * 768 * 4/3 (base64 encoding compression rate) = 1024 which is the maximum size - * of publish events. - */ + /** + * How many bytes to store chunks of data in on the SPI flash. + * + * 768 * 4/3 (base64 encoding compression rate) = 1024 which is the maximum size + * of publish events. + */ #define SF_PACKET_SIZE 768 #define SF_RECORD_SIZE 1024 #endif @@ -243,9 +255,11 @@ #define SF_NAME_MAX 64 -/** - * @brief Maximum number of attempts to connect to the cloud - * - */ + /** + * @brief Maximum number of attempts to connect to the cloud + * + */ #define SF_CLOUD_CONNECT_MAX_ATTEMPTS 5 + + #endif \ No newline at end of file diff --git a/src/rideTask.cpp b/src/rideTask.cpp index 1077ddd7..816bbda4 100644 --- a/src/rideTask.cpp +++ b/src/rideTask.cpp @@ -43,7 +43,7 @@ STATES_e RideTask::run(void) int counter = 0; uint32_t d; - SF_OSAL_printf("\nDeployment started at %" PRId32 __NL__, millis()); + SF_OSAL_printf( __NL__ "Deployment started at %" PRId32 __NL__, millis()); while (1) { diff --git a/src/rideTask.hpp b/src/rideTask.hpp index cfe8df45..6adda631 100644 --- a/src/rideTask.hpp +++ b/src/rideTask.hpp @@ -5,19 +5,6 @@ #include "Particle.h" #include "product.hpp" -#define RIDE_RGB_LED_COLOR RGB_COLOR_WHITE -#define RIDE_RGB_LED_PATTERN_GPS LED_PATTERN_BLINK -#define RIDE_RGB_LED_PERIOD_GPS 500 -#define RIDE_RGB_LED_PATTERN_NOGPS LED_PATTERN_SOLID -#define RIDE_RGB_LED_PERIOD_NOGPS 0 -#define RIDE_RGB_LED_PRIORITY LED_PRIORITY_IMPORTANT - -#define RIDE_GPS_STARTUP_MS 500 -#define RIDE_WATER_DETECT_SURF_SESSION_INIT_WINDOW WATER_DETECT_SURF_SESSION_INIT_WINDOW - -#define RIDE_INIT_WATER_TIMEOUT_MS SURF_SESSION_GET_INTO_WATER_TIMEOUT_MS - - class RideTask : public Task { public: @@ -31,5 +18,4 @@ class RideTask : public Task }; - #endif \ No newline at end of file diff --git a/src/scheduler.cpp b/src/scheduler.cpp index 17843996..552e800d 100644 --- a/src/scheduler.cpp +++ b/src/scheduler.cpp @@ -106,41 +106,7 @@ void SCH_getNextEvent(DeploymentSchedule_t* scheduleTable, } } -/* -void altSCH_getNextEvent(DeploymentSchedule_t* scheduleTable, - DeploymentSchedule_t** p_nextEvent, system_tick_t* p_nextTime) -{ - - uint32_t minNextTime = UINT32_MAX; - DeploymentSchedule_t* nextEvent = nullptr; - system_tick_t currentTime = millis(); - - for (int i = 0; scheduleTable[i].measure; ++i) - { - bool skipped = true; - if (currentTime - scheduleTable[i]->lastMeasurementTime > scheduleTable[i]->ensembleInterval) - { - skipped = true; - } - } - if (nextEvent == nullptr) - { - SF_OSAL_printf("No suitable event found" __NL__); - } - else - { - //SF_OSAL_printf("%c",nextEvent->taskName); - if(nextEvent->measurementCount == 0 && nextEvent->ensembleDelay == 0) - { - nextEvent->ensembleDelay = minNextTime - nextEvent->deploymentStartTime; - } - nextEvent->lastMeasurementTime = minNextTime; - nextEvent->measurementCount++; - *p_nextEvent = nextEvent; - *p_nextTime = minNextTime; - } -}*/ bool SCH_willOverlap(DeploymentSchedule_t* scheduleTable, int i, system_tick_t currentTime, uint32_t proposedEndTime, uint32_t nextStartTime)