Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

README.md: improve feature list #21059

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 44 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,30 +57,50 @@ LGPL code.

RIOT provides features including, but not limited to:

* a preemptive, tickless scheduler with priorities
* flexible memory management
* high resolution, long-term timers
* MTD abstraction layer
* File System integration
* support 200+ boards based on AVR, MSP430, ESP8266, ESP32, RISC-V,
ARM7 and ARM Cortex-M
* the native port allows to run RIOT as-is on Linux and BSD.
Multiple instances of RIOT running on a single machine can also be
interconnected via a simple virtual Ethernet bridge or via a simulated
IEEE 802.15.4 network (ZEP)
* IPv6
* 6LoWPAN (RFC4944, RFC6282, and RFC6775)
* UDP
* RPL (storing mode, P2P mode)
* CoAP
* OTA updates via SUIT
* MQTT
* USB (device mode)
* Display / Touchscreen support
* CCN-Lite
* LoRaWAN
* UWB
* Bluetooth (BLE) via [NimBLE](https://github.com/apache/mynewt-nimble)
* Platforms Supported
- 200+ boards based on AVR, MSP430, ESP8266, ESP32, RISC-V, ARM7, and ARM Cortex-M
- the native port allows to run RIOT as-is on Linux and BSD.
Multiple instances of RIOT running on a single machine can also be
interconnected via a simple virtual Ethernet bridge or via a simulated
IEEE 802.15.4 network (ZEP)

* Programming Environment
- Write native code in C, C++, or Rust
- Rely upon POSIX APIs, user friendly hardware abstractions, and standard embedded Rust interfaces
- Integrate dynamic runtimes such as MicroPython, elm (JavaScript), and WASM

* Network Features and Protocols
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section could also contain LwM2M and CAN

- IPv6
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and IPv4 via LWIP

Copy link
Contributor Author

@kfessel kfessel Dec 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- IPv6
- IPv6
- IPv4 via LwIP

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just a nit, they usually spell themself lwIP

- 6LoWPAN (RFC4944, RFC6282, and RFC6775)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would also add RFC7668 here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- 6LoWPAN (RFC4944, RFC6282, and RFC6775)
- 6LoWPAN (RFC4944, RFC6282, RFC6775 and RFC7668 )

- UDP
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and TCP

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- UDP
- UDP
- TCP

i think there was some session limit(s) (good by and only one ?) -- @maribu had a recent look into

- RPL (storing mode, P2P mode)
- CoAP
- MQTT
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

via paho-mqtt and MQTT-SN

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other application layer protocols (from the top of my head: DNS and DHCPv6)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- MQTT
- MQTT via paho-mqtt and MQTT-SN

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think the dns and dhcp might need another place closer to RPL

- Bluetooth (BLE) via [NimBLE](https://github.com/apache/mynewt-nimble)
- LoRaWAN
- UWB
- CNN-Lite
- LwIP
- Dose (single pair ethernet like networking on serial interface UART)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feels a bit strange to mention this and not Ethernet/IEEE 802.15.4/SLIP

Copy link
Contributor Author

@kfessel kfessel Dec 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Dose (single pair ethernet like networking on serial interface UART)
- IEEE 802.15.4
- Ethernet (also via USB)
- SLIP (or ethos networking via Serial)
- Dose (single pair ethernet like networking on serial interface UART)


* System Features
- a preemptive, tickless scheduler with priorities
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

with option to do tick-based round-robin scheduling

Copy link
Contributor Author

@kfessel kfessel Dec 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- a preemptive, tickless scheduler with priorities
- a preemptive, tickless scheduler with priorities, optional periodic round robin within priorities

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we might need a linebreak here to preserve the orginal line

- flexible memory management
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which memory management are we referring to here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

probably the one that does not force you to have a heap available but can use it if you need it -- my guess

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's not add things that we are not sure what they mean ourself 😅

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is, as of now, the 2nd most prominent feature in the list.

I also don't know what is meant by that and I do agree that it should be dropped if nobody can explain it.

But maybe git praise and ask the author first?

Copy link
Contributor Author

@kfessel kfessel Dec 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This line was introduced with the README.md 29.12.12 @784ef523900f3b0942c43099f57621b30f6cab73 - it is in it current form the the second oldest line in this file predated only by (due to a typo fix) -- if the git history wasn't manipulated.
Its original author does already know that this question exists.

nur

  • a preemptive, tickless scheduler with priorities
    und
  • IPv6
    sind älter (und nicht leer)

Copy link
Contributor Author

@kfessel kfessel Dec 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if i did not misread tlsf-malloc replaces malloc if that pkg is used, so it has not to used explicitly -- ( the pool needs to be before the first allocation-call happens)

According to the initial paper it has:

  • a lower complexity class O(1) than first fit alloc (O(length of free list)) (I am assuming embedded libc take the easy route and did not check)
  • pooling is also an advantage (more safe) in that the malloc fails (at least that can be handled) rather then letting the heap run into the main stack
  • can work with multiple memory regions ( external memory would just add to the pool)
  • the low complexity class seems neither be achived by allways beeing cpu hungry nor by wasting lots of memory for management or letting it unused

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • the malloc fails (at least that can be handled) rather then letting the heap run into the main stack

that's what any sane malloc implementation would do, tests/sys/malloc will rely on that

  • can work with multiple memory regions

so do newlib/picolibc

I think this is a pretty niche feature, no need to advertise it so prominently

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The main reason to add TLSF in the first place was its real-time capability (because of O(1)).

Copy link
Contributor Author

@kfessel kfessel Dec 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's --fail out of mem and not crash the stack-- what any sane malloc implementation would do, tests/sys/malloc will rely on that

I never checked where riot places the main/start stack in relation to the heap and it has a more sane placement than i thought - somehow had the default stackplacement of avrlibc in my head(endless stack and endless heap until they crash): [data bss heap> empty ram <stack] , seems link the isr_stack might be less lucky sometimes but then the _eheap is adjusted.

thank you for that hint.

that only leaves the O(1) thing for tlsf

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still think allowing the allocator to be modified is quiet flexible but maybe this is not our feature but one of new/piolib(c)

Suggested change
- flexible memory management

- high resolution, long-term timers
- MTD abstraction layer for memory devices
- File System integration

* Security Features
- OTA updates via SUIT
- PSA Cryptographic API
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am all in to show the PSA here, but the module still says "This implementation is not complete and not yet thoroughly tested. Please do not use this module in production, as it may introduce security issues."
Maybe it's time to drop that warning, if we feel comfortable to showcase it in the readme? /cc @Einhornhool @mguetschow

- DTLS, EDHOC

* Device Drivers
- SPI, I2C, UART, USB
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CAN should also be mentioned here, maybe also RTC, ADC, DAC

Copy link
Contributor Author

@kfessel kfessel Dec 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- SPI, I2C, UART, USB
- SPI, I2C, UART, USB, CAN
- RTC, ADC, DAC, PWM, Timer

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PWM

- Various sensors: Environmental sensors, IMUs, magnetometers, particulate matter sensors
- Various actuators: Servos, motors, dimmers, switches, RGB LEDs
- Displays and touchscreens
- GNSS modules
Copy link
Contributor

@benpicco benpicco Dec 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't have any of those GNSS drivers upstream AFAIK

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't the minmea package sufficient to use GNSS modules?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

on the most basic level yes, but then you could also argue that the at module is enough to support an LTE module

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minmea is more like gnss (nema) meassage interpreter without in depth module support so how about:

Suggested change
- GNSS modules
- GNSS

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@benpicco How about ⬆️ instead of GNSS modules?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But I do get @benpicco's point. When we add GNSS, why not also add basic support. Color me convinced that GNSS is not a strong suit of RIOT and is better not listed on the front page.


## Getting RIOT

Expand Down
Loading