From c1bd7d653a7ed554670dba96d7e35acfbcdf35bb Mon Sep 17 00:00:00 2001 From: Myrddin Dundragon Date: Sun, 27 Jul 2025 12:04:20 -0400 Subject: [PATCH] Adjusted the Design Document. The Design Document is now the Product Design Document (PRD). It was rewritten to be a bit more in line with just describing the why and what of the product, not the how. It might not be perfect, but it is good enough. The README was adjusted to document that we are using the weasyprint pdf-engine for pandoc. I had started with just using the LaTex engine, but when you get to heading level 4, the heading is classified as a paragraph and not a proper heading. Also, all generated documents (*.pdf) were removed from the repository. --- README.md | 7 +- docs/design.md | 76 -------------- docs/design.pdf | Bin 120101 -> 0 bytes docs/prd.md | 264 ++++++++++++++++++++++++++++++++++++++++++++++++ docs/sdd.pdf | Bin 151708 -> 0 bytes 5 files changed, 269 insertions(+), 78 deletions(-) delete mode 100644 docs/design.md delete mode 100644 docs/design.pdf create mode 100644 docs/prd.md delete mode 100644 docs/sdd.pdf diff --git a/README.md b/README.md index 4a8303f..002527d 100644 --- a/README.md +++ b/README.md @@ -98,13 +98,16 @@ cargo embed ## Documentation +To generate all the documentation you will need to have pandoc and weasyprint +installed. + ### Design Doc The [Design Doc][./docs/design.pdf] is generated with pandoc from the markdown file. ```bash -pandoc ./docs/design.md -o ./docs/design.pdf +pandoc ./docs/design.md --pdf-engine=weasyprint -o ./docs/design.pdf ``` ### Software Design Doc @@ -113,7 +116,7 @@ The [Software Design Doc][./docs/sdd.pdf] is generated with pandoc from the mark file. ```bash -pandoc ./docs/sdd.md -o ./docs/sdd.pdf +pandoc ./docs/sdd.md --pdf-engine=weasyprint -o ./docs/sdd.pdf ``` ### UML diff --git a/docs/design.md b/docs/design.md deleted file mode 100644 index f518056..0000000 --- a/docs/design.md +++ /dev/null @@ -1,76 +0,0 @@ -# Design Document: MicroBadge - -## Overview - -**MicroBadge** is an interactive embedded application built for the BBC -micro:bit v2. It is written in **Rust** using the **Embassy** async embedded -runtime. The project functions as a **conference name badge** that acts as a -professional and technical icebreaker at events. - -The application framework includes: -* A **menu system** for switching between apps. -* A **name scroller** for displaying your name or custom message. -* A **Snake game** for fun and interactivity. -* A **NFC business card** app for sharing contact info. **Still in progress** - -## Goals - -* Provide a custom and memorable name badge experience. -* Showcase embedded Rust development using async and no-std. -* Enable fun interactions and sharing via NFC. -* Serve as a technical portfolio piece for conferences, meetings, and - interviews. - -## Architecture - -### 1. Core Framework - -* Built on **Embassy** for asynchronous concurrency. -* Uses hardware abstraction layers (HALs) for GPIO, timers, display, and - buttons. -* Implements a lightweight app-switcher system with a menu UI. - -### 2. Applications - -#### Name Scroller -* Scrolls a name or message across the LED matrix. -* Configurable for speed and repeat mode. -* Useful for identifying the wearer at a glance. - -#### Snake Game -* Classic Snake game rendered on the 5x5 LED display. -* Uses `Button A` and `Button B` for turning. -* Includes food spawning, score tracking, and difficulty selection. -* Uses PWM for different intensity led lights. - -#### NFC Business Card (WIP) -* Leverages the onboard NFC peripheral. -* Intends to share vCard/contact data over NFC. -* Targeted at mobile phones for quick transfer of contact info - -## User Interaction - -* Navigation is handled via micro:bit's `Button A`, `Button B`, and long-press `Start` gesture -* LED matrix provides visual feedback for game states and menu navigation -* Apps are selected from a simple menu UI -* Snake game is tuned to a slower speed (~4Hz) for usability - -## Development Environment - -* Written entirely in **Rust**, `#![no_std]` -* Uses **Embassy** for async device access and task scheduling -* Debugging output via `defmt` -* Built and flashed using `probe-rs` and `cargo-embed` - -## Future Improvements - -* Finalize NFC vCard transmission -* Add configuration storage via flash memory -* Create a desktop companion app for editing settings -* Support BLE for data sync or configuration - -## Summary - -MicroBadge combines a fun hardware platform with modern Rust development. -It serves not only as a name badge but also as a way to demonstrate embedded -skills, share contact info, and invite technical discussion at events. diff --git a/docs/design.pdf b/docs/design.pdf deleted file mode 100644 index 1eaf30473ef9f3d64a74d2226717ff777808d99f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120101 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