The Raspberry Pi Pico SDK is a comprehensive C/C++ software development kit for the RP2040 and RP2350 microcontrollers, providing a hardware abstraction layer, peripheral drivers, synchronization primitives, and build-system integration for embedded firmware. It is not an application itself but a library and toolchain ecosystem consumed by firmware projects, targeting ARM Cortex-M0+/M33 and RISC-V Hazard3 cores. The SDK is architected around modular libraries (pico_*, hardware_*) that expose register-level access via auto-generated structs, runtime initialization with ordered callbacks, an async context abstraction for WiFi/USB/timers, and a lightweight resource claiming system for peripherals. It supports both CMake and Bazel builds, includes a PIO assembler (pioasm), and provides a host-simulation layer for desktop testing. The codebase exhibits strong engineering discipline with extensive use of weak function overrides, config macros, and static assertions, though it carries the inherent complexity of supporting two chip generations, two architectures, and multiple third-party middleware stacks (TinyUSB, lwIP, BTstack, mbedTLS).
The LiquidCrystal library is an Arduino library for interfacing with HD44780-compatible LCD displays. It provides a hardware abstraction layer that handles the timing-sensitive communication with the display in either 4-bit or 8-bit mode. The library includes methods for initializing the display, printing text, controlling the cursor and blink, scrolling the display, and creating custom characters. The implementation demonstrates a solid understanding of the LCD controller's datasheet and timing requirements, making it a reliable and reusable component for Arduino projects.
ProjectQ is a comprehensive quantum computing framework that enables users to design, simulate, optimize, and execute quantum circuits across multiple hardware backends. The framework features a modular compiler engine pipeline that transforms high-level quantum operations into hardware-specific gate sequences through decomposition rules and optimization passes. It provides abstraction layers for various quantum hardware (IBM Quantum, AQT, AWS Braket, Azure Quantum, IonQ) and includes a high-performance simulator with C++ backends. Key capabilities include resource estimation for circuit optimization, quantum algorithm libraries (arithmetic, Fourier transform), circuit visualization via LaTeX/TikZ, and meta-programming constructs for reversible computing. The framework is actively maintained with recent updates to dependencies, CI/CD pipelines, and backend integrations.
openHASP is an embedded firmware framework for home automation touch panels, built around LVGL for GUI rendering. It provides a configurable dashboard for controlling IoT devices via MQTT, with support for ESP32, STM32, and other microcontrollers. The system features hardware abstraction layers for displays and touch controllers, modular services (MQTT, HTTP, FTP, Telnet, WireGuard VPN), OTA updates, and a JSON-based configuration system. It integrates with home automation platforms like Home Assistant through auto-discovery and state topics, while offering local UI interaction via touchscreen. The architecture separates concerns into HAL, GUI, networking, storage, and services, enabling cross-platform deployment.
This repository provides an Arduino library that implements the Bluetooth Low Energy MIDI (BLE-MIDI) transport layer, enabling Arduino boards to send and receive MIDI data over BLE connections. The library works with the FortySevenEffects Arduino MIDI Library and supports multiple hardware platforms including ESP32 (with both standard BLE and NimBLE), ArduinoBLE (NANO 33 BLE), and nRF52. The architecture features a clean separation between the core BLE-MIDI protocol implementation and hardware-specific adaptations. The transport layer correctly handles timestamp generation per the BLE-MIDI specification, running status optimization, and buffer management. Hardware abstractions use C++ templates to provide a consistent interface across different BLE stacks while exposing platform-specific configuration options.
CherryUSB is a portable, high-performance USB device and host stack for embedded systems (MCUs, RTOS). It provides a full-featured USB 2.0/3.0 stack with support for many USB class drivers (CDC ACM/ECM/NCM, HID, MSC, Audio, Video, DFU, MIDI, RNDIS, MTP, ADB, Bluetooth, vendor serial, gamepad, etc.) on both device and host sides. The architecture separates OS abstraction (OSAL), hardware controller drivers (DWC2, EHCI, XHCI, OHCI, MUSB, ChipIdea, FSdev, and many vendor-specific ports), and class implementations. It includes extensive demo templates, platform integrations (FatFS, lwIP, LVGL, UF2 bootloader), and tooling (Python test scripts, UF2 conv). The stack is used in commercial products and is registered in several embedded package ecosystems (RT-Thread, ESP-IDF, Bouffalolab). Key entry points are usbd_initialize() and usbh_initialize() with class-specific initialization routines in the demo folder. The codebase is large and well-organized but contains legacy ports and some vendor-specific glue code that may require adaptation.
FareBot is a Kotlin Multiplatform (KMP) application designed to read, parse, and analyze contactless transit smart cards (NFC/RFID). It targets Android, iOS, Desktop (JVM), and Web (Wasm), utilizing Jetpack Compose Multiplatform for the UI layer. The core functionality involves interacting with NFC hardware (Android NFC, PC/SC, CoreNFC) or external devices (Flipper Zero, PN533 USB readers) to extract raw card data. This data is then processed through a layered architecture of protocol readers (MIFARE Classic, DESFire, FeliCa, ISO7816) and transit-specific factories (EN1545, Calypso, proprietary formats) to display balances, trip history, and card identity. The architecture relies heavily on the Factory pattern to support hundreds of global transit systems without modifying core logic. It uses SQLDelight for local persistence of card dumps and keys, and Metro for dependency injection. The codebase demonstrates significant craftsmanship in reverse-engineering proprietary transit protocols, handling complex binary formats, bit-level parsing, and currency normalization across different regions. Hardware abstraction layers (`CardTransceiver`, `FlipperTransport`) allow the same core logic to run across diverse platforms and devices. While the application is actively maintained (last commit 2026-03-22), it faces technical drift risks due to its reliance on experimental Web APIs (WebUSB/WebBluetooth), cutting-edge Gradle versions (9.3.1), and the inherent fragility of reverse-engineered transit protocols. The project is a robust example of cross-platform hardware interaction and data parsing, suitable for engineers interested in NFC protocols, KMP architecture, and hardware abstraction.
Gobot is a Go framework for robotics, physical computing, and the Internet of Things. It provides a consistent hardware abstraction layer (HAL) over dozens of single-board computers (Raspberry Pi, BeagleBone, Intel Edison, Jetson, etc.), microcontrollers (Arduino via Firmata, Digispark), and communication protocols (GPIO, I2C, SPI, BLE, serial, MQTT, NATS, MAVLink). The architecture is modular: platform-specific adaptors implement core interfaces (DigitalPinner, PWMPinner, I2cBusAdaptor, etc.) and are composed from reusable building blocks in the `platforms/adaptors` package. Drivers for sensors, actuators, displays, and robots (Sphero, Parrot drones, DJI Tello, GoPiGo3) are organized by bus type (gpio, i2c, spi, ble, aio, onewire, serial) and share a common lifecycle pattern with event publishing and command registration. A built-in HTTP API server (with optional basic auth and CORS) exposes robot state and commands over REST and Server-Sent Events, and includes an embedded web UI (Robeaux). The framework supports both high-level orchestration via `Robot` and `Manager` and low-level 'metal' usage for direct hardware control. External dependencies include `periph.io` for GPIO, `tinygo.org/x/bluetooth` for BLE, `gocv.io/x/gocv` for computer vision, and `go.bug.st/serial` for serial communication. The codebase is extensively tested with mock filesystem and syscall infrastructure, and uses functional options for configuration throughout.
This repository is the NumWorks Epsilon operating system and firmware for a graphing calculator. It is a complete software stack including a custom GUI framework (Escher), a symbolic math engine (PoincarΓ©), a MicroPython interpreter, numerous educational apps (calculation, graphing, statistics, inference, finance, sequences, etc.), and low-level hardware drivers (Ion) for real devices and a cross-platform SDL-based simulator. The architecture is monolithic: all components share a custom memory pool, a responder-based UI framework, and a common record-based persistent storage system. Key entry points are the bootloader, the Ion::Main function, and an app container that launches snapshots of each app. The system handles user input through keyboard events, renders via a 2D graphics library (Kandinsky), and persists data (scripts, preferences, calculations) in a file-system-like record store. External dependencies include a vendored SDL 2.0 (for simulation), a bespoke MicroPython port, OpenBSD math functions, and an embedded SQLite memory allocator. While the math engine and many apps are well-crafted, the large third-party code and numerous platform backends introduce moderate technical drift risk.