-
-
Notifications
You must be signed in to change notification settings - Fork 23
Protocol Documentation
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.
To date, all Fujifilm cameras appear to use a compatible bluetooth communication protocol. Fujifilm cameras act as a peripheral and send advertisements.
Fujifilm uses unencrypted Bluetooth Low Energy connections. It does not use any native Bluetooth bonding to pair with the camera.
| 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 |
The manufacturer data in the advertisement is as follows:
packet-beta
0-1: "0x04d8"
2: "0x02"
3-7: "Pairing Token"
where:
-
0x04d8: Company ID (Fujifilm) -
0x02: Guess this means 'type == camera'
- 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
Repeat the Initial Pairing sequence, however, use the recorded Pairing Token, there is no requirement to scan for advertisements.
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 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"
where:
- Latitude: Degrees latitude * 10000000
- Longitude: Degrees longitude * 10000000
- Altitude: altitude in metres
Location and time data is sent in little endian order.
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"
where:
- Prefix: is fixed
005d0802fc030000101010 - Latitude: Degrees latitude * 10000000
- Longitude: Degrees longitude * 10000000
Location and time data is sent in big endian order.