Firmwarearchitectuur en ontwikkelingsgids voor de draadloze RADR-afstandsbediening
In dit gedeelte wordt de RADR-firmware besproken, inclusief de architectuur, de ontwikkelomgeving en hoe u de codebase kunt wijzigen of eraan kunt bijdragen.
Firmware-overzicht
RADR draait op een ESP32-S3-microcontroller met aangepaste firmware geschreven in C++ met behulp van het Arduino-framework en PlatformIO.
| Onderdeel | Technologie |
|---|---|
| MCU | ESP32-S3 met PSRAM |
| Framework | Arduino voor ESP32 |
| Build-systeem | PlatformIO |
| Taal | C++ |
| Displaybibliotheek | TFT_eSPI |
| BLE-stack | NimBLE |
Firmwareversie
| Onderdeel | Versie |
|---|---|
| Grote versie | 1 |
| Kleine versie | 0 |
| Patch-versie | 24 |
| Volledige versie | 1.0.24 |
Controleer regelmatig op firmware-updates om toegang te krijgen tot nieuwe functies en apparaatondersteuning.
Broncode
De volledige firmwarebroncode is beschikbaar op GitHub:
RADR Firmware
Blader door de broncode en documentatie.
Architectuuroverzicht
Hoofdcomponenten
| Onderdeel | Doel |
|---|---|
| Toestandsmachine | Beheert schermtoestanden en de navigatiestroom |
| Apparaatbeheer | Beheert het detecteren en verbinden van Bluetooth-apparaten |
| Beeldschermstuurprogramma | Rendert de gebruikersinterface met TFT_eSPI en canvasbuffering |
| Invoerverwerking | Verwerkt invoer van de encoder, knoppen en bumpers |
| Feedbacksysteem | Regelt LED's, zoemer en trillingen |
| Apparaatregister | Wijst Bluetooth-UUID's toe aan apparaattypen |
Kernservices
├── BluetoothService # BLE scanning and connection
├── DisplayService # Screen rendering
├── InputService # Encoder and button handling
├── FeedbackService # LED, buzzer, vibration
├── DeviceService # Connected device control
├── WiFiService # WiFi and OTA updates
└── StorageService # LittleFS configurationOntwikkelingsomgeving
Vereisten
- Visual Studio Code
- PlatformIO-extensie
- USB-C-kabel om te flashen
Aan de slag
Kloon de repository
git clone https://github.com/researchanddesire/radr-wireless-remote.git
cd radr-wireless-remote/SoftwareOpenen in VS Code
Open de map Software in VS Code. PlatformIO detecteert automatisch de projectconfiguratie.
Bouw de firmware
Klik op de PlatformIO Build-knop of voer het volgende uit:
pio runFlash de firmware naar het apparaat
Sluit RADR aan via USB-C en klik op Upload, of voer het volgende uit:
pio run --target uploadBelangrijkste kenmerken
Op canvas gebaseerde weergave
RADR maakt gebruik van dubbelgebufferde canvasweergave voor soepele weergave-updates:
- Sprites op volledig scherm voorkomen flikkering
- Gedeeltelijke updates voor prestatiekritieke gebieden
- Consistente UI-vernieuwingssnelheid van 60 fps
Architectuur van de toestandsmachine
De gebruikersinterface gebruikt een hiërarchische toestandsmachine:
- Duidelijke overgangen tussen schermen
- Geïsoleerde toestandslogica voor elk scherm
- Gebeurtenisgestuurde invoerverwerking
Apparaatregister
RADR ondersteunt meerdere apparaattypen via een register met twee niveaus:
| Register | Beschrijving |
|---|---|
| Ingebouwd | Ondersteuning voor hardgecodeerde R+D-apparaten (OSSM) |
| Dynamisch | JSON-gebaseerde Buttplug.io-apparaatdefinities |
Het dynamische register (registry.json) kan via firmware-updates worden bijgewerkt om nieuwe apparaatondersteuning toe te voegen zonder codewijzigingen.
Configuratiebestanden
| Bestand | Doel |
|---|---|
platformio.ini | Buildconfiguratie en afhankelijkheden |
src/config.h | Hardware-pindefinities en constanten |
data/registry.json | Buttplug.io-apparaat-UUID-toewijzingen |
Technische referentie
Web Flasher
Flash de firmware met de webtool.
BLE-communicatie
Bluetooth-protocoldetails en apparaatcommunicatie.
Bijdragen
Lees de richtlijnen voor bijdragen voordat u een wijziging indient voor de main-tak.
Codestijl
- Volg de bestaande codeopmaak
- Gebruik beschrijvende variabelen- en functienamen
- Documenteer publieke functies en complexe logica
- Test wijzigingen op daadwerkelijke hardware voordat u ze indient
Licentie
De RADR-firmware wordt uitgebracht onder de CERN Open Hardware Licence Version 2 - Strongly Reciprocal (CERN-OHL-S v2). Zie de licentie in de repository voor meer informatie.