Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Protocol Documentation

Guo-Rong edited this page Aug 4, 2025 · 10 revisions

Introduction

Each camera manufacturer (and perhaps each camera) uses specific protocols to communicate with and control the camera over bluetooth. For furble, the primary interest is in the following functions:

  • initial scanning
  • pairing, connection and re-connection
  • shutter press/release
  • focus press/release
  • location tagging
    • time and date
    • geographic positioning

This page will aim to provide the current known methods for connecting and controlling the various cameras supported by furble. Much of this information has been carefully reverse engineered or derived from other community sources.

Fujilfilm

To date, all Fujifilm cameras appear to use a compatible bluetooth communication protocol. Fujifilm cameras act as a peripheral and send advertisements.

Connection

Fujifilm uses unencrypted Bluetooth Low Energy connections. It does not use any native Bluetooth bonding to pair with the camera.

UUIDs

Service Characteristic Description
91f1de68-dff6-466e-8b65ff13b0f16fb8 Primary Service
aba356eb-9633-4e60-b73ff52516dbd671 Pairing
85b9163e-62d1-49ff-a6f5054b4630d4a1 Identifier
4c0020fe-f3b6-40de-acc977d129067b14 Notification
a68e3f66-0fcc-4395-8d4caa980b5877fa Indication 01 - purpose unclear
bd17ba04-b76b-4892-a545b73ba1f74dae Indication 02 - location update request
049ec406-ef75-4205-a39008fe209c51f0 Indication 03
f9150137-5d40-4801-a8dcf7fc5b01da50 Notification 01 - related to pairing/connection status
ad06c7b7-f41a-46f4-a29a712055319122 purpose unclear
6514eb81-4e8f-458d-aa2ae691336cdfac Remote Control Service
7fcf49c6-4ff0-4777-a03d1a79166af7a8 Remote Control
3b46ec2b-48ba-41fd-b1b8ed860b60d22b Location Service
0f36ec14-29e5-411a-a1b664ee8383f090 Location/Time updates

Initial Scan

The manufacturer data in the advertisement is as follows:

packet-beta
  0-1: "0x04d8"
  2: "0x02"
  3-7: "Pairing Token"
Loading

where:

  • 0x04d8: Company ID (Fujifilm)
  • 0x02: Guess this means 'type == camera'

Initial Pairing

  • scan for advertisement with matching Company ID and Type == 0x02
  • connect to the camera
  • write the Pairing Token from the advertisement to the Pairing Characteristic
    • record the Pairing Token for subsequent connections
  • write your name, ASCII encoded, to the Identifier Characteristic
  • subscribe to Indication 01
  • subscribe to Indication 02
  • subscribe to Notification 01
  • subscribe to Notification 02
  • subscribe to Indication 03

Subsequent Repeat Connection

Repeat the Initial Pairing sequence, however, use the recorded Pairing Token, there is no requirement to scan for advertisements.

Shutter/Focus Control

Shutter and focus control operate via the Remote Control Service and Remote Control Characteristic. The following table summarises the control values written to the Remote Control Characteristic:

Function Value
Command 0x0100
Shutter Press 0x0200
Shutter Release 0x0000
Focus Press 0x0300

Camera control sequence:

  • send Command
  • send one of:
    • Shutter Press
    • Focus Press
  • send Shutter Release

Location Tagging

Location and time information is provided via the Location Service, Location Characteristic and Indication 02 notifier. On some Fujifilm cameras, Indication 02 is notified with the value 0x0100 when the camera requests a location update. However, it appears safe to write location data at any time.

The location data is serialised according to the following format:

packet-beta
  0-3: "Latitude"
  4-7: "Longitude"
  8-11: "Altitude"
  12-15: "0x0000"
  16-17: "Year"
  18: "Day"
  19: "Month"
  20: "Hour"
  21: "Minute"
  22: "Second"
Loading

where:

  • Latitude: Degrees latitude * 10000000
  • Longitude: Degrees longitude * 10000000
  • Altitude: altitude in metres

Location and time data is sent in little endian order.

Canon

Nikon

Sony

Location Tagging

packet-beta
  0-10: "Prefix"
  11-14: "Latitude"
  15-18: "Longitude"
  19-20: "Year"
  21: "Month"
  22: "Day"
  23: "Hour"
  24: "Minute"
  25: "Second"
  26-91: "0x00"
  92-93: "UTC offset"
  94-95: "0x00"
Loading

where:

  • Prefix: is fixed 005d0802fc030000101010
  • Latitude: Degrees latitude * 10000000
  • Longitude: Degrees longitude * 10000000

Location and time data is sent in big endian order.

Mobile Device (iOS & Android)

Clone this wiki locally