Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
250 commits
Select commit Hold shift + click to select a range
2026419
linux-rust: introduce platform abstraction layer (Phase A: AppPaths)
Aug 5, 2026
d480ae2
linux-rust: abstract Bluetooth address as platform::DeviceId (Phase B)
Aug 5, 2026
1c69064
windows-driver: add LibrePodsAAP KMDF L2CAP profile driver
Aug 5, 2026
da13a21
windows-driver: add test-sign + install script
Aug 5, 2026
c69ce9e
windows-driver: add lp-driver-test integration testers
Aug 5, 2026
cafc735
windows-driver: fix BRB submission (direct IRP) + install cleanup
Aug 5, 2026
1655256
linux-rust: abstract L2CAP transport (Phase C)
Aug 5, 2026
62352cd
linux-rust: abstract device discovery (Phase D, part 1)
Aug 5, 2026
ee3e886
windows-app: add librepods-tray background app + Windows guide
Aug 5, 2026
a27ca0e
windows-app(tray): show device name, stop flicker, fix case battery
Aug 5, 2026
c78d696
windows-app(tray): passive AAP session to stop audio cut/switch
Aug 5, 2026
8cfc180
windows-app(tray): add system volume control
Aug 5, 2026
00e6b50
linux-rust: abstract connection watcher + adapter power-on (Phase D, …
Aug 5, 2026
f551997
windows-app: add librepods-ui egui window (battery, ANC, volume slider)
Aug 5, 2026
1565338
windows-driver: ship prebuilt driver package (no C++/WDK to install)
Aug 5, 2026
6196176
repo: group everything under crossplatform/ and rename linux-rust
Aug 5, 2026
b9bd2ef
crossplatform: add HANDOFF.md (resume + TODO for next session)
Aug 5, 2026
73022d9
crossplatform(HANDOFF): TODO to unify window + tray into one app
Aug 5, 2026
0fda810
windows-driver: release L2CAP channel on app handle close (EvtFileClose)
Aug 6, 2026
118ac05
windows-app: startup.ps1 to launch the tray app at login
Aug 6, 2026
fbfaaf0
crossplatform(Phase E): abstract the LE advertisement monitor
Aug 6, 2026
a4f9c35
windows-tray: ear-detection auto-pause via SMTC
Aug 6, 2026
dc4c299
windows-tray: mark ear-detection auto-pause validated on hardware
Aug 6, 2026
f977959
crossplatform(Phase F): abstract audio routing (AudioRouter)
Aug 6, 2026
05f2d33
crossplatform(Phase G): abstract media control (MediaControl)
Aug 6, 2026
1c74b91
crossplatform(Phase H): abstract the system tray (TrayHandle)
Aug 6, 2026
dda180c
crossplatform(Phase I): the crate now compiles for Windows
Aug 6, 2026
94ac451
crossplatform(HANDOFF): mark Phases F/G/H/I done; the crate compiles …
Aug 6, 2026
b5cc4c2
crossplatform(Phase J): real Windows media (SMTC) + volume (WASAPI) b…
Aug 6, 2026
125db09
crossplatform(Phase J): real Windows LE watcher + local adapter addre…
Aug 6, 2026
fa6b5fc
crossplatform(Phase J): real Windows device discovery (Win32 Bluetooth)
Aug 6, 2026
e3c36e1
crossplatform(HANDOFF): Phase J progress — media/volume/LE/discovery …
Aug 6, 2026
31ae571
crossplatform(Phase J): Windows connection watcher (poll-based)
Aug 6, 2026
f853efe
crossplatform(Phase J): real Windows tray backend (tray-icon)
Aug 6, 2026
2529991
crossplatform(HANDOFF): tray-icon backend done; the full app builds a…
Aug 6, 2026
cec20cf
crossplatform(Phase J): fix Windows AAP session teardown + double-con…
Aug 6, 2026
882bfd9
crossplatform(HANDOFF): main app VALIDATED on Windows hardware (headl…
Aug 6, 2026
8f38d57
crossplatform(HANDOFF): full iced GUI validated on Windows hardware
Aug 6, 2026
7e2179a
aacp: provision the AirPods device (persist info + LE keys) on first …
Aug 6, 2026
f22af8c
aacp: don't drop battery entries on an unfamiliar status (fix 0x05 ch…
Aug 6, 2026
abebf35
aacp: log unmapped control commands with their value (RE aid) at info…
Aug 6, 2026
6314f19
crossplatform(HANDOFF): document the AAP opcode RE method (PacketLogg…
Aug 6, 2026
3f403c3
crossplatform(HANDOFF): record AAP RE session results (confirmed sett…
Aug 6, 2026
9b99771
crossplatform(HANDOFF): add MagicPods-style lid-open popup feature idea
Aug 6, 2026
1044929
windows-tray: MagicPods-style centered popup overlay
Aug 6, 2026
e8574ac
crossplatform(HANDOFF): overlay popup done (v1); note lid-open RE fin…
Aug 6, 2026
a97e047
windows-driver: dereference the BTH profile interface on release (fix…
Aug 6, 2026
97851a5
windows-tray: show the popup card on every (re)connect (fix lid-open …
Aug 6, 2026
7f29fde
docs: add cross-platform (Windows) README + prominent callout in main…
Aug 6, 2026
03ca17f
windows-tray: re-open the driver every session (fix stuck "Disconnect…
Aug 6, 2026
3758f2c
windows-tray: "Open App" menu item + non-square overlay (color-key tr…
Aug 6, 2026
6fabee3
windows-tray: show the average battery % as the tray icon (MagicPods-…
Aug 6, 2026
e771321
dist: group ready-to-install Windows builds under dist/windows/
Aug 6, 2026
712ff01
windows: no console window for the release app + show ANC card on men…
Aug 6, 2026
ced7daf
hires-mic: dedicated branch + plan for a native Windows AirPods micro…
Aug 6, 2026
f9f8a17
hires-mic(Phase 1): LibrePodsMic virtual-audio driver base (ACX Audio…
Aug 6, 2026
2627fd4
hires-mic(Phase 1): install.ps1 for the LibrePodsMic virtual audio dr…
Aug 6, 2026
329bdd9
hires-mic: fix install.ps1 encoding (ASCII only, no em dashes)
Aug 6, 2026
f49cb9e
hires-mic(Phase 1): DONE — virtual microphone installs + shows in Win…
Aug 6, 2026
522f9e8
hires-mic(Phase 1b): capture-only driver (drop the phantom speaker)
Aug 6, 2026
6c6fdff
windows-tray: throttle the AAP receive loop (fix 7.5% CPU spin)
Aug 6, 2026
87ed69f
hires-mic(Phase 2): IOCTL PCM bridge into the capture stream
Aug 6, 2026
1456c23
hires-mic(Phase 2): lp-mic-test — feed a tone into the virtual mic
Aug 6, 2026
740914c
hires-mic: mark Phase 2 done (validated on hardware, clean tone)
Aug 6, 2026
379e25b
hires-mic(Phase 2): make the mic control device exclusive (one writer)
Aug 6, 2026
e810c95
hires-mic: lp-mic-rename — set the virtual mic's name (e.g. the AirPo…
Aug 6, 2026
66549f2
hires-mic: rename-mic.ps1 — set the virtual mic name via registry (pl…
Aug 6, 2026
1df638b
hires-mic: rename-mic.ps1 — handle REG_BINARY PROPVARIANT + list endp…
Aug 6, 2026
224d78d
windows-tray: theme-aware UI (dark/light) + Win11-flyout overlay style
Aug 6, 2026
b3855f1
windows-tray: acrylic flyout overlay + dark/light context menu
Aug 6, 2026
74912f6
windows-tray: revert overlay to the solid card (acrylic looked worse)
Aug 6, 2026
c843d32
hires-mic(Phase 3a): enable-command de-risk in the tray
Aug 6, 2026
bc6b41d
hires-mic: mark Phase 3a done (enable command + 0x58 stream validated)
Aug 6, 2026
09477d5
hires-mic(Phase 3b): decode AAC-ELD and feed the virtual mic
Aug 6, 2026
84a5e04
hires-mic(Phase 3b): add FFmpeg mingw import libs (force past lib/ ig…
Aug 6, 2026
f6be74e
hires-mic(Phase 3b): resample decoder output to 48 kHz (fix pitch)
Aug 6, 2026
4a9871a
hires-mic(Phase 3b): virtual mic offers 48 kHz only (fix deep/robotic…
Aug 6, 2026
8c9d352
windows-tray: single-instance guard (named mutex)
Aug 6, 2026
5b4705d
hires-mic(Phase 3b): prime the mic ring with a silence cushion (fix c…
Aug 6, 2026
885a739
hires-mic(Phase 3b): decode the mic as 64 kHz (fix deep pitch + clicks)
Aug 6, 2026
a324a84
hires-mic: mark Phase 3b done (voice decoded clean + in tune on hardw…
Aug 6, 2026
de5f40f
hires-mic(Phase 4): auto A2DP reset on mic stop (restore stereo)
Aug 6, 2026
34cb610
hires-mic(Phase 4): A2DP auto-reset works (correct service GUID + tim…
Aug 6, 2026
c726fcb
hires-mic: mark A2DP auto-reset done in the plan
Aug 6, 2026
d2716af
hires-mic(Phase 4): make-up gain + smaller latency cushion
Aug 6, 2026
3ae0bc5
hires-mic(Phase 4): soft-limit the make-up gain (tanh) to avoid clipping
Aug 6, 2026
57a2267
hires-mic(Phase 4): auto-enable the mic when an app records (+ UI)
Aug 6, 2026
4d13045
hires-mic(Phase 4): faster A2DP reset (shorter disconnect on mic stop)
Aug 6, 2026
2efd000
hires-mic(Phase 4): faster reset + manual mode toggle
Aug 6, 2026
a538d6e
hires-mic(Phase 4): manual-mode debounce + persistent reconnect card
Aug 6, 2026
7fb630c
hires-mic(Phase 4): longer manual debounce + card stays through recon…
Aug 6, 2026
4936f21
hires-mic(Phase 4): minimal FFmpeg build — 69 MB avcodec -> 0.7 MB
Aug 6, 2026
695568f
windows: commit Cargo.lock files
Aug 6, 2026
462b82c
hires-mic(Phase 4): name the virtual mic "LibrePods" (device-agnostic)
Aug 6, 2026
3573e9b
hires-mic: mark Phase 4 essentially complete (plug-and-play mic)
Aug 6, 2026
1ec34ff
hires-mic: fix lp-mic-rename IPolicyConfig crash (SetPropertyValue ne…
Aug 6, 2026
cf1d72e
hires-mic: rename-mic.ps1 matches the new LibrePods mic name
Aug 6, 2026
f6421a6
hires-mic: rename via direct registry write (IPolicyConfig was E_ACCE…
Aug 6, 2026
61a0585
hires-mic: lp-mic-rename renames ALL LibrePods endpoints (stale dupes)
Aug 6, 2026
cfda622
hires-mic: dynamic mic rename WORKS (REG_SZ + stable anchor)
Aug 7, 2026
46333e8
hires-mic: auto-rename the virtual mic to the connected device name
Aug 7, 2026
7fa5f87
docs: group Windows features + document the hi-res microphone
Aug 7, 2026
43ecf11
Windows: native hi-res AirPods microphone (AAC-ELD virtual mic) (#1)
arctumn Aug 7, 2026
80e1699
dist: one-shot installer now bundles + installs both drivers
Aug 7, 2026
681677a
hires-mic: adaptive recv throttle + longer auto-stop debounce
Aug 7, 2026
97fe94f
windows-tray: robust disconnect detection (time-based + debounced)
Aug 7, 2026
85f0375
daemon-ipc: plan + shared IPC protocol crate (Phase 1 start)
Aug 7, 2026
8338fcc
Merge windows-hires-mic: hi-res mic, one-click installer, call/tray f…
Aug 7, 2026
5dbab19
daemon-ipc(Phase 1): librepodsd — the driver-owning daemon
Aug 7, 2026
dd8a815
daemon-ipc(Phase 1): vendor the FFmpeg libs for librepodsd's build.rs
Aug 7, 2026
0948fb0
Merge daemon-ipc Phase 1 + shared IPC crate into cross-platform
Aug 7, 2026
4e37b58
daemon-ipc(Phase 2): tray is now a thin IPC client
Aug 7, 2026
cbd8667
daemon-ipc: run librepodsd headless (no console window)
Aug 7, 2026
4af5bd9
daemon-ipc(Phase 2): tray↔daemon IPC works end-to-end
Aug 7, 2026
f690978
daemon-ipc: BLE 'connect?' prompt + accent-colored card
Aug 7, 2026
0702eb5
daemon-ipc: never steal the AirPods — ask, then release on drop
Aug 7, 2026
5dd09c1
daemon-ipc: resilient Connect — retry ~18s before giving up
Aug 7, 2026
035e867
daemon-ipc: passive BLE scan, only while disconnected (kill static sp…
Aug 7, 2026
1c74be7
Merge: daemon+IPC architecture (tray/app as clients), BLE connect-pro…
Aug 7, 2026
16eacf3
daemon-ipc: mark Phases 1-2 done + BLE prompt + never-steal in the plan
Aug 7, 2026
e41a338
Merge: daemon-ipc plan update (Phases 1-2 done)
Aug 7, 2026
6f797bf
daemon-ipc: Phase 3 web-app-model plan (approach A) + PR #655 alignme…
Aug 7, 2026
af910aa
dist: ship + autostart the daemon (per-user login background process)
Aug 7, 2026
7db7eb9
Merge: Phase 3 plan (web-app model) + daemon autostart + PR #655 alig…
Aug 7, 2026
a683e75
refactor: regroup folders — shared 'app' vs Windows-bespoke 'windows/'
Aug 7, 2026
a9eb569
docs: Windows as a first-class platform + document the kernel-driver …
Aug 7, 2026
54054b5
app(Phase 3): daemon IPC client foundation (additive, Windows)
Aug 7, 2026
9a380cd
app+daemon(Phase 3): L2CAP proxy — the full app coexists via the daemon
Aug 7, 2026
24b43a6
app(Phase 3): respect the daemon's channel + reuse the existing tray
Aug 7, 2026
e7e5f55
app(Phase 3): window-only on Windows (no 2nd tray, no 2nd BLE scan)
Aug 7, 2026
52e013e
Phase 3: app passive on Windows (media) + daemon replays battery/ANC
Aug 7, 2026
10c0a22
daemon: pause on single AirPod removal (transition-based ear detection)
Aug 7, 2026
d60a2ca
app(windows): quit process on window close + single-instance guard
Aug 7, 2026
e65825a
daemon: hi-res mic SDU watchdog (align with PR #655)
Aug 7, 2026
0efc26a
feat(windows): Conversational Awareness, Adaptive Volume, Allow-Off t…
Aug 7, 2026
aeb55aa
feat(windows): daemon owns volume + Conversational Awareness ducking
Aug 7, 2026
e532c10
daemon: gentler, relative Conversational Awareness ducking
Aug 7, 2026
cd3ca22
daemon: Apple-style (aggressive) Conversational Awareness ducking
Aug 7, 2026
a3a12a0
feat(windows): low-battery notification, CA restore-on-disable, longe…
Aug 7, 2026
0d6ec4c
docs: bring HANDOFF.md up to the daemon-era architecture
Aug 7, 2026
fab4dc1
feat(windows): charging, fully-charged, disconnected, connected notif…
Aug 7, 2026
66c6572
docs: group cross-platform docs by OS + add Use of AI disclosure
Aug 7, 2026
dce8a92
fix(windows): suppress CA while mic in use; accumulate charging state
Aug 7, 2026
325e829
feat(windows): Adaptive noise strength control (tray submenu)
Aug 7, 2026
8be0037
daemon: name which bud is charging in the notification
Aug 7, 2026
a279bdb
docs: update HANDOFF with this cycle's features (notifications, adapt…
Aug 7, 2026
01d9d2c
daemon: case low-battery notification (<=15%, hysteresis)
Aug 7, 2026
33bb99f
daemon: diagnostic logging for battery/charging + app→driver forwarding
Aug 7, 2026
246dc70
daemon: 'in case' notification via ear-detection; drop AAP charging
Aug 7, 2026
cc5cb6a
daemon: rename-confirmation overlay + 0xFF absent handling; doc batte…
Aug 7, 2026
4946ada
tray: UI front-end preference + launcher (iced / WinUI 3)
Aug 7, 2026
1ddeefa
app: rename button + Enter (commit-only); hide 0xFF battery (no 255%)
Aug 7, 2026
857ff33
chore: remove accidentally-committed Claude Code local config; gitign…
Aug 7, 2026
6c96f06
winui: native C# WinUI 3 front-end (daemon IPC client)
Aug 7, 2026
7209ee5
chore(windows): shrink the PR diff — drop dead egui UI, collapse vend…
Aug 7, 2026
c6e89ce
winui: pin .NET 10-native deps (WindowsAppSDK 1.7.260224002, H.Notify…
Aug 7, 2026
1fcf8df
winui: show the window on launch (close still hides to tray)
Aug 7, 2026
9334bf2
daemon+ipc: SetVolume { percent } command (absolute volume for a slider)
Aug 7, 2026
1a4e584
winui: redesign — NavigationView shell, 2-col layout, volume slider, …
Aug 7, 2026
4fd42cd
winui: launch the daemon from %LOCALAPPDATA%\LibrePods too (self-start)
Aug 7, 2026
223cb86
winui: give the device nav item room to breathe (auto height + padding)
Aug 7, 2026
9689d56
winui(tray): fit the badge number + widen the context menu
Aug 7, 2026
9ced7ad
winui: fix narrow-window layout — collapsible nav + higher 2-col thre…
Aug 7, 2026
b80ffb6
winui: native Action Center toasts (AppNotificationManager)
Aug 7, 2026
ca2c8d4
winui: enforce a minimum window size (stop the narrow-drag layout break)
Aug 7, 2026
5999a57
daemon: AirPods Pro 3 heart-rate monitoring (port of upstream PR #702)
Aug 7, 2026
e5fefe5
winui: single-line device nav item (fix the tall icon-only block)
Aug 7, 2026
d1fab91
winui: use a Fluent headphone glyph for the nav icon (cleaner than th…
Aug 7, 2026
db1ba38
winui: iOS-style connection island popup
Aug 7, 2026
67183c1
winui: heart-rate card (toggle + BPM) — testable on Pro 3
Aug 7, 2026
72206d4
daemon: HR diagnostic logging (enable-driver state + frame/decode cou…
Aug 7, 2026
f0c3d63
winui: decompose MainWindow into per-card UserControls + pages; Quit …
Aug 7, 2026
21fd426
winui: fix giant island popup (measure DesiredSize, not window Actual…
Aug 7, 2026
3bb941c
winui: move Heart Rate card to the left column (balance the two columns)
Aug 7, 2026
8285e77
winui: add missing using Microsoft.UI.Xaml.Media (MicaBackdrop) after…
Aug 7, 2026
057ec5b
winui: responsive 1<->2 columns via OnSizeChanged (the nested Adaptiv…
Aug 7, 2026
66d3723
daemon: HR enable retry loop (re-arm until first sample, like PR #702)
Aug 7, 2026
83bef50
docs(winui): add the device-page screenshot to the WinUI README
Aug 7, 2026
e70d23a
winui: island popup slides in from the bottom (was top)
Aug 7, 2026
83f838b
daemon: dump raw HR frame bytes (diagnose why prefixed frames don't d…
Aug 7, 2026
e1f1d94
daemon: keep the HR stream alive once frames arrive (don't give up wa…
Aug 7, 2026
32f06da
winui: add app screenshots (nav, narrow, settings, tray, toast, island)
Aug 7, 2026
6fa9599
winui(tray): fix context-menu clipping (ShouldConstrainToRootBounds=f…
Aug 7, 2026
488f133
winui: localize UI strings (x:Uid + .resw + ResourceLoader)
Aug 7, 2026
542c6b0
winui(i18n): add pt-PT translations (system language auto-selected)
Aug 7, 2026
dc3f3ca
daemon(HR): send opcode 0x44 workout command in the enable sequence
Aug 7, 2026
484b309
daemon(HR): iOS-style gentle keepalive (periodic re-arm, no STOP/re-i…
Aug 8, 2026
84afce7
daemon(HR): revert 0x44/keepalive experiment; align with working v39 …
Aug 8, 2026
aabb64b
docs(HANDOFF): record open WinUI bugs (tray menu clip, notification s…
Aug 8, 2026
e539efb
winui(island): Apple-style vertical card + tasteful float/scale-in an…
Aug 8, 2026
d062a92
winui(hr): add experimental/under-test warning InfoBar to Heart Rate …
Aug 8, 2026
3d3c49e
daemon(diag): log raw driver status when stale-connected suspected
Aug 8, 2026
91629bb
daemon(fix): stop showing 'connected' when the L2CAP channel is gone
Aug 8, 2026
9abcb48
docs: AAP packet-discovery field guide (macOS/iOS) + extractor
Aug 8, 2026
a36aa03
docs: AAP sensor subscription (0x44) + heart-rate frame format (#2)
arctumn Aug 8, 2026
9e87571
feat(charging): surface per-component charging bolt (daemon → IPC → UI)
Aug 8, 2026
39fde48
daemon(HR): enable via 0x44 sensor subscription (iOS ground-truth)
Aug 8, 2026
f609cc8
docs: correct the 0x44 reading — streams are driven by the 0x17 contr…
arctumn Aug 8, 2026
965e05c
daemon(HR): split type-19 vs PPG in diagnostics; record the type-19 gap
Aug 8, 2026
c2b2df2
docs(capture): add case/lid sensor open-questions + refresh HR priority
Aug 8, 2026
e7f9c97
Revert to form A: the original HR_START structure was right (#4)
arctumn Aug 8, 2026
eb0842f
daemon+winui: device info (0x1D), ear-detection 04, theme persistence…
Aug 8, 2026
8ae9911
daemon(HR): stop head tracking + wait 220ms before HR; diag counts ty…
Aug 8, 2026
f72dcda
winui(tray): double-click opens the app (single/right click = context…
Aug 8, 2026
2ebd15e
daemon(HR): remove head-tracking-stop experiment (refuted: type14=0)
Aug 8, 2026
de16d98
winui(i18n): localize daemon overlay/notification text
Aug 8, 2026
ea1ddf8
daemon(anc): ignore transitional Off echoes on rapid mode switching
Aug 8, 2026
85377ee
winui(popup): iOS-style centred 'Connect?' prompt on case-open
Aug 8, 2026
d537258
winui(popup): solid opaque background (no white edge) + bottom-centre…
Aug 8, 2026
97e3c4f
winui: daemon overlays render as the centred island, not Windows toasts
Aug 8, 2026
1975da3
winui(assets): import the full AirPods render set from the Android app
Aug 8, 2026
b40a1f1
ci: add Windows frontend build (daemon + tray + WinUI app)
Aug 8, 2026
3a5d5e4
ci(fix): track the WinUI app.manifest (was ignored by *.manifest)
Aug 8, 2026
2547dca
daemon(HR): request_all_descriptors + drop DEVMOTION6 (RTBuddy schema)
Aug 8, 2026
76110d6
winui(popup): remove the Windows 11 border colour (white edge) via DW…
Aug 8, 2026
570973a
winui(lote1): localize interpolated overlays, blur only the serial, a…
Aug 8, 2026
7c840eb
winui(i18n): add French (fr-FR) and Spanish (es-ES) translations
Aug 8, 2026
f8d60dd
winui(assets): import ANC mode icons (adaptive/nc/transparency) from …
Aug 8, 2026
daef9fe
docs(readme): add Windows column to the feature-availability matrix
Aug 8, 2026
1186eab
feat(lote2): Disconnect button + rename (pencil) in the device header
Aug 8, 2026
005361b
fix(winui): DeviceHeader crash — Uid on a TextBlock needs .Text, not …
Aug 8, 2026
2268d2b
daemon(rename): update dev_name optimistically so the UI keeps the ne…
Aug 8, 2026
a674f49
daemon: real BT disconnect/connect (BluetoothSetServiceState) + log t…
Aug 8, 2026
939ab7c
daemon(HR): send HRM_STATE (0x30) before the stream, drop request_all…
Aug 8, 2026
a60d4a2
daemon(HR): retry until a real reading + capped AACP transport recovery
Aug 8, 2026
197263b
ci(windows): build WinUI with VS MSBuild to fix MSB4062 (PRI task)
Aug 8, 2026
10bd73c
daemon(HR): pin the START frame seq to Android's exact constant (e3 46)
Aug 9, 2026
b0771ac
driver(aap): rule out L2CAP ERTM for heart-rate; keep Basic mode
Aug 9, 2026
7fde0dc
daemon(prompt): stop connect-prompt spam — edge-trigger on proximity
Aug 9, 2026
f582fac
winui(HR): gate heart-rate behind an experimental setting (Apple-host…
Aug 9, 2026
c6dd9dd
docs: name the opcodes from the apple-wireshark dissector
arctumn Aug 8, 2026
bb14570
winui: model-aware artwork, richer island/nav, custom tray menu, new …
Aug 9, 2026
ccb8046
winui(tray): enlarge the battery-number badge (~fill the icon)
Aug 9, 2026
1b1040a
winui(island): theme-following vector glyph for ANC-change messages
Aug 9, 2026
7d25c0b
winui(noise): vector glyphs for the segmented ANC buttons
Aug 9, 2026
31bc6e7
winui: live language switching via a runtime Loc service (no restart)
Aug 9, 2026
39f8174
winui(loc): fix live switch — robust resource load + all-properties n…
Aug 9, 2026
57d2aea
winui(loc): localize the nav Settings item + drop the restart hint
Aug 9, 2026
55086f8
winui(loc): make Loc a true singleton (fix code/XAML culture split)
Aug 9, 2026
e95e070
winui(loc): dismiss stale daemon overlay on language change
Aug 9, 2026
3f41d77
winui(loc): fix COMException — single Loc via App.xaml, no runtime Re…
Aug 9, 2026
0bd5673
winui(loc): localize ToggleSwitch On/Off + refresh code strings on sw…
Aug 9, 2026
b2ae5f5
daemon: auto-connect the AAP session when the AirPods appear
Aug 9, 2026
d93ff9d
Merge pull request #7 from arctumn/winui/device-visuals-and-tray
arctumn Aug 9, 2026
415d63b
driver(aap): document the encryption experiment + ignore VS .user files
Aug 10, 2026
9bb4c03
docs(windows/hr): strengthen the encryption + Device-ID rebuttals
Aug 10, 2026
179e77e
winui(island): fix hard crash on overlay auto-close (hide+reuse, neve…
Aug 10, 2026
599d173
winui(rename): tell the user the new name shows in Windows only after…
Aug 10, 2026
7604c7e
chore(gitignore): ignore Visual Studio SDV DvlErrLog.txt (local build…
Aug 10, 2026
63f8a7d
tray: default 'Open App' to the native WinUI client on Windows
Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 14 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

# --- Collapse third-party / generated files in GitHub diffs (they're not ours
# to review; the build still uses them). ---
# Vendored FFmpeg (LGPL prebuilt: headers + import libs + DLLs), not our code:
crossplatform/windows/daemon/vendor/** linguist-vendored
# Generated Rust lockfiles:
**/Cargo.lock linguist-generated
# Prebuilt driver packages (binary artifacts):
crossplatform/windows/drivers/**/prebuilt/** linguist-vendored
# Kernel drivers are derived from Microsoft/nefarius samples (mic = MS ACX
# AudioCodec sample; aap = bthecho/BthPS3). Collapse the sample-derived source in
# diffs — our modifications are documented in the drivers' READMEs + HANDOFF.
crossplatform/windows/drivers/mic/** linguist-vendored
crossplatform/windows/drivers/aap/** linguist-vendored
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
tags:
- 'linux-v*'
paths:
- 'linux-rust/**'
- 'crossplatform/crossplatform-rust/**'
- '.github/workflows/linux-build.yml'
workflow_dispatch:

Expand Down Expand Up @@ -38,11 +38,11 @@ jobs:
path: |
~/.cargo/registry
~/.cargo/git
linux-rust/target
key: ${{ runner.os }}-cargo-${{ hashFiles('linux-rust/Cargo.lock') }}
crossplatform/crossplatform-rust/target
key: ${{ runner.os }}-cargo-${{ hashFiles('crossplatform/crossplatform-rust/Cargo.lock') }}

- name: Build AppImage and Binary
working-directory: linux-rust
working-directory: crossplatform/crossplatform-rust
run: |
cargo build --release --verbose
just
Expand All @@ -55,33 +55,33 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: librepods-x86_64.AppImage
path: linux-rust/dist/librepods-x86_64.AppImage
path: crossplatform/crossplatform-rust/dist/librepods-x86_64.AppImage

- name: Upload binary artifact
if: "!startsWith(github.ref, 'refs/tags/linux-v')"
uses: actions/upload-artifact@v4
with:
name: librepods
path: linux-rust/dist/librepods
path: crossplatform/crossplatform-rust/dist/librepods

- name: Create tarball for Flatpak
if: startsWith(github.ref, 'refs/tags/linux-v')
working-directory: linux-rust
working-directory: crossplatform/crossplatform-rust
run: |
VERSION="${GITHUB_REF_NAME#linux-v}"
just tarball "${VERSION}"
echo "VERSION=${VERSION}" >> $GITHUB_ENV
echo "TAR_PATH=linux-rust/dist/librepods-v${VERSION}-source.tar.gz" >> $GITHUB_ENV
echo "TAR_PATH=crossplatform/crossplatform-rust/dist/librepods-v${VERSION}-source.tar.gz" >> $GITHUB_ENV

- name: Create GitHub Release (AppImage + binary + source)
if: startsWith(github.ref, 'refs/tags/linux-v')
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
files: |
linux-rust/dist/librepods-v${{ env.VERSION }}-source.tar.gz
linux-rust/dist/librepods-x86_64.AppImage
linux-rust/dist/librepods
crossplatform/crossplatform-rust/dist/librepods-v${{ env.VERSION }}-source.tar.gz
crossplatform/crossplatform-rust/dist/librepods-x86_64.AppImage
crossplatform/crossplatform-rust/dist/librepods
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
89 changes: 89 additions & 0 deletions .github/workflows/ci-windows.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: Windows CI (frontend)

# Builds the native Windows frontend: the Rust daemon (librepodsd) + tray
# (librepods-tray) and the WinUI 3 app (librepods-winui). The two kernel drivers
# (AAP L2CAP + hi-res mic) are NOT built here — they need the WDK and test/EV
# signing, which is a separate, manual pipeline.

on:
push:
branches: [cross-platform]
paths:
- 'crossplatform/windows/**'
- '.github/workflows/ci-windows.yml'
pull_request:
paths:
- 'crossplatform/windows/**'
workflow_dispatch:

jobs:
build:
runs-on: windows-latest

steps:
- uses: actions/checkout@v4

# ---- Rust: daemon + tray (native msvc target) --------------------------
- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Cache Cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
crossplatform/windows/daemon/target
crossplatform/windows/tray/target
key: ${{ runner.os }}-cargo-${{ hashFiles('crossplatform/windows/**/Cargo.lock') }}

- name: Build daemon (librepodsd)
working-directory: crossplatform/windows/daemon
run: cargo build --release

- name: Build tray (librepods-tray)
working-directory: crossplatform/windows/tray
run: cargo build --release

# ---- WinUI 3 app (unpackaged, self-contained) --------------------------
# WinUI resource generation runs the PRI MSBuild task
# (Microsoft.Build.Packaging.Pri.Tasks.dll), which is a .NET *Framework*
# assembly. `dotnet build` hosts MSBuild on .NET (Core) and cannot load it
# → MSB4062. Visual Studio's msbuild.exe is .NET Framework and loads it, so
# build the WinUI project with VS MSBuild. The .NET 10 SDK is still needed
# for the net10.0 target resolver.
- name: Setup .NET 10
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'

- name: Setup MSBuild
uses: microsoft/setup-msbuild@v2

- name: Restore WinUI app
working-directory: crossplatform/windows/winui
run: msbuild LibrePods.WinUI/LibrePods.WinUI.csproj -t:Restore -p:Configuration=Release -p:Platform=x64

- name: Build WinUI app
working-directory: crossplatform/windows/winui
run: msbuild LibrePods.WinUI/LibrePods.WinUI.csproj -t:Build -p:Configuration=Release -p:Platform=x64 -p:RestorePackages=false

# ---- Collect + upload artifacts ----------------------------------------
- name: Collect artifacts
shell: pwsh
run: |
New-Item -ItemType Directory -Force dist | Out-Null
Copy-Item crossplatform/windows/daemon/target/release/librepodsd.exe dist/
Copy-Item crossplatform/windows/tray/target/release/librepods-tray.exe dist/
# Find the WinUI output dir by locating the exe (path varies with TFM/RID).
$exe = Get-ChildItem -Recurse -Filter librepods-winui.exe `
crossplatform/windows/winui/LibrePods.WinUI/bin | Select-Object -First 1
if (-not $exe) { throw "WinUI build output (librepods-winui.exe) not found" }
Copy-Item -Recurse $exe.Directory.FullName dist/winui

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: librepods-windows-frontend
path: dist
if-no-files-found: error
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,9 @@ __pycache__/
.Python
develop-eggs/
dist/
# ...but the LibrePods cross-platform distributables are intentionally tracked.
!crossplatform/dist/
!crossplatform/dist/**
downloads/
eggs/
.eggs/
Expand Down Expand Up @@ -666,3 +669,15 @@ result-*

# direnv
.direnv

# Claude Code local config
.claude/

# LibrePods WinUI app manifest is a source file, not a build artifact
!crossplatform/windows/winui/LibrePods.WinUI/app.manifest

# Visual Studio per-user project settings (local build config — never shared)
*.vcxproj.user

# Visual Studio Static Driver Verifier log (generated when running SDV/DVL locally)
DvlErrLog.txt
Loading