5. Services
In plumCore, being a microkernel architecture, most of the functionality is implemented as unprivileged user-space services. A service generally consists of a state (its assigned memory), threads with their corresponding stacks, one or more interfaces the service provides and a bunch of depenencies on interfaces provided by other services or the microkernel itself.
There are multiple groups of services for different purposes, albeit not strictly marked or split in any way.
Low level architecture-dependent services provide means of using or controlling systick or interrupts, SoC-dependent services allow accessing SoC’s peripherals and communication interfaces, port-dependent services (although rare) may utilize some specific port information to control part of its hardware.
Higher level services never access hardware or SoC resources directly. They usually depend on interfaces provided by low level services. In the result they allow access to memories, filesystems, GNSS recivers, radio interfaces, etc.
There are even higher level services possible providing command line interfaces, user interfaces using displays, high level encrypted network connectivity, data-driven flow graph processing capability or any other functionality abstract enough to not depend on any low level specifics.
5.1. Low level device drivers
- 5.1.1. STM32 12 bit SAR ADC driver
- 5.1.2. STM32 DAC driver
- 5.1.3. STM32G4 FDCAN peripheral driver
- 5.1.4. STM32 I2C peripheral driver
- 5.1.5. STM32L4 low-power MCU family power manager
- 5.1.6. STM32 QSPI flash memory driver
- 5.1.7. STM32 RTC peripheral clock driver
- 5.1.8. STM32 SPI peripheral driver
- 5.1.9. System clock implemented using STM32 timer
- 5.1.10. Capacitive sensing implemented using STM32 timer
- 5.1.11. STM32 UART driver
- 5.1.12. STM32 watchdog peripheral driver
5.2. High level (second level) device drivers
- 5.2.1. adc-sensor: Measuring a single analog sensor with an ADC input
- 5.2.2. bq35100: Primary cell gauging using a TI’s BQ35100 gauge
- 5.2.3. gps-ublox: A generic driver for u-blox based GNSS receivers
- 5.2.4. gsm-quectel: Service for accessing Quectel cellular modems
- 5.2.5. ICM-62688-P 3 axis accelerometer and 3 axis gyroscope driver
- 5.2.6. ADXL355 3 axis accelerometer
- 5.2.7. Si7002/7021 temperature and humidity sensor driver
5.3. DAQ and data processing services
5.4. Volume and filesystem access
- 5.4.1. fs-spiffs: SPIFFS filesystem library wrapper service
- 5.4.2. MIB stored in a flash device in a CBOR format
- 5.4.3. FIFO in a flash device
- 5.4.4. NVM (non-volatile memory) key-value store in a flash partition
- 5.4.5. Flash memory test suite
- 5.4.6. Flash volumes service (static configuration)
- 5.4.7. LoRa filesystem services