πŸš€ HardFOC Internal Interface Wrapper

Multi-MCU Interface C++17 ESP32-C6 STM32 License

🎯 Multi-MCU Hardware Abstraction Layer

Universal interface wrapper supporting multiple MCU platforms - ESP32 first implementation


πŸ“š Table of Contents


🎯 Overview

The HardFOC Internal Interface Wrapper is a multi-MCU hardware abstraction layer designed to provide unified APIs across different microcontroller platforms. Currently supporting the ESP32 family (ESP32, ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6, ESP32-H2) as the first implementation, with STM32 and additional MCUs planned for future releases.

🎯 Multi-MCU Architecture Goals

  • πŸ”„ MCU Portability - Write once, run on multiple MCU platforms
  • 🎯 Unified APIs - Consistent interface across all peripheral types
  • ⚑ Performance - Zero-cost abstractions with compile-time optimization
  • πŸ›‘οΈ Type Safety - Strong typing with project-specific type system
  • πŸ“ˆ Extensible - Easy to add new MCUs and peripheral drivers
  • πŸ”Œ Complete Coverage - 14+ peripheral interfaces for comprehensive hardware control

πŸ—οΈ Multi-MCU Architecture

The wrapper follows a multi-layered architecture supporting multiple MCU platforms:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                           🎯 Application Layer                                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
β”‚  β”‚ Motor       β”‚  β”‚ IoT         β”‚  β”‚ Industrial  β”‚  β”‚ Custom      β”‚             β”‚
β”‚  β”‚ Control     β”‚  β”‚ Integration β”‚  β”‚ Systems     β”‚  β”‚ Applicationsβ”‚             β”‚
β”‚  β”‚ Apps        β”‚  β”‚ Apps        β”‚  β”‚ Apps        β”‚  β”‚ Apps        β”‚             β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
β”‚         β”‚                 β”‚                 β”‚                 β”‚                 β”‚
β”‚         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                 β”‚
β”‚                           β”‚                 β”‚                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                    πŸ”’ Thread-Safe Layer (Optional)                         β”‚ β”‚
β”‚  β”‚                                                                            β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚ β”‚
β”‚  β”‚  β”‚ Thread-Safe β”‚  β”‚ Concurrent  β”‚  β”‚ Mutex       β”‚  β”‚ Lock-Free   β”‚        β”‚ β”‚
β”‚  β”‚  β”‚ Wrappers    β”‚  β”‚ Access      β”‚  β”‚ Protection  β”‚  β”‚ Operations  β”‚        β”‚ β”‚
β”‚  β”‚  β”‚             β”‚  β”‚ Control     β”‚  β”‚             β”‚  β”‚             β”‚        β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        πŸ›οΈ Base Interface Layer (MCU-Agnostic)                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”            β”‚
β”‚  β”‚ Core        β”‚  β”‚ Communicationβ”‚  β”‚ Wireless    β”‚  β”‚ System      β”‚            β”‚
β”‚  β”‚ Interfaces  β”‚  β”‚ Interfaces   β”‚  β”‚ Interfaces  β”‚  β”‚ Interfaces  β”‚            β”‚
β”‚  β”‚             β”‚  β”‚              β”‚  β”‚             β”‚  β”‚             β”‚            β”‚
β”‚  β”‚ GPIO        β”‚  β”‚ I2C          β”‚  β”‚ WiFi        β”‚  β”‚ NVS         β”‚            β”‚
β”‚  β”‚ ADC         β”‚  β”‚ SPI          β”‚  β”‚ Bluetooth   β”‚  β”‚ Timer       β”‚            β”‚
β”‚  β”‚ PWM         β”‚  β”‚ UART         β”‚  β”‚             β”‚  β”‚ Temperature β”‚            β”‚
β”‚  β”‚ PIO         β”‚  β”‚ CAN          β”‚  β”‚             β”‚  β”‚ Logger      β”‚            β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      βš™οΈ MCU Implementation Layer                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
β”‚  β”‚ ESP32-C6    β”‚  β”‚ STM32       β”‚  β”‚ Future      β”‚  β”‚ External    β”‚             β”‚
β”‚  β”‚ (Current)   β”‚  β”‚ (Planned)   β”‚  β”‚ MCUs        β”‚  β”‚ Hardware    β”‚             β”‚
β”‚  β”‚             β”‚  β”‚             β”‚  β”‚ (Planned)   β”‚  β”‚ Drivers     β”‚             β”‚
β”‚  β”‚ EspGpio     β”‚  β”‚ StmGpio     β”‚  β”‚             β”‚  β”‚ I2C Devices β”‚             β”‚
β”‚  β”‚ EspAdc      β”‚  β”‚ StmAdc      β”‚  β”‚             β”‚  β”‚ SPI Devices β”‚             β”‚
β”‚  β”‚ EspPwm      β”‚  β”‚ StmPwm      β”‚  β”‚             β”‚  β”‚ UART Devicesβ”‚             β”‚
β”‚  β”‚ EspI2c      β”‚  β”‚ StmI2c      β”‚  β”‚             β”‚  β”‚ CAN Devices β”‚             β”‚
β”‚  β”‚ EspSpi      β”‚  β”‚ StmSpi      β”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β”‚ EspUart     β”‚  β”‚ StmUart     β”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β”‚ EspCan      β”‚  β”‚ StmCan      β”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β”‚ EspWifi     β”‚  β”‚ StmWifi     β”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β”‚ EspBluetoothβ”‚  β”‚ StmBluetoothβ”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β”‚ EspNvs      β”‚  β”‚ StmNvs      β”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β”‚ EspTimer    β”‚  β”‚ StmTimer    β”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β”‚ EspTemp     β”‚  β”‚ StmTemp     β”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β”‚ EspLogger   β”‚  β”‚ StmLogger   β”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                           πŸ”§ Hardware Layer                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”             β”‚
β”‚  β”‚ ESP32-C6    β”‚  β”‚ STM32       β”‚  β”‚ Future      β”‚  β”‚ External    β”‚             β”‚
β”‚  β”‚ Hardware    β”‚  β”‚ Hardware    β”‚  β”‚ MCU         β”‚  β”‚ Components  β”‚             β”‚
β”‚  β”‚ (Current)   β”‚  β”‚ (Planned)   β”‚  β”‚ Hardware    β”‚  β”‚             β”‚             β”‚
β”‚  β”‚             β”‚  β”‚             β”‚  β”‚ (Planned)   β”‚  β”‚ Sensors     β”‚             β”‚
β”‚  β”‚ GPIO Pins   β”‚  β”‚ GPIO Pins   β”‚  β”‚             β”‚  β”‚ Actuators   β”‚             β”‚
β”‚  β”‚ ADC Units   β”‚  β”‚ ADC Units   β”‚  β”‚             β”‚  β”‚ Displays    β”‚             β”‚
β”‚  β”‚ PWM Timers  β”‚  β”‚ PWM Timers  β”‚  β”‚             β”‚  β”‚ Memory      β”‚             β”‚
β”‚  β”‚ I2C Buses   β”‚  β”‚ I2C Buses   β”‚  β”‚             β”‚  β”‚ Storage     β”‚             β”‚
β”‚  β”‚ SPI Buses   β”‚  β”‚ SPI Buses   β”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β”‚ UART Ports  β”‚  β”‚ UART Ports  β”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β”‚ CAN Controllersβ”‚ CAN Controllersβ”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β”‚ WiFi Radio  β”‚  β”‚ WiFi Radio  β”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β”‚ BT Radio    β”‚  β”‚ BT Radio    β”‚  β”‚             β”‚  β”‚             β”‚             β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”„ Interface Inheritance Pattern

All interfaces follow a consistent inheritance pattern across MCU platforms:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                           πŸ›οΈ Base Interface (Abstract)                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                    BaseInterface (Pure Virtual)                            β”‚ β”‚
β”‚  β”‚                                                                            β”‚ β”‚
β”‚  β”‚  + EnsureInitialized() β†’ error_t                                           β”‚ β”‚
β”‚  β”‚  + IsInitialized() β†’ bool                                                  β”‚ β”‚
β”‚  β”‚  + GetCapabilities() β†’ capabilities_t                                      β”‚ β”‚
β”‚  β”‚  + Reset() β†’ error_t                                                       β”‚ β”‚
β”‚  β”‚  + GetLastError() β†’ error_t                                                β”‚ β”‚
β”‚  β”‚  + GetStatistics() β†’ statistics_t                                          β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        πŸ”§ MCU-Specific Implementations                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                              β”‚
β”‚  β”‚ ESP32       β”‚  β”‚ STM32       β”‚  β”‚ Future      β”‚                              β”‚
β”‚  β”‚ (Current)   β”‚  β”‚ (Planned)   β”‚  β”‚             β”‚                              β”‚
β”‚  β”‚             β”‚  β”‚             β”‚  β”‚ (Planned)   β”‚                              β”‚
β”‚  β”‚ EspGpio     β”‚  β”‚ StmGpio     β”‚  β”‚             β”‚                              β”‚
β”‚  β”‚ EspAdc      β”‚  β”‚ StmAdc      β”‚  β”‚             β”‚                              β”‚
β”‚  β”‚ EspPwm      β”‚  β”‚ StmPwm      β”‚  β”‚             β”‚                              β”‚
β”‚  β”‚ ...         β”‚  β”‚ ...         β”‚  β”‚ ...         β”‚                              β”‚
β”‚  β”‚             β”‚  β”‚             β”‚  β”‚             β”‚                              β”‚                 
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                              β”‚                 
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”§ Type System

The wrapper uses a comprehensive type system designed for maximum portability and consistency across multiple MCU platforms:

🎯 Core Types for Multi-MCU Applications

1
2
3
4
5
6
7
8
9
// Platform-agnostic integer types for all MCU platforms
using hf_u8_t = uint8_t;    // 8-bit unsigned
using hf_u16_t = uint16_t;  // 16-bit unsigned  
using hf_u32_t = uint32_t;  // 32-bit unsigned
using hf_u64_t = uint64_t;  // 64-bit unsigned
using hf_i8_t = int8_t;     // 8-bit signed
using hf_i16_t = int16_t;   // 16-bit signed
using hf_i32_t = int32_t;   // 32-bit signed
using hf_i64_t = int64_t;   // 64-bit signed

🏭 Hardware Abstraction Types

1
2
3
4
5
6
7
8
9
10
11
12
// Hardware abstraction types for all MCU platforms
using hf_pin_num_t = hf_i32_t;          // GPIO pin numbers
using hf_channel_id_t = hf_u32_t;       // ADC/PWM/DMA channels
using hf_time_t = hf_u64_t;             // Time values in microseconds
using hf_frequency_hz_t = hf_u32_t;     // Frequency values in Hz

// Application-specific semantic types
using hf_voltage_mv_t = hf_u32_t;       // Voltage in millivolts
using hf_current_ma_t = hf_u32_t;       // Current in milliamps
using hf_temperature_c_t = hf_i32_t;    // Temperature in Celsius (scaled by 100)
using hf_speed_rpm_t = hf_u32_t;        // Motor speed in RPM
using hf_torque_nm_t = hf_u32_t;        // Torque in Newton-meters (scaled)

πŸ“– Complete Documentation: HardwareTypes API Reference


✨ Key Features

πŸ”Œ Comprehensive Multi-MCU Hardware Support

  • 14 Complete Base Interfaces - From GPIO to wireless communication across all MCU platforms
  • ESP32 Family Implementation - Full support for all ESP32 variants (ESP32, ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6, ESP32-H2)
  • STM32 Implementation - Planned support for STM32 peripherals (future)
  • External Hardware Integration - I2C/SPI device support for expansion boards

⚑ Performance & Reliability

  • Real-Time Optimized - Designed for critical timing requirements
  • Lazy Initialization - Resources allocated only when needed
  • Thread-Safe Options - Optional concurrent access support
  • Comprehensive Error Handling - Detailed error reporting for reliability

🌐 Modern Connectivity

  • WiFi Station/AP Modes - Complete networking for IoT integration
  • Bluetooth Classic & BLE - Mobile and IoT connectivity
  • Cloud Integration Ready - Built-in features for cloud connectivity
  • Remote Monitoring - Advanced logging and diagnostics

πŸ“Š Professional Features

  • Rich Diagnostics - Performance monitoring and system health
  • Configuration Management - Non-volatile settings storage
  • Advanced Logging - Multi-level, multi-output logging
  • Thermal Management - Temperature monitoring and protection

πŸ”Œ Supported Hardware

πŸ“Š Multi-MCU Platform Support Matrix

| MCU Platform | GPIO | ADC | PWM | I2C | SPI | UART | CAN | WiFi | BT | Temp | NVS | Timer | PIO | Logger | Status |

|β€”β€”β€”β€”β€”β€”|β€”β€”β€”-|β€”β€”β€”|β€”β€”β€”|β€”β€”β€”|β€”β€”β€”|β€”β€”β€”-|β€”β€”β€”|β€”β€”β€”-|——–|β€”β€”β€”-|β€”β€”β€”|———–|β€”β€”β€”|β€”β€”β€”β€”|β€”β€”β€”β€”|

ESP32 Family βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… Current
STM32 πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ Planned
Future MCUs πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ πŸ”„ Planned

πŸ›οΈ Design Principles

🎯 Multi-MCU Design Goals

  1. πŸ”Œ Consistency - Uniform APIs across all MCU platforms and peripheral interfaces
  2. ⚑ Performance - Optimized for real-time requirements across all MCU platforms
  3. πŸ›‘οΈ Reliability - Comprehensive error handling for critical applications
  4. πŸ“ˆ Scalability - From simple prototypes to complex industrial systems
  5. πŸ”§ Simplicity - Easy-to-use APIs for rapid development
  6. 🌐 Modern - Built-in IoT connectivity for next-generation applications

πŸ—οΈ Architectural Patterns

  • Abstract Base Classes - Define consistent interfaces for all peripheral types
  • Platform Implementations - Hardware-specific optimizations for each MCU platform
  • Optional Thread Safety - Concurrent access support for complex applications
  • Lazy Resource Management - Efficient memory usage on resource-constrained MCUs
  • Comprehensive Error Handling - Detailed error reporting for reliability
  • Semantic Type System - Application domain-specific types for clarity

πŸ“‹ API Reference

πŸ“š Documentation Structure

Our comprehensive documentation is organized into logical sections for easy navigation:

Section Description Documentation

|β€”β€”β€”β€”-|—————–|β€”β€”β€”β€”β€”β€”-|

πŸ“‹ API Interfaces Base classes and abstract interfaces Complete API reference with examples
πŸ”§ ESP32 Implementations ESP32-C6 specific implementations Hardware-specific optimizations and features
πŸ› οΈ Utility Classes Advanced utility classes and helpers RAII patterns, safety mechanisms, and convenience wrappers
πŸ§ͺ Test Suites Test documentation and examples Test suites and examples

πŸ›οΈ Core Interfaces (MCU-Agnostic)

Interface Key Features Use Cases Status

|β€”β€”β€”β€”β€”|β€”β€”β€”β€”β€”β€”|β€”β€”β€”β€”β€”|β€”β€”β€”β€”|

BaseGpio Digital I/O, interrupts, pull resistors Enable pins, limit switches, indicators βœ… Complete
BaseAdc Multi-channel, calibration, voltage conversion Current sensing, position feedback βœ… Complete
BasePwm Multi-channel, frequency control, duty cycle Motor speed control, servo control βœ… Complete
BasePio Custom protocols, precise timing, encoding Encoder reading, custom protocols βœ… Complete

πŸ“‘ Communication Interfaces (MCU-Agnostic)

Interface Key Features Use Cases Status

|β€”β€”β€”β€”β€”|β€”β€”β€”β€”β€”β€”|β€”β€”β€”β€”β€”|β€”β€”β€”β€”|

BaseI2c Master mode, device scanning, error recovery Sensor communication, display control βœ… Complete
BaseSpi Full-duplex, configurable modes, DMA support High-speed data, SD cards βœ… Complete
BaseUart Async I/O, flow control, configurable parameters Debug output, external communication βœ… Complete
BaseCan Standard/Extended frames, filtering, error handling Industrial networking, multi-device coordination βœ… Complete

🌐 Wireless Interfaces (MCU-Agnostic)

Interface Key Features Use Cases Status

|β€”β€”β€”β€”β€”|β€”β€”β€”β€”β€”β€”|β€”β€”β€”β€”β€”|β€”β€”β€”β€”|

BaseWifi Station/AP modes, WPA3 security, mesh networking Cloud connectivity, remote monitoring βœ… Complete
BaseBluetooth Classic & BLE, pairing, service discovery Mobile apps, wireless configuration βœ… Complete

πŸ› οΈ System Interfaces (MCU-Agnostic)

Interface Key Features Use Cases Status

|β€”β€”β€”β€”β€”|β€”β€”β€”β€”β€”β€”|β€”β€”β€”β€”β€”|β€”β€”β€”β€”|

BaseNvs Key-value storage, encryption, wear leveling Configuration storage, calibration data βœ… Complete
BasePeriodicTimer Callback scheduling, high precision, multi-timer Control loops, sensor sampling βœ… Complete
BaseTemperature Multi-sensor support, calibration, thermal protection Thermal monitoring, safety protection βœ… Complete
BaseLogger Multi-level logging, thread-safe, network output System diagnostics, performance monitoring βœ… Complete

πŸ”§ MCU-Specific Implementations

MCU Platform Implementation Base Class MCU-Specific Features Documentation Status

|β€”β€”β€”β€”β€”β€”|β€”β€”β€”β€”β€”β€”-|β€”β€”β€”β€”β€”-|β€”β€”β€”β€”β€”β€”β€”β€”β€”|β€”β€”β€”β€”β€”β€”-|β€”β€”β€”β€”|

ESP32 Family EspGpio BaseGpio Drive strength, slew rate control βœ… Complete βœ… Complete
ESP32 Family EspAdc BaseAdc 12-bit resolution, multiple units βœ… Complete βœ… Complete
ESP32 Family EspPwm BasePwm LEDC controller, fade effects βœ… Complete βœ… Complete
ESP32 Family EspI2c BaseI2c Clock stretching, multi-master βœ… Complete βœ… Complete
ESP32 Family EspSpi BaseSpi Full-duplex, DMA support βœ… Complete βœ… Complete
ESP32 Family EspUart BaseUart Hardware flow control βœ… Complete βœ… Complete
ESP32 Family EspCan BaseCan TWAI controller, SN65 transceiver βœ… Complete βœ… Complete
ESP32 Family EspWifi BaseWifi 802.11n, WPA3, mesh βœ… Complete βœ… Complete
ESP32 Family EspBluetooth BaseBluetooth BLE/Classic, NimBLE optimized βœ… Complete βœ… Complete
ESP32 Family EspNvs BaseNvs Encrypted storage, wear leveling βœ… Complete βœ… Complete
ESP32 Family EspPeriodicTimer BasePeriodicTimer High precision, multi-timer βœ… Complete βœ… Complete
ESP32 Family EspTemperature BaseTemperature Internal sensor, I2C/1-Wire βœ… Complete βœ… Complete
ESP32 Family EspPio BasePio RMT peripheral, custom protocols βœ… Complete βœ… Complete
ESP32 Family EspLogger BaseLogger Multi-output, network logging βœ… Complete βœ… Complete
STM32 StmGpio BaseGpio STM32-specific GPIO features πŸ”„ Planned πŸ”„ Planned
STM32 StmAdc BaseAdc STM32-specific ADC features πŸ”„ Planned πŸ”„ Planned
STM32 StmPwm BasePwm STM32-specific PWM features πŸ”„ Planned πŸ”„ Planned
STM32 StmI2c BaseI2c STM32-specific I2C features πŸ”„ Planned πŸ”„ Planned
STM32 StmSpi BaseSpi STM32-specific SPI features πŸ”„ Planned πŸ”„ Planned
STM32 StmUart BaseUart STM32-specific UART features πŸ”„ Planned πŸ”„ Planned
STM32 StmCan BaseCan STM32-specific CAN features πŸ”„ Planned πŸ”„ Planned
STM32 StmWifi BaseWifi STM32-specific WiFi features πŸ”„ Planned πŸ”„ Planned
STM32 StmBluetooth BaseBluetooth STM32-specific Bluetooth features πŸ”„ Planned πŸ”„ Planned
STM32 StmNvs BaseNvs STM32-specific NVS features πŸ”„ Planned πŸ”„ Planned
STM32 StmPeriodicTimer BasePeriodicTimer STM32-specific timer features πŸ”„ Planned πŸ”„ Planned
STM32 StmTemperature BaseTemperature STM32-specific temperature features πŸ”„ Planned πŸ”„ Planned
STM32 StmPio BasePio STM32-specific PIO features πŸ”„ Planned πŸ”„ Planned
STM32 StmLogger BaseLogger STM32-specific logger features πŸ”„ Planned πŸ”„ Planned

πŸ“‹ ESP32 Family Support Details

The ESP32 implementations support multiple ESP32 variants with conditional compilation:

ESP32 Variant GPIO ADC PWM I2C SPI UART CAN WiFi BT Temp NVS Timer PIO Logger

|β€”β€”β€”β€”β€”β€”-|β€”β€”β€”-|β€”β€”β€”|β€”β€”β€”|β€”β€”β€”|β€”β€”β€”|β€”β€”β€”-|β€”β€”β€”|β€”β€”β€”-|——–|β€”β€”β€”-|β€”β€”β€”|———–|β€”β€”β€”|β€”β€”β€”β€”|

ESP32 βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ…
ESP32-S2 βœ… βœ… βœ… βœ… βœ… βœ… ❌ βœ… ❌ βœ… βœ… βœ… βœ… βœ…
ESP32-S3 βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ…
ESP32-C3 βœ… βœ… βœ… βœ… βœ… βœ… βœ… ❌ βœ… βœ… βœ… βœ… βœ… βœ…
ESP32-C6 βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ… βœ…
ESP32-H2 βœ… βœ… βœ… βœ… βœ… βœ… βœ… ❌ βœ… βœ… βœ… βœ… βœ… βœ…

🎯 Type System Reference

Documentation Description Status

|β€”β€”β€”β€”β€”β€”|—————–|β€”β€”β€”β€”|

HardwareTypes Platform-agnostic type definitions βœ… Complete

πŸš€ Quick Start

πŸ“‹ Prerequisites for Multi-MCU Development

  • ESP-IDF v5.0+ for ESP32 family development (current)
  • STM32CubeIDE for STM32 development (planned)
  • C++17 compatible compiler (GCC 8+ or Clang 7+)
  • CMake 3.16+ for project management
  • Target MCU Development Board (ESP32 family, STM32, etc.)

βš™οΈ Installation for Multi-MCU Projects

1
2
3
4
5
6
7
8
9
10
11
12
13
## Clone the multi-MCU wrapper repository
git clone https://github.com/hardfoc/hf-internal-interface-wrap.git
cd hf-internal-interface-wrap

## For ESP32 projects, add to your CMakeLists.txt
idf_component_register(
    SRCS "main.cpp"
    INCLUDE_DIRS "."
    REQUIRES hf_internal_interface_wrap
)

## For STM32 projects (future)
## Add to your CMakeLists.txt or project configuration

🎯 Basic Multi-MCU GPIO Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// ESP32 Family Implementation (Current)
#include "inc/mcu/esp32/EspGpio.h"

// Create output pin for LED control
EspGpio led_pin(GPIO_NUM_2, hf_gpio_direction_t::HF_GPIO_DIRECTION_OUTPUT);

// Create input pin for button
EspGpio button_pin(GPIO_NUM_0, hf_gpio_direction_t::HF_GPIO_DIRECTION_INPUT,
                  hf_gpio_active_state_t::HF_GPIO_ACTIVE_LOW,
                  hf_gpio_output_mode_t::HF_GPIO_OUTPUT_MODE_PUSH_PULL,
                  hf_gpio_pull_mode_t::HF_GPIO_PULL_MODE_UP);

void app_main() {
    // Initialize pins
    led_pin.EnsureInitialized();
    button_pin.EnsureInitialized();
    
    while (true) {
        if (button_pin.IsActive()) {
            led_pin.SetActive();    // Turn on LED when button pressed
        } else {
            led_pin.SetInactive();  // Turn off LED when button released
        }
        vTaskDelay(pdMS_TO_TICKS(10));
    }
}

// STM32 Implementation (Future)
// #include "inc/mcu/stm32/StmGpio.h"
// StmGpio led_pin(GPIO_PIN_5, hf_gpio_direction_t::HF_GPIO_DIRECTION_OUTPUT);
// ... same API, different implementation

πŸ“Š Basic Multi-MCU ADC Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// ESP32 Family Implementation (Current)
#include "inc/mcu/esp32/EspAdc.h"

void read_sensors() {
    EspAdc adc(ADC_UNIT_1, ADC_ATTEN_DB_11);
    
    // Initialize ADC
    if (!adc.EnsureInitialized()) {
        printf("Failed to initialize ADC\n");
        return;
    }
    
    // Read current sensor (channel 0)
    float current_voltage;
    if (adc.ReadChannelV(0, current_voltage) == hf_adc_err_t::ADC_SUCCESS) {
        float current_amps = (current_voltage - 2.5f) / 0.1f;  // ACS712 conversion
        printf("Current: %.2f A\n", current_amps);
    }
    
    // Read position sensor (channel 1)
    float position_voltage;
    if (adc.ReadChannelV(1, position_voltage) == hf_adc_err_t::ADC_SUCCESS) {
        float position_degrees = (position_voltage / 3.3f) * 360.0f;
        printf("Position: %.1f degrees\n", position_degrees);
    }
}

// STM32 Implementation (Future)
// #include "inc/mcu/stm32/StmAdc.h"
// StmAdc adc(ADC1, ADC_CHANNEL_0);
// ... same API, different implementation

πŸ“Š Examples

🎯 Basic Interface Examples (Multi-MCU)

  • GPIO Control - LED and button control across MCU platforms
  • ADC Monitoring - Sensor data acquisition for all MCUs
  • PWM Generation - Motor speed control for all MCUs
  • Temperature Sensing - Thermal monitoring across platforms

🌐 Wireless Examples (Multi-MCU)

  • WiFi Station - Internet connectivity for IoT applications
  • WiFi Access Point - Local network creation for all MCUs
  • Bluetooth BLE - Mobile app integration across platforms
  • Bluetooth Classic - Serial communication for all MCUs

πŸš€ Advanced Integration Examples (Multi-MCU)

  • Complete Motor Controller - Full-featured motor control with TMC-style controllers
  • IoT Gateway - WiFi bridge with monitoring across MCUs
  • Multi-Sensor Logger - Data collection system for all platforms
  • Secure Communication - Encrypted data transfer across MCUs

πŸ§ͺ Production-Ready Examples (Multi-MCU)

  • Industrial Control System - Complete industrial solution
  • Automotive Interface - CAN bus integration across platforms
  • Remote Monitoring - Cloud-connected system for all MCUs
  • Diagnostic System - Advanced diagnostics across platforms

βš™οΈ Multi-MCU Project Configuration

Configure specific features for your target MCU platform:

  • Interface Selection - Enable only the interfaces your MCU uses
  • Performance Tuning - Optimize for real-time requirements
  • Memory Configuration - Configure buffers for your application
  • Wireless Settings - WiFi and Bluetooth configuration for IoT
  • Debug Options - Logging levels for development

🀝 Contributing

We welcome contributions to improve multi-MCU support! Please see our Contributing Guidelines.

🎯 Areas for Multi-MCU Development

  • New MCU Support - Additional MCU platform implementations (STM32, etc.)
  • Performance Optimization - Real-time improvements for all MCU platforms
  • Example Applications - More use case demonstrations across MCUs
  • Documentation - Enhanced guides for multi-MCU development
  • Testing - Hardware validation across all supported MCUs

πŸ“„ License

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.

The GPL-3.0 license ensures that improvements to the multi-MCU wrapper remain open source and benefit the entire community.


πŸš€ Multi-MCU Interface Wrapper

Universal hardware abstraction layer supporting multiple MCU platforms


πŸ”— Quick Links

πŸš€ Quick Start | πŸ“‹ API Reference | πŸ“Š Examples | 🀝 Contributing

πŸ“š Documentation Navigation

πŸ“‹ API Interfaces πŸ”§ ESP32 Implementations [πŸ› οΈ Utility
Classes](utils/README.md) πŸ§ͺ Test Suites Β 

πŸ“ž Support

πŸ’¬ GitHub Discussions | πŸ› Issue Tracker | πŸ“§ Multi-MCU Support


πŸ“‹ Table of Contents