You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Environment: ILCE-7M5 · USB · Camera Remote SDK V2.02.00 · linux-arm64 (Raspberry Pi) · server 3.0.0
Full sweep of all 47 OpenAPI operations against live hardware. 40 behaved exactly per spec. The critical failures are filed separately (#40, #41, #42, #43, #44, #46); this issue collects the smaller contract mismatches, each independently reproducible.
Status codes / validation
/actions/button does not validate against the operable-key list. The camera reports 24 operable keys, but delete, c7, home, thumbnail, slot-select and display all return 200 "pressed" regardless. The spec promises 400 plus data.supported_buttons — that list is returned correctly for names outside the enum, so only the operable-key check is missing.
POST /connection with an invalid mode returns 200 "Camera already connected" when a camera is connected: the already-connected short-circuit runs before mode validation. Correctly returns 400 when disconnected.
GET /properties/all for an unknown camera returns 200 with success:false. Spec says 400.
GET /live-view/frame serves a cached JPEG with 200 after stop + disable, with status confirming streaming:false, enabled:false. Spec says 404.
Response body inconsistencies
/actions/zoom returns camera:{connected:false,model:"",id:""} on a successful call with a live camera. The same empty block appears on GET /properties/{unknown} and on focus-near-far validation errors.
/actions/touch returns x/y as strings; /af-area-position returns them as integers. Same conceptual value, two types.
PUT /properties/aperture {"value":"0x190"} replies "Aperture set to f/0x190" — the message blindly prefixes f/ without formatting the raw value. The set itself works correctly.
SSE event catalog
transferProgress payload does not match the spec.openapi.yaml:1304 documents {cameraId, contentId, fileId, percent, savedPath?}. The server actually emits {percent, notify, filename} (CameraDeviceRest.cpp:1471-1480), and the polling fallback adds synthetic:true (line 1554). None of cameraId, contentId, fileId or savedPath are present.
propertyChanged carries {codes, count} and disconnected carries {} — the catalog says both include cameraId.
Undocumented events observed in the wild:warning (e.g. {"code":"0x20011","message":"Captured_Event"}) and cautionDisplay.
lutImportResult and settingsResult are referenced in endpoint descriptions but missing from the event catalog table.
Confirmed correct (for the record)
af-area-position clamping matches the documented model exactly; on this body 0,0 → 80,72, usable x ≈ 80-559.
settings/upload: 200 + reboot warning, then SSE settingsResult {"operation":"read","success":true}, then disconnected.
settings/download wrote a 198 KB .DAT file.
movie-rec toggle verified against the recording-state property.
Live view 1024x680; OSD composite 720x480 with full camera UI rendered.
Environment: ILCE-7M5 · USB · Camera Remote SDK V2.02.00 · linux-arm64 (Raspberry Pi) · server 3.0.0
Full sweep of all 47 OpenAPI operations against live hardware. 40 behaved exactly per spec. The critical failures are filed separately (#40, #41, #42, #43, #44, #46); this issue collects the smaller contract mismatches, each independently reproducible.
Status codes / validation
/actions/buttondoes not validate against the operable-key list. The camera reports 24 operable keys, butdelete,c7,home,thumbnail,slot-selectanddisplayall return200 "pressed"regardless. The spec promises400plusdata.supported_buttons— that list is returned correctly for names outside the enum, so only the operable-key check is missing.POST /connectionwith an invalidmodereturns200 "Camera already connected"when a camera is connected: the already-connected short-circuit runs before mode validation. Correctly returns400when disconnected.GET /properties/allfor an unknown camera returns200withsuccess:false. Spec says400.GET /live-view/frameserves a cached JPEG with200afterstop+disable, with status confirmingstreaming:false, enabled:false. Spec says404.Response body inconsistencies
/actions/zoomreturnscamera:{connected:false,model:"",id:""}on a successful call with a live camera. The same empty block appears onGET /properties/{unknown}and on focus-near-far validation errors./actions/touchreturnsx/yas strings;/af-area-positionreturns them as integers. Same conceptual value, two types.PUT /properties/aperture {"value":"0x190"}replies"Aperture set to f/0x190"— the message blindly prefixesf/without formatting the raw value. The set itself works correctly.SSE event catalog
transferProgresspayload does not match the spec.openapi.yaml:1304documents{cameraId, contentId, fileId, percent, savedPath?}. The server actually emits{percent, notify, filename}(CameraDeviceRest.cpp:1471-1480), and the polling fallback addssynthetic:true(line 1554). None ofcameraId,contentId,fileIdorsavedPathare present.propertyChangedcarries{codes, count}anddisconnectedcarries{}— the catalog says both includecameraId.warning(e.g.{"code":"0x20011","message":"Captured_Event"}) andcautionDisplay.lutImportResultandsettingsResultare referenced in endpoint descriptions but missing from the event catalog table.Confirmed correct (for the record)
af-area-positionclamping matches the documented model exactly; on this body0,0→80,72, usable x ≈ 80-559.settings/upload:200+ reboot warning, then SSEsettingsResult {"operation":"read","success":true}, thendisconnected.settings/downloadwrote a 198 KB.DATfile.movie-rectoggle verified against therecording-stateproperty.0x8D03.0x8D02(ContentNotFound) is surfaced with a genuinely helpful message.