Skip to content

Add Panasonic Lumix BLE camera support - #79

Merged
MaxRink merged 3 commits into
masterfrom
feat/72-lumix
Aug 22, 2026
Merged

MaxRink merged 3 commits into
masterfrom
feat/72-lumix

Conversation

@MaxRink

@MaxRink MaxRink commented Aug 18, 2026 •

Copy link
Copy Markdown
Owner

Motivation

Panasonic Lumix cameras are the highest-ranked missing vendor in plan 61.
Adding them broadens furble camera coverage so Lumix owners get the same
native BLE shutter, focus, and GPS sidecar support the other vendors already
have.

What changed

  • New Furble::Lumix vendor class (lib/furble/Lumix.h / Lumix.cpp), one
    class per vendor mode, ported from upstream PR 282 onto the fork vendor API.
  • Camera::Type::PANASONIC_LUMIX added as enum value 10 (NVS-persisted type
    id, never renumbered).
  • CameraList registers the saved-camera load path and the scan match()
    path.
  • Implements the MEI0 session-init handshake seen in S5II and BGH1 HCI traces,
    the device-name identity write, single-byte shutter/focus commands, and the
    GPS location plus clock sidecar writes. The GPS-epoch conversion is kept
    local since the fork has no Camera::toUnixTime() helper.
  • Docs: lib/furble/CLAUDE.md, plans/72-lumix.md, plans/61 implementation
    state, and plans/README.md index updated.

Wire ids

  • Camera type id: PANASONIC_LUMIX = 10 (NVS-persisted). No new settings wire
    id is used; the settings ledger next-free stays 41. Provisional ids may be
    renumbered at integration if sibling vendor branches collide.

Verification

  • M5StickS3 release firmware build: SUCCESS
    (FURBLE_VERSION=dev FURBLE_TEST=0 pio run -e m5stick-s3).
  • SDL simulator build: sim/build.sh SUCCESS. No sim shim was needed; the sim
    uses the shim/CameraList.h fake and does not compile the real registry.
  • clang-format 21 clean, no em-dashes, no conflict markers.

UNTESTED on hardware

No Panasonic Lumix camera is available in this workspace. This change is
validated only by code review, the S3 compile, and the FauxNY/simulator path.
It has not been exercised against a real Lumix camera. The S5II first-pair path
may still need the camera-side WiFi-assisted Lumix Sync handshake, and the
G9II-generation XOR login is not implemented.

🤖 Generated with Claude Code

Data sources

Untested on Panasonic hardware; code review + FauxNY only.

Upstream issues

Addresses gkoh#247.

@github-actions

github-actions Bot commented Aug 18, 2026 •

Copy link
Copy Markdown

Firmware size report

Env Flash used RAM used Flash delta vs base RAM delta vs base
m5stack-core 1,189,784 B (68.3%) 41,248 B +4,100 B (+0.35%) +176 B ⚠️
m5stack-core-debug 1,400,441 B (80.4%) 42,412 B +4,504 B (+0.32%) +184 B ⚠️
m5stack-core2 1,189,888 B (68.4%) 41,256 B +4,108 B (+0.35%) +176 B ⚠️
m5stack-core2-debug 1,400,553 B (80.5%) 42,412 B +4,500 B (+0.32%) +184 B ⚠️
m5stick-c 1,125,500 B (64.7%) 41,256 B +4,100 B (+0.37%) +176 B ⚠️
m5stick-c-debug 1,349,857 B (77.5%) 42,396 B +4,516 B (+0.34%) +184 B ⚠️
m5stick-c-plus 1,142,152 B (65.6%) 41,256 B +4,092 B (+0.36%) +176 B ⚠️
m5stick-c-plus-debug 1,352,861 B (77.7%) 42,396 B +4,524 B (+0.34%) +184 B ⚠️
m5stick-s3 1,219,320 B (70.0%) 34,548 B +4,160 B (+0.34%) +176 B ⚠️
m5stick-s3-debug 1,446,905 B (83.1%) 35,820 B +4,444 B (+0.31%) +184 B ⚠️

Base comparison: latest master build at commit 0c310719919b.
Flash growth over 1% and any positive RAM delta are marked with ⚠️.

@MaxRink
MaxRink force-pushed the feat/72-lumix branch 3 times, most recently from 60b49a2 to d394b71 Compare August 19, 2026 21:12
@MaxRink
MaxRink marked this pull request as draft August 21, 2026 19:19
MaxRink and others added 2 commits August 22, 2026 19:51
Port the Lumix vendor class from upstream PR 282 onto the fork vendor
API. Adds Camera::Type::PANASONIC_LUMIX (value 10) and registers the
saved-camera and scan paths in CameraList. Implements the MEI0 session
path from S5II and BGH1 traces plus shutter, focus, and GPS sidecar
writes. Untested: no Lumix hardware available.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Rebase feat/72-lumix onto fork master 734b759 and record the
implementation state: vendor type id PANASONIC_LUMIX = 10 kept (sibling
DJI Osmo branch took 11 to resolve the Type-10 collision), protocol
source verified against upstream PR 282 and the lat-long-log notes,
m5stick-s3 firmware build green, host tests 7 of 7, protocol goldens
deterministic. Declared untested with no Lumix hardware. Merge held for
a human nod.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@MaxRink
MaxRink marked this pull request as ready for review August 22, 2026 17:52
The FURBLE_CONSOLE-only cameraTypeName() switch over Camera::Type is
exhaustive (-Werror=switch), so the new PANASONIC_LUMIX value broke every
-debug build. Add its case.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@MaxRink
MaxRink merged commit 604993b into master Aug 22, 2026
20 checks passed
MaxRink added a commit that referenced this pull request Aug 22, 2026
The cameraTypeName DJI case was dropped when this branch rebased onto
master (which already carried the Lumix case from #79). Restore it so the
-debug -Werror=switch build passes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
MaxRink added a commit that referenced this pull request Aug 22, 2026
* Add DJI Osmo Action BLE remote vendor

Add a DJIOsmo camera class implementing the DJI R SDK protocol over the
documented FFF0 service. It supports advertisement matching, secure
NimBLE connection, the protocol handshake, camera status subscription,
and recording start/stop for Osmo Action 4 and Action 5 Pro. Register
the vendor as Camera::Type::DJI_OSMO in Camera.h and CameraList, and
update the lib/furble guide.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: record DJI Osmo rebase and verification state

Rebase feat/74-dji-osmo onto fork master 734b759 and record the
implementation state: vendor type id DJI_OSMO = 11 (id 10 left to the
sibling Lumix branch to resolve the Type-10 collision), protocol source
verified against DJI's Osmo-GPS-Controller-Demo including both CRC seeds
and polynomials and all command ids, m5stick-s3 firmware build green,
host tests 7 of 7, protocol goldens deterministic. Declared untested
with no DJI hardware. Merge held for a human nod.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(console): handle DJI_OSMO in cameraTypeName after rebase

The cameraTypeName DJI case was dropped when this branch rebased onto
master (which already carried the Lumix case from #79). Restore it so the
-debug -Werror=switch build passes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
MaxRink added a commit that referenced this pull request Aug 25, 2026
* Add Panasonic Lumix BLE camera support

Port the Lumix vendor class from upstream PR 282 onto the fork vendor
API. Adds Camera::Type::PANASONIC_LUMIX (value 10) and registers the
saved-camera and scan paths in CameraList. Implements the MEI0 session
path from S5II and BGH1 traces plus shutter, focus, and GPS sidecar
writes. Untested: no Lumix hardware available.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: record Lumix rebase and verification state

Rebase feat/72-lumix onto fork master 734b759 and record the
implementation state: vendor type id PANASONIC_LUMIX = 10 kept (sibling
DJI Osmo branch took 11 to resolve the Type-10 collision), protocol
source verified against upstream PR 282 and the lat-long-log notes,
m5stick-s3 firmware build green, host tests 7 of 7, protocol goldens
deterministic. Declared untested with no Lumix hardware. Merge held for
a human nod.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(console): handle PANASONIC_LUMIX in cameraTypeName switch

The FURBLE_CONSOLE-only cameraTypeName() switch over Camera::Type is
exhaustive (-Werror=switch), so the new PANASONIC_LUMIX value broke every
-debug build. Add its case.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
MaxRink added a commit that referenced this pull request Aug 25, 2026
* Add DJI Osmo Action BLE remote vendor

Add a DJIOsmo camera class implementing the DJI R SDK protocol over the
documented FFF0 service. It supports advertisement matching, secure
NimBLE connection, the protocol handshake, camera status subscription,
and recording start/stop for Osmo Action 4 and Action 5 Pro. Register
the vendor as Camera::Type::DJI_OSMO in Camera.h and CameraList, and
update the lib/furble guide.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: record DJI Osmo rebase and verification state

Rebase feat/74-dji-osmo onto fork master 734b759 and record the
implementation state: vendor type id DJI_OSMO = 11 (id 10 left to the
sibling Lumix branch to resolve the Type-10 collision), protocol source
verified against DJI's Osmo-GPS-Controller-Demo including both CRC seeds
and polynomials and all command ids, m5stick-s3 firmware build green,
host tests 7 of 7, protocol goldens deterministic. Declared untested
with no DJI hardware. Merge held for a human nod.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(console): handle DJI_OSMO in cameraTypeName after rebase

The cameraTypeName DJI case was dropped when this branch rebased onto
master (which already carried the Lumix case from #79). Restore it so the
-debug -Werror=switch build passes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
MaxRink added a commit that referenced this pull request Aug 30, 2026
* Add Panasonic Lumix BLE camera support

Port the Lumix vendor class from upstream PR 282 onto the fork vendor
API. Adds Camera::Type::PANASONIC_LUMIX (value 10) and registers the
saved-camera and scan paths in CameraList. Implements the MEI0 session
path from S5II and BGH1 traces plus shutter, focus, and GPS sidecar
writes. Untested: no Lumix hardware available.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: record Lumix rebase and verification state

Rebase feat/72-lumix onto fork master 734b759 and record the
implementation state: vendor type id PANASONIC_LUMIX = 10 kept (sibling
DJI Osmo branch took 11 to resolve the Type-10 collision), protocol
source verified against upstream PR 282 and the lat-long-log notes,
m5stick-s3 firmware build green, host tests 7 of 7, protocol goldens
deterministic. Declared untested with no Lumix hardware. Merge held for
a human nod.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(console): handle PANASONIC_LUMIX in cameraTypeName switch

The FURBLE_CONSOLE-only cameraTypeName() switch over Camera::Type is
exhaustive (-Werror=switch), so the new PANASONIC_LUMIX value broke every
-debug build. Add its case.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
MaxRink added a commit that referenced this pull request Aug 30, 2026
* Add DJI Osmo Action BLE remote vendor

Add a DJIOsmo camera class implementing the DJI R SDK protocol over the
documented FFF0 service. It supports advertisement matching, secure
NimBLE connection, the protocol handshake, camera status subscription,
and recording start/stop for Osmo Action 4 and Action 5 Pro. Register
the vendor as Camera::Type::DJI_OSMO in Camera.h and CameraList, and
update the lib/furble guide.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: record DJI Osmo rebase and verification state

Rebase feat/74-dji-osmo onto fork master 734b759 and record the
implementation state: vendor type id DJI_OSMO = 11 (id 10 left to the
sibling Lumix branch to resolve the Type-10 collision), protocol source
verified against DJI's Osmo-GPS-Controller-Demo including both CRC seeds
and polynomials and all command ids, m5stick-s3 firmware build green,
host tests 7 of 7, protocol goldens deterministic. Declared untested
with no DJI hardware. Merge held for a human nod.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(console): handle DJI_OSMO in cameraTypeName after rebase

The cameraTypeName DJI case was dropped when this branch rebased onto
master (which already carried the Lumix case from #79). Restore it so the
-debug -Werror=switch build passes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant