All notable changes to the Avdecc Library will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Checking validity of EntityModel given to a ControllerEntity or AggregateEntity
- Added
sequenceID
parameter tola::avdecc::entity::controller::Delegate::onAemAecpUnsolicitedReceived
- EntityModel loader correctly set current active configuration
- Better handling of NOT_SUPPORTED AEM-AECP responses
- A la::avdecc::entity::model::EntityTree can be fed into a LocalEntity so it responds to AEM query commands (currently limited to ENTITY descriptor)
- EndStation::deserializeEntityModelFromJson to unpack a la::avdecc::entity::model::EntityTree from a file
- Full support for npcap (prefered over winpcap if both installed)
- Reflecting an unhandled AECP command uses NOT_IMPLEMENTED instead of NOT_SUPPORTED
- Crash when loading ANS/AVE file without any configuration descriptor
- Discarding inflight and queued messages when an entity goes offline
- Possible crash during uninitialization of the EndStation
- injectRawPacket method to ProtocolInterface
- Generated EntityID now follows the new recommendation of IEEE (full MacAddress on MSB)
- Full network message scheduler refactoring
- la::avdecc::entity::model::StreamFormatInfo now uses la::avdecc::entity::model::SamplingRate instead of its own enum
- ANS/AVE loading error when msrp_failure_code is defined to null
- Control UTF8 Value Type properly saved in json model
- isGroupIdentifier and isLocalIdentifier methods to la::avdecc::UniqueIdentifier
- setAssociation and getAssociation controller commands
- Incorrect generated AUDIO_MAP index when loading a virtual entity
- Possible stack corruption when receiving response violating the protocol
- AssociationID is now always stored as a std::optional
- Validating Control dynamic values (based on static values)
- Renamed la::avdecc::entity::model::ControlType to la::avdecc::entity::model::StandardControlType
- la::avdecc::entity::model::ControlType is now an EUI-64
- Correctly exporting all ControlValues structures
- Ignoring AECP response from an incorrect source
- Support for Control Descriptors (only Linear Values are currently supported)
- Support for Controller to Entity Identification
- When an observer registers to a ProtocolInterface, it now immediately receives notifications about already known entities (both local and remote)
- ControllerEntity now always sends messages to the same AvbInterface in case of cable redundancy
- ControllerCapability methods trigger the result handler in case of Protocol exception
- Aecpdu::MaximumLength_BigPayloads increased to fill maximum Ethernet frame size (if compile defined is set) allowing up to 184 mappings to be received from a Milan entity
- Detection of main AvbInterface loss in cable redundancy
- Automatic discovery delay is now configurable for a Controller Entity
- Deadlock when shutting down PCap ProtocolInterface on linux
- Possible crash (uncaught exception) on macOS when enumerating network interfaces
- Improved la::avdecc::utils::EnumBitfield class to be fully constexpr
- AEM GetConfiguration method
- ProtocolInterface observer events for all received PDUs (low level)
- Delegate class in ProtocolInterface to handle VendorUnique messages
- ACMP inflight queue
- AECP/ACMP throttling
- Partial support for VendorUnique message in macOS Native ProtocolInterface
- C Bindings library
- Controller commands result handler properly return all fields in the protocol
- Removed listenerStream field from entity::model::StreamConnectionState
- Renamed entity::model::StreamConnectionState to entity::model::StreamInputConnectionInfo
- MacOS Native ProtocolInterface is now restricted to macOS Catalina and later
- More control over what is dumped when serializing an entity
- Precompiled headers on windows
- Improved protocol warning messages
- Entity Model Tree definition
- Entity Model dump as readable json file
- Entity Model load from readable json file
- NetworkInterfaceHelper observer to monitor changes in adapters status
- Controller statistics counters
- NetworkInterfaceHelper isActive field replace with isEnabled and isConnected
- protocol::MvuFeaturesFlags TypedDefine moved to MilanInfoFeaturesFlags EnumBitfield
- NetworkInterfaces Helper fully working on win7 and win10
- json::Exception being thrown across shared library boundary
- Support for IdentifyNotification in ProtocolInterface and ControllerEntity
- Support for Entity Descriptor counters
- Replaced all la::avdecc::enum_traits with la::avdecc::EnumBitfield
- StreamFormat and SamplingRate now have their own class, instead of just an alias
- macOS Native Protocol Interface correctly handles incoming AECP Commands
- macOS Native Protocol Interface simulates a time out for VENDOR_UNIQUE messages, instead of incorrectly handling them (time out required due to bug in AVBFramework)
- GenericAecpdu class, due to potential misusage
- Aecpdu::copy method, no longer necessary
- Support for Milan STREAM_OUTPUT counters
- Removed macAddress parameter from sendAecpCommand and sendAecpResponse (automatically getting it from the AECPDU)
- Returning ProtocolInterface::Error::InvalidParameters when trying to enable/disable advertising on a non-existent InterfaceIndex
- Incorrect error returned by EndStation's LocalEntity creation code
- No longer sending ADP DEPARTING message twice when destroying a LocalEntity
- Notification when a controller is being deregistered from unsolicited notifications
- Notification when (some or all) audio mappings are added or removed
- Notification when an entity is locked/unlocked by another controller
- setStreamInputInfo, setStreamOutputInfo, getAsPath
- Milan extended GetStreamInfo
- Code to try to prevent deadlocks
- Watch dog thread
- lockEntity/unlockEntity signature and result handler changed to include the locking entity and descriptor type/index
- GetMilanInfo now return a struct instead of individual fields
- Updated GetMilanInfo to match Milan specification
- Incorrect value for AemLockEntityFlags::Unlock flag
- Support for GET_COUNTERS command and unsolicited notifications
- Support for VendorUnique AECP messages
- Support for 500Hz CRF stream format
- Split ALLOW_BIG_AEM_PAYLOADS to ALLOW_SEND_BIG_AECP_PAYLOADS and ALLOW_RECV_BIG_AECP_PAYLOADS
- Support for MemoryObject Operations (Contributed by d&b)
- Protocol and ProtocolInterface classes exposed in the public API
- Removed InterfaceIndex field from ProtocolInterface (not its place)
- la::avdecc::protocol::ProtocolInterface::SupportedProtocolInterfaceTypes and la::avdecc::CompileOptions are now la::avdecc::EnumBitfield
- ALLOW_BIG_AEM_PAYLOADS option not properly used in serializer
- CRF StreamFormat should be a 0 channel stream, not 1
- ControllerStateMachine AECP/ACMP SequenceID starts at 0, not 1
- getStreamInputFormat, getStreamOutputFormat, setAudioUnitName, getAudioUnitName, setAvbInterfaceName, getAvbInterfaceName, setClockSourceName, getClockSourceName, getClockSource, setMemoryObjectName, getMemoryObjectName, setAudioClusterName, getAudioClusterName, setClockDomainName, getClockDomainName, getAudioUnitSamplingRate, getVideoClusterSamplingRate, getSensorClusterSamplingRate, setMemoryObjectLength, getMemoryObjectLength
- Notification callbacks for onAudioUnitNameChanged, onAvbInterfaceNameChanged, onClockSourceNameChanged, onMemoryObjectNameChanged, onAudioClusterNameChanged, onClockDomainNameChanged, onMemoryObjectLengthChanged
- la::avdecc::Entity::getVendorEntityModelID() renamed getEntityModelID()
- la::avdecc::entity::model::makeVendorEntityModel() renamed makeEntityModelID()
- la::avdecc::entity::model::splitVendorEntityModel() renamed splitEntityModelID()
- Every occurrence of vendorEntityModelID renamed entityModelID
- la::avdecc::UniqueIdentifier is now a complex type with member helper methods
- some methods of la::avdecc::protocol::Adpdu were not declared noexcept
- la::avdecc::entity::model::AvbInterfaceDescriptor::clockIdentify renamed clockIdentity
- la::avdecc::entity::model::VendorEntityModel (should be la::avdecc::UniqueIdentifier)
- Getting system current time after mutex has been acquired, not before
- Descriptors value initialization for LocalizedStringReference type
- Possible crash using "macOS native interface"
- New static method to get adapted compatible formats from listener and talker available ones
- New static methods to build StreamFormat from attributes
- Removed noexcept qualifier from all std::function (c++17 compatibility)
- Allowing AEM payloads exceeding maximum protocol value (new compilation flag: ALLOW_BIG_AEM_PAYLOADS). Required for Q6 Core devices.
- Global API to retrieve the compilation options of the library
- CMake compilation option to use custom std::any
- Properly handling AvailableIndex going backwards in ADP messages (fast entity powercycle)
- Possible deadlock when using macOS native protocol interface
- Re-enabled AVnu Alliance Network Redundancy support
- Support for the following read descriptors: AudioUnit, Jack, AvbInterface, ClockSource, MemoryObject, StreamPort, ExternalPort, InternalPort, AudioCluster, AudioMap, ClockDomain
- Cole Peterson's redundant streams association detection
- Support for Talker Stream Connections
- Method to forcefully remove a connection from a talker's StreamOutput (DisconnectTX spoofing)
- Support for GetAvbInfo command and unsolicited notifications
- getSampleSize and getSampleBitDepth to StreamFormatInfo
- ACMP stream identification refactoring (new type describing the couple EntityID/StreamIndex)
- 50 msec delay before sending a new AECP message using pcap protocol interface
- Logger observer not removed during unregisterObserver
- Support for setConfiguration command
- Partial support for SET_CONFIGURATION unsolicited notification
- Virtual ProtocolInterface, allowing better unit testing
- Possible crash during shutdown
- IGNORE_INVALID_NON_SUCCESS_AEM_RESPONSES flag not properly working for Motu devices
- Acquire/Release controller commands (and handlers) now support descriptor type/index
- Full rework of the low level data structures
- Support for minimal audio related 1722.1 messages