Embedded Infastructure
Getting Started
How to setup and get started working on the embedded code
STM32CubeMX
This page: the short, concrete workflow for using STM32CubeMX to configure an STM32 project and g...
Git Submodules
On this page 1. Why submodules?2. Key concepts3. Cloning a repo with submodules4. Adding ERC-Prot...
Gaslight your boss :D
(If you need help with abusive bosses reach out @mybrosky_nam, I couldnt do anything about it but...
Project Structure
How the code is structured and organized
Layout
Code Structure Architecture (Summary) Each board’s main.c acts strictly as an orchestrator. It in...
Post-Generation Scripts
Introduction We use one post code generation script. We do this because we do not want to write c...
Simple PIOC
Introduction This Python script processes a custom PlatformIO configuration file (platformio.pioc...
.pioc file
Introduction The platformio.pioc file is the central configurationhere file used to define build ...
Packet Dispatcher
High Level Overview
This Page PurposeHigh-level designExternal dependencies Purpose The packet dispatcher is used t...
Functions of the Packet Dispatcher
Public API The following functions are available for the boards to use outside of the library. Th...
Helper Macros for Handler Config
Purpose To reduce repetitive boilerplate when defining packet handlers, the module also provides ...
Recommended Usage Pattern
More information on the mentioned steps can be found in Functions of the Packet Dispatcher Typi...
Embedded Common Libraries
All Common Libraries used by all Microcontrollers in the Rover
Overview
This page gives a high-level overview of the shared libraries described so far, what each one is ...
Result Library
Purpose The result module defines a shared result code system for the codebase. Its job is to giv...
Logging
Purpose The logging library provides a simple UART-based logging interface for embedded firmware....
Priority Queue
Summary bucketed_pqueue is a simple, efficient strict-priority queue for FreeRTOS systems where: ...
Key-Value Pool
Purpose The kv_pool module implements a fixed-key key-value store backed by a custom memory pool....
Unit Testing
Purpose Unit tests in this repository are designed to validate component behavior, not entrypoint...
Serial Commander
High Level Overview
Purpose The Serial Commander is a terminal user interface (TUI) for sending commands to an STM32 ...
Interface Layout
Layout The TUI divides the terminal into four regions separated by line-drawing characters. ┌────...
Commands and Keybindings
Serial Commands KeyCommand sentDescription1speed <erpm>Sets motor speed to current erpm value2sto...
Usage
Dependencies pip install pyserial PlatformIO (pio) must be in PATH for build/flash functionality....
CAN BUS TestBench
CAN BUS debugging testbench A breakout board for debugging connecting and developing CAN BUS peri...