Operations, properties and events OpenZCine uses on the
connection spine, camera control, live view and media.
Framing is in PTP-IP packet. This is not a complete Nikon
dictionary, only what the app sends or decodes.
Names mirror the libgphoto2 symbols (PTP_OC_*, PTP_OC_NIKON_*, PTP_DPC_*)
per the sourcing policy.
[verify-on-HW] marks behavior not yet confirmed on a real body; ZR-only
marks codes absent from libgphoto2 and seen only on the ZR. The source of truth
is PTPOperation.swift.
| Opcode |
Name |
Notes |
0x1001 |
GetDeviceInfo |
Operations and properties the body advertises. Drives every generation decision. |
0x1002 |
OpenSession |
Transaction ID 0 |
0x1003 |
CloseSession |
Sent before dropping sockets, so the camera frees its session slot |
0x952B |
GetPairingInfo |
Returns the pairing challenge; the camera shows a four-digit code. ZR-only, network only |
0x935A |
ConfirmPairing |
After the operator confirms the code. ZR-only, network only |
0x9435 |
ChangeApplicationMode |
p1 = 1 enters app control. Gen 2 and Gen 3 |
0x90C2 |
ChangeCameraMode |
p1: 0 PC-camera, 1 remote. Needed over USB on the ZR [verify-on-HW] |
0x9439 |
GetVendorCodes |
Vendor operation and property lists (Gen 3) |
0x90CA |
GetVendorPropCodes |
Vendor property list on Gen 1 and Gen 2 |
0x90C8 |
DeviceReady |
Readiness poll after live view start or a drive; also the idle keep-alive |
| Opcode |
Name |
Notes |
0x1014 |
GetDevicePropDesc |
Allowed values for a picker |
0x1015 |
GetDevicePropValue |
2-byte 0xDxxx and standard 0x50xx codes |
0x1016 |
SetDevicePropValue |
2-byte codes, including recording format |
0x943A |
GetDevicePropDescEx |
4-byte 0x0001_Dxxx extended codes (Gen 3) |
0x943B |
GetDevicePropValueEx |
Extended codes |
0x943C |
SetDevicePropValueEx |
Extended codes only. An Ex write of a 2-byte recording-format property makes the ZR close the connection |
Pickers write back the camera’s own advertised raw values; codec and resolution
are never hand-packed.
| Opcode |
Name |
Notes |
0x9201 |
StartLiveView |
Then poll DeviceReady |
0x9202 |
EndLiveView |
Sent whenever the feed is fully hidden |
0x9428 |
GetLiveViewImageEx |
Header plus JPEG, see live view |
0x920A |
StartMovieRecInCard |
No parameters, no data |
0x920B |
EndMovieRec |
No parameters, no data |
0x9205 |
ChangeAfArea |
p1 x, p2 y in the header’s coordinate space |
0x90C1 |
AfDrive |
One-shot AF |
0x9206 |
AfDriveCancel |
|
0x9204 |
MfDrive |
Focus-by-wire step for the on-feed focus dial |
0x9425 |
EndTracking |
ZR-only [verify-on-HW] |
0x9426 |
ChangeAELock |
|
0x941C |
GetEventEx |
Nikon event queue poll, p1 = 0 clears it |
0x90C7 |
GetEvent |
Older event poll |
A focus drive holds the single command channel, so its retries are budgeted in
wall-clock time and a tap-to-focus pre-empts an in-flight drive.
| Opcode |
Name |
Notes |
0x9207 |
InitiateCaptureRecInMedia |
Preferred still release; p1 capture sort, p2 card destination |
0x100E |
InitiateCapture |
Standard fallback |
0x90C0 |
InitiateCaptureRecInSdram |
Capture into camera memory |
0x90CB |
AfAndCaptureRecInSdram |
AF, then capture into memory |
0x920C |
TerminateCapture |
Ends bulb or open capture |
0x9445 / 0x9446 / 0x9447 |
Initiate / Terminate / GetOpenCaptureInfo |
Interval and focus-shift capture on Gen 3 [verify-on-HW] |
| Opcode |
Name |
Notes |
0x9209 |
GetVendorStorageIDs |
Card-present storage IDs. Standard GetStorageIDs reports placeholder slots |
0x1004 |
GetStorageIDs |
|
0x1005 |
GetStorageInfo |
Capacity and free space |
0x1007 |
GetObjectHandles |
p1 storage, p2 format filter, p3 association |
0x1008 |
GetObjectInfo |
Filename, size, dimensions, capture date |
0x100A |
GetThumb |
Embedded JPEG thumbnail |
0x101B |
GetPartialObject |
32-bit offset and length |
0x9421 |
GetObjectSize |
64-bit size [verify-on-HW] |
0x9431 |
GetPartialObjectEx |
64-bit offset and length as low/high words [verify-on-HW] |
0x100B |
DeleteObject |
Protected objects are refused |
0x9803 / 0x9804 |
Get / SetObjectPropValue |
Star rating on a card object, see media |
| Code |
Property |
Notes |
0xD1A4 |
LiveViewProhibitionCondition |
Why live view cannot start |
0xD1AC |
LiveViewImageSize |
Stream preset: 1 about QVGA, 2 about VGA, 3 about XGA |
0xD1BC |
LiveViewImageCompression |
Quality bias, six grade and priority values |
0xD0A4 |
MovieRecProhibitionCondition |
Why recording cannot start |
0xD0A0 / 0xD0AF |
Movie screen size / file type |
Resolution, frame rate and codec |
0xD1A6 |
LiveViewSelector |
0 photo, 1 video. Read often so the chrome follows the body’s lever |
0xD1AA |
Movie ISO |
Rejected on R3D NE |
0x0001_D09D / 0x0001_D09E |
Movie base ISO / dual-base ISO |
ZR-only [verify-on-HW] |
0xD0AD |
Movie ISO auto |
On/off, independent of exposure program |
0x0001_D074 |
Movie shutter mode |
1 speed, 2 angle. ZR-only |
0xD1A8 / 0x0001_D075 |
Movie shutter speed / angle |
Angle is ZR-only |
0xD1A9 |
Movie f-number |
|
0xD23A / 0xD21A |
Movie white balance / color temperature |
Tint fine-tune is one property per WB mode, app-decoded [verify-on-HW] |
0xD1FA / 0xD1F8 |
Movie focus mode / AF-area mode |
App-decoded tables [verify-on-HW] |
0x0001_D005 / 0x0001_D006 |
Subject detection (still / movie) |
|
0xD0A2, 0xD0A8, 0xD0AA, 0xD23D |
Microphone, level, wind filter, attenuator |
[verify-on-HW] |
0x0001_D04D, 0x0001_D065, 0x0001_D070 |
Audio input, 32-bit float, input sensitivity |
ZR-only [verify-on-HW] |
0xD1F9 / 0xD314 |
Movie VR / electronic VR |
|
0x5001 |
BatteryLevel |
The ZR reports 1, 20, 40, 60, 80 or 100 |
0xD101 |
AC power |
Non-zero on external or USB power |
0xD102 |
WarningStatus |
Bitfield shown as OK or CHECK; bit meanings [verify-on-HW] |
0x5011 |
DateTime |
Read at connect; set once when drifted more than five seconds, never while recording |
0xD1B1 / 0xD1B3 |
Exposure indicator / lit state |
1/6 EV steps; undefined while unlit |
0xD1F0 |
ApplicationMode |
Gen 1 app control, a write of 1 |
Photo mode adds the standard still properties (0x5003 image size through
0x5013 drive mode), still focus, ISO auto, shutter, card slot, RAW
compression, image area, Picture Control and remaining shots. Model-specific
values: Nikon ZR command comparison.
| Code |
Event |
Notes |
0x4002 |
ObjectAdded |
One per file; a RAW plus JPEG pair emits two |
0x400D |
CaptureComplete |
|
0x4006 |
DevicePropChanged |
p1 is the property code. Schedules one read |
0xC10A |
MovieRecordStarted |
Also caught from the live-view header |
0xC108 |
MovieRecordComplete |
|
0xC105 |
MovieRecordInterrupted |
p1 is a raw camera error. Nikon does not publish the table; the app shows it rather than guessing |
| Code |
Meaning |
0x2001 |
OK |
0x2019 |
Device busy; transient during lens start-up or a drive |
0x2013 |
Access denied; the current mode disallows it |
0x201E |
Session already open; success over USB on iOS |
0xA004 |
Invalid status |
0xA00B |
Not in live view |
0xA00C / 0xA00E |
MF drive hit the end / step too small |
0xA021 / 0xA022 |
Store error / unformatted card |
0xA200, 0xA201, 0xA202 |
Bulb, silent or movie-frame release busy |