Repository navigation
Add device sessions with shared channel ownership and scheduling - #24
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Behavior
Devices sharing a CAN channel can now use separate logical sessions while retaining one physical connection and the existing Session writer. Closing one device gates its submissions, waits for registered SDK work, drains its claimed sends and closes its inboxes. The last logical lease releases the physical connection; failed explicit closes remain retryable.
The runtime checks shared channel configuration, coordinates recovery and supports logical device rebind without reopening the backend. A device can require detachment before physical recovery. Old handles remain invalid after close or recovery, and channel-instance metadata distinguishes recreated connections.
Scheduling additions use the same native Job storage:
Masked routes reject actual wire overlap with existing owners. Bounded discovery observers receive copies without taking normal route ownership or receive-budget slots. Receive quotas, terminal reasons, compatibility sequence gaps and device/channel diagnostics have regression coverage.
Existing C++ entry points and defaults remain available. Python source values are documented as configuration baselines, not applied as replacement defaults. This PR does not migrate the Python SDKs or provide Python bindings, protocol transactions, hardware timestamps or hardware acceptance results.
Validation
Local Linux ARM64 / GCC 13 Debug:
All 36 CI checks passed on commit 8ab8659, including the full quality report, sanitizers, Windows native tests, relocated ZIP consumers, Ubuntu packages and ROS1 consumers. No unresolved review threads were present at the final check. Fake transports and injected failures do not establish device/firmware/driver compatibility.