Sox reads 32-bit floats that Python promotes to 64-bit doubles, producing
display artifacts like 22.011558532714844. Using :.6g format gives clean
values matching .sax file precision (22.0116, -19.9574, 175, 14).
Applied to both initial DOM build and COV update paths.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Build root children directly under <app> instead of wrapping them in
a <comp name="app"> element. This matches the .sax DOM structure
where <app> is the container, so component paths like /AHU/TmpCont/X
match between link references and get_component_path.
- Fix _comp_path to produce /AHU/TmpCont/X format (skip root id 0,
leading /) matching the .sax link path convention.
- Format float property values to 4 decimal places instead of full
Python float precision (22.0116 vs 22.011558532714844).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add type_name_map on SoxClient so components loaded after connect
resolve proper names (e.g. control::And2) instead of kit::typeN.
This lets the slot registry and final_components_registry match,
so component boxes show their slots and property values.
- Load live schema gracefully: skip missing kit manifests instead of
aborting, compile the kits we have, and warn about missing ones in
the status bar.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Three fixes so live wiresheets render identically to offline .sax files:
1. Inherit sys::Component base slots (meta) into every type's slot
registry so component x/y positions are read from the device.
2. Place <link> elements under a <links> container element instead of
directly under <app>, matching the .sax structure that draw_links
and build_linked_slot_index expect.
3. Deduplicate links (each link appears on both endpoints in Sox) so
wires are not drawn twice.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
On connect, also loads root's immediate children so the first tree level
shows real names. For deeper levels, inserts placeholder <comp> elements
for uncached children so the Treeview shows + expand arrows for folders
that have children on the device.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Port the DASP transport and Sox protocol stack from sedonaOntrol Java
to Python, enabling live device editing alongside the existing offline
SAX editor. Lazy-loads components on navigation, caches them, and
subscribes to COV events for the active wiresheet.
New files: dasp.py, sox.py, device_session.py, connect_dialog.py,
live_hooks.py. Modified: app_state.py (live-mode state), main.py
(Device menu, COV polling, lazy tree expand), properties.py (Sox
write-through), sax_file.py (structural mutations route through
live_hooks), schema.py (find_manifest helper).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>