Fixed-scope STM32 firmware patch sprint
FreeJoy Consumer Keys Firmware Sprint
A $100 prepared firmware patch offer for the open paid-help request asking for STM32 USB keyboard consumer keys. The patch is local and proof-gated; no upstream comment, email, PR, or patch delivery has been sent.
Report ID: REPORT_ID_CONSUMER_KEYS
Usages: mute, volume up/down, play/pause, next, previous, stop
Prototype mapping: logical buttons 120-126
Build: toolchain unavailable locally, not hardware-flashed.
Concrete Deliverable
- Add a Consumer Control HID report collection to the FreeJoy joystick HID descriptor.
- Add a compact report helper for mute, volume up, volume down, play/pause, next track, previous track, and stop.
- Wire consumer key changes into the endpoint-1 send path without posting or delivering upstream.
- Document the prototype logical-button mapping and remaining configurator/hardware gates.
Implementation Evidence
| File | Prepared change |
|---|---|
| application/Inc/common_defines.h | Adds REPORT_ID_CONSUMER_KEYS. |
| application/Src/usb_hw.c | Adds dynamic Consumer Control descriptor bytes and updates the HID report length. |
| application/Src/consumer_keys.c | Builds the 2-byte consumer key report from logical buttons 120-126. |
| application/Src/stm32f10x_it.c | Sends the consumer key report on state change, otherwise sends normal joystick data. |
Verification log
FreeJoy consumer-control HID patch verification
Generated: 2026-06-20 JST
Source issue:
URL: https://github.com/FreeJoy-Team/FreeJoy/issues/249
Title: Adding support for full keyboard $
State: OPEN
Comments: 0
Updated: 2025-03-24T11:47:44Z
Local checks:
git diff --check: passed
static_descriptor_tokens: 132
declared JoystickHID_SIZ_REPORT_DESC: 132
patch file includes new consumer_keys.h: true
patch file includes new consumer_keys.c: true
patch file includes armgcc/makefile.app entry: true
patch file includes REPORT_ID_CONSUMER_KEYS: true
patch file includes Volume Increment usage: true
Build attempt:
Command: make -C armgcc app
Result: failed before compiling project source because arm-none-eabi-gcc is not installed.
Key output:
make -f makefile.app
mkdir -p build/app
arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb ... ../application/Src/analog.c -o build/app/analog.o
/bin/sh: arm-none-eabi-gcc: command not found
make[1]: *** [build/app/analog.o] Error 127
make: *** [app] Error 2
Money boundary:
Confirmed money: $0
This patch is prepared work only. Count money only after real scope acceptance, seller-owned payment proof, delivery proof, and posted/released/payable/cleared funds.
Exact Claim Steps
- Open the source issue and confirm it is still open.
- Review the local patch and verification log on the shared machine.
- Add only your seller-owned checkout, invoice, marketplace order, funded milestone, or payment-request URL.
- Use the draft response only after you approve posting or sending it.
- Require the exact acceptance sentence before payment.
- Deliver the patch only after external payment proof or after you explicitly decide to publish it unpaid.
- Count $0 until payment is posted, released, payable, cleared, credited, or otherwise externally verifiable.
Exact Acceptance Before Payment
I accept the FreeJoy Consumer Keys Firmware Sprint fixed-scope terms at $100. I understand work starts only after seller-owned external payment proof exists; I will provide only public or buyer-authorized firmware requirements; the deliverable is limited to the prepared consumer-control HID report descriptor, report helper, endpoint send wiring, apply notes, and verification notes; and STM32 hardware flashing, host OS certification, configurator UI/protocol integration, full keyboard matrix support, private device data, public posting, pull requests, or ongoing revisions are not included unless separately agreed before payment.
Adding support for full keyboard $
Requester says they would be happy to pay for STM32 USB keyboard support with consumer keys.
Draft response not posted
I prepared a firmware-side FreeJoy consumer-control HID patch for media keys. It adds a new consumer-keys report ID, expands the joystick HID descriptor to include a Consumer Control collection for mute, volume up/down, play/pause, next, previous, and stop, adds a compact report helper, wires it into the TIM2 endpoint-1 send path on state changes, and includes makefile wiring. I can hand over the patch or adapt it to a branch after fixed-scope acceptance and external payment proof; hardware flashing/configurator integration would need separate scope.
Draft response prepared only. External comments, emails, direct messages, pull requests, or patch delivery require explicit send approval.
Money And Posting Boundary
| Signal | Counted as money? |
|---|---|
| Prepared patch, notes, page, CSV, draft response, or IndexNow result | No. Counts $0. |
| Issue says requester would be happy to pay | No. Requires accepted scope and external payment proof. |
| External payment posted, released, payable, or cleared after delivery proof | Yes. Count only verified net amount after fees/refunds. |