Made PythonCAN support better.
Updated the Serial frame format to match the UDP frame format. See (#266) for a general description of the changes.
Cyphal/UDP: Service transfer are also multicast now. Make sure to take into account the updated IP mapping specifications. See (post).
pycyphal.application.node_tracker.NodeTracker.get_info_priority, to allow configuring the node tracker’s GetInfo request priority.
pycyphal.transport.can.CANTransport.spoof_frames()for compatibility with 3rd-party CAN protocols sharing the network interface with PyCyphal.
Implement DSDL compilation via import hooks (#236).
Subscription synchronizer added (#65).
v1.8.1: Port factory methods in
pycyphal.application.Nodethat accept direct port-ID always update the registry.
v1.8.2: Fix error handing in
pycyphal.transport.redundant.RedundantOutputSession.send(); see #222.
DiagnosticPublisher: do not instantiate the publisher if the local node is anonymous.
publish_soon(): Do not log error if closed.
Publisher: fix edge cases related to
PortClosedErrorwhen the interface becomes unavailable.
Fix assertion failure during register value coercion.
SocketCAN: close the media instance automatically on unrecoverable errors like ENODEV, ENXIO, EBADF, EBADFD, etc.
Actualize the Demo (mostly Yakut-related).
pycyphal.application.Nodesupports construction of ports (publishers, subscribers, clients, servers) with a directly specified port-ID, bypassing the registry.
New presentation layer capabilities:
Support sync callbacks in
The library renamed from PyUAVCAN to PyCyphal and republished under the new name.
Behavior of the redundant output session changed:
pyuavcan.transport.redundant.RedundantOutputSession.send()returns as soon as at least one inferior is done transmitting, the slower ones keep transmitting in the background. In other words, the redundant transport now operates at the rate of the fastest inferior (used to be the slowest one).
Implement the DSDL UX improvement described in #147.
Fully adopt PEP 585 in generated code.
Support Python 3.10.
pyuavcan.transport.Transport.loopand the corresponding constructor argument. The constructor argument is now ignored and the aforementioned property is an alias of
Generated classes include convenience aliases of the newest minor version per major version (Nunavut #193).
Remove the NumPy <= 0.17 version constraint.
Improve type annotations in generated code thanks to the new NumPy typing support.
Support assignment of
Rename installation extras by replacing underscores with the minus character; e.g.,
Improve logging and error reporting.
Fix issues related to UDP packet capture.
pyuavcan.transport.can: Add Python-CAN media driver. The corresponding installation extra is
Support packet capture and tracing for all transports (spoofing is implemented for all transports except UAVCAN/UDP). Refactor the unstable capture/tracing API to model the underlying protocols more accurately.
FileClientimplementing the standard file service
UDPTransporthas been deprecated in favor of
Refactor the Node API (#154):
Add factory function
Implement the UAVCAN Register API and add port construction factory methods that take port-ID from the registry. This is a major change that allows applications to avoid hard-coding any port-ID whatsoever. The respective configuration is now sourced from the registers, which in turn are read from environment variables and from persistent register files (i.e., configuration files).
Support context manager API (
Rework the demo accordingly.
First stable release. v1.0 was never released for legacy reasons.