458 lines
16 KiB
JSON
458 lines
16 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"profile_id": "xgrids.lixelkity-k1.fw-3.0.2.direct-lan.v1",
|
|
"profile_status": "experimental-evidence-backed",
|
|
"scope": {
|
|
"vendor": "XGRIDS",
|
|
"model": "LixelKity K1",
|
|
"firmware": {
|
|
"match": "exact",
|
|
"version": "3.0.2"
|
|
},
|
|
"topology": "direct-lan",
|
|
"claim_limit": "One owner-controlled K1 on exact firmware 3.0.2 across controlled direct-LAN and owner-operated LixelGO/iPhone laboratory runs. This is not a vendor API or a cross-firmware compatibility claim."
|
|
},
|
|
"evidence_vocabulary": {
|
|
"observed": "The channel, transport, or physical behavior was directly seen on the owner-controlled K1.",
|
|
"decoded": "A bounded decoder produces the stated semantic payload from observed bytes; transport framing alone is not a semantic decode.",
|
|
"replay_verified": "A captured payload of this semantic channel has passed the repository replay-to-view path.",
|
|
"physical_verified": "The result was correlated with a controlled physical K1 state or operator action.",
|
|
"write_enabled": "This profile authorizes software to emit the state-changing vendor request. False never grants runtime write authority."
|
|
},
|
|
"safety": {
|
|
"default_mode": "read-only",
|
|
"vendor_writes_enabled": false,
|
|
"unknown_firmware_policy": "reject-profile",
|
|
"request_topic_subscription_enabled": false,
|
|
"notes": [
|
|
"Loading this descriptive profile does not authorize a BLE or MQTT write.",
|
|
"The existing reviewed Wi-Fi provisioning procedure remains separately operator-confirmed and is not activated by this profile.",
|
|
"Observed LixelGO modeling requests describe the wire contract but remain non-replayable and write-disabled.",
|
|
"Unknown firmware, transport, topics, fields, and action responses fail closed."
|
|
]
|
|
},
|
|
"evidence_sources": [
|
|
{
|
|
"id": "wifi-provisioning-profile",
|
|
"kind": "reviewed-profile",
|
|
"path": "docs/04_K1_WIFI_PROVISIONING_PROFILE.md",
|
|
"scope": "Observed firmware, GATT UUIDs, 99-byte provisioning frame, status read and physical LAN association."
|
|
},
|
|
{
|
|
"id": "mqtt-stream-profile",
|
|
"kind": "reviewed-profile",
|
|
"path": "docs/05_K1_MQTT_STREAM_PROFILE.md",
|
|
"scope": "Direct-LAN MQTT transport, report topics, bounded point/pose codecs and static modeling-request mapping."
|
|
},
|
|
{
|
|
"id": "lab-001",
|
|
"kind": "redacted-physical-lab-report",
|
|
"path": "docs/lab/001_K1_LIVE_MQTT_20260715.redacted.md",
|
|
"scope": "Physical BLE-to-Wi-Fi result, MQTT message counts, point/pose decode totals and negative camera observation."
|
|
},
|
|
{
|
|
"id": "live-viewer-profile",
|
|
"kind": "implemented-path-description",
|
|
"path": "docs/06_K1_LIVE_VIEWER.md",
|
|
"scope": "Raw-first live/replay path for point cloud and pose."
|
|
},
|
|
{
|
|
"id": "lab-002",
|
|
"kind": "redacted-physical-protocol-report",
|
|
"path": "docs/lab/002_LIXELGO_IPHONE_LOCAL_PROTOCOL_20260716.redacted.md",
|
|
"scope": "Owner-operated LixelGO start/stop mapping, local-only bounded traffic result and left/right RTSP/H.264 camera-preview discovery."
|
|
}
|
|
],
|
|
"transports": [
|
|
{
|
|
"id": "ble.wifi-bootstrap.fw3.v1",
|
|
"role": "bootstrap-and-status",
|
|
"protocol": "BLE GATT",
|
|
"service_uuid": "00007f00-0000-1000-8000-00805f9b34fb",
|
|
"characteristics": {
|
|
"wifi_request": "00007f01-0000-1000-8000-00805f9b34fb",
|
|
"wifi_status": "00007f02-0000-1000-8000-00805f9b34fb"
|
|
},
|
|
"reviewed_profile_id": "xgrids-k1-fw3-wifi-v1",
|
|
"request_frame_bytes": 99,
|
|
"status_semantics": {
|
|
"ap_baseline_ipv4": "192.168.56.1",
|
|
"lan_acceptance": "A non-AP private IPv4 must be observed and independently confirmed on the intended LAN."
|
|
},
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": true,
|
|
"replay_verified": false,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"wifi-provisioning-profile",
|
|
"lab-001"
|
|
]
|
|
},
|
|
{
|
|
"id": "mqtt.direct-lan.fw3.v1",
|
|
"role": "report-data-plane",
|
|
"protocol": "MQTT 3.1.1",
|
|
"network": {
|
|
"transport": "TCP",
|
|
"port": 1883,
|
|
"tls": false,
|
|
"authentication": "none-observed",
|
|
"addressing": "confirmed-device-private-ipv4-only"
|
|
},
|
|
"subscription_allowlist": [
|
|
"lixel/application/report/#",
|
|
"RealtimePointcloud",
|
|
"RealtimePath",
|
|
"DeviceStatus"
|
|
],
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": false,
|
|
"replay_verified": false,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"mqtt-stream-profile",
|
|
"lab-001",
|
|
"live-viewer-profile",
|
|
"lab-002"
|
|
]
|
|
},
|
|
{
|
|
"id": "rtsp.camera-preview.fw3.v1",
|
|
"role": "camera-preview-data-plane",
|
|
"protocol": "RTSP 1.0 with interleaved RTP over TCP",
|
|
"network": {
|
|
"transport": "TCP",
|
|
"port": 8554,
|
|
"tls": false,
|
|
"authentication": "none-observed",
|
|
"addressing": "confirmed-device-private-ipv4-only"
|
|
},
|
|
"media": {
|
|
"codec": "H.264",
|
|
"rtp_payload_type": 96,
|
|
"clock_hz": 90000,
|
|
"framing": "RTP/AVP/TCP interleaved channels 0-1"
|
|
},
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": false,
|
|
"replay_verified": false,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"lab-002"
|
|
]
|
|
}
|
|
],
|
|
"channels": [
|
|
{
|
|
"id": "spatial.point-cloud.live",
|
|
"kind": "point-cloud",
|
|
"direction": "device-report",
|
|
"topic": "lixel/application/report/lio_pcl",
|
|
"wire_format": "protobuf MqttCompressMsg containing raw-LZ4 LioPclReport",
|
|
"semantic_payload": "metric XYZ, complete uint32 rgbi and verified low-byte intensity",
|
|
"bounds": {
|
|
"max_mqtt_payload_bytes": 2097152,
|
|
"max_compressed_bytes": 1048576,
|
|
"max_decoded_bytes": 8388608,
|
|
"max_expansion_ratio": 64,
|
|
"max_points_per_frame": 250000
|
|
},
|
|
"unverified_fields": [
|
|
"upper 24 bits of rgbi as RGB",
|
|
"sensor timestamp epoch",
|
|
"sensor-to-vehicle extrinsics"
|
|
],
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": true,
|
|
"replay_verified": true,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"mqtt-stream-profile",
|
|
"lab-001",
|
|
"live-viewer-profile"
|
|
]
|
|
},
|
|
{
|
|
"id": "spatial.pose.live",
|
|
"kind": "pose",
|
|
"direction": "device-report",
|
|
"topic": "lixel/application/report/lio_pose",
|
|
"wire_format": "protobuf LioPoseReport",
|
|
"semantic_payload": "position XYZ, quaternion XYZW, distance and pose accuracy",
|
|
"unverified_fields": [
|
|
"sensor timestamp epoch",
|
|
"coordinate-frame convention",
|
|
"sensor-to-vehicle extrinsics"
|
|
],
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": true,
|
|
"replay_verified": true,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"mqtt-stream-profile",
|
|
"lab-001",
|
|
"live-viewer-profile"
|
|
]
|
|
},
|
|
{
|
|
"id": "device.modeling.live",
|
|
"kind": "acquisition-telemetry",
|
|
"direction": "device-report",
|
|
"topic": "lixel/application/report/modeling",
|
|
"wire_format": "protobuf ModelingReport acquisition telemetry subset",
|
|
"semantic_payload": "nonnegative MoveDistance metres, MoveSpeed metres per second, int64 ScanTime at two ticks per second, and int32 PgoProgress",
|
|
"bounds": {
|
|
"max_mqtt_payload_bytes": 65536,
|
|
"max_fields": 64,
|
|
"max_nested_fields": 16
|
|
},
|
|
"limitations": [
|
|
"ScanTime scale is exact-profile evidence and must not be generalized to other firmware.",
|
|
"Replay-to-view acceptance remains open even though retained physical runs establish units and live decoding."
|
|
],
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": true,
|
|
"replay_verified": false,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"mqtt-stream-profile",
|
|
"lab-001",
|
|
"live-viewer-profile"
|
|
]
|
|
},
|
|
{
|
|
"id": "device.status.live",
|
|
"kind": "device-status",
|
|
"direction": "device-report",
|
|
"topic": "lixel/application/report/device_status",
|
|
"wire_format": "protobuf DeviceStatusReport acquisition lifecycle subset",
|
|
"semantic_payload": "bounded modeling-state base-offset mapping, init-ready flag, project presence and redacted identity fields",
|
|
"limitations": [
|
|
"Nested system and RTK status payloads are presence-checked but not semantically decoded.",
|
|
"ScanOver and Ready observations do not prove durable artifact save completion."
|
|
],
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": true,
|
|
"replay_verified": false,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"mqtt-stream-profile",
|
|
"lab-001"
|
|
]
|
|
},
|
|
{
|
|
"id": "device.heartbeat.live",
|
|
"kind": "heartbeat",
|
|
"direction": "device-report",
|
|
"topic": "lixel/application/report/heartbeat",
|
|
"wire_format": "opaque bytes",
|
|
"semantic_payload": null,
|
|
"limitations": [
|
|
"Only channel presence and approximate report cadence are verified.",
|
|
"Payload semantics are not decoded."
|
|
],
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": false,
|
|
"replay_verified": false,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"mqtt-stream-profile",
|
|
"lab-001"
|
|
]
|
|
},
|
|
{
|
|
"id": "camera.preview.live",
|
|
"kind": "camera-preview",
|
|
"direction": "device-report",
|
|
"discovery_status": "observed",
|
|
"topic": null,
|
|
"endpoint_templates": [
|
|
"rtsp://{confirmed-device-private-ipv4}:8554/live/chn_left_main",
|
|
"rtsp://{confirmed-device-private-ipv4}:8554/live/chn_right_main"
|
|
],
|
|
"wire_format": "RTSP 1.0, interleaved RTP/TCP, H.264 PT96 at 90000 Hz",
|
|
"semantic_payload": "compressed live left/right camera preview selected by endpoint",
|
|
"limitations": [
|
|
"No full-resolution raw frame, camera calibration or panorama-stitching contract is verified.",
|
|
"Left/right optical identity is supported by endpoint labels and operator-selected application views, not an independent image-content fixture.",
|
|
"Mission Core implements bounded copy-remux, archival and replay admission, but no newly archived physical K1 camera session has passed shared-timeline playback acceptance."
|
|
],
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": false,
|
|
"replay_verified": false,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"lab-002"
|
|
]
|
|
}
|
|
],
|
|
"acquisition_control": {
|
|
"mode": "operator-manual",
|
|
"write_enabled": false,
|
|
"verified_device_control": {
|
|
"gesture": "physical-double-click",
|
|
"state_dependent_result": "start from steady-green standby; stop during active scanning",
|
|
"single_click_result": "not a verified scan-start action",
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": false,
|
|
"replay_verified": false,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"lab-001"
|
|
]
|
|
},
|
|
"semantic_actions": [
|
|
{
|
|
"id": "acquisition.start",
|
|
"execution": "operator-manual",
|
|
"operator_control": "physical-double-click from steady-green standby",
|
|
"observed_application_control": "owner-operated LixelGO project confirmation",
|
|
"vendor_request_mapping": {
|
|
"evidence_kind": "owner-controlled-wire-observation",
|
|
"transport": "MQTT 3.1.1",
|
|
"topic": "lixel/application/request/modeling",
|
|
"qos": 2,
|
|
"retain": false,
|
|
"message_type": "ModelingRequest",
|
|
"action_field_value": 1,
|
|
"header_contract": {
|
|
"device_id": "explicit-observed-identity",
|
|
"session_id": "{device_id}:ModelingRequest",
|
|
"openapi_key": "private-application-level-runtime-authority"
|
|
},
|
|
"request_fields": {
|
|
"project_name": "required-operator-value",
|
|
"record_mode": 2,
|
|
"scan_mode": 1,
|
|
"mount_type": 0,
|
|
"pre_project_id": "omitted-in-retained-request"
|
|
},
|
|
"success_result_code": 302252033,
|
|
"required_unresolved_context": [
|
|
"operator-owned Keychain item provisioning and physical acceptance of the uninstalled reviewed transport",
|
|
"authorization policy for any setting outside the retained request",
|
|
"timeout, rejection and rollback contract"
|
|
],
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": true,
|
|
"replay_verified": false,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"write_enabled": false
|
|
},
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": true,
|
|
"replay_verified": false,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"mqtt-stream-profile",
|
|
"lab-001",
|
|
"lab-002"
|
|
]
|
|
},
|
|
{
|
|
"id": "acquisition.stop",
|
|
"execution": "operator-manual",
|
|
"operator_control": "physical-double-click during active scanning",
|
|
"observed_application_control": "owner-operated LixelGO stop confirmation",
|
|
"vendor_request_mapping": {
|
|
"evidence_kind": "owner-controlled-wire-observation",
|
|
"transport": "MQTT 3.1.1",
|
|
"topic": "lixel/application/request/modeling",
|
|
"qos": 2,
|
|
"retain": false,
|
|
"message_type": "ModelingRequest",
|
|
"action_field_value": 2,
|
|
"header_contract": {
|
|
"device_id": "explicit-observed-identity",
|
|
"session_id": "{device_id}:ModelingRequest",
|
|
"openapi_key": "private-application-level-runtime-authority"
|
|
},
|
|
"request_fields": {},
|
|
"success_result_code": 302252033,
|
|
"required_unresolved_context": [
|
|
"operator-owned Keychain item provisioning and physical acceptance of the uninstalled reviewed transport",
|
|
"save-completion and final-standby state mapping",
|
|
"timeout and rollback contract"
|
|
],
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": true,
|
|
"replay_verified": false,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"write_enabled": false
|
|
},
|
|
"evidence": {
|
|
"observed": true,
|
|
"decoded": true,
|
|
"replay_verified": false,
|
|
"physical_verified": true,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"mqtt-stream-profile",
|
|
"lab-001",
|
|
"lab-002"
|
|
]
|
|
},
|
|
{
|
|
"id": "calibration.device.start",
|
|
"execution": "unavailable",
|
|
"operator_control": null,
|
|
"vendor_request_mapping": null,
|
|
"observed_behavior": "Static initialization follows acquisition.start; no independent calibration action was observed.",
|
|
"limitations": [
|
|
"No standalone calibration command topic, request schema, acknowledgment or state transition is verified."
|
|
],
|
|
"evidence": {
|
|
"observed": false,
|
|
"decoded": false,
|
|
"replay_verified": false,
|
|
"physical_verified": false,
|
|
"write_enabled": false
|
|
},
|
|
"source_ids": [
|
|
"lab-002"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|