commit d796dcdf8b8795e1cdf70e8811ac19c1d1ae0b31
Author: Thomas Schöpping <tschoepp@cit-ec.uni-bielefeld.de>
Date:   Wed Nov 13 14:49:56 2019 +0100

    documentation updated

diff --git a/README.txt b/README.txt
index 0757c3f..fa44345 100644
--- a/README.txt
+++ b/README.txt
@@ -69,7 +69,7 @@ CONTENTS:
     4.1  Adding a New Module
     4.2  Handling a Custom I/O Event in the Main Thread
     4.3  Implementing a New Low-Level Driver
-    4.4  Writing a Unit Test
+    4.4  Writing a Test
 
 ================================================================================
 
@@ -101,7 +101,7 @@ replace the used bootloader by adding an according subfolder in the ./bootloader
 directory. Note that you will have to adapt the makefiles and scripts, and
 probably the operating system as well.
 AMiRo-BLT furthermore has its own required and recommended software tools as
-described in its README.txt file. Follow th instructions to initialize the
+described in its README.txt file. Follow the instructions to initialize the
 development environment manually or use the ./setup.sh script.
 
 
@@ -112,7 +112,7 @@ Since AMiRo-OS uses ChibiOS as underlying system kernel, you need to acquire a
 copy of it as well. For the sake of compatibility, it is included in AMiRo-OS as
 a Git submodule. It is highly recommended to use the ./setup.sh script for
 initialization. Moreover, you have to apply the patches to ChibiOS in order to
-make AMiRo-OS work properly. It is recommended to use the .setup.sh script for
+make AMiRo-OS work properly. It is recommended to use the ./setup.sh script for
 this purpose.
 If you would like to use a different kernel, you can add a subfolder in the
 ./kernel/ directory and adapt the scripts and operating system source code.
@@ -164,16 +164,17 @@ system shell of AMiRo-OS. If you need legacy support for older version of
 AMiRo-BLT, you can replace the port value by '/dev/ttyUSB0'.
 Advanced users can use several connections to multiple modules simultaneously.
 Each additional programmer will be available as '/dev/ttyAMiRo<N>' (and
-'/dev/USB<N>' respectively) with <N> being an integer number starting from zero.
-Please note: Those interfaces are ordered by the time when they have been
-detected by the operating system.
+'/dev/ttyUSB<N>' respectively) with <N> being an integer number starting from
+zero. Please note: Those interfaces are ordered by the time when they have been
+detected by the operating system, so detaching a cable and plugging it in again
+may result in a different port name.
 
 
 2.2 - QtCreator IDE
 -------------------
 
-In order to setup QtCreator projects for the three AMiRo base modules, you can
-use the provided ./setup.sh script. Further instructions for a more advanced
+In order to setup QtCreator projects any supported module, you can use the
+provided ./setup.sh script. Further instructions for a more advanced
 configuration of the IDE are provided in the ./tools/qtcreator/README.txt file.
 
 
@@ -193,10 +194,10 @@ default versions for your system. Ubuntu users should simply run
 Each time you modify any part of AMiRo-OS, you need to recompile the whole
 project for the according AMiRo module. Therefore you can use the ./Makefile by
 simply executing 'make' and follow the instructions. Alternatively, you can
-either use the makefiles provided per module in ./os/modules/<ModuleToCompile>
+either use the makefiles provided per module in ./os/modules/<module_to_compile>
 or - if you want to compile all modules at once - the makefile in the
 ./os/modules folder. After the build process has finished successfully, you
-always have to flash the generated program to the robot. Therefore you need an
+always have to flash the generated program to the module. Therefore you need an
 appropriate tool, such as stm32flash (if you don't use a bootloader) or
 SerialBoot (highly recommended; provided by AMiRo-BLT). Similarly to the
 compilation procedure as described above, you can flash either each module
@@ -229,13 +230,16 @@ create an according folder in the modules/ directory. The name of this folder
 should be as unambiguous as possible (e.g. containing name and version number).
 All files, which directly depent on the hardware, and thus are not portable,
 belong here. Conversely, any code that can be reused on diferent hardware must
-not be put in the module folder.
+not be put in this module folder.
 
 In a second step you have to initialize all requried files (see below) in the
-newlly created module directory. It is recommended to use another module as
+newly created module directory. It is recommended to use another module as
 template for your configuration:
 - alldconf.h
   Configuration header for the AMiRo-LLD project, which is part of AMiRo-OS.
+  There are probably only very few configurations done here, since most setting
+  depend on the content of aosconf.h and are handled modue unspecifically in in
+  modules/aos_alldconf.h
 - aosconf.h
   Configuration header for the AMiRo-OS project.
 - board.h & board.c
@@ -243,14 +247,14 @@ template for your configuration:
   well as initialization functions.
 - chconf.h
   Configuration header for the ChibiOS/RT system kernel. There are probably only
-  very few configurations one here, since most settings depend on the content of
-  aosconf.h and are handled module unspecific in modules/aos_chconf.h
+  very few configurations done here, since most settings depend on the content
+  of aosconf.h and are handled module unspecifically in modules/aos_chconf.h
 - halconf.h
   Configuration header for ChibiOS/HAL (hardware abstraction layer).
 - Makefile
   The GNU make script to build and flash AMiRo-OS for the module.
 - mcuconf.h
-  Configuration file for ChibiOS/JAL to initialize the microcontroller (MCU). It
+  Configuration file for ChibiOS/HAL to initialize the microcontroller (MCU). It
   is recommended to check the kernel/ChibiOS/demos/ directory for an example
   using the according MCU and copy the mcuconf.h from there. Depending on your
   hardware you may have to modify it nevertheless, though.
@@ -271,10 +275,10 @@ to consult the datasheet of your MCU and even take a closer look at how certain
 settings are used in other modules.
 
 Finally, you need to build and flash the project. The compiler might even help
-you getting everything set up correctly. Take time to understand compilation
-errors and warning and get rid of all of those (warnings should not be ignored
-since they are hints that something might be amiss and the program will not act
-as intended).
+you getting everything set up correctly. Take the time needed to understand
+compilation errors and warnings and get rid of all of those (warnings should not
+be ignored since they are hints that something might be amiss and the program
+will not act as intended).
 
 Summing up, you have to
 1) create a module directory.
@@ -288,20 +292,21 @@ Summing up, you have to
 
 In order to handle custom I/O events in the main thread, AMiRo-OS offers several
 hooks to be used. First of all, you need to configure and enable the interrupt
-in the according GPIO. This can be done by implementing the
+for the according GPIO. This can be done by implementing the
 MODULE_INIT_INTERRUPTS() hook in the module.h file. For information how to use
 this hook, please have a look at existing modules. In the end, the interrupt
 callback functions has to emit an I/O event with the according bit in the flags
-mask set (like the _intCallback() function in aos_system.c). As result, whenever
-a rising or falling edge (depends on configuration) is detected on that GPIO,
-the interrupt service routine is executed and hence an I/O event is fired, which
-can be catched by any thread in the system.
+mask set (like the _gpioCallback() function in aos_system.c). As result,
+whenever a rising or falling edge (depends on configuration) is detected on that
+particular GPIO, the interrupt service routine is executed and hence an I/O
+event is fired, which can be catched by any thread in the system.
 
 Next, you have to configure the main thread to whitelist the event flag (all I/O
 events are blacklisted by default). While system relevant events like power down
-are whitelisted by the OS, any custom events need to be added exl´plicitely.
-This is done via the optional AMIROOS_CFG_MAIN_LOOP_GPIOEVENT_FLAGSMASK macro,
-which should be defined in the module.h file. Example:
+are imlicitely whitelisted by the OS, any custom events need to be added
+exlplicitely. This is done via the optional
+AMIROOS_CFG_MAIN_LOOP_GPIOEVENT_FLAGSMASK macro, which should be defined in the
+module.h file. Example:
 
   #define AMIROOS_CFG_MAIN_LOOP_GPIOEVENT_FLAGSMASK         \
     (AOS_GPIOEVENT_FLAG(padX) | AOS_GPIOEVENT_FLAG(padY) | AOS_GPIOEVENT_FLAG(padZ))
@@ -309,11 +314,12 @@ which should be defined in the module.h file. Example:
 When AMIROOS_CFG_MAIN_LOOP_GPIOEVENT_FLAGSMASK has been defined correctly, the
 main thread will be notified by the according events and execute its event
 handling routine. Hence you have to implement another macro in module.h to
-handle the custom event(s) appropriately: MODULE_MAIN_LOOP_GPIOEVENT(eventflags).
-As you can see, the variable 'eventflags' is propagated to the hook. This
-variable is a mask, that allows to identify the GPIO pad(s), which caused the
-event, by the bits set. Following the example above, you can check which GPIOs
-have caused events by using if-clauses in the implementation of the hook:
+handle the custom event(s) appropriately:
+MODULE_MAIN_LOOP_GPIOEVENT(eventflags). As you can see, the variable
+'eventflags' is propagated to the hook. This variable is a mask, that allows to
+identify the GPIO pad(s), which caused the event, by the individually set bits.
+Following the example above, you can check which GPIOs have caused events by
+using if-clauses in the implementation of the hook:
 
   #define MODULE_MAIN_LOOP_GPIOEVENT(eventflags) {          \
     if (eventflags & AOS_GPIOEVENT_FLAG(padX)) {            \
@@ -337,92 +343,68 @@ Summing up, you have to
 In the AMiRo-OS framework, low-level drivers are located in the additional Git
 project AMiRo-LLD, which is included in AMiRo-OS as Git submodule at
 periphery-lld/AMiRo-LLD/ and acts similar to a static library. When adding a new
-low-level driver to the framework, you have to implement it, providing a
-(single) header file in periphery-lld/AMiRo-LLD/include/ and the required C
-sources in periphery-lld/AMiRo-LLD/source/. By convention, all filenames use the
-prefix 'alld_' to avoid ambiguities. Furthermore, files should be named by the
-exact designation of the hardware (e.g. 'alld_vcnl4020' instead of
-'alld_proximitysensor'). Since AMiRo-LLD is intended to be usable with other
-operating systems than AMiRo-OS, it provides an interface for accessing
-communication interfaces and basic functionalities of the operating system. On
-the one hand, several types are defined in periphery-lld/AMiRo-LLD/periphALtypes.h.
-The interface functions, on the other hand, are defined by AMiRo-LLD (cf.
-periphery-lld/AMiRo-LLD/templates/periphAL.h), but implemented by the operating
-system (cf. periphery-lld/periphAL.h). For the implementation of the driver, you
-must only use those types and functions to interact with the operating system.
-If you need further functionality, which is not provided by the interface yet,
-you are encouraged to extend periphAL.
-
-Furthermore, all files must define a guard, so that the whole driver is
-disabled, when the guard is not set explicitely. These guard again are named
-following a convention, but instead of explaning it here, just have a look at
-one of the existing drivers and look for lines like
-
-  #if defined(AMIROLLD_CFG_USE_VCNL4020) || defined(__DOXYGEN__)
-
-With these guards in place, the driver will be omitted by default and needs to
-be enabled explicitely. In order to do so, you need to add an according #define
-in the alldconf.h file of any module, which shall use the new driver.
-
-Now the new driver is available and enabled, but not actually used yet.
-Therefore you have to add according memory structures to the module.h and
+low-level driver to the framework, you have to implement it, following the
+instructions given in periphery-lld/AMiRo-LLD/README.txt
+
+Now the new driver is available and can be enbled by simply including the
+driver's makefile script in the module makefile. In order to make actuale use of
+the driver you have to add according memory structures to the module.h and
 module.c files - just have a look at existing modules how this is done. In some
 cases you will have to configure additional interrupts and/or alter the
 configuration of a communication interface (e.g. I²C). Once again, you should
 take a look at existing modules and search the module.h for the hooks
-MODULE_INIT_INTERRUPTS() and MODULE_INIT_PERIPHERY_COMM().
+MODULE_INIT_INTERRUPTS(), MODULE_INIT_PERIPHERY_IF and
+MODULE_SHUTDOWN_PERIPHERY_IF().
 
-Finally, you will probably want to validate your implementation via a unit test.
-How this can be done is explained in detail in the next guide.
+Finally, you will probably want to validate your implementation via a test. How
+this can be done is explained in detail in the next guide.
 
 Summing up, you have to
 1) implement the driver in AMiRo-LLD using periphAL only.
-2) fence all code in all files by a guard.
-3) set the guard in alldconf.h to enable the driver.
-4) add the driver to a module.
+4) add the driver to a module (Makefile, module.h and module.c).
 5) configure interrupts and interfaces as required.
-6) write a unit test.
+6) write a test.
 
 
-4.4  Writing a Unit Test
+4.4  Writing a Test
 ------------------------
 
-AMiRo-OS provides a unit test framework for conventient testing and the ability
-to opt-out all unit tests via the aosconf.h configuration file. There is also a
-dedicated folder, where all unit test code belongs to. In case you want to
-implement a unit test for a newly developed low-level driver, you should use the
-folders unittests/periphery-lld/inc and unittests/periphery-lld/src
-respectively. As with the low-level drivers, unit test files should use a prefix
-in their name, namely 'ut_' and all code should be fenced via guards that
-disable it by default (have a look at existing unit tests). Before you implement
-a vast test, however, it is highly recommended to start with some sceleton code
-(just copy an existing unit test, scoop out the test function, and rename
-according variables etc.) and make it compile and run.
-
-After you have initialized the unit test sceleton, you have to add the according
-aos_unittest_t (cf. core/inc/aos_unittest.h) object to the module.h and module.c
-files. These objects again require an shell command, so the unit test can be run
-via the AMiRo-OS shell. As with existing unit tests, this shell command callback
-function as well as any further required data should be implemented directly in
-module.c, so it not accessable from any other context. In most cases this
-callback function is trivial, anyway.
-
-In order to make the shell command, which executes the unit test, available in
-shell so a user can run it, it has to be associated with the shell. AMiRo-OS
-provides the hook MODULE_INIT_TESTS() for this purpose, which has to be
-implemented in the module.h file. Once again I recommend to have a look at an
-existing module, how to use this hook.
-
-Since the execution pipeline is set up now, you can fille your unit test with
-life. Remember that the test is executed by the shell thread, so you can access
-any functionality of the system, but might encounter race conditions, depending
-on what other applications run concurrently.
+AMiRo-OS provides a test framework for conventient testing and the ability to
+opt-out all tests via the aosconf.h configuration file. There is also a
+dedicated folder, where all test code belongs to. In case you want to implement
+a test for a newly developed low-level driver, you should have a look at the
+folder test/periphery-lld/. As with the low-level drivers, tests are placed in
+individual subfolders (e.g. test/periphery-lld/DEVICE1234_v1) and all should use
+the prefix 'aos_test_' in their name. Moreover, all code must be fenced by
+guards that disable it completely if the AMIROOS_CFG_TESTS_ENABLE flag is set to
+false in the aosconf.h configuration file.
+
+Now you will need to add the test to a specific module. Therefore, you should
+create a new test/ directory in the module folder, if such does not exist yet.
+In this directory, you create another subfolder, e.g. DEVICE1234/ and three
+additional files in there:
+ - module_test_DEVICE1234.mk
+ - module_test_DEVICE1234.h
+ - module_test_DEVICE1234.c
+The makefile script is not required, but recommended to achieve maintainable
+code. This script file should add the folder to the MODULE_INC variable and all
+C source files to MODULE_CSRC. The .h and .c files furthermore define module
+specific data structures and a test function.
+
+In order to be able to call this function as a command via the AMiRo-OS shell,
+you need to add an according shell command to the module.h and module.c files.
+Whereas the command itself is typically very simple, just calling the callback
+function defined in the test/DEVICE1234/module_test_DEVICE1234.h/.c files, you
+have to add the command to a shell. In order to make the shell command, which
+executes the test, available in a shell so a user can run it, it has to be
+associated with the shell. AMiRo-OS provides the hook MODULE_INIT_TESTS() for
+this purpose, which has to be implemented in the module.h file. Once again I
+recommend to have a look at an existing module, how to use this hook.
 
 Summing up, you have to
-1) initialize a unit test sceleton in the unittests/ folder.
-2) introduce an according object and configuration in module.h and module.c.
+1) implement the test in the test/ folder.
+2) implement a module specific wrapper in the module/test/ folder.
 3) associate the shell command to a shell via the hook in module.h.
-4) implement the full unit test in the prevously created sceleton files.
 
 ================================================================================
 
diff --git a/bootloader/AMiRo-BLT b/bootloader/AMiRo-BLT
index 2b9a14a..9bfc7c4 160000
--- a/bootloader/AMiRo-BLT
+++ b/bootloader/AMiRo-BLT
@@ -1 +1 @@
-Subproject commit 2b9a14a2588e910d0e7d6bc3f77975d9ea70a6c8
+Subproject commit 9bfc7c44c293389adb8a33bb71f077efd10ee332
diff --git a/doc/AMiRo-OS.svg b/doc/AMiRo-OS.svg
index dfd03a1..be5ae4f 100644
--- a/doc/AMiRo-OS.svg
+++ b/doc/AMiRo-OS.svg
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="790px" preserveAspectRatio="none" style="width:1547px;height:790px;" version="1.1" viewBox="0 0 1547 790" width="1547px" zoomAndPan="magnify"><defs><filter height="300%" id="f1kd6u080ub374" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--cluster AMiRoBLT_node--><polygon fill="#FFFFFF" filter="url(#f1kd6u080ub374)" points="14,324,24,314,293,314,293,768,283,778,14,778,14,324" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="283" x2="292" y1="324" y2="315"/><line style="stroke: #000000; stroke-width: 1.5;" x1="14" x2="283" y1="324" y2="324"/><line style="stroke: #000000; stroke-width: 1.5;" x1="283" x2="283" y1="324" y2="778"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="83" x="108" y="339.9951">AMiRo-BLT</text><!--cluster ChibiOS_node--><polygon fill="#FFFFFF" filter="url(#f1kd6u080ub374)" points="301,324,311,314,1100,314,1100,577,1090,587,301,587,301,324" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1090" x2="1099" y1="324" y2="315"/><line style="stroke: #000000; stroke-width: 1.5;" x1="301" x2="1090" y1="324" y2="324"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1090" x2="1090" y1="324" y2="587"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="61" x="666" y="339.9951">ChibiOS</text><!--cluster AMiRoLLD_node--><polygon fill="#FFFFFF" filter="url(#f1kd6u080ub374)" points="1108,324,1118,314,1525,314,1525,768,1515,778,1108,778,1108,324" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1515" x2="1524" y1="324" y2="315"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1108" x2="1515" y1="324" y2="324"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1515" x2="1515" y1="324" y2="778"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="83" x="1271" y="339.9951">AMiRo-LLD</text><!--cluster AMiRoOS_node--><polygon fill="#FFFFFF" filter="url(#f1kd6u080ub374)" points="824,26,834,16,1035,16,1035,273,1025,283,824,283,824,26" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1025" x2="1034" y1="26" y2="17"/><line style="stroke: #000000; stroke-width: 1.5;" x1="824" x2="1025" y1="26" y2="26"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1025" x2="1025" y1="26" y2="283"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="76" x="887.5" y="41.9951">AMiRo-OS</text><!--entity OpenBLT--><rect fill="#D3D3D3" filter="url(#f1kd6u080ub374)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="104" x="22" y="724"/><rect fill="#D3D3D3" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="106" y="729"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="104" y="731"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="104" y="735"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="64" x="37" y="756.9951">OpenBLT</text><!--entity STM32Flash--><rect fill="#D3D3D3" filter="url(#f1kd6u080ub374)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="124" x="161" y="724"/><rect fill="#D3D3D3" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="265" y="729"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="263" y="731"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="263" y="735"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="84" x="176" y="756.9951">STM32Flash</text><!--entity amiroblt.h--><ellipse cx="228" cy="375" fill="#FEFECE" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="68" x="194" y="404.9951">amiroblt.h</text><!--entity AMiRoBLT--><rect fill="#FEFECE" filter="url(#f1kd6u080ub374)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="114" x="166" y="533"/><rect fill="#FEFECE" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="260" y="538"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="258" y="540"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="258" y="544"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="74" x="181" y="565.9951">AMiRo-BLT</text><!--entity hal.h--><ellipse cx="738" cy="375" fill="#D3D3D3" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="33" x="721.5" y="404.9951">hal.h</text><!--entity osal.h--><ellipse cx="828" cy="375" fill="#D3D3D3" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="41" x="807.5" y="404.9951">osal.h</text><!--entity cmsis.h--><ellipse cx="343" cy="375" fill="#D3D3D3" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="53" x="316.5" y="404.9951">cmsis.h</text><!--entity ch.h--><ellipse cx="439" cy="375" fill="#D3D3D3" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="30" x="424" y="404.9951">ch.h</text><!--entity ch.hpp--><ellipse cx="644" cy="375" fill="#D3D3D3" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="48" x="620" y="404.9951">ch.hpp</text><!--entity mcuconf.h--><ellipse cx="935" cy="375" fill="#D3D3D3" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="73" x="898.5" y="404.9951">mcuconf.h</text><!--entity halconf.h--><ellipse cx="1053" cy="375" fill="#D3D3D3" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="63" x="1021.5" y="404.9951">halconf.h</text><!--entity chconf.h--><ellipse cx="539" cy="375" fill="#D3D3D3" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="60" x="509" y="404.9951">chconf.h</text><!--entity ChibiOS_HAL--><rect fill="#D3D3D3" filter="url(#f1kd6u080ub374)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="125" x="818.5" y="533"/><rect fill="#D3D3D3" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="923.5" y="538"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="921.5" y="540"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="921.5" y="544"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="85" x="833.5" y="565.9951">ChibiOS/HAL</text><!--entity ChibiOS_RT--><rect fill="#D3D3D3" filter="url(#f1kd6u080ub374)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="118" x="532" y="533"/><rect fill="#D3D3D3" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="630" y="538"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="628" y="540"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="628" y="544"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="78" x="547" y="565.9951">ChibiOS/RT</text><!--entity alldconf.h--><ellipse cx="1476" cy="556" fill="#FEFECE" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="66" x="1443" y="585.9951">alldconf.h</text><!--entity periphAL.h--><ellipse cx="1171" cy="375" fill="#FEFECE" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="73" x="1134.5" y="404.9951">periphAL.h</text><!--entity periphALtypes.h--><ellipse cx="1216" cy="556" fill="#FEFECE" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="111" x="1160.5" y="585.9951">periphALtypes.h</text><!--entity alldh--><ellipse cx="1357" cy="556" fill="#FEFECE" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="71" x="1321.5" y="585.9951">amiro-lld.h</text><!--entity AMiRoLLD--><rect fill="#FEFECE" filter="url(#f1kd6u080ub374)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="113" x="1230.5" y="724"/><rect fill="#FEFECE" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="1323.5" y="729"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="1321.5" y="731"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="1321.5" y="735"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="73" x="1245.5" y="756.9951">AMiRo-LLD</text><!--entity osconf.h--><ellipse cx="870" cy="77" fill="#FEFECE" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="60" x="840" y="106.9951">osconf.h</text><!--entity amiroos.h--><ellipse cx="985" cy="77" fill="#FEFECE" filter="url(#f1kd6u080ub374)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="68" x="951" y="106.9951">amiroos.h</text><!--entity AMiRoOS--><rect fill="#FEFECE" filter="url(#f1kd6u080ub374)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="108" x="881" y="229"/><rect fill="#FEFECE" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="969" y="234"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="967" y="236"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="967" y="240"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="68" x="896" y="261.9951">AMiRo-OS</text><!--link AMiRoBLT to OpenBLT--><path d="M205.0271,579.0391 C180.0803,611.0178 134.6192,669.2935 104.3571,708.0858 " fill="none" id="AMiRoBLT-OpenBLT" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="109.8576,712.4156,92.0366,723.8792,98.8191,703.8044,109.8576,712.4156" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="31" x="154" y="659.0669">forks</text><!--link AMiRoBLT to STM32Flash--><path d="M223,579.0391 C223,614.0293 223,680.5023 223,718.4885 " fill="none" id="AMiRoBLT-STM32Flash" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="223,723.8792,227,714.8792,223,718.8792,219,714.8792,223,723.8792" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="44" x="224" y="659.0669">utilizes</text><!--link amiroblt.h to AMiRoBLT--><path d="M227.7452,384.2247 C226.9909,411.5277 224.7532,492.5332 223.6416,532.7757 " fill="none" id="amiroblt.h-AMiRoBLT" style="stroke: #A80036; stroke-width: 1.0;"/><!--link mcuconf.h to ChibiOS_HAL--><path d="M929.2997,394.1064 C919.3187,427.5614 898.7155,496.6203 887.9288,532.7757 " fill="none" id="mcuconf.h-ChibiOS_HAL" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M923.2636,384.7565 A9,9 0 0 0 939.4721 389.5923" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link halconf.h to ChibiOS_HAL--><path d="M1037.2615,391.5621 C1006.4973,423.936 938.3234,495.6771 903.0695,532.7757 " fill="none" id="halconf.h-ChibiOS_HAL" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1035.9829,380.6303 A9,9 0 0 0 1048.2442 392.2819" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link hal.h to ChibiOS_HAL--><path d="M745.288,384.2247 C766.8589,411.5277 830.8577,492.5332 862.6516,532.7757 " fill="none" id="hal.h-ChibiOS_HAL" style="stroke: #A80036; stroke-width: 1.0;"/><!--link osal.h to ChibiOS_HAL--><path d="M833.5947,394.1064 C843.3909,427.5614 863.6126,496.6203 874.1995,532.7757 " fill="none" id="osal.h-ChibiOS_HAL" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M823.4497,389.5555 A9,9 0 0 0 839.6826 384.8021" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link chconf.h to ChibiOS_RT--><path d="M544.4891,394.1064 C554.1005,427.5614 573.9406,496.6203 584.3278,532.7757 " fill="none" id="chconf.h-ChibiOS_RT" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M534.3718,389.5185 A9,9 0 0 0 550.6286 384.8479" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link hal.h to ChibiOS_RT--><path d="M723.8737,392.3936 C697.2709,425.1494 639.7362,495.9915 609.8617,532.7757 " fill="none" id="hal.h-ChibiOS_RT" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M722.0027,381.2824 A9,9 0 0 0 735.1325 391.9458" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link osal.h to ChibiOS_RT--><path d="M818.9987,381.8744 C786.6997,406.5416 675.68,491.3288 621.3851,532.7945 " fill="none" id="osal.h-ChibiOS_RT" style="stroke: #A80036; stroke-width: 1.0;"/><!--link cmsis.h to ChibiOS_RT--><path d="M352.1206,381.6565 C385.5027,406.0201 502.0461,491.078 559.0762,532.7007 " fill="none" id="cmsis.h-ChibiOS_RT" style="stroke: #A80036; stroke-width: 1.0;"/><!--link ch.h to ChibiOS_RT--><path d="M446.7467,384.2247 C469.6752,411.5277 537.7019,492.5332 571.4968,532.7757 " fill="none" id="ch.h-ChibiOS_RT" style="stroke: #A80036; stroke-width: 1.0;"/><!--link ch.hpp to ChibiOS_RT--><path d="M641.2989,384.2247 C633.3041,411.5277 609.5842,492.5332 597.8005,532.7757 " fill="none" id="ch.hpp-ChibiOS_RT" style="stroke: #A80036; stroke-width: 1.0;"/><!--link alldconf.h to AMiRoLLD--><path d="M1459.6519,572.5211 C1425.9004,606.6298 1348.4436,684.9062 1309.7978,723.9609 " fill="none" id="alldconf.h-AMiRoLLD" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1458.7075,561.4516 A9,9 0 0 0 1470.7305 573.349" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link periphAL.h to AMiRoLLD--><path d="M1154.376,390.7927 C1138.5077,407.6456 1117,435.9402 1117,465.5 C1117,465.5 1117,465.5 1117,654.5 C1117,707.252 1180.9394,730.0909 1230.3925,739.8663 " fill="none" id="periphAL.h-AMiRoLLD" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1153.4133,379.731 A9,9 0 0 0 1165.4488 391.6157" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link alldh to AMiRoLLD--><path d="M1353.6238,565.2123 C1343.1367,593.8271 1310.9044,681.7753 1295.4436,723.9609 " fill="none" id="alldh-AMiRoLLD" style="stroke: #A80036; stroke-width: 1.0;"/><!--link periphALtypes.h to AMiRoLLD--><path d="M1219.4245,565.2123 C1230.0614,593.8271 1262.7542,681.7753 1278.4357,723.9609 " fill="none" id="periphALtypes.h-AMiRoLLD" style="stroke: #A80036; stroke-width: 1.0;"/><!--link periphAL.h to periphALtypes.h--><path d="M1173.2934,384.2247 C1180.303,412.4186 1201.5495,497.877 1211.1723,536.5817 " fill="none" id="periphAL.h-periphALtypes.h" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1221.1218,541.5491 A9,9 0 0 0 1204.7071 545.6303" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link osconf.h to AMiRoOS--><path d="M877.0572,96.0002 C889.0581,128.3104 913.4001,193.8464 926.3853,228.8065 " fill="none" id="osconf.h-AMiRoOS" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M866.6385,92.2391 A9,9 0 0 0 882.4945 86.3496" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link amiroos.h to AMiRoOS--><path d="M982.3118,86.4088 C974.6849,113.1028 952.7445,189.8944 941.6267,228.8065 " fill="none" id="amiroos.h-AMiRoOS" style="stroke: #A80036; stroke-width: 1.0;"/><!--link AMiRoOS to mcuconf.h--><path d="M935,275.1354 C935,302.5538 935,346.9112 935,365.9009 " fill="none" id="AMiRoOS-mcuconf.h" style="stroke: #A80036; stroke-width: 1.0;"/><!--link AMiRoOS to halconf.h--><path d="M958.4964,275.0264 C970.1893,286.6038 984.4674,300.9204 997,314 C1014.3063,332.0617 1033.9574,353.7512 1044.7708,365.793 " fill="none" id="AMiRoOS-halconf.h" style="stroke: #A80036; stroke-width: 1.0;"/><!--link AMiRoOS to chconf.h--><path d="M880.9137,257.6253 C797.8306,266.9689 643.3309,287.3301 595,314 C572.0917,326.6413 553.4519,352.1396 544.59,365.8245 " fill="none" id="AMiRoOS-chconf.h" style="stroke: #A80036; stroke-width: 1.0;"/><!--link AMiRoOS to hal.h--><path d="M880.9536,266.0825 C850.0876,275.9767 811.9031,291.5101 783,314 C767.9561,325.7059 755.5301,343.6931 747.5756,357.1064 " fill="none" id="AMiRoOS-hal.h" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M751.4774,367.3912 A9,9 0 0 0 736.7521 359.0688" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link AMiRoOS to ch.h--><path d="M880.8627,254.2201 C776.0891,259.3537 550.0858,274.7525 484,314 C467.4287,323.8415 455.0901,342.3867 447.5648,356.4562 " fill="none" id="AMiRoOS-ch.h" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M451.8862,366.7412 A9,9 0 0 0 436.7497 359.1925" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link AMiRoOS to amiroblt.h--><path d="M880.6688,252.7769 C745.496,255.4154 397.4396,266.7363 293,314 C271.7498,323.6167 252.9912,343.0537 241.1561,357.4143 " fill="none" id="AMiRoOS-amiroblt.h" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M243.267,368.3904 A9,9 0 0 0 229.9901 357.9107" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link AMiRoOS to alldconf.h--><path d="M989.2597,256.4206 C1076.6479,264.3507 1243.8485,283.1113 1294,314 C1392.4738,374.6507 1456.1074,509.7811 1472.057,546.5872 " fill="none" id="AMiRoOS-alldconf.h" style="stroke: #A80036; stroke-width: 1.0;"/><!--link AMiRoOS to alldh--><path d="M989.1373,257.6357 C1064.3117,266.3895 1195.3309,285.2921 1233,314 C1315.6039,376.9529 1347.8095,510.4287 1355.2338,546.7238 " fill="none" id="AMiRoOS-alldh" style="stroke: #A80036; stroke-width: 1.0;"/><!--link AMiRoOS to periphAL.h--><path d="M989.1174,264.9844 C1024.6379,275.0077 1071.1607,291.0728 1108,314 C1131.2661,328.4798 1152.9605,352.7549 1163.791,365.892 " fill="none" id="AMiRoOS-periphAL.h" style="stroke: #A80036; stroke-width: 1.0;"/><!--
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="778px" preserveAspectRatio="none" style="width:1475px;height:778px;" version="1.1" viewBox="0 0 1475 778" width="1475px" zoomAndPan="magnify"><defs><filter height="300%" id="fhfq0xrb38rx9" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><!--cluster AMiRoBLT_node--><polygon fill="#FFFFFF" filter="url(#fhfq0xrb38rx9)" points="14,324,24,314,285,314,285,756,275,766,14,766,14,324" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="275" x2="284" y1="324" y2="315"/><line style="stroke: #000000; stroke-width: 1.5;" x1="14" x2="275" y1="324" y2="324"/><line style="stroke: #000000; stroke-width: 1.5;" x1="275" x2="275" y1="324" y2="766"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="83" x="104" y="339.9951">AMiRo-BLT</text><!--cluster ChibiOS_node--><polygon fill="#FFFFFF" filter="url(#fhfq0xrb38rx9)" points="293,324,303,314,1092,314,1092,571,1082,581,293,581,293,324" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1082" x2="1091" y1="324" y2="315"/><line style="stroke: #000000; stroke-width: 1.5;" x1="293" x2="1082" y1="324" y2="324"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1082" x2="1082" y1="324" y2="581"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="61" x="658" y="339.9951">ChibiOS</text><!--cluster AMiRoLLD_node--><polygon fill="#FFFFFF" filter="url(#fhfq0xrb38rx9)" points="1111,324,1121,314,1453,314,1453,571,1443,581,1111,581,1111,324" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1443" x2="1452" y1="324" y2="315"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1111" x2="1443" y1="324" y2="324"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1443" x2="1443" y1="324" y2="581"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="83" x="1236.5" y="339.9951">AMiRo-LLD</text><!--cluster AMiRoOS_node--><polygon fill="#FFFFFF" filter="url(#fhfq0xrb38rx9)" points="816,26,826,16,1027,16,1027,273,1017,283,816,283,816,26" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1017" x2="1026" y1="26" y2="17"/><line style="stroke: #000000; stroke-width: 1.5;" x1="816" x2="1017" y1="26" y2="26"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1017" x2="1017" y1="26" y2="283"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="76" x="879.5" y="41.9951">AMiRo-OS</text><!--entity OpenBLT--><rect fill="#D3D3D3" filter="url(#fhfq0xrb38rx9)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="104" x="22" y="712"/><rect fill="#D3D3D3" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="106" y="717"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="104" y="719"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="104" y="723"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="64" x="37" y="744.9951">OpenBLT</text><!--entity stm32flash--><rect fill="#D3D3D3" filter="url(#fhfq0xrb38rx9)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="116" x="161" y="712"/><rect fill="#D3D3D3" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="257" y="717"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="255" y="719"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="255" y="723"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="76" x="176" y="744.9951">stm32flash</text><!--entity amiroblt.h--><ellipse cx="222" cy="375" fill="#FEFECE" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="68" x="188" y="404.9951">amiroblt.h</text><!--entity AMiRoBLT--><rect fill="#FEFECE" filter="url(#fhfq0xrb38rx9)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="114" x="162" y="527"/><rect fill="#FEFECE" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="256" y="532"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="254" y="534"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="254" y="538"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="74" x="177" y="559.9951">AMiRo-BLT</text><!--entity hal.h--><ellipse cx="730" cy="375" fill="#D3D3D3" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="33" x="713.5" y="404.9951">hal.h</text><!--entity osal.h--><ellipse cx="820" cy="375" fill="#D3D3D3" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="41" x="799.5" y="404.9951">osal.h</text><!--entity cmsis.h--><ellipse cx="434" cy="375" fill="#D3D3D3" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="53" x="407.5" y="404.9951">cmsis.h</text><!--entity ch.h--><ellipse cx="530" cy="375" fill="#D3D3D3" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="30" x="515" y="404.9951">ch.h</text><!--entity ch.hpp--><ellipse cx="333" cy="375" fill="#D3D3D3" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="48" x="309" y="404.9951">ch.hpp</text><!--entity mcuconf.h--><ellipse cx="927" cy="375" fill="#D3D3D3" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="73" x="890.5" y="404.9951">mcuconf.h</text><!--entity halconf.h--><ellipse cx="1045" cy="375" fill="#D3D3D3" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="63" x="1013.5" y="404.9951">halconf.h</text><!--entity chconf.h--><ellipse cx="630" cy="375" fill="#D3D3D3" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="60" x="600" y="404.9951">chconf.h</text><!--entity ChibiOS_HAL--><rect fill="#D3D3D3" filter="url(#fhfq0xrb38rx9)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="125" x="810.5" y="527"/><rect fill="#D3D3D3" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="915.5" y="532"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="913.5" y="534"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="913.5" y="538"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="85" x="825.5" y="559.9951">ChibiOS/HAL</text><!--entity ChibiOS_RT--><rect fill="#D3D3D3" filter="url(#fhfq0xrb38rx9)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="118" x="521" y="527"/><rect fill="#D3D3D3" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="619" y="532"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="617" y="534"/><rect fill="#D3D3D3" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="617" y="538"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="78" x="536" y="559.9951">ChibiOS/RT</text><!--entity alldconf.h--><ellipse cx="1404" cy="375" fill="#FEFECE" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="66" x="1371" y="404.9951">alldconf.h</text><!--entity periphAL.h--><ellipse cx="1284" cy="375" fill="#FEFECE" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="73" x="1247.5" y="404.9951">periphAL.h</text><!--entity alldh--><ellipse cx="1162" cy="375" fill="#FEFECE" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="71" x="1126.5" y="404.9951">amiro-lld.h</text><!--entity AMiRoLLD--><rect fill="#FEFECE" filter="url(#fhfq0xrb38rx9)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="113" x="1227.5" y="527"/><rect fill="#FEFECE" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="1320.5" y="532"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="1318.5" y="534"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="1318.5" y="538"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="73" x="1242.5" y="559.9951">AMiRo-LLD</text><!--entity osconf.h--><ellipse cx="862" cy="77" fill="#FEFECE" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="60" x="832" y="106.9951">osconf.h</text><!--entity amiroos.h--><ellipse cx="977" cy="77" fill="#FEFECE" filter="url(#fhfq0xrb38rx9)" rx="8" ry="8" style="stroke: #A80036; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="68" x="943" y="106.9951">amiroos.h</text><!--entity AMiRoOS--><rect fill="#FEFECE" filter="url(#fhfq0xrb38rx9)" height="46.2969" style="stroke: #A80036; stroke-width: 1.5;" width="108" x="873" y="229"/><rect fill="#FEFECE" height="10" style="stroke: #A80036; stroke-width: 1.5;" width="15" x="961" y="234"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="959" y="236"/><rect fill="#FEFECE" height="2" style="stroke: #A80036; stroke-width: 1.5;" width="4" x="959" y="240"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="68" x="888" y="261.9951">AMiRo-OS</text><!--link AMiRoBLT to OpenBLT--><path d="M200.9288,573.0563 C176.8219,603.8135 133.7946,658.7104 104.5882,695.9737 " fill="none" id="AMiRoBLT-OpenBLT" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="109.9177,700.5215,92.0706,711.9444,98.8989,691.8851,109.9177,700.5215" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="31" x="153" y="647.0669">forks</text><!--link AMiRoBLT to stm32flash--><path d="M219,573.0563 C219,606.9378 219,670.1123 219,706.7397 " fill="none" id="AMiRoBLT-stm32flash" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="219,711.9444,223,702.9444,219,706.9444,215,702.9444,219,711.9444" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="44" x="220" y="647.0669">utilizes</text><!--link amiroblt.h to AMiRoBLT--><path d="M221.8387,384.4088 C221.3811,411.1028 220.0647,487.8944 219.3976,526.8065 " fill="none" id="amiroblt.h-AMiRoBLT" style="stroke: #A80036; stroke-width: 1.0;"/><!--link mcuconf.h to ChibiOS_HAL--><path d="M921.1371,394.0002 C911.1671,426.3104 890.9445,491.8464 880.1568,526.8065 " fill="none" id="mcuconf.h-ChibiOS_HAL" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M915.1078,384.8565 A9,9 0 0 0 931.2703 389.8438" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link halconf.h to ChibiOS_HAL--><path d="M1028.3496,391.9408 C997.384,423.4465 930.9036,491.0864 895.7959,526.8065 " fill="none" id="halconf.h-ChibiOS_HAL" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1027.5631,380.6759 A9,9 0 0 0 1039.6265 392.5324" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link hal.h to ChibiOS_HAL--><path d="M737.6883,384.4088 C759.5011,411.1028 822.2509,487.8944 854.0476,526.8065 " fill="none" id="hal.h-ChibiOS_HAL" style="stroke: #A80036; stroke-width: 1.0;"/><!--link osal.h to ChibiOS_HAL--><path d="M825.7543,394.0002 C835.5397,426.3104 855.3878,491.8464 865.9757,526.8065 " fill="none" id="osal.h-ChibiOS_HAL" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M815.6476,389.8063 A9,9 0 0 0 831.8359 384.9033" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link chconf.h to ChibiOS_RT--><path d="M624.4504,394.4235 C615.1772,426.8797 596.5719,491.9984 586.6267,526.8065 " fill="none" id="chconf.h-ChibiOS_RT" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M618.3343,385.0451 A9,9 0 0 0 634.5979 389.692" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link hal.h to ChibiOS_RT--><path d="M715.1329,392.3449 C687.9815,424.0216 630.3671,491.2384 599.8801,526.8065 " fill="none" id="hal.h-ChibiOS_RT" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M713.5108,381.2421 A9,9 0 0 0 726.3533 392.2498" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link osal.h to ChibiOS_RT--><path d="M810.8848,381.6465 C778.3481,405.3712 666.927,486.6158 611.6381,526.9306 " fill="none" id="osal.h-ChibiOS_RT" style="stroke: #A80036; stroke-width: 1.0;"/><!--link cmsis.h to ChibiOS_RT--><path d="M441.8496,384.4088 C464.12,411.1028 528.1862,487.8944 560.65,526.8065 " fill="none" id="cmsis.h-ChibiOS_RT" style="stroke: #A80036; stroke-width: 1.0;"/><!--link ch.h to ChibiOS_RT--><path d="M532.6882,384.4088 C540.3151,411.1028 562.2555,487.8944 573.3733,526.8065 " fill="none" id="ch.h-ChibiOS_RT" style="stroke: #A80036; stroke-width: 1.0;"/><!--link ch.hpp to ChibiOS_RT--><path d="M342.0838,381.4359 C375.1572,404.8685 490.1916,486.3706 547.3079,526.8376 " fill="none" id="ch.hpp-ChibiOS_RT" style="stroke: #A80036; stroke-width: 1.0;"/><!--link alldconf.h to AMiRoLLD--><path d="M1391.8265,392.753 C1369.9916,424.5955 1324.1894,491.3904 1299.9041,526.8065 " fill="none" id="alldconf.h-AMiRoLLD" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1388.8326,382.1647 A9,9 0 0 0 1402.7824 391.7303" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link periphAL.h to AMiRoLLD--><path d="M1284,394.4235 C1284,426.8797 1284,491.9984 1284,526.8065 " fill="none" id="periphAL.h-AMiRoLLD" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1275.5428,387.4871 A9,9 0 0 0 1292.4573 387.4869" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link alldh to AMiRoLLD--><path d="M1168.5592,384.4088 C1187.1688,411.1028 1240.7035,487.8944 1267.8308,526.8065 " fill="none" id="alldh-AMiRoLLD" style="stroke: #A80036; stroke-width: 1.0;"/><!--link osconf.h to AMiRoOS--><path d="M869.0572,96.0002 C881.0581,128.3104 905.4001,193.8464 918.3853,228.8065 " fill="none" id="osconf.h-AMiRoOS" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M858.6385,92.2391 A9,9 0 0 0 874.4945 86.3496" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link amiroos.h to AMiRoOS--><path d="M974.3118,86.4088 C966.6849,113.1028 944.7445,189.8944 933.6267,228.8065 " fill="none" id="amiroos.h-AMiRoOS" style="stroke: #A80036; stroke-width: 1.0;"/><!--link AMiRoOS to mcuconf.h--><path d="M927,275.1354 C927,302.5538 927,346.9112 927,365.9009 " fill="none" id="AMiRoOS-mcuconf.h" style="stroke: #A80036; stroke-width: 1.0;"/><!--link AMiRoOS to halconf.h--><path d="M950.4964,275.0264 C962.1893,286.6038 976.4674,300.9204 989,314 C1006.3063,332.0617 1025.9574,353.7512 1036.7708,365.793 " fill="none" id="AMiRoOS-halconf.h" style="stroke: #A80036; stroke-width: 1.0;"/><!--link AMiRoOS to chconf.h--><path d="M872.8525,257.0004 C821.6408,263.711 744.1784,279.1298 686,314 C663.8043,327.3034 645.1358,352.0564 636.0075,365.5809 " fill="none" id="AMiRoOS-chconf.h" style="stroke: #A80036; stroke-width: 1.0;"/><!--link AMiRoOS to hal.h--><path d="M872.9536,266.0825 C842.0876,275.9767 803.9031,291.5101 775,314 C759.9561,325.7059 747.5301,343.6931 739.5756,357.1064 " fill="none" id="AMiRoOS-hal.h" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M743.4774,367.3912 A9,9 0 0 0 728.7521 359.0688" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link AMiRoOS to ch.h--><path d="M872.747,256.6188 C786.7655,264.7486 623.9211,283.6836 575,314 C558.6173,324.1524 546.2516,342.6528 538.6684,356.627 " fill="none" id="AMiRoOS-ch.h" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M542.9376,366.9016 A9,9 0 0 0 527.855 359.2456" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link AMiRoOS to amiroblt.h--><path d="M872.6241,252.6791 C737.3471,255.0897 389.0676,265.9227 285,314 C264.1694,323.6233 246.0295,343.0592 234.6324,357.4177 " fill="none" id="AMiRoOS-amiroblt.h" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M237.0407,368.2313 A9,9 0 0 0 223.5693 358.0029" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link AMiRoOS to alldconf.h--><path d="M981.105,255.6183 C1079.516,262.9132 1283.4248,281.5217 1346,314 C1369.6059,326.2521 1388.9622,351.9146 1398.1802,365.727 " fill="none" id="AMiRoOS-alldconf.h" style="stroke: #A80036; stroke-width: 1.0;"/><!--link AMiRoOS to alldh--><path d="M981.1781,264.8874 C1016.7242,274.8698 1063.2527,290.9257 1100,314 C1118.8825,325.8566 1136.6088,344.3292 1148.2309,357.8414 " fill="none" id="AMiRoOS-alldh" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1159.462,358.105 A9,9 0 0 0 1146.4708 368.9368" fill="none" style="stroke: #A80036; stroke-width: 1.5;"/><!--link AMiRoOS to periphAL.h--><path d="M981.2458,259.567 C1054.8513,270.4754 1181.9011,291.7639 1223,314 C1246.974,326.9709 1267.6914,352.3301 1277.6653,365.9072 " fill="none" id="AMiRoOS-periphAL.h" style="stroke: #A80036; stroke-width: 1.0;"/><!--
 @startuml
 skinparam componentStyle uml2
 
@@ -8,13 +8,13 @@ skinparam componentStyle uml2
 
 node "AMiRo-BLT" as AMiRoBLT_node {
 	component OpenBLT #lightgrey
-	component STM32Flash #lightgrey
+	component stm32flash #lightgrey
 
 	interface amiroblt.h
 
 	component "AMiRo-BLT" as AMiRoBLT
 	AMiRoBLT -down-|> OpenBLT : forks
-	AMiRoBLT .down.> STM32Flash : utilizes
+	AMiRoBLT .down.> stm32flash : utilizes
 	AMiRoBLT -up- amiroblt.h
 }
 
@@ -53,15 +53,12 @@ skinparam componentStyle uml2
 node "AMiRo-LLD" as AMiRoLLD_node {
 	interface alldconf.h
 	interface periphAL.h
-	interface periphALtypes.h
 	interface "amiro-lld.h" as alldh
 
 	component "AMiRo-LLD" as AMiRoLLD
 	AMiRoLLD -up-( alldconf.h
 	AMiRoLLD -up-( periphAL.h
 	AMiRoLLD -up- alldh
-	AMiRoLLD -up- periphALtypes.h
-	periphAL.h - -( periphALtypes.h
 }
 
 
@@ -84,18 +81,18 @@ AMiRoOS - -( hal.h
 AMiRoOS - -( ch.h
 AMiRoOS - -( amiroblt.h
 AMiRoOS - - alldconf.h
-AMiRoOS - - alldh
+AMiRoOS - -( alldh
 AMiRoOS - - periphAL.h
 
 @enduml
 
-PlantUML version 1.2018.13(Mon Nov 26 18:11:51 CET 2018)
+PlantUML version 1.2019.08(Sat Jul 13 21:25:14 CEST 2019)
 (GPL source distribution)
 Java Runtime: OpenJDK Runtime Environment
 JVM: OpenJDK 64-Bit Server VM
-Java Version: 10.0.2+13-Ubuntu-1ubuntu0.18.04.4
+Java Version: 11.0.4+11-post-Ubuntu-1ubuntu218.04.3
 Operating System: Linux
-OS Version: 4.15.0-46-generic
+OS Version: 4.15.0-66-generic
 Default Encoding: UTF-8
 Language: en
 Country: US
diff --git a/doc/AMiRo-OS.uml b/doc/AMiRo-OS.uml
index cb2277a..0126861 100644
--- a/doc/AMiRo-OS.uml
+++ b/doc/AMiRo-OS.uml
@@ -86,7 +86,7 @@ AMiRoOS --( hal.h
 AMiRoOS --( ch.h
 AMiRoOS --( amiroblt.h
 AMiRoOS -- alldconf.h
-AMiRoOS -- alldh
+AMiRoOS --( alldh
 AMiRoOS -- periphAL.h
 
 @enduml
diff --git a/periphery-lld/AMiRo-LLD b/periphery-lld/AMiRo-LLD
index 1304b12..72369ed 160000
--- a/periphery-lld/AMiRo-LLD
+++ b/periphery-lld/AMiRo-LLD
@@ -1 +1 @@
-Subproject commit 1304b12bd859603ad9f9b68493e1a3257f5e4595
+Subproject commit 72369edc914c55785d0654e4aa5bee9a3aed9290
