diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 13e7b679a..94df7de52 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -6,7 +6,7 @@ on:
- review_requested
push:
-concurrency:
+concurrency:
group: dev-build-${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
@@ -46,9 +46,9 @@ jobs:
- if: matrix.os == 'ubuntu-latest'
run: |
- sudo apt-get install -y lcov
- lcov -d .pio/build/native/ -c -o lcov.info
- lcov --remove lcov.info '*/usr/*' '*/Platforms/*' '*/bootloader/*' '*/.pio/*' '*/HAL/*' '*/test/*' '*/network/*' -o lcov.info
+ sudo apt-get install -y lcov
+ lcov -d .pio/build/native/ -c -o lcov.info
+ lcov --remove lcov.info '*/usr/*' '*/Platforms/*' '*/bootloader/*' '*/.pio/*' '*/HAL/*' '*/test/*' '*/network/*' -o lcov.info
- if: matrix.os == 'ubuntu-latest'
name: Coveralls
@@ -59,8 +59,7 @@ jobs:
needs: tests-run
runs-on: ubuntu-latest
steps:
- - run: echo "Tests succeed!"
-
+ - run: echo "Tests succeed!"
code-format:
name: Code format
@@ -77,7 +76,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v2
with:
- node-version: '14'
+ node-version: "14"
- name: Install dependencies
run: npm install -g clang-format@1.5.0
@@ -90,20 +89,23 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- project_folders: [examples/projects/l0,
- examples/projects/Arduino,
- examples/projects/NUCLEO-L432KC,
- examples/projects/STM32F4-discovery,
- examples/projects/NUCLEO-F401RE,
- examples/projects/NUCLEO-F410RB,
- examples/projects/NUCLEO-G431KB,
- examples/projects/NUCLEO-G474RE,
- examples/projects/NUCLEO-F072RB,
- examples/projects/NUCLEO-L073RZ,
- examples/projects/STM32L4S5_discovery,
- examples/projects/ESP32,
- examples/projects/native
- ]
+ project_folders:
+ [
+ examples/projects/l0,
+ examples/projects/Arduino,
+ examples/projects/NUCLEO-L432KC,
+ examples/projects/NUCLEO-L476RG,
+ examples/projects/STM32F4-discovery,
+ examples/projects/NUCLEO-F401RE,
+ examples/projects/NUCLEO-F410RB,
+ examples/projects/NUCLEO-G431KB,
+ examples/projects/NUCLEO-G474RE,
+ examples/projects/NUCLEO-F072RB,
+ examples/projects/NUCLEO-L073RZ,
+ examples/projects/STM32L4S5_discovery,
+ examples/projects/ESP32,
+ examples/projects/native,
+ ]
os: [macos-latest, windows-latest, ubuntu-latest]
steps:
@@ -152,4 +154,4 @@ jobs:
needs: examples-build
runs-on: ubuntu-latest
steps:
- - run: echo "Build succeed!"
+ - run: echo "Build succeed!"
diff --git a/.gitignore b/.gitignore
index e4450ea08..ab8f54688 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
**/.DS_Store
*.icloud
**/*.icloud
+**/*.pyc
.gcda
.gcno
diff --git a/README.md b/README.md
index 07aa619e8..dbc38228c 100644
--- a/README.md
+++ b/README.md
@@ -3,10 +3,10 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs)
-[![](http://certified.luos.io)](https://www.luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
+[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
Version: 3.0.0
diff --git a/engine/HAL/README.md b/engine/HAL/README.md
index 7fcdd8d28..3d6997827 100644
--- a/engine/HAL/README.md
+++ b/engine/HAL/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
diff --git a/examples/apps/README.md b/examples/apps/README.md
index 8bc475037..fdbb86896 100644
--- a/examples/apps/README.md
+++ b/examples/apps/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
diff --git a/examples/apps/alarm_controller/README.md b/examples/apps/alarm_controller/README.md
index fe41f4f66..701b494b8 100644
--- a/examples/apps/alarm_controller/README.md
+++ b/examples/apps/alarm_controller/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ This app constantly watches for movements and raises an alarm if there is.
This app is linked to the [bike_alarm/Alarm_controller project](../../projects/l0/bike_alarm/alarm_controller).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/apps/start_controller/README.md b/examples/apps/start_controller/README.md
index dfabba2ce..35a0a7b9f 100644
--- a/examples/apps/start_controller/README.md
+++ b/examples/apps/start_controller/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ This app enables or disables the alarm .
This app is linked to the [bike_alarm/Start_controller project](../../Projects/bike_alarm/Alarm_controller).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/Arduino/bldc_simple_foc/README.md b/examples/projects/Arduino/bldc_simple_foc/README.md
index 9edf42c43..7c04fb448 100644
--- a/examples/projects/Arduino/bldc_simple_foc/README.md
+++ b/examples/projects/Arduino/bldc_simple_foc/README.md
@@ -3,7 +3,6 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs)
-[![](http://certified.luos.io)](https://www.luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
diff --git a/examples/projects/Arduino/button/lib/button/README.md b/examples/projects/Arduino/button/lib/button/README.md
index 946473259..25f533f31 100644
--- a/examples/projects/Arduino/button/lib/button/README.md
+++ b/examples/projects/Arduino/button/lib/button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/Arduino/led/lib/led/README.md b/examples/projects/Arduino/led/lib/led/README.md
index 6c8ee94dc..b53969e72 100644
--- a/examples/projects/Arduino/led/lib/led/README.md
+++ b/examples/projects/Arduino/led/lib/led/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using an RGB LED in your projects with Luos.
This driver is linked to the [LED project](../../Projects/led).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/Arduino/led_ws/lib/led/README.md b/examples/projects/Arduino/led_ws/lib/led/README.md
index 6c8ee94dc..b53969e72 100644
--- a/examples/projects/Arduino/led_ws/lib/led/README.md
+++ b/examples/projects/Arduino/led_ws/lib/led/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using an RGB LED in your projects with Luos.
This driver is linked to the [LED project](../../Projects/led).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/Arduino/stepper_simple_foc/README.md b/examples/projects/Arduino/stepper_simple_foc/README.md
index d5db6a2e6..3638d0e43 100644
--- a/examples/projects/Arduino/stepper_simple_foc/README.md
+++ b/examples/projects/Arduino/stepper_simple_foc/README.md
@@ -3,7 +3,6 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs)
-[![](http://certified.luos.io)](https://www.luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
diff --git a/examples/projects/ESP32/button/lib/button/README.md b/examples/projects/ESP32/button/lib/button/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/ESP32/button/lib/button/README.md
+++ b/examples/projects/ESP32/button/lib/button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/ESP32/button_arduino/lib/button/README.md b/examples/projects/ESP32/button_arduino/lib/button/README.md
index 17353ed30..3bbdde20a 100644
--- a/examples/projects/ESP32/button_arduino/lib/button/README.md
+++ b/examples/projects/ESP32/button_arduino/lib/button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/ESP32/led/lib/led/README.md b/examples/projects/ESP32/led/lib/led/README.md
index 17353ed30..3bbdde20a 100644
--- a/examples/projects/ESP32/led/lib/led/README.md
+++ b/examples/projects/ESP32/led/lib/led/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/ESP32/led_arduino/lib/led/README.md b/examples/projects/ESP32/led_arduino/lib/led/README.md
index f2aa4f600..b2a43ec25 100644
--- a/examples/projects/ESP32/led_arduino/lib/led/README.md
+++ b/examples/projects/ESP32/led_arduino/lib/led/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a led in your projects with Luos.
This driver is linked to the [led project](../../Projects/led).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/NUCLEO-F072RB/button/README.md b/examples/projects/NUCLEO-F072RB/button/README.md
index f260382ab..edf00cc6a 100644
--- a/examples/projects/NUCLEO-F072RB/button/README.md
+++ b/examples/projects/NUCLEO-F072RB/button/README.md
@@ -4,7 +4,6 @@
[![](https://img.shields.io/github/license/luos-io/luos)](https://github.com/luos-io/luos_engine/blob/main/LICENSE)
[![](https://img.shields.io/badge/luos-documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://www.luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Luos.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/NUCLEO-F072RB/dc_motor/README.md b/examples/projects/NUCLEO-F072RB/dc_motor/README.md
index 3b2312c1b..fa61c59d3 100644
--- a/examples/projects/NUCLEO-F072RB/dc_motor/README.md
+++ b/examples/projects/NUCLEO-F072RB/dc_motor/README.md
@@ -4,7 +4,6 @@
[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/Luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Luos.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
@@ -28,8 +27,4 @@ You can open [a working example electronic design](https://github.com/Luos-io/Lu
This project is linked to the [DC motor driver](../../Drivers/dc_motor).
-## Don't hesitate to read [our documentation](https://www.luos.io), or to post your questions/issues on the [Luos' Forum](https://community.luos.io). :books:
-
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
-[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
+## Don't hesitate to read [our documentation](https://www.luos.io), or to post your questions/issues on the [Luos' Discord](http://bit.ly/JoinLuosDiscord). :books:
diff --git a/examples/projects/NUCLEO-F072RB/gate_serialcom/README.md b/examples/projects/NUCLEO-F072RB/gate_serialcom/README.md
index 2235ecdec..33e7db89d 100644
--- a/examples/projects/NUCLEO-F072RB/gate_serialcom/README.md
+++ b/examples/projects/NUCLEO-F072RB/gate_serialcom/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://www.luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/NUCLEO-F072RB/potentiometer/README.md b/examples/projects/NUCLEO-F072RB/potentiometer/README.md
index 4ff39e42a..8649e72ff 100644
--- a/examples/projects/NUCLEO-F072RB/potentiometer/README.md
+++ b/examples/projects/NUCLEO-F072RB/potentiometer/README.md
@@ -4,7 +4,6 @@
[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/Luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/luos-technology)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Luos.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/NUCLEO-F401RE/button/lib/Button/README.md b/examples/projects/NUCLEO-F401RE/button/lib/Button/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/NUCLEO-F401RE/button/lib/Button/README.md
+++ b/examples/projects/NUCLEO-F401RE/button/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/NUCLEO-F401RE/dc_motor/README.md b/examples/projects/NUCLEO-F401RE/dc_motor/README.md
index 4dc5ff661..7314d9cc3 100644
--- a/examples/projects/NUCLEO-F401RE/dc_motor/README.md
+++ b/examples/projects/NUCLEO-F401RE/dc_motor/README.md
@@ -4,7 +4,6 @@
[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/Luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/luos-technology)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Luos.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/NUCLEO-F401RE/led/lib/Led/README.md b/examples/projects/NUCLEO-F401RE/led/lib/Led/README.md
index 6c8ee94dc..b53969e72 100644
--- a/examples/projects/NUCLEO-F401RE/led/lib/Led/README.md
+++ b/examples/projects/NUCLEO-F401RE/led/lib/Led/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using an RGB LED in your projects with Luos.
This driver is linked to the [LED project](../../Projects/led).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/NUCLEO-F401RE/potentiometer/README.md b/examples/projects/NUCLEO-F401RE/potentiometer/README.md
index 3b7c82b6e..5b8f2d928 100644
--- a/examples/projects/NUCLEO-F401RE/potentiometer/README.md
+++ b/examples/projects/NUCLEO-F401RE/potentiometer/README.md
@@ -4,7 +4,6 @@
[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/Luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/luos-technology)
-[![](http://certified.luos.io)](https://www.luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Luos.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/NUCLEO-F410RB/button/lib/Button/README.md b/examples/projects/NUCLEO-F410RB/button/lib/Button/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/NUCLEO-F410RB/button/lib/Button/README.md
+++ b/examples/projects/NUCLEO-F410RB/button/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/NUCLEO-F410RB/dc_motor/README.md b/examples/projects/NUCLEO-F410RB/dc_motor/README.md
index 665ba633f..bb566eaab 100644
--- a/examples/projects/NUCLEO-F410RB/dc_motor/README.md
+++ b/examples/projects/NUCLEO-F410RB/dc_motor/README.md
@@ -4,7 +4,6 @@
[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/Luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Luos.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/NUCLEO-F410RB/potentiometer/README.md b/examples/projects/NUCLEO-F410RB/potentiometer/README.md
index 5cf364fa9..e68b6f6bc 100644
--- a/examples/projects/NUCLEO-F410RB/potentiometer/README.md
+++ b/examples/projects/NUCLEO-F410RB/potentiometer/README.md
@@ -4,7 +4,6 @@
[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/Luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Luos.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/NUCLEO-G431KB/button/lib/Button/README.md b/examples/projects/NUCLEO-G431KB/button/lib/Button/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/NUCLEO-G431KB/button/lib/Button/README.md
+++ b/examples/projects/NUCLEO-G431KB/button/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/NUCLEO-G431KB/dc_motor/README.md b/examples/projects/NUCLEO-G431KB/dc_motor/README.md
index 5cf364fa9..e68b6f6bc 100644
--- a/examples/projects/NUCLEO-G431KB/dc_motor/README.md
+++ b/examples/projects/NUCLEO-G431KB/dc_motor/README.md
@@ -4,7 +4,6 @@
[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/Luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Luos.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/NUCLEO-G431KB/potentiometer/README.md b/examples/projects/NUCLEO-G431KB/potentiometer/README.md
index 5cf364fa9..e68b6f6bc 100644
--- a/examples/projects/NUCLEO-G431KB/potentiometer/README.md
+++ b/examples/projects/NUCLEO-G431KB/potentiometer/README.md
@@ -4,7 +4,6 @@
[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/Luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Luos.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/NUCLEO-G474RE/button/lib/Button/README.md b/examples/projects/NUCLEO-G474RE/button/lib/Button/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/NUCLEO-G474RE/button/lib/Button/README.md
+++ b/examples/projects/NUCLEO-G474RE/button/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/NUCLEO-L073RZ/button/README.md b/examples/projects/NUCLEO-L073RZ/button/README.md
index f260382ab..edf00cc6a 100644
--- a/examples/projects/NUCLEO-L073RZ/button/README.md
+++ b/examples/projects/NUCLEO-L073RZ/button/README.md
@@ -4,7 +4,6 @@
[![](https://img.shields.io/github/license/luos-io/luos)](https://github.com/luos-io/luos_engine/blob/main/LICENSE)
[![](https://img.shields.io/badge/luos-documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://www.luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Luos.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/NUCLEO-L073RZ/button/lib/Button/README.md b/examples/projects/NUCLEO-L073RZ/button/lib/Button/README.md
index 17353ed30..3bbdde20a 100644
--- a/examples/projects/NUCLEO-L073RZ/button/lib/Button/README.md
+++ b/examples/projects/NUCLEO-L073RZ/button/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/NUCLEO-L073RZ/gate_serialcom/README.md b/examples/projects/NUCLEO-L073RZ/gate_serialcom/README.md
index 2235ecdec..33e7db89d 100644
--- a/examples/projects/NUCLEO-L073RZ/gate_serialcom/README.md
+++ b/examples/projects/NUCLEO-L073RZ/gate_serialcom/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://www.luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/NUCLEO-L432KC/button/lib/Button/README.md b/examples/projects/NUCLEO-L432KC/button/lib/Button/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/NUCLEO-L432KC/button/lib/Button/README.md
+++ b/examples/projects/NUCLEO-L432KC/button/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/NUCLEO-L432KC/gpio/lib/Gpio_dev/README.md b/examples/projects/NUCLEO-L432KC/gpio/lib/Gpio_dev/README.md
index 12c7541bc..66ccd38c4 100644
--- a/examples/projects/NUCLEO-L432KC/gpio/lib/Gpio_dev/README.md
+++ b/examples/projects/NUCLEO-L432KC/gpio/lib/Gpio_dev/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a GPIO in your projects with Luos.
This driver is linked to the [xxx project](../../Projects/xxx).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/NUCLEO-L432KC/led/lib/Led/README.md b/examples/projects/NUCLEO-L432KC/led/lib/Led/README.md
index 6c8ee94dc..b53969e72 100644
--- a/examples/projects/NUCLEO-L432KC/led/lib/Led/README.md
+++ b/examples/projects/NUCLEO-L432KC/led/lib/Led/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using an RGB LED in your projects with Luos.
This driver is linked to the [LED project](../../Projects/led).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/README.md b/examples/projects/README.md
index d0a510225..7025e2d1a 100644
--- a/examples/projects/README.md
+++ b/examples/projects/README.md
@@ -1,19 +1,17 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
-# Projects folder
+# Product examples
-This folder contains the sources of every examples sorted by boards.
+This product folder is demonstrating the [Luos code organization proposition](https://www.luos.io/docs/luos-technology/basics/organization).
-In most of the examples folder you will find a project called `Bootloader`, you can use this project to compile a Luos engine bootloader and load it into your board.
-All the other examples have a `*_with_bootloader` compilation mode allowing you to load your program using the bootloader.
-For further informations please follow our [bootloader tutorial](https://www.luos.io/tutorials/bootloader).
+In this example you will find a combination of diferent nodes hosting different services and dealing with custom messages.
+This product example is an industrial 2D laser cut/engraving machine using a galvo mirror and a laser.
diff --git a/examples/projects/SAMD21XPLAINED/button/lib/button/README.md b/examples/projects/SAMD21XPLAINED/button/lib/button/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/SAMD21XPLAINED/button/lib/button/README.md
+++ b/examples/projects/SAMD21XPLAINED/button/lib/button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/STM32F4-discovery/button/lib/Button/README.md b/examples/projects/STM32F4-discovery/button/lib/Button/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/STM32F4-discovery/button/lib/Button/README.md
+++ b/examples/projects/STM32F4-discovery/button/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/STM32L4S5_discovery/button/README.md b/examples/projects/STM32L4S5_discovery/button/README.md
index f260382ab..edf00cc6a 100644
--- a/examples/projects/STM32L4S5_discovery/button/README.md
+++ b/examples/projects/STM32L4S5_discovery/button/README.md
@@ -4,7 +4,6 @@
[![](https://img.shields.io/github/license/luos-io/luos)](https://github.com/luos-io/luos_engine/blob/main/LICENSE)
[![](https://img.shields.io/badge/luos-documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://www.luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Luos.svg)](https://registry.platformio.org/libraries/luos/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/STM32L4S5_discovery/button/lib/Button/README.md b/examples/projects/STM32L4S5_discovery/button/lib/Button/README.md
index 17353ed30..3bbdde20a 100644
--- a/examples/projects/STM32L4S5_discovery/button/lib/Button/README.md
+++ b/examples/projects/STM32L4S5_discovery/button/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/STM32L4S5_discovery/gate_serialcom/README.md b/examples/projects/STM32L4S5_discovery/gate_serialcom/README.md
index 2235ecdec..33e7db89d 100644
--- a/examples/projects/STM32L4S5_discovery/gate_serialcom/README.md
+++ b/examples/projects/STM32L4S5_discovery/gate_serialcom/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://www.luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/bike_alarm/README.md b/examples/projects/l0/bike_alarm/README.md
index a129bda71..3466168b0 100644
--- a/examples/projects/l0/bike_alarm/README.md
+++ b/examples/projects/l0/bike_alarm/README.md
@@ -1,9 +1,6 @@
-[![](http://certified.luos.io)](https://www.luos.io)
-[![](https://img.shields.io/github/license/Luos-io/examples)](
-https://github.com/Luos-io/examples/blob/master/LICENSE)
-
+[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
# Luos bike alarm example tutorial
diff --git a/examples/projects/l0/bike_alarm/alarm_controller/README.md b/examples/projects/l0/bike_alarm/alarm_controller/README.md
index 5266d9380..0e03c99a6 100644
--- a/examples/projects/l0/bike_alarm/alarm_controller/README.md
+++ b/examples/projects/l0/bike_alarm/alarm_controller/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
@@ -28,8 +27,4 @@ You can open [a working example electronic design](https://github.com/Luos-io/lu
This project is linked to the [LED driver](../../Drivers/led).
-## Don't hesitate to read [our documentation](https://www.luos.io), or to post your questions/issues on the [Luos' Forum](https://community.luos.io). :books:
-
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
-[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
+## Don't hesitate to read [our documentation](https://www.luos.io), or to post your questions/issues on the [Luos' Discord](http://bit.ly/JoinLuosDiscord). :books:
diff --git a/examples/projects/l0/bike_alarm/alarm_controller/lib/Led_Fader/README.md b/examples/projects/l0/bike_alarm/alarm_controller/lib/Led_Fader/README.md
index 6c8ee94dc..b53969e72 100644
--- a/examples/projects/l0/bike_alarm/alarm_controller/lib/Led_Fader/README.md
+++ b/examples/projects/l0/bike_alarm/alarm_controller/lib/Led_Fader/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using an RGB LED in your projects with Luos.
This driver is linked to the [LED project](../../Projects/led).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/bike_alarm/start_controller/README.md b/examples/projects/l0/bike_alarm/start_controller/README.md
index a979f93fd..f33928c27 100644
--- a/examples/projects/l0/bike_alarm/start_controller/README.md
+++ b/examples/projects/l0/bike_alarm/start_controller/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
@@ -28,8 +27,4 @@ You can open [a working example electronic design](https://github.com/Luos-io/lu
This project is linked to the [Button driver](../../Drivers/button).
-## Don't hesitate to read [our documentation](https://www.luos.io), or to post your questions/issues on the [Luos' Forum](https://community.luos.io). :books:
-
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
-[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
+## Don't hesitate to read [our documentation](https://www.luos.io), or to post your questions/issues on the [Luos' Discord](http://bit.ly/JoinLuosDiscord). :books:
diff --git a/examples/projects/l0/bike_alarm/start_controller/lib/Button/README.md b/examples/projects/l0/bike_alarm/start_controller/lib/Button/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/l0/bike_alarm/start_controller/lib/Button/README.md
+++ b/examples/projects/l0/bike_alarm/start_controller/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/button/README.md b/examples/projects/l0/button/README.md
index 7bb11d921..7f2c4b5a0 100644
--- a/examples/projects/l0/button/README.md
+++ b/examples/projects/l0/button/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/button/lib/Button/README.md b/examples/projects/l0/button/lib/Button/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/l0/button/lib/Button/README.md
+++ b/examples/projects/l0/button/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/button_freertos/README.md b/examples/projects/l0/button_freertos/README.md
index 7dfa412b0..5d65b415f 100644
--- a/examples/projects/l0/button_freertos/README.md
+++ b/examples/projects/l0/button_freertos/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
@@ -28,8 +27,4 @@ You can open [a working example electronic design](https://github.com/Luos-io/lu
This project is linked to the [Button driver](../../Drivers/button).
-## Don't hesitate to read [our documentation](https://www.luos.io), or to post your questions/issues on the [Luos' Forum](https://community.luos.io). :books:
-
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
-[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
+## Don't hesitate to read [our documentation](https://www.luos.io), or to post your questions/issues on the [Luos' Discord](http://bit.ly/JoinLuosDiscord). :books:
diff --git a/examples/projects/l0/button_freertos/lib/Button/README.md b/examples/projects/l0/button_freertos/lib/Button/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/l0/button_freertos/lib/Button/README.md
+++ b/examples/projects/l0/button_freertos/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/button_freertos/lib/Led/README.md b/examples/projects/l0/button_freertos/lib/Led/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/l0/button_freertos/lib/Led/README.md
+++ b/examples/projects/l0/button_freertos/lib/Led/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/controller_motor/README.md b/examples/projects/l0/controller_motor/README.md
index 9ab05af58..2e11d92cc 100644
--- a/examples/projects/l0/controller_motor/README.md
+++ b/examples/projects/l0/controller_motor/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
@@ -28,8 +27,4 @@ You can open [a working example electronic design](https://github.com/Luos-io/lu
This project is linked to the [Controller motor driver](../../Drivers/controller_motor).
-## Don't hesitate to read [our documentation](https://www.luos.io), or to post your questions/issues on the [Luos' Forum](https://community.luos.io). :books:
-
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
-[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
+## Don't hesitate to read [our documentation](https://www.luos.io), or to post your questions/issues on the [Luos' Discord](http://bit.ly/JoinLuosDiscord). :books:
diff --git a/examples/projects/l0/controller_motor/lib/Controller_motor/README.md b/examples/projects/l0/controller_motor/lib/Controller_motor/README.md
index 414447719..3e297444d 100644
--- a/examples/projects/l0/controller_motor/lib/Controller_motor/README.md
+++ b/examples/projects/l0/controller_motor/lib/Controller_motor/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a DC motor with an encoder and a reduction in your projects wit
This driver is linked to the [Controller motor project](../../Projects/controller_motor).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/dc_motor/README.md b/examples/projects/l0/dc_motor/README.md
index a604f5135..3cba809b6 100644
--- a/examples/projects/l0/dc_motor/README.md
+++ b/examples/projects/l0/dc_motor/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/dc_motor/lib/DC_motor/README.md b/examples/projects/l0/dc_motor/lib/DC_motor/README.md
index 54fd63b52..46787ad35 100644
--- a/examples/projects/l0/dc_motor/lib/DC_motor/README.md
+++ b/examples/projects/l0/dc_motor/lib/DC_motor/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a dual DC Motor controller in your projects with Luos.
This driver is linked to the [DC Motor project](../../Projects/Dc_Motor).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/demo/detection_button/README.md b/examples/projects/l0/demo/detection_button/README.md
index 36e290095..7fea3af00 100644
--- a/examples/projects/l0/demo/detection_button/README.md
+++ b/examples/projects/l0/demo/detection_button/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/demo/detection_button/lib/Button/README.md b/examples/projects/l0/demo/detection_button/lib/Button/README.md
index 70b9145a1..1725e4516 100644
--- a/examples/projects/l0/demo/detection_button/lib/Button/README.md
+++ b/examples/projects/l0/demo/detection_button/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/demo/detection_button/lib/Detection_Button/README.md b/examples/projects/l0/demo/detection_button/lib/Detection_Button/README.md
index dfabba2ce..35a0a7b9f 100644
--- a/examples/projects/l0/demo/detection_button/lib/Detection_Button/README.md
+++ b/examples/projects/l0/demo/detection_button/lib/Detection_Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ This app enables or disables the alarm .
This app is linked to the [bike_alarm/Start_controller project](../../Projects/bike_alarm/Alarm_controller).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/demo/ledstrip_position/README.md b/examples/projects/l0/demo/ledstrip_position/README.md
index 81774e7cc..ae341de00 100644
--- a/examples/projects/l0/demo/ledstrip_position/README.md
+++ b/examples/projects/l0/demo/ledstrip_position/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/demo/ledstrip_position/lib/Distance/README.md b/examples/projects/l0/demo/ledstrip_position/lib/Distance/README.md
index 6cb321bd9..0acdbfa3d 100644
--- a/examples/projects/l0/demo/ledstrip_position/lib/Distance/README.md
+++ b/examples/projects/l0/demo/ledstrip_position/lib/Distance/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a lidar distance sensor in your projects with Luos.
This driver is linked to the [Distance project](../../Projects/distance).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/demo/ledstrip_position/lib/LedStrip_Position/README.md b/examples/projects/l0/demo/ledstrip_position/lib/LedStrip_Position/README.md
index e6ccb3d2c..faf8debae 100644
--- a/examples/projects/l0/demo/ledstrip_position/lib/LedStrip_Position/README.md
+++ b/examples/projects/l0/demo/ledstrip_position/lib/LedStrip_Position/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ This app lights a led_strio depending on the position occupied by a distance sen
This app is linked to the [led strip position project](../../Projects/ledstrip_position).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/demo/motor_copy_app/lib/motor_copy/README.md b/examples/projects/l0/demo/motor_copy_app/lib/motor_copy/README.md
index 0a932b19e..516a024ed 100644
--- a/examples/projects/l0/demo/motor_copy_app/lib/motor_copy/README.md
+++ b/examples/projects/l0/demo/motor_copy_app/lib/motor_copy/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
diff --git a/examples/projects/l0/demo/motor_demo_app/lib/run_motor/README.md b/examples/projects/l0/demo/motor_demo_app/lib/run_motor/README.md
index 0a932b19e..516a024ed 100644
--- a/examples/projects/l0/demo/motor_demo_app/lib/run_motor/README.md
+++ b/examples/projects/l0/demo/motor_demo_app/lib/run_motor/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
diff --git a/examples/projects/l0/distance/README.md b/examples/projects/l0/distance/README.md
index 7ce483267..985699856 100644
--- a/examples/projects/l0/distance/README.md
+++ b/examples/projects/l0/distance/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/distance/lib/Distance/README.md b/examples/projects/l0/distance/lib/Distance/README.md
index 6cb321bd9..0acdbfa3d 100644
--- a/examples/projects/l0/distance/lib/Distance/README.md
+++ b/examples/projects/l0/distance/lib/Distance/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a lidar distance sensor in your projects with Luos.
This driver is linked to the [Distance project](../../Projects/distance).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/dxl/README.md b/examples/projects/l0/dxl/README.md
index 8e51b22da..a7e71a150 100644
--- a/examples/projects/l0/dxl/README.md
+++ b/examples/projects/l0/dxl/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/dxl/lib/Dxl/README.md b/examples/projects/l0/dxl/lib/Dxl/README.md
index 3c55fd25d..969e4e69d 100644
--- a/examples/projects/l0/dxl/lib/Dxl/README.md
+++ b/examples/projects/l0/dxl/lib/Dxl/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a Dynamixel motor (XL320 and MX serie) in your projects with Lu
This driver is linked to the [Dxl project](../../Projects/dxl).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/gate_serialcom/README.md b/examples/projects/l0/gate_serialcom/README.md
index 2112191c8..31fe8863a 100644
--- a/examples/projects/l0/gate_serialcom/README.md
+++ b/examples/projects/l0/gate_serialcom/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/gpio/README.md b/examples/projects/l0/gpio/README.md
index d600ba7e6..7cd362e6b 100644
--- a/examples/projects/l0/gpio/README.md
+++ b/examples/projects/l0/gpio/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/gpio/lib/Gpio_dev/README.md b/examples/projects/l0/gpio/lib/Gpio_dev/README.md
index 12c7541bc..66ccd38c4 100644
--- a/examples/projects/l0/gpio/lib/Gpio_dev/README.md
+++ b/examples/projects/l0/gpio/lib/Gpio_dev/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a GPIO in your projects with Luos.
This driver is linked to the [xxx project](../../Projects/xxx).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/imu/README.md b/examples/projects/l0/imu/README.md
index 458bc5f24..62a92a882 100644
--- a/examples/projects/l0/imu/README.md
+++ b/examples/projects/l0/imu/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/imu/lib/Imu/README.md b/examples/projects/l0/imu/lib/Imu/README.md
index bd5050e53..eba1321de 100644
--- a/examples/projects/l0/imu/lib/Imu/README.md
+++ b/examples/projects/l0/imu/lib/Imu/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using an IMU in your projects with Luos.
This driver is linked to the [IMU project](../../Projects/IMU).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/led/README.md b/examples/projects/l0/led/README.md
index 74d9927a4..915ae3eef 100644
--- a/examples/projects/l0/led/README.md
+++ b/examples/projects/l0/led/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/led/lib/Led/README.md b/examples/projects/l0/led/lib/Led/README.md
index 6c8ee94dc..b53969e72 100644
--- a/examples/projects/l0/led/lib/Led/README.md
+++ b/examples/projects/l0/led/lib/Led/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using an RGB LED in your projects with Luos.
This driver is linked to the [LED project](../../Projects/led).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/led_fader/README.md b/examples/projects/l0/led_fader/README.md
index 74d9927a4..915ae3eef 100644
--- a/examples/projects/l0/led_fader/README.md
+++ b/examples/projects/l0/led_fader/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/led_fader/lib/Led_Fader/README.md b/examples/projects/l0/led_fader/lib/Led_Fader/README.md
index 6c8ee94dc..b53969e72 100644
--- a/examples/projects/l0/led_fader/lib/Led_Fader/README.md
+++ b/examples/projects/l0/led_fader/lib/Led_Fader/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using an RGB LED in your projects with Luos.
This driver is linked to the [LED project](../../Projects/led).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/led_strip/README.md b/examples/projects/l0/led_strip/README.md
index a189f61fb..2abd8d74d 100644
--- a/examples/projects/l0/led_strip/README.md
+++ b/examples/projects/l0/led_strip/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/led_strip/lib/Led_strip/README.md b/examples/projects/l0/led_strip/lib/Led_strip/README.md
index 51e770d29..4fb1ea019 100644
--- a/examples/projects/l0/led_strip/lib/Led_strip/README.md
+++ b/examples/projects/l0/led_strip/lib/Led_strip/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a LED strip in your projects with Luos.
This driver is linked to the [LED strip project](../../Projects/led_strip).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/light_sensor/README.md b/examples/projects/l0/light_sensor/README.md
index 121fc6579..c885c4953 100644
--- a/examples/projects/l0/light_sensor/README.md
+++ b/examples/projects/l0/light_sensor/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/light_sensor/lib/Light_sensor/README.md b/examples/projects/l0/light_sensor/lib/Light_sensor/README.md
index 622a6defa..d3124eaf2 100644
--- a/examples/projects/l0/light_sensor/lib/Light_sensor/README.md
+++ b/examples/projects/l0/light_sensor/lib/Light_sensor/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a Light sensor in your projects with Luos.
This driver is linked to the [Light sensor project](../../Projects/light_sensor).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/load/README.md b/examples/projects/l0/load/README.md
index 2a04008ee..9675f9f31 100644
--- a/examples/projects/l0/load/README.md
+++ b/examples/projects/l0/load/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/load/lib/Load/README.md b/examples/projects/l0/load/lib/Load/README.md
index f39a241a8..1c0d59b55 100644
--- a/examples/projects/l0/load/lib/Load/README.md
+++ b/examples/projects/l0/load/lib/Load/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a Load sensor in your projects with Luos.
This driver is linked to the [Load sensor project](../../Projects/load).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/potentiometer/README.md b/examples/projects/l0/potentiometer/README.md
index ca97fbf57..9b438ed0d 100644
--- a/examples/projects/l0/potentiometer/README.md
+++ b/examples/projects/l0/potentiometer/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/potentiometer/lib/Potentiometer/README.md b/examples/projects/l0/potentiometer/lib/Potentiometer/README.md
index 29c488c4d..29efaebca 100644
--- a/examples/projects/l0/potentiometer/lib/Potentiometer/README.md
+++ b/examples/projects/l0/potentiometer/lib/Potentiometer/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a Potentiometer in your projects with Luos.
This driver is linked to the [Potentiometer project](../../Projects/potentiometer).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/power_switch/README.md b/examples/projects/l0/power_switch/README.md
index b3566d78d..3676a3fb4 100644
--- a/examples/projects/l0/power_switch/README.md
+++ b/examples/projects/l0/power_switch/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/power_switch/lib/Power_switch/README.md b/examples/projects/l0/power_switch/lib/Power_switch/README.md
index df7a0c642..807fe8069 100644
--- a/examples/projects/l0/power_switch/lib/Power_switch/README.md
+++ b/examples/projects/l0/power_switch/lib/Power_switch/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a power switch in your projects with Luos.
This driver is linked to the [Power switch project](../../Projects/power_switch).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/servo/README.md b/examples/projects/l0/servo/README.md
index 402c4e0d6..c852b6e95 100644
--- a/examples/projects/l0/servo/README.md
+++ b/examples/projects/l0/servo/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/servo/lib/Servo/README.md b/examples/projects/l0/servo/lib/Servo/README.md
index 21e60ddae..c87f9aa7f 100644
--- a/examples/projects/l0/servo/lib/Servo/README.md
+++ b/examples/projects/l0/servo/lib/Servo/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a servo motor controller in your projects with Luos.
This driver is linked to the [Servo project](../../Projects/servo).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/l0/stepper/README.md b/examples/projects/l0/stepper/README.md
index c1b72e0a6..f057bca8d 100644
--- a/examples/projects/l0/stepper/README.md
+++ b/examples/projects/l0/stepper/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://www.luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](https://discord.gg/luos)
diff --git a/examples/projects/l0/stepper/lib/Stepper/README.md b/examples/projects/l0/stepper/lib/Stepper/README.md
index 801444b1a..55340484a 100644
--- a/examples/projects/l0/stepper/lib/Stepper/README.md
+++ b/examples/projects/l0/stepper/lib/Stepper/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a stepper motor controller in your projects with Luos.
This driver is linked to the [Stepper project](../../Projects/stepper).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/native/button/README.md b/examples/projects/native/button/README.md
index 590f6cd42..90e395499 100644
--- a/examples/projects/native/button/README.md
+++ b/examples/projects/native/button/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
@@ -28,8 +27,4 @@ You can open [a working example electronic design](https://github.com/Luos-io/lu
This project is linked to the [Button driver](../../Drivers/button).
-## Don't hesitate to read [our documentation](https://www.luos.io/docs/), or to post your questions/issues on the [Luos' Forum](https://community.luos.io). :books:
-
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
-[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
-[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
+## Don't hesitate to read [our documentation](https://www.luos.io/docs/), or to post your questions/issues on the [Luos' Discord](http://bit.ly/JoinLuosDiscord). :books:
diff --git a/examples/projects/native/button/lib/Button/README.md b/examples/projects/native/button/lib/Button/README.md
index 17353ed30..3bbdde20a 100644
--- a/examples/projects/native/button/lib/Button/README.md
+++ b/examples/projects/native/button/lib/Button/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/native/gate_wscom/README.md b/examples/projects/native/gate_wscom/README.md
index 590f6cd42..90e395499 100644
--- a/examples/projects/native/gate_wscom/README.md
+++ b/examples/projects/native/gate_wscom/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
@@ -28,8 +27,4 @@ You can open [a working example electronic design](https://github.com/Luos-io/lu
This project is linked to the [Button driver](../../Drivers/button).
-## Don't hesitate to read [our documentation](https://www.luos.io/docs/), or to post your questions/issues on the [Luos' Forum](https://community.luos.io). :books:
-
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
-[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
-[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
+## Don't hesitate to read [our documentation](https://www.luos.io/docs/), or to post your questions/issues on the [Luos' Discord](http://bit.ly/JoinLuosDiscord). :books:
diff --git a/examples/projects/native/led/README.md b/examples/projects/native/led/README.md
index 590f6cd42..90e395499 100644
--- a/examples/projects/native/led/README.md
+++ b/examples/projects/native/led/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
@@ -28,8 +27,4 @@ You can open [a working example electronic design](https://github.com/Luos-io/lu
This project is linked to the [Button driver](../../Drivers/button).
-## Don't hesitate to read [our documentation](https://www.luos.io/docs/), or to post your questions/issues on the [Luos' Forum](https://community.luos.io). :books:
-
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
-[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
-[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
+## Don't hesitate to read [our documentation](https://www.luos.io/docs/), or to post your questions/issues on the [Luos' Discord](http://bit.ly/JoinLuosDiscord). :books:
diff --git a/examples/projects/native/led/lib/Led/README.md b/examples/projects/native/led/lib/Led/README.md
index e313365f1..26c751d7e 100644
--- a/examples/projects/native/led/lib/Led/README.md
+++ b/examples/projects/native/led/lib/Led/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/Examples)](https://github.com/Luos-io/Examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using an RGB LED in your projects with Luos.
This driver is linked to the [LED project](../../Projects/Led).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/native/ping_pong/README.md b/examples/projects/native/ping_pong/README.md
index 80c83dba6..3630d7664 100644
--- a/examples/projects/native/ping_pong/README.md
+++ b/examples/projects/native/ping_pong/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
@@ -51,8 +50,4 @@ You only need to have one somewhere running, it's a kind of server, then anyone
5. Build (Platformio will do the rest)
6. Open a new terminal on this projet and run the compiled binary `./.pio/build/native/program`
-## Don't hesitate to read [our documentation](https://www.luos.io/docs/), or to post your questions/issues on the [Luos' Forum](https://community.luos.io). :books:
-
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
-[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
-[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
+## Don't hesitate to read [our documentation](https://www.luos.io/docs/), or to post your questions/issues on the [Luos' Discord](http://bit.ly/JoinLuosDiscord). :books:
diff --git a/examples/projects/native/ping_pong/lib/PingPong/README.md b/examples/projects/native/ping_pong/lib/PingPong/README.md
index 17353ed30..3bbdde20a 100644
--- a/examples/projects/native/ping_pong/lib/PingPong/README.md
+++ b/examples/projects/native/ping_pong/lib/PingPong/README.md
@@ -1,6 +1,5 @@
-[![](http://certified.luos.io)](https://luos.io)
[![](https://img.shields.io/github/license/Luos-io/examples)](https://github.com/Luos-io/examples/blob/master/LICENSE)
[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
@@ -13,6 +12,5 @@ Driver for using a push button in your projects with Luos.
This driver is linked to the [Button project](../../Projects/button).
-[![](https://img.shields.io/discourse/topics?server=https%3A%2F%2Fcommunity.luos.io&logo=Discourse)](https://community.luos.io)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
[![](https://img.shields.io/badge/LinkedIn-Follow%20us-0077B5?style=flat&logo=linkedin)](https://www.linkedin.com/company/luos)
diff --git a/examples/projects/product/README.md b/examples/projects/product/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/examples/projects/product/custom_gate/.docker/.dockerignore b/examples/projects/product/custom_gate/.docker/.dockerignore
new file mode 100644
index 000000000..55e5d2d0e
--- /dev/null
+++ b/examples/projects/product/custom_gate/.docker/.dockerignore
@@ -0,0 +1,4 @@
+.pio/
+.vscode/
+.gitignore
+README.md
\ No newline at end of file
diff --git a/examples/projects/product/custom_gate/.docker/Dockerfile b/examples/projects/product/custom_gate/.docker/Dockerfile
new file mode 100644
index 000000000..a69947544
--- /dev/null
+++ b/examples/projects/product/custom_gate/.docker/Dockerfile
@@ -0,0 +1,19 @@
+FROM python:3 as builder
+
+LABEL maintainer="Benjamin Christau " \
+ app_name="gate_wscom"
+
+ENV PLATFORMIO_CORE_DIR="/home"
+
+WORKDIR /home/app
+
+COPY . .
+
+RUN pip install --upgrade pip setuptools wheel platformio && \
+ rm -rf /root/.cache/pip
+
+RUN platformio run \
+ --environment native \
+ -d ./examples/projects/native/gate_wscom
+
+CMD [ "./examples/projects/native/gate_wscom/.pio/build/native/program"]
diff --git a/examples/projects/product/custom_gate/README.md b/examples/projects/product/custom_gate/README.md
new file mode 100644
index 000000000..cd34deef1
--- /dev/null
+++ b/examples/projects/product/custom_gate/README.md
@@ -0,0 +1,22 @@
+
+
+![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+
+[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io/docs/)
+[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
+
+[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
+[![](https://img.shields.io/badge/LinkedIn-Share-0077B5?style=social&logo=linkedin)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fgithub.com%2Fluos-io)
+
+# Custom Gate project example :bulb:
+
+This project demonstrate how to make a custom gate with custom Json conversion.
+
+## How to compile the code :computer:
+
+1. Download and install [Platformio](https://platformio.org/platformio-ide)
+2. Open this folder into Platformio
+3. Build (Platformio will do the rest)
+
+## Don't hesitate to read [our documentation](https://www.luos.io/docs/), or to post your questions/issues on the [Luos' Discord](http://bit.ly/JoinLuosDiscord). :books:
diff --git a/examples/projects/product/custom_gate/node_config.h b/examples/projects/product/custom_gate/node_config.h
new file mode 100644
index 000000000..940439740
--- /dev/null
+++ b/examples/projects/product/custom_gate/node_config.h
@@ -0,0 +1,118 @@
+
+
+/******************************************************************************
+ * @file node_config.h
+ * @brief This file allow you to use standard preprocessor definitions to
+ * configure your project, Luos and Luos HAL libraries
+ *
+ * # Introduction
+ * This file is for the luos user. You may here configure your project and
+ * define your custom Luos service and custom Luos command for your product
+ *
+ * Luos libraries offer a minimal standard configuration to optimize
+ * memory usage. In some case you have to modify standard value to fit
+ * with your need concerning among of data transiting through the network
+ * or network speed for example
+ *
+ * Luos libraries can be use with a lot a MCU family. Luos compagny give you
+ * a default configuration, for specific MCU family, in robus_hal_config.h.
+ * This configuration can be modify here to fit with you design by
+ * preprocessor definitions of MCU Hardware needs
+ *
+ * # Usage
+ * This file should be place a the root folder of your project and include
+ * where build flag preprocessor definitions are define in your IDE
+ * -include node_config.h
+ *
+ * @author Luos
+ * @version 0.0.0
+ ******************************************************************************/
+#ifndef _NODE_CONFIG_H_
+#define _NODE_CONFIG_H_
+
+/*******************************************************************************
+ * PROJECT DEFINITION
+ *******************************************************************************/
+
+/*******************************************************************************
+ * LUOS LIBRARY DEFINITION
+ *******************************************************************************
+ * Define | Default Value | Description
+ * :---------------------|------------------------------------------------------
+ * MAX_LOCAL_SERVICE_NUMBER | 5 | Service number in the node
+ * MAX_NODE_NUMBER | 20 | Node number in the device
+ * MAX_SERVICE_NUMBER | 20 | Service number in the device
+ * MSG_BUFFER_SIZE | 3*SIZE_MSG_MAX (405 Bytes) | Size in byte of the Luos buffer TX and RX
+ * MAX_MSG_NB | 2*MAX_LOCAL_SERVICE_NUMBER | Message number in Luos buffer
+ * NBR_PORT | 2 | PTP Branch number Max 8
+ * NBR_RETRY | 10 | Send Retry number in case of NACK or collision
+ ******************************************************************************/
+#define MAX_LOCAL_SERVICE_NUMBER 2
+#define MAX_LOCAL_PROFILE_NUMBER 1
+#define MAX_MSG_NB 200
+#define MSG_BUFFER_SIZE 8192
+
+/*******************************************************************************
+ * LUOS HAL LIBRARY DEFINITION
+*******************************************************************************
+ * Define | Description
+ * :-----------------------|-----------------------------------------------
+ * MCUFREQ | Put your the MCU frequency (value in Hz)
+ * TIMERDIV | Timer divider clock (see your clock configuration)
+ * USE_CRC_HW | define to 0 if there is no Module CRC in your MCU
+ * USE_TX_IT | define to 1 to not use DMA transfers for Luos Tx
+ *
+ * PORT_CLOCK_ENABLE | Enable clock for port
+ * PTPx | A,B,C,D etc. PTP Branch Pin/Port/IRQ
+ * TX_LOCK_DETECT | Disable by default use if not busy flag in USART Pin/Port/IRQ
+ * RX_EN | Rx enable for driver RS485 always on Pin/Port
+ * TX_EN | Tx enable for driver RS485 Pin/Port
+ * COM_TX | Tx USART Com Pin/Port/Alternate
+ * COM_RX | Rx USART Com Pin/Port/Alternate
+ * PINOUT_IRQHANDLER | Callback function for Pin IRQ handler
+
+ * ROBUS_COM_CLOCK_ENABLE | Enable clock for USART
+ * ROBUS_COM | USART number
+ * ROBUS_COM_IRQ | USART IRQ number
+ * ROBUS_COM_IRQHANDLER | Callback function for USART IRQ handler
+
+ * ROBUS_DMA_CLOCK_ENABLE | Enable clock for DMA
+ * ROBUS_DMA | DMA number
+ * ROBUS_DMA_CHANNEL | DMA channel (depending on MCU DMA may need special config)
+
+ * ROBUS_TIMER_CLOCK_ENABLE | Enable clock for Timer
+ * ROBUS_TIMER | Timer number
+ * ROBUS_TIMER_IRQ | Timer IRQ number
+ * ROBUS_TIMER_IRQHANDLER | Callback function for Timer IRQ handler
+******************************************************************************/
+
+/*******************************************************************************
+ * FLASH CONFIGURATION FOR APP WITH BOOTLOADER
+ ********************************************************************************
+ * Define | Default Value | Description
+ * :---------------------|------------------------------------------------------
+ * BOOT_START_ADDRESS | FLASH_BASE = 0x8000000 | Start address of Bootloader in flash
+ * SHARED_MEMORY_ADDRESS | 0x0800C000 | Start address of shared memory to save boot flag
+ * APP_START_ADDRESS | 0x0800C800 | Start address of application with bootloader
+ * APP_END_ADDRESS | FLASH_BANK1_END=0x0801FFFF | End address of application with bootloader
+ ******************************************************************************/
+
+/*******************************************************************************
+ * GATE SERIAL COM DEFINITION
+ *******************************************************************************
+ * Define | Default Value | Description
+ * :-------------------------|------------------------------------------------------
+ * GATE_BUFF_SIZE | 1024 | Json receive buffer size
+ * PIPE_RX_BUFFER_SIZE | 1024 | Receive pipe buffer size
+ * PIPE_TX_BUFFER_SIZE | 2048 | Transmit pipe buffer size
+ * INIT_TIME | 150 | Wait init time before first detection
+ ******************************************************************************/
+#define GATE_BUFF_SIZE 65000
+#define PIPE_RX_BUFFER_SIZE 65000
+#define PIPE_TX_BUFFER_SIZE 65000
+#define SERIAL_RX_BUFFER_SIZE 65000
+#define INIT_TIME 150
+#define GATE_REFRESH_TIME_S 0.05f
+#define SERIAL_PORT "/dev/cu.usbmodem1202" // "/dev/cu.usbserial-D308N897"
+
+#endif /* _NODE_CONFIG_H_ */
diff --git a/examples/projects/product/custom_gate/platformio.ini b/examples/projects/product/custom_gate/platformio.ini
new file mode 100644
index 000000000..588e39b9d
--- /dev/null
+++ b/examples/projects/product/custom_gate/platformio.ini
@@ -0,0 +1,38 @@
+; PlatformIO Project Configuration File
+;
+; Build options: build flags, source filter
+; Upload options: custom upload port, speed and extra flags
+; Library options: dependencies, extra library storages
+; Advanced options: extra scripting
+;
+; Please visit documentation for the other options and examples
+; https://docs.platformio.org/page/projectconf.html
+[platformio]
+default_envs = native_serial
+
+[env:native_serial]
+lib_ldf_mode =off
+lib_extra_dirs =
+ $PROJECT_DIR/../../../../tool_services/
+ $PROJECT_DIR/../../../../../
+ $PROJECT_DIR/../../../../network/
+platform = native
+lib_deps =
+ luos_engine@^3.1.0
+ serial_network
+ Pipe
+ Gate
+build_unflags = -Os
+build_flags =
+ -I inc
+ -I ../
+ -include node_config.h
+ -O1
+ -lpthread
+ -lm
+ -D LUOSHAL=NATIVE
+ -D GATEFORMAT=TinyJSON
+ -D PIPEMODE=WS
+ -D PIPEHAL=native
+ -D PIPE_WS_SERVER_ADDR=\"ws://localhost:9342\" ; Watch out you need to escape the " using \
+build_type = debug
diff --git a/examples/projects/product/custom_gate/src/custom_json_conversion.c b/examples/projects/product/custom_gate/src/custom_json_conversion.c
new file mode 100644
index 000000000..dce3b73a5
--- /dev/null
+++ b/examples/projects/product/custom_gate/src/custom_json_conversion.c
@@ -0,0 +1,98 @@
+#include "custom-json.h"
+#include "product_config.h"
+#include
+
+// This function are called by the gate conversion functions in case of an unknown type.
+// This functions allow you to easily add and manage your custom type and commands.
+
+// This function is called by the gate to convert a service type into a string.
+// This is typically used in the end of detection to create a Json representing the device routing table.
+// The name of the type will be used by pyluos to create the right object.
+const char *Convert_CustomStringFromType(luos_type_t type)
+{
+ if (type == POINT_2D)
+ {
+ return "point_2D";
+ }
+ return NULL;
+}
+
+// This function is called by the gate to convert a piece of Json into a message.
+// This is typically used when a Json is received by the gate with an unknown property.
+// You can use it to compose your own message out of the Json data and send it to the right service.
+void Convert_CustomJsonToMsg(service_t *service, uint16_t target_id, char *property, const json_t *jobj, char *json_str)
+{
+ msg_t msg;
+ msg.header.target_mode = IDACK;
+ msg.header.target = target_id;
+ // Target linear position 2D
+ if (property && !strcmp(property, "linear_pos_2D"))
+ {
+ // Check the size of the array. If we have more than one data, this mean that this data is a binary size of a trajectory. If we have 2 data, this is an unique point.
+ json_t const *item = json_getChild(jobj);
+ if (json_getSibling(item) != NULL)
+ {
+ // We only have one point in this data
+ pos_2d_t pos;
+ pos.x = (uint16_t)json_getInteger(item);
+ item = json_getSibling(item);
+ pos.y = (uint16_t)json_getInteger(item);
+ // Create the message
+ msg.header.cmd = LINEAR_POSITION_2D;
+ msg.header.size = sizeof(pos_2d_t);
+ memcpy(msg.data, &pos, sizeof(pos_2d_t));
+ // Send the message
+ Luos_SendMsg(service, &msg);
+ }
+ else
+ {
+ int i = 0;
+ // This is a binary
+ int size = (int)json_getInteger(item);
+ // Find the first \r of the current json_str
+ for (i = 0; i < GATE_BUFF_SIZE; i++)
+ {
+ if (json_str[i] == '\n')
+ {
+ i++;
+ break;
+ }
+ }
+ if (i < GATE_BUFF_SIZE - 1)
+ {
+ // Create the message
+ msg.header.cmd = LINEAR_POSITION_2D;
+ Luos_SendData(service, &msg, &json_str[i], (unsigned int)size);
+ }
+ }
+ return;
+ }
+ if (property && !strcmp(property, "buffer_mode"))
+ {
+ msg.data[0] = (char)json_getInteger(jobj);
+ msg.header.cmd = BUFFER_MODE;
+ msg.header.size = sizeof(char);
+ Luos_SendMsg(service, &msg);
+ return;
+ }
+}
+
+// This function is called by the gate to convert a message into a piece of Json.
+// This is typically used when a message is received by the gate with an unknown command.
+// You can use it to compose your own piece of Json out of the message data.
+void Convert_CustomMsgToJson(msg_t *msg, char *data)
+{
+ if (msg->header.cmd == LINEAR_POSITION_2D)
+ {
+ // This is our custom message, so we can convert it to JSON
+ // In this case we will don't need it but I did the code for the sake of the example.
+ if (msg->header.size == sizeof(pos_2d_t))
+ {
+ // Size ok, now fill the struct from msg data
+ pos_2d_t pos;
+ memcpy(&pos, msg->data, msg->header.size);
+ // create the Json content
+ sprintf(data, "\"linear_pos_2D\":[%2d,%2d],", pos.x, pos.y);
+ }
+ }
+}
diff --git a/examples/projects/product/custom_gate/src/main.c b/examples/projects/product/custom_gate/src/main.c
new file mode 100644
index 000000000..c82b80661
--- /dev/null
+++ b/examples/projects/product/custom_gate/src/main.c
@@ -0,0 +1,59 @@
+#include "luos_engine.h"
+#include "serial_network.h"
+#include "pipe.h"
+#include "gate.h"
+#include
+
+#ifndef WIN32
+ #include
+ #include
+ #include
+ #include
+ #include
+#endif
+
+void *Gate_Pipe_LoopThread(void *vargp)
+{
+ while (1)
+ {
+ Pipe_Loop();
+ Gate_Loop();
+ }
+ return NULL;
+}
+#ifndef _WIN32
+void handler(int sig)
+{
+ void *array[10];
+ size_t size;
+
+ // get void*'s for all entries on the stack
+ size = backtrace(array, 10);
+
+ // print out all the frames to stderr
+ fprintf(stderr, "Error: signal %d:\n", sig);
+ backtrace_symbols_fd(array, size, STDERR_FILENO);
+ exit(1);
+}
+#endif
+
+int main(void)
+{
+#ifndef _WIN32
+ signal(SIGSEGV, handler); // install our handler
+#endif
+ Luos_Init();
+ Serial_Init();
+ Pipe_Init();
+ Gate_Init();
+ // Create a thread to convert messages into Json and steam them using Websocket
+ // pthread_t thread_id;
+ // pthread_create(&thread_id, NULL, Gate_Pipe_LoopThread, NULL);
+ while (1)
+ {
+ Luos_Loop();
+ Serial_Loop();
+ Pipe_Loop();
+ Gate_Loop();
+ }
+}
diff --git a/examples/projects/product/point_2D.py b/examples/projects/product/point_2D.py
new file mode 100644
index 000000000..faf9d8f17
--- /dev/null
+++ b/examples/projects/product/point_2D.py
@@ -0,0 +1,84 @@
+from pyluos.services.service import Service
+import numpy as np
+
+class Point_2D(Service):
+
+ # control modes
+ _PLAY = 0
+ _PAUSE = 1
+ _STOP = 2
+
+ # buffer modes
+ _SINGLE = 0
+ _CONTINUOUS = 1
+ _STREAM = 2
+
+ def __init__(self, id, alias, device):
+ Service.__init__(self, 'Point_2D', id, alias, device)
+ self._point = (0, 0)
+ self._control = 0
+ self._buffer_mode = _SINGLE
+ self._sampling_freq = 100.0
+
+ @property
+ def position(self):
+ return self._point
+
+ @position.setter
+ def position(self, new_val):
+ data = []
+ # check if the value is a tuple
+ if isinstance(new_val, tuple):
+ self._point = new_val
+ data = list(new_val)
+ self._push_value("linear_pos_2D", data)
+ # check if new_val is a list
+ elif hasattr(new_val, "__len__"):
+ # If this is a list of tuples, put all the tuple couple of values on a list
+ for i in range(len(new_val)):
+ if isinstance(new_val[i], tuple):
+ data.append(new_val[i][0])
+ data.append(new_val[i][1])
+ # send those values in an optimized way as a table of uint16_t
+ self._push_data('linear_pos_2D', [len(data) * 2], np.array(data, dtype=np.uint16)) # multiplying by the size of uint16_t
+ else:
+ raise ValueError("Point_2D.position must be a list")
+
+ def play(self):
+ self._control = self._PLAY
+ self._push_value('control', self._control)
+
+ def pause(self):
+ self._control = self._PAUSE
+ self._push_value('control', self._control)
+
+ def stop(self):
+ self._control = self._STOP
+ self._push_value('control', self._control)
+
+ def single(self):
+ self._buffer_mode = self._SINGLE
+ self._push_value('buffer_mode', self._buffer_mode)
+
+ def continuous(self):
+ self._buffer_mode = self._CONTINUOUS
+ self._push_value('buffer_mode', self._buffer_mode)
+
+ def stream(self):
+ self._buffer_mode = self._STREAM
+ self._push_value('buffer_mode', self._buffer_mode)
+
+ @property
+ def sampling_freq(self):
+ return self._sampling_freq
+
+ @sampling_freq.setter
+ def sampling_freq(self, sampling_freq):
+ self._sampling_freq = sampling_freq
+ self._push_value("time", 1.0 / sampling_freq)
+
+
+ def _update(self, new_state):
+ Service._update(self, new_state)
+ if 'linear_pos_2D' in new_state.keys():
+ self._point = new_state['linear_pos_2D']
diff --git a/examples/projects/product/product_config.h b/examples/projects/product/product_config.h
new file mode 100644
index 000000000..b2c5d5004
--- /dev/null
+++ b/examples/projects/product/product_config.h
@@ -0,0 +1,38 @@
+/******************************************************************************
+ * @file laser + galvo product_config.h
+ * @brief A complete product example of a laser + galvo controler with Gate customization.
+ * @author Luos
+ * @version 0.0.0
+ ******************************************************************************/
+#ifndef PRODUCT_CONFIG_H
+#define PRODUCT_CONFIG_H
+
+#include "luos_engine.h"
+
+// Definition of a custom service type
+typedef enum
+{
+ POINT_2D = LUOS_LAST_TYPE
+} custom_service_type_t;
+
+// Definition of a custom service command
+typedef enum
+{
+ LINEAR_POSITION_2D = LUOS_LAST_STD_CMD, // uint16_t x, uint16_t y
+ BUFFER_MODE // 3 different modes: 0: SINGLE, 1: CONTINUOUS, 2: STREAM
+} custom_service_cmd_t;
+
+typedef enum
+{
+ SINGLE,
+ CONTINUOUS,
+ STREAM
+} buffer_mode_t;
+
+typedef struct
+{
+ uint16_t x;
+ uint16_t y;
+} __attribute__((packed)) pos_2d_t;
+
+#endif /* PRODUCT_CONFIG_H */
diff --git a/network/robus_network/HAL/README.md b/network/robus_network/HAL/README.md
index 8986cac92..20039d0e5 100644
--- a/network/robus_network/HAL/README.md
+++ b/network/robus_network/HAL/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
diff --git a/tool_services/README.md b/tool_services/README.md
index db0f6c532..f3e7f229c 100644
--- a/tool_services/README.md
+++ b/tool_services/README.md
@@ -1,10 +1,9 @@
![](https://github.com/Luos-io/luos_engine/actions/workflows/build.yml/badge.svg)
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/luos_engine.svg)](https://registry.platformio.org/libraries/luos_engine/luos_engine)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
diff --git a/tool_services/gate/README.md b/tool_services/gate/README.md
index 7eaad7464..1594865b4 100644
--- a/tool_services/gate/README.md
+++ b/tool_services/gate/README.md
@@ -1,9 +1,8 @@
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Gate.svg)](https://registry.platformio.org/libraries/luos_engine/Gate)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)
diff --git a/tool_services/gate/TinyJSON/convert.c b/tool_services/gate/TinyJSON/convert.c
index 85c687f6b..2dcd7559a 100644
--- a/tool_services/gate/TinyJSON/convert.c
+++ b/tool_services/gate/TinyJSON/convert.c
@@ -12,19 +12,54 @@
#include "gate_config.h"
#include "pipe_link.h"
#include "data_manager.h"
-#include "tiny-json.h"
#include "bootloader_ex.h"
#include "_routing_table.h"
+#include "custom-json.h"
#define MAX_JSON_FIELDS 50
static const char *Convert_Float(float value);
-static void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *property, const json_t *jobj, msg_t *msg, char *bin_data);
+static void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *property, const json_t *jobj, char *bin_data);
static const char *Convert_StringFromType(luos_type_t type);
/*******************************************************************************
* Tools
******************************************************************************/
+
+/******************************************************************************
+ * @brief This function can be redefined by users to manage custom Json command to msg
+ * @param service the service that will need to transmit the message
+ * @param target_id the id of the targetted service
+ * @param property the property name
+ * @param jobj the json object containing the data of the property
+ * @param json_str the complete json string. You may need to use it to extract binary data in the end of the string (after \r)
+ * @return None
+ ******************************************************************************/
+__attribute__((weak)) void Convert_CustomJsonToMsg(service_t *service, uint16_t target_id, char *property, const json_t *jobj, char *json_str)
+{
+ return;
+}
+
+/******************************************************************************
+ * @brief This function can be redefined by users to manage custom msg command to Json
+ * @param None
+ * @return None
+ ******************************************************************************/
+__attribute__((weak)) void Convert_CustomMsgToJson(msg_t *msg, char *data)
+{
+ return;
+}
+
+/******************************************************************************
+ * @brief This function can be redefined by users to manage custom type to string
+ * @param type the type to convert
+ * @return None
+ ******************************************************************************/
+__attribute__((weak)) const char *Convert_CustomStringFromType(luos_type_t type)
+{
+ return NULL;
+}
+
// This function reduce Float to string convertion without FPU to 1/3 of normal time.
// This function have been inspired by Benoit Blanchon Blog : https://blog.benoitblanchon.fr/lightweight-float-to-string/
const char *Convert_Float(float value)
@@ -63,10 +98,9 @@ const char *Convert_Float(float value)
* Luos Json data to Luos messages conversion
******************************************************************************/
// Convert a Json into messages
-void Convert_DataToLuos(service_t *service, char *data)
+void Convert_DataToMsg(service_t *service, char *data)
{
json_t pool[MAX_JSON_FIELDS];
- msg_t msg;
// check if we have a complete received command
json_t const *root = json_create(data, pool, MAX_JSON_FIELDS);
@@ -121,7 +155,7 @@ void Convert_DataToLuos(service_t *service, char *data)
while (parameter_jsn != NULL)
{
char *property = (char *)json_getName(parameter_jsn);
- Convert_JsonToMsg(service, result.result_table[0]->id, result.result_table[0]->type, property, parameter_jsn, &msg, (char *)data);
+ Convert_JsonToMsg(service, result.result_table[0]->id, result.result_table[0]->type, property, parameter_jsn, (char *)data);
parameter_jsn = json_getSibling(parameter_jsn);
}
// Get next service
@@ -131,20 +165,21 @@ void Convert_DataToLuos(service_t *service, char *data)
}
}
// Create msg from a service json data
-void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *property, const json_t *jobj, msg_t *msg, char *bin_data)
+void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *property, const json_t *jobj, char *bin_data)
{
time_luos_t time;
+ msg_t msg;
float data = 0.0;
- msg->header.target_mode = SERVICEIDACK;
- msg->header.target = id;
+ msg.header.target_mode = SERVICEIDACK;
+ msg.header.target = id;
const uint16_t property_type = json_getType(jobj);
//********** global convertion***********
// ratio
if ((property && !strcmp(property, "power_ratio")) && ((property_type == JSON_REAL) || (property_type == JSON_INTEGER)))
{
ratio_t ratio = RatioOD_RatioFrom_Percent(json_getReal(jobj));
- RatioOD_RatioToMsg(&ratio, msg);
- while (Luos_SendMsg(service, msg) == FAILED)
+ RatioOD_RatioToMsg(&ratio, &msg);
+ while (Luos_SendMsg(service, &msg) == FAILED)
{
Luos_Loop();
}
@@ -156,8 +191,8 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
if ((property_type == JSON_REAL) || (property_type == JSON_INTEGER))
{
angular_position_t angular_position = AngularOD_PositionFrom_deg(json_getReal(jobj));
- AngularOD_PositionToMsg(&angular_position, msg);
- Luos_SendMsg(service, msg);
+ AngularOD_PositionToMsg(&angular_position, &msg);
+ Luos_SendMsg(service, &msg);
return;
}
if (property_type == JSON_ARRAY)
@@ -176,8 +211,8 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
}
if (i < GATE_BUFF_SIZE - 1)
{
- msg->header.cmd = ANGULAR_POSITION;
- Luos_SendData(service, msg, &bin_data[i], (unsigned int)size);
+ msg.header.cmd = ANGULAR_POSITION;
+ Luos_SendData(service, &msg, &bin_data[i], (unsigned int)size);
}
return;
}
@@ -191,10 +226,10 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
limits[0] = AngularOD_PositionFrom_deg(json_getReal(item));
item = json_getSibling(item);
limits[1] = AngularOD_PositionFrom_deg(json_getReal(item));
- memcpy(&msg->data[0], limits, 2 * sizeof(float));
- msg->header.cmd = ANGULAR_POSITION_LIMIT;
- msg->header.size = 2 * sizeof(float);
- Luos_SendMsg(service, msg);
+ memcpy(&msg.data[0], limits, 2 * sizeof(float));
+ msg.header.cmd = ANGULAR_POSITION_LIMIT;
+ msg.header.size = 2 * sizeof(float);
+ Luos_SendMsg(service, &msg);
return;
}
// Limit linear position
@@ -205,10 +240,10 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
limits[0] = LinearOD_PositionFrom_mm(json_getReal(item));
item = json_getSibling(item);
limits[1] = LinearOD_PositionFrom_mm(json_getReal(item));
- memcpy(&msg->data[0], limits, 2 * sizeof(linear_position_t));
- msg->header.cmd = LINEAR_POSITION_LIMIT;
- msg->header.size = 2 * sizeof(linear_position_t);
- Luos_SendMsg(service, msg);
+ memcpy(&msg.data[0], limits, 2 * sizeof(linear_position_t));
+ msg.header.cmd = LINEAR_POSITION_LIMIT;
+ msg.header.size = 2 * sizeof(linear_position_t);
+ Luos_SendMsg(service, &msg);
return;
}
// Limit angular speed
@@ -219,10 +254,10 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
limits[0] = AngularOD_SpeedFrom_deg_s(json_getReal(item));
item = json_getSibling(item);
limits[1] = AngularOD_SpeedFrom_deg_s(json_getReal(item));
- memcpy(&msg->data[0], limits, 2 * sizeof(float));
- msg->header.cmd = ANGULAR_SPEED_LIMIT;
- msg->header.size = 2 * sizeof(float);
- Luos_SendMsg(service, msg);
+ memcpy(&msg.data[0], limits, 2 * sizeof(float));
+ msg.header.cmd = ANGULAR_SPEED_LIMIT;
+ msg.header.size = 2 * sizeof(float);
+ Luos_SendMsg(service, &msg);
return;
}
// Limit linear speed
@@ -233,28 +268,28 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
limits[0] = LinearOD_SpeedFrom_mm_s(json_getReal(item));
item = json_getSibling(item);
limits[1] = LinearOD_SpeedFrom_mm_s(json_getReal(item));
- memcpy(&msg->data[0], limits, 2 * sizeof(linear_speed_t));
- msg->header.cmd = LINEAR_SPEED_LIMIT;
- msg->header.size = 2 * sizeof(linear_speed_t);
- Luos_SendMsg(service, msg);
+ memcpy(&msg.data[0], limits, 2 * sizeof(linear_speed_t));
+ msg.header.cmd = LINEAR_SPEED_LIMIT;
+ msg.header.size = 2 * sizeof(linear_speed_t);
+ Luos_SendMsg(service, &msg);
return;
}
// Limit ratio
if ((property && !strcmp(property, "limit_power")) && ((property_type == JSON_REAL) || (property_type == JSON_INTEGER)))
{
ratio_t ratio = RatioOD_RatioFrom_Percent((float)json_getReal(jobj));
- RatioOD_RatioToMsg(&ratio, msg);
- msg->header.cmd = RATIO_LIMIT;
- Luos_SendMsg(service, msg);
+ RatioOD_RatioToMsg(&ratio, &msg);
+ msg.header.cmd = RATIO_LIMIT;
+ Luos_SendMsg(service, &msg);
return;
}
// Limit current
if ((property && !strcmp(property, "limit_current")) && ((property_type == JSON_REAL) || (property_type == JSON_INTEGER)))
{
current_t current = ElectricOD_CurrentFrom_A(json_getReal(jobj));
- ElectricOD_CurrentToMsg(¤t, msg);
- msg->header.cmd = CURRENT_LIMIT;
- Luos_SendMsg(service, msg);
+ ElectricOD_CurrentToMsg(¤t, &msg);
+ msg.header.cmd = CURRENT_LIMIT;
+ Luos_SendMsg(service, &msg);
return;
}
// target Rotation speed
@@ -264,8 +299,8 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
{
// this should be a function because it is frequently used
angular_speed_t angular_speed = AngularOD_SpeedFrom_deg_s((float)json_getReal(jobj));
- AngularOD_SpeedToMsg(&angular_speed, msg);
- Luos_SendMsg(service, msg);
+ AngularOD_SpeedToMsg(&angular_speed, &msg);
+ Luos_SendMsg(service, &msg);
return;
}
if (property_type == JSON_ARRAY)
@@ -284,8 +319,8 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
}
if (i < GATE_BUFF_SIZE - 1)
{
- msg->header.cmd = ANGULAR_SPEED;
- Luos_SendData(service, msg, &bin_data[i], (unsigned int)size);
+ msg.header.cmd = ANGULAR_SPEED;
+ Luos_SendData(service, &msg, &bin_data[i], (unsigned int)size);
}
return;
}
@@ -297,8 +332,8 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
if ((property_type == JSON_REAL) || (property_type == JSON_INTEGER))
{
linear_position_t linear_position = LinearOD_PositionFrom_m((float)json_getReal(jobj));
- LinearOD_PositionToMsg(&linear_position, msg);
- Luos_SendMsg(service, msg);
+ LinearOD_PositionToMsg(&linear_position, &msg);
+ Luos_SendMsg(service, &msg);
return;
}
if (property_type == JSON_ARRAY)
@@ -317,9 +352,9 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
}
if (i < GATE_BUFF_SIZE - 1)
{
- msg->header.cmd = LINEAR_POSITION;
+ msg.header.cmd = LINEAR_POSITION;
// todo WATCHOUT this could be mm !
- Luos_SendData(service, msg, &bin_data[i], (unsigned int)size);
+ Luos_SendData(service, &msg, &bin_data[i], (unsigned int)size);
}
return;
}
@@ -328,8 +363,8 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
if ((property && !strcmp(property, "target_trans_speed")) && ((property_type == JSON_REAL) || (property_type == JSON_INTEGER)))
{
linear_speed_t linear_speed = LinearOD_SpeedFrom_mm_s((float)json_getReal(jobj));
- LinearOD_SpeedToMsg(&linear_speed, msg);
- Luos_SendMsg(service, msg);
+ LinearOD_SpeedToMsg(&linear_speed, &msg);
+ Luos_SendMsg(service, &msg);
return;
}
// time
@@ -337,8 +372,8 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
{
// this should be a function because it is frequently used
time = TimeOD_TimeFrom_s((float)json_getReal(jobj));
- TimeOD_TimeToMsg(&time, msg);
- Luos_SendMsg(service, msg);
+ TimeOD_TimeToMsg(&time, &msg);
+ Luos_SendMsg(service, &msg);
return;
}
// Pid
@@ -351,10 +386,10 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
pid[i] = (float)json_getReal(item);
item = json_getSibling(item);
}
- memcpy(&msg->data[0], pid, sizeof(asserv_pid_t));
- msg->header.cmd = PID;
- msg->header.size = sizeof(asserv_pid_t);
- Luos_SendMsg(service, msg);
+ memcpy(&msg.data[0], pid, sizeof(asserv_pid_t));
+ msg.header.cmd = PID;
+ msg.header.size = sizeof(asserv_pid_t);
+ Luos_SendMsg(service, &msg);
return;
}
// resolution
@@ -362,10 +397,10 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
{
// this should be a function because it is frequently used
data = (float)json_getReal(jobj);
- memcpy(msg->data, &data, sizeof(data));
- msg->header.cmd = RESOLUTION;
- msg->header.size = sizeof(data);
- Luos_SendMsg(service, msg);
+ memcpy(msg.data, &data, sizeof(data));
+ msg.header.cmd = RESOLUTION;
+ msg.header.size = sizeof(data);
+ Luos_SendMsg(service, &msg);
return;
}
// offset
@@ -373,10 +408,10 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
{
// this should be a function because it is frequently used
data = (float)json_getReal(jobj);
- memcpy(msg->data, &data, sizeof(data));
- msg->header.cmd = OFFSET;
- msg->header.size = sizeof(data);
- Luos_SendMsg(service, msg);
+ memcpy(msg.data, &data, sizeof(data));
+ msg.header.cmd = OFFSET;
+ msg.header.size = sizeof(data);
+ Luos_SendMsg(service, &msg);
return;
}
// reduction ratio
@@ -384,20 +419,20 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
{
// this should be a function because it is frequently used
data = (float)json_getReal(jobj);
- memcpy(msg->data, &data, sizeof(data));
- msg->header.cmd = REDUCTION;
- msg->header.size = sizeof(data);
- Luos_SendMsg(service, msg);
+ memcpy(msg.data, &data, sizeof(data));
+ msg.header.cmd = REDUCTION;
+ msg.header.size = sizeof(data);
+ Luos_SendMsg(service, &msg);
return;
}
// dimension (m)
if ((property && !strcmp(property, "dimension")) && ((property_type == JSON_REAL) || (property_type == JSON_INTEGER)))
{
linear_position_t linear_position = LinearOD_PositionFrom_mm((float)json_getReal(jobj));
- LinearOD_PositionToMsg(&linear_position, msg);
+ LinearOD_PositionToMsg(&linear_position, &msg);
// redefine a specific message type.
- msg->header.cmd = DIMENSION;
- Luos_SendMsg(service, msg);
+ msg.header.cmd = DIMENSION;
+ Luos_SendMsg(service, &msg);
return;
}
// voltage
@@ -405,25 +440,25 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
{
// this should be a function because it is frequently used
voltage_t volt = ElectricOD_VoltageFrom_V((float)json_getReal(jobj));
- ElectricOD_VoltageToMsg(&volt, msg);
- Luos_SendMsg(service, msg);
+ ElectricOD_VoltageToMsg(&volt, &msg);
+ Luos_SendMsg(service, &msg);
return;
}
// reinit
if (property && !strcmp(property, "reinit"))
{
- msg->header.cmd = REINIT;
- msg->header.size = 0;
- Luos_SendMsg(service, msg);
+ msg.header.cmd = REINIT;
+ msg.header.size = 0;
+ Luos_SendMsg(service, &msg);
return;
}
// control (play, pause, stop, rec)
if ((property && !strcmp(property, "control")) && (property_type == JSON_INTEGER))
{
- msg->data[0] = json_getInteger(jobj);
- msg->header.cmd = CONTROL;
- msg->header.size = sizeof(control_t);
- Luos_SendMsg(service, msg);
+ msg.data[0] = json_getInteger(jobj);
+ msg.header.cmd = CONTROL;
+ msg.header.size = sizeof(control_t);
+ Luos_SendMsg(service, &msg);
return;
}
// Pressure
@@ -431,10 +466,10 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
{
// this should be a function because it is frequently used
data = (float)json_getReal(jobj);
- memcpy(msg->data, &data, sizeof(data));
- msg->header.cmd = PRESSURE;
- msg->header.size = sizeof(data);
- Luos_SendMsg(service, msg);
+ memcpy(msg.data, &data, sizeof(data));
+ msg.header.cmd = PRESSURE;
+ msg.header.size = sizeof(data);
+ Luos_SendMsg(service, &msg);
return;
}
// Color
@@ -449,8 +484,8 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
color.unmap[i] = (char)json_getInteger(item);
item = json_getSibling(item);
}
- IlluminanceOD_ColorToMsg(&color, msg);
- Luos_SendMsg(service, msg);
+ IlluminanceOD_ColorToMsg(&color, &msg);
+ Luos_SendMsg(service, &msg);
}
else
{
@@ -468,8 +503,8 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
}
if (i < GATE_BUFF_SIZE - 1)
{
- msg->header.cmd = COLOR;
- Luos_SendData(service, msg, &bin_data[i], (unsigned int)size);
+ msg.header.cmd = COLOR;
+ Luos_SendData(service, &msg, &bin_data[i], (unsigned int)size);
}
}
return;
@@ -477,10 +512,10 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
// IO_STATE
if ((property && !strcmp(property, "io_state")) && (property_type == JSON_BOOLEAN))
{
- msg->data[0] = json_getBoolean(jobj);
- msg->header.cmd = IO_STATE;
- msg->header.size = sizeof(char);
- Luos_SendMsg(service, msg);
+ msg.data[0] = json_getBoolean(jobj);
+ msg.header.cmd = IO_STATE;
+ msg.header.size = sizeof(char);
+ Luos_SendMsg(service, &msg);
return;
}
// update time
@@ -490,9 +525,9 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
{
// this should be a function because it is frequently used
time = TimeOD_TimeFrom_s((float)json_getReal(jobj));
- TimeOD_TimeToMsg(&time, msg);
- msg->header.cmd = UPDATE_PUB;
- Luos_SendMsg(service, msg);
+ TimeOD_TimeToMsg(&time, &msg);
+ msg.header.cmd = UPDATE_PUB;
+ Luos_SendMsg(service, &msg);
}
else
{
@@ -506,48 +541,48 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
if ((property && !strcmp(property, "rename")) && (property_type == JSON_TEXT))
{
// In this case we need to send the message as system message
- int i = 0;
- char *alias = (char *)json_getValue(jobj);
- msg->header.size = strlen(alias);
+ int i = 0;
+ char *alias = (char *)json_getValue(jobj);
+ msg.header.size = strlen(alias);
// Change size to fit into 16 characters
- if (msg->header.size > 15)
+ if (msg.header.size > 15)
{
- msg->header.size = 15;
+ msg.header.size = 15;
}
// Clean the '\0' even if we short the alias
- alias[msg->header.size] = '\0';
+ alias[msg.header.size] = '\0';
// Copy the alias into the data field of the message
- for (i = 0; i < msg->header.size; i++)
+ for (i = 0; i < msg.header.size; i++)
{
- msg->data[i] = alias[i];
+ msg.data[i] = alias[i];
}
- msg->data[msg->header.size] = '\0';
- msg->header.cmd = WRITE_ALIAS;
- Luos_SendMsg(service, msg);
+ msg.data[msg.header.size] = '\0';
+ msg.header.cmd = WRITE_ALIAS;
+ Luos_SendMsg(service, &msg);
return;
}
// FIRMWARE REVISION
if (property && !strcmp(property, "revision"))
{
- msg->header.cmd = REVISION;
- msg->header.size = 0;
- Luos_SendMsg(service, msg);
+ msg.header.cmd = REVISION;
+ msg.header.size = 0;
+ Luos_SendMsg(service, &msg);
return;
}
// Luos REVISION
if (property && !strcmp(property, "luos_revision"))
{
- msg->header.cmd = LUOS_REVISION;
- msg->header.size = 0;
- Luos_SendMsg(service, msg);
+ msg.header.cmd = LUOS_REVISION;
+ msg.header.size = 0;
+ Luos_SendMsg(service, &msg);
return;
}
// Luos STAT
if (property && !strcmp(property, "luos_statistics"))
{
- msg->header.cmd = LUOS_STATISTICS;
- msg->header.size = 0;
- Luos_SendMsg(service, msg);
+ msg.header.cmd = LUOS_STATISTICS;
+ msg.header.size = 0;
+ Luos_SendMsg(service, &msg);
return;
}
// Parameters
@@ -556,10 +591,10 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
if (property_type == JSON_INTEGER)
{
uint32_t val = (uint32_t)json_getInteger(jobj);
- memcpy(msg->data, &val, sizeof(uint32_t));
- msg->header.size = 4;
- msg->header.cmd = PARAMETERS;
- Luos_SendMsg(service, msg);
+ memcpy(msg.data, &val, sizeof(uint32_t));
+ msg.header.size = 4;
+ msg.header.cmd = PARAMETERS;
+ Luos_SendMsg(service, &msg);
return;
}
if (property_type == JSON_ARRAY)
@@ -573,12 +608,12 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
for (val = item; val != 0; val = json_getSibling(val))
{
uint32_t value = (uint32_t)json_getInteger(val);
- memcpy(&msg->data[i * sizeof(uint32_t)], &value, sizeof(uint32_t));
+ memcpy(&msg.data[i * sizeof(uint32_t)], &value, sizeof(uint32_t));
i++;
}
- msg->header.cmd = PARAMETERS;
- msg->header.size = i * sizeof(uint32_t);
- Luos_SendMsg(service, msg);
+ msg.header.cmd = PARAMETERS;
+ msg.header.size = i * sizeof(uint32_t);
+ Luos_SendMsg(service, &msg);
}
else
{
@@ -596,8 +631,8 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
}
if (i < GATE_BUFF_SIZE - 1)
{
- msg->header.cmd = PARAMETERS;
- Luos_SendData(service, msg, &bin_data[i], (unsigned int)size);
+ msg.header.cmd = PARAMETERS;
+ Luos_SendData(service, &msg, &bin_data[i], (unsigned int)size);
}
}
return;
@@ -616,12 +651,12 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
for (val = item; val != 0; val = json_getSibling(val))
{
uint32_t value = (uint32_t)json_getInteger(val);
- memcpy(&msg->data[i * sizeof(uint32_t)], &value, sizeof(uint32_t));
+ memcpy(&msg.data[i * sizeof(uint32_t)], &value, sizeof(uint32_t));
i++;
}
- msg->header.cmd = REGISTER;
- msg->header.size = i * sizeof(uint32_t);
- Luos_SendMsg(service, msg);
+ msg.header.cmd = REGISTER;
+ msg.header.size = i * sizeof(uint32_t);
+ Luos_SendMsg(service, &msg);
}
else
{
@@ -639,8 +674,8 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
}
if (i < GATE_BUFF_SIZE - 1)
{
- msg->header.cmd = REGISTER;
- Luos_SendData(service, msg, &bin_data[i], (unsigned int)size);
+ msg.header.cmd = REGISTER;
+ Luos_SendData(service, &msg, &bin_data[i], (unsigned int)size);
}
}
return;
@@ -648,12 +683,16 @@ void Convert_JsonToMsg(service_t *service, uint16_t id, luos_type_t type, char *
// Set_id
if ((property && !strcmp(property, "set_id")) && (property_type == JSON_INTEGER))
{
- msg->data[0] = (char)json_getInteger(jobj);
- msg->header.cmd = SETID;
- msg->header.size = sizeof(char);
- Luos_SendMsg(service, msg);
+ msg.data[0] = (char)json_getInteger(jobj);
+ msg.header.cmd = SETID;
+ msg.header.size = sizeof(char);
+ Luos_SendMsg(service, &msg);
return;
}
+
+ // If we reach the end of this function, this is because this command is not known by the gate.
+ // So we call the optional custom function to manage it.
+ Convert_CustomJsonToMsg(service, id, property, jobj, bin_data);
}
/*******************************************************************************
@@ -881,6 +920,9 @@ uint16_t Convert_MsgToData(msg_t *msg, char *data)
}
break;
default:
+ // If we reach this point, this is because the command is not known by the gate.
+ // So we call the optional custom function to manage it.
+ Convert_CustomMsgToJson(msg, data);
break;
}
return (uint16_t)strlen(data);
@@ -1063,6 +1105,10 @@ const char *Convert_StringFromType(luos_type_t type)
return "Pressure";
break;
default:
+ if (Convert_CustomStringFromType(type) != NULL)
+ {
+ return Convert_CustomStringFromType(type);
+ }
return "Unknown";
break;
}
diff --git a/tool_services/gate/TinyJSON/custom-json.h b/tool_services/gate/TinyJSON/custom-json.h
new file mode 100644
index 000000000..91c102398
--- /dev/null
+++ b/tool_services/gate/TinyJSON/custom-json.h
@@ -0,0 +1,13 @@
+/******************************************************************************
+ * @file custom-json
+ * @brief Function allowing users to add custom data management to Luos Json conversion
+ * @author Luos
+ * @version 0.0.0
+ ******************************************************************************/
+
+#include "tiny-json.h"
+#include "luos_engine.h"
+
+void Convert_CustomJsonToMsg(service_t *service, uint16_t target_id, char *property, const json_t *jobj, char *json_str);
+void Convert_CustomMsgToJson(msg_t *msg, char *data);
+const char *Convert_CustomStringFromType(luos_type_t type);
diff --git a/tool_services/gate/convert.h b/tool_services/gate/convert.h
index 46ad2cfeb..600bf53a1 100644
--- a/tool_services/gate/convert.h
+++ b/tool_services/gate/convert.h
@@ -26,7 +26,7 @@ typedef struct
} servo_parameters_t;
// Luos data to Luos messages convertion
-void Convert_DataToLuos(service_t *service, char *data);
+void Convert_DataToMsg(service_t *service, char *data);
// Luos service information to Data convertion
uint16_t Convert_StartData(char *data);
diff --git a/tool_services/gate/data_manager.c b/tool_services/gate/data_manager.c
index 23d75aeee..6c1e74875 100644
--- a/tool_services/gate/data_manager.c
+++ b/tool_services/gate/data_manager.c
@@ -87,7 +87,7 @@ void DataManager_RunPipeOnly(service_t *service)
if (Luos_ReceiveData(service, &data_msg, data_cmd) > 0)
{
// We finish to receive this data, execute the received command
- Convert_DataToLuos(service, data_cmd);
+ Convert_DataToMsg(service, data_cmd);
}
}
}
@@ -199,7 +199,7 @@ void DataManager_Format(service_t *service)
while (size > 0 && *data_ptr == '{')
{
uint32_t data_consumed = strlen(data_ptr) + 1;
- Convert_DataToLuos(service, data_ptr);
+ Convert_DataToMsg(service, data_ptr);
size -= data_consumed;
data_ptr += data_consumed;
}
diff --git a/tool_services/pipe/README.md b/tool_services/pipe/README.md
index 691125593..03b6465cb 100644
--- a/tool_services/pipe/README.md
+++ b/tool_services/pipe/README.md
@@ -1,9 +1,8 @@
-[![](https://img.shields.io/github/license/Luos-io/Luos)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
+[![](https://img.shields.io/github/license/Luos-io/luos_engine)](https://github.com/Luos-io/luos_engine/blob/master/LICENSE)
[![](https://img.shields.io/badge/Luos-Documentation-34A3B4)](https://www.luos.io)
-[![](http://certified.luos.io)](https://luos.io)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/luos/library/Pipe.svg)](https://registry.platformio.org/libraries/luos_engine/Pipe)
[![](https://img.shields.io/discord/902486791658041364?label=Discord&logo=discord&style=social)](http://bit.ly/JoinLuosDiscord)