CRUMBS Roadmap
Note: Items ordered by value/feasibility. No commitment is made regarding timing or whether any specific item will be implemented.
ESP32 Platform Support
Goal: Enable ESP32 for IoT/gateway applications (likely works immediately via Arduino Wire compatibility)
Value: High — ESP32 is extremely popular with built-in WiFi/BLE for gateway use cases
Feasibility: Very high — Arduino Wire API compatible, minimal validation needed
Effort: Low — Primarily documentation and testing
Deliverables:
- Platform validation: ESP32-DevKitC, ESP32-S3 at 100kHz–1MHz
- Documentation: GPIO mappings (GPIO21/22), dual-core thread safety, gateway patterns
- Examples:
hello_peripheral,hello_controller, minimal WiFi bridge - CI: PlatformIO build validation
Performance & Benchmarking
Goal: Quantitative performance data for validation and regression testing
Value: High — Validates design claims, enables regression detection, provides concrete metrics for users
Feasibility: High — Measures existing functionality, no new features required
Effort: Medium — Benchmark suite development and cross-platform testing
Deliverables:
- Benchmark suite: encode/decode, handler dispatch, CRC-8, memory footprint
docs/performance.mdwith platform results (AVR, ESP32, Linux)- Target: 1000 msg/sec @ 100kHz I²C on Arduino Nano; <3KB flash, <200B RAM
- CI integration: automated benchmarks, regression tracking
Error Recovery Patterns
Goal: Document robust error handling for production systems
Value: High — Critical for production deployments, helps users build reliable systems
Feasibility: High — Documentation-focused, no core library changes
Effort: Medium — Comprehensive guide and reference implementation
Deliverables:
docs/error-recovery.md– Retry strategies, exponential backoff, circuit breaker patterns, timeout configurationexamples/patterns/robust_controller/– Reference implementation- Optional helper functions for common patterns
Python Controller Tools
Goal: Rapid prototyping and automation with Python (controller-only)
Value: Medium-High — Lowers barrier to entry, enables rapid prototyping and integration
Feasibility: High — Controller-only scope, well-defined protocol
Effort: Medium-High — Package development, CLI tools, testing infrastructure
Deliverables:
- PyPI package:
pip install crumbs-i2c(encode/decode, CRC-8, I²C via smbus2) - CLI tools:
crumbs-scan,crumbs-send,crumbs-query docs/python-quickstart.mdwith integration examples (pandas, Flask)- pytest suite with LHWIT validation
Example:
from crumbs_controller import CrumbsController
bus = CrumbsController("/dev/i2c-1")
devices = bus.scan() # {0x10: 0x03, 0x20: 0x01}
bus.send(0x20, type_id=0x01, opcode=0x01, data=[0xFF])
Linux Peripheral Support
Status: I²C slave mode requires kernel driver development (technical details). Alternative transports needed for Linux peripheral support.
Value: Medium — Enables Raspberry Pi as peripheral, but microcontrollers better suited for this role
Feasibility: Low (I²C) / Medium (Serial) — Kernel driver required OR new transport layer
Effort: High — Either kernel module (beyond scope) or transport abstraction (substantial architecture change)
Alternative Approaches
Option A: Serial/UART (Most Feasible)
- User-space support via
/dev/ttyS*,/dev/ttyUSB*, USB CDC/ACM - No kernel development required
- Implementation: Transport abstraction layer (
crumbs_serial.c) with same message format - Use case: Raspberry Pi as USB/serial CRUMBS peripheral
Option B: Network/TCP
- WiFi/Ethernet connectivity for wireless CRUMBS networks
- Standard sockets API, full user-space support
- Trade-off: Network overhead vs wireless capability
- Use case: Raspberry Pi Zero W as wireless bridge
Option C: Custom Kernel Module
- Full I²C slave functionality with event-driven architecture
- Verdict: Beyond CRUMBS core library scope (requires kernel expertise, distribution complexity)
Implementation Path (if pursuing Serial)
Files:
src/transports/crumbs_serial.c- Transport layer abstractionsrc/hal/linux/crumbs_linux_serial.c- Linux serial HALexamples/core_usage/linux/serial_peripheral/
Documentation:
docs/transport-layers.md- I²C vs Serial architecture- Update
docs/platform-setup.mdwith serial setup
Success Criteria:
- Same CRUMBS handlers work on both I²C and serial transports
- Raspberry Pi peripheral via USB CDC/ACM
Reference Family Expansion
Goal: Additional reference implementations beyond LHWIT (LED/Servo/Calculator/Display)
Value: Low-Medium — More examples helpful but LHWIT already demonstrates patterns
Feasibility: Medium — Requires hardware, full implementation stack
Effort: High — Each family needs peripheral + controller + docs + hardware validation
Context: A “family” is a device category with shared type_id, opcodes, and handler patterns (e.g., LHWIT defines how LED modules communicate).
Potential Families:
- Sensors: Temperature (DHT22, BMP280), humidity, pressure – periodic polling patterns
- Motor Control: DC/stepper motors – motion control, homing sequences
- Protocol Bridges: UART/SPI over I²C – translation and buffering patterns
Note: Community-driven based on actual user requests. Each family requires significant effort (peripheral + controller + docs + hardware).
Explicitly Out of Scope
Gateway Services
Building REST/MQTT/WebSocket services is application territory, not library scope. Different users need different protocols. Better approach: document integration patterns, provide minimal examples, let community build gateways.
Alternative: docs/integration-patterns.md showing how to use CRUMBS in Flask routes, MQTT publishers, etc.
Multi-Family Bus Sharing
“One family per bus” is a core design principle providing compile-time type safety. Dynamic vocabulary discovery adds complexity for rare use cases. Real solution: use multiple I²C buses or bus bridging.
Alternative: Document the constraint clearly and provide multi-bus setup examples if requested.
Enhanced Discovery Protocols
Current discovery (version query via opcode 0x00) is sufficient. Capability negotiation, hierarchical addressing, and multicast add protocol complexity without demonstrated user need.
Alternative: Wait for actual pain points; if needed, module families can extend version query payload.