Skip to content

Commit 94eb03f

Browse files
Merge branch 'dev'
2 parents bb60fc5 + f2ac8e5 commit 94eb03f

File tree

241 files changed

+46271
-4984
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

241 files changed

+46271
-4984
lines changed

.defaults.sh.sample

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
function extend_gc_fnc_defaults()
55
{
66
default_VisualGenerator="Visual Studio 17 2022"
7-
default_VisualToolset="v142"
7+
default_VisualToolset="v143"
88
default_VisualToolchain="x64"
99
default_VisualArch="x86"
1010
}

.github/workflows/cmake.yml

Lines changed: 0 additions & 36 deletions
This file was deleted.

.github/workflows/linux.yml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
name: linux
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
7+
pull_request: # Run on pull request event targeting following branches
8+
branches:
9+
- dev
10+
- main
11+
12+
workflow_dispatch:
13+
14+
env:
15+
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
16+
BUILD_TYPE: release
17+
18+
jobs:
19+
build:
20+
# The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
21+
# You can convert this to a matrix build if you need cross-platform coverage.
22+
# See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
23+
runs-on: ubuntu-22.04
24+
25+
steps:
26+
- uses: actions/checkout@v3
27+
28+
- name: Prepare APT
29+
shell: bash
30+
run: |
31+
sudo apt-get update
32+
sudo apt-get install -y software-properties-common lsb-release
33+
sudo apt-get install -y ca-certificates gpg wget
34+
35+
- name: Add Kitware ppa
36+
shell: bash
37+
run: |
38+
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null
39+
echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ jammy main' | sudo tee /etc/apt/sources.list.d/kitware.list >/dev/null
40+
sudo apt-get update
41+
test -f /usr/share/doc/kitware-archive-keyring/copyright || rm /usr/share/keyrings/kitware-archive-keyring.gpg
42+
sudo apt-get install -y kitware-archive-keyring
43+
44+
- name: Install required libraries
45+
shell: bash
46+
run: |
47+
sudo apt-get install -y cmake libpcap-dev git build-essential libncurses-dev
48+
49+
- name: Init repository
50+
run: git submodule update --init --recursive
51+
52+
- name: Configure CMake
53+
run: ./gen_cmake.sh -o _build -${{env.BUILD_TYPE}}
54+
55+
- name: Build
56+
# Build your program with the given configuration
57+
run: cmake --build _build
58+
59+
#- name: Test
60+
# working-directory: ${{github.workspace}}/_build/tests/src
61+
# run: ./Tests --gtest_filter=-MANUAL*
62+

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@
1111
/externals/3rdparty/winpcap/Include
1212
/externals/3rdparty/winpcap/Lib
1313

14+
# Ignore generated entities
15+
/tests/data/generatedEntities
1416

1517
# Ignore .defaults.sh file
1618
/.defaults.sh
19+
20+
# Ignore user cmake presets
21+
/CMakeUserPresets.json
22+

CHANGELOG-avdecc.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,32 @@ All notable changes to the Avdecc Library will be documented in this file.
44
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
55
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
66

7+
## [4.0.0] - 2025-02-18
8+
### Added
9+
- Support for JACK_INPUT/JACK_OUTPUT descriptors
10+
- Support for CONTROL descriptors at AUDIO_UNIT, JACK, STREAM_PORT levels
11+
- [Support for CONTROL_SELECTOR type for CONTROL descriptors](https://github.com/L-Acoustics/avdecc/issues/128)
12+
- *numberOfValues* field in the CONTROL descriptor
13+
- Support for float special values in json dumps (ie. NaN, -inf, +inf)
14+
- Support for UTF8 file paths
15+
- [Support for TIMING descriptors](https://github.com/L-Acoustics/avdecc/issues/116)
16+
- [Support for PTP_INSTANCE/PTP_PORT descriptors](https://github.com/L-Acoustics/avdecc/issues/117)
17+
- Support for GET_DYNAMIC_INFO command
18+
- Support for SET/GET_MAX_TRANSIT_TIME command
19+
- Json schema AEM_Schema.json added to newly created resources/schemas directory
20+
21+
### Changed
22+
- la::avdecc::entity::controller::Delegate is now virtual pure, but a new derivated visitor (with all default implementation) has been added: la::avdecc::entity::controller::DefaultedDelegate
23+
- [Executor name can be provided when creating an EndStation](https://github.com/L-Acoustics/avdecc/issues/132)
24+
- *entity::model::validateControlValues* now returns an enum value as well as an error message
25+
- Mechanism to refresh an entity (same for Configuration change) totally revamped to be more consistent
26+
- Moved some fields from AVB_INTERFACE.staticModel to AVB_INTERFACE.dynamicModel (fields that should not be part of the static model because they are not considered for entity_model_id)
27+
28+
### Fixed
29+
- Crash when unpacking vendor specific control values
30+
- [Incorrect linkage for some C bindings methods](https://github.com/L-Acoustics/avdecc/issues/148)
31+
- [ProcotolInterface pcap getDynamicEID incorrect](https://github.com/L-Acoustics/avdecc/issues/154)
32+
733
## [3.4.1] - 2023-01-11
834

935
## [3.4.0] - 2023-01-05

CHANGELOG-controller.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,55 @@ All notable changes to the Avdecc Controller Library will be documented in this
44
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
55
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
66

7+
## [4.0.0] - 2025-02-18
8+
### Added
9+
- Support for JACK_INPUT/JACK_OUTPUT descriptors
10+
- Support for CONTROL descriptors at AUDIO_UNIT, JACK, STREAM_PORT levels
11+
- *numberOfValues* field in the ControlNode
12+
- Detection of out-of-bounds MemoryObject length value
13+
- isValid() method to ControlledEntityGuard
14+
- Possibility to define a Proxy Interface to handle virtual entities
15+
- Boolean value in ControlledEntity to know if unsolicited notifications are supported by the entity
16+
- API to force refresh a entity (_reloadEntity(UniqueIdentifier)_)
17+
- Support for UTF8 file paths
18+
- New type of diagnostics: *controlCurrentValueOutOfBounds*
19+
- Detection of invalid *descriptor_counts* field in CONFIGURATION descriptor
20+
- [Support for TIMING descriptors](https://github.com/L-Acoustics/avdecc/issues/116)
21+
- [Support for PTP_INSTANCE/PTP_PORT descriptors](https://github.com/L-Acoustics/avdecc/issues/117)
22+
- Support for GET_DYNAMIC_INFO command (Fast enumeration)
23+
- Support for setMaxTransitTime command (as a replacement for setStreamInfo to change the presentation time)
24+
- [Support for read-only properties change for virtual entities](https://github.com/L-Acoustics/avdecc/issues/162)
25+
- la::avdecc::controller::Controller::createVirtualEntityFromEntityModelFile method
26+
- la::avdecc::entity::model::VirtualEntityBuilder class to help creating virtual entities from EntityModel files
27+
28+
### Changed
29+
- Complete controller entity model refactoring to support descriptors at non-configuration level
30+
- EntityModelVisitor is now virtual pure, but a new derivated visitor (with all default implementation) has been added: DefaultedEntityModelVisitor
31+
- la::avdecc::controller::Controller::Observer is now virtual pure, but a new derivated visitor (with all default implementation) has been added: la::avdecc::controller::Controller::DefaultedObserver
32+
- [Executor name can be provided when creating a Controller](https://github.com/L-Acoustics/avdecc/issues/132)
33+
- Renamed la::avdecc::controller::Controller::loadEntityModelFile to la::avdecc::controller::Controller::cacheEntityModelFile
34+
35+
### Removed
36+
- Direct access to ClockSource descriptors from the ClockDomain. Will still be enumerated correctly when using the model visitor
37+
38+
### Fixed
39+
- Controller entity model no longer uses pointers to prevent dangling issues when making copies
40+
- Not flagging a device as non IEEE/Milan compatible, if the library cannot handle a CONTROL type if doesn't support
41+
- CONTROL values updated by the device itself didn't trigger an update notification
42+
- DynamicMappings were not being retrieved from the entities
43+
- [Not flagging some devices as non-1722.1 compatible due to a control value out of bounds](https://github.com/L-Acoustics/avdecc/issues/134)
44+
- [Detecting Identify Controls at JACK level](https://github.com/L-Acoustics/avdecc/issues/135)
45+
- [CONTROL descriptors not properly enumerated at JACK level](https://github.com/L-Acoustics/avdecc/issues/139)
46+
- [CONTROL descriptors not properly attached to the parent descriptor when loaded from file](https://github.com/L-Acoustics/avdecc/issues/140)
47+
- [Dynamic mappings incorrect when replaced without first being removed](https://github.com/L-Acoustics/avdecc/issues/146)
48+
- Updating StreamInfo data partially, in case endpoint doesn't send full update
49+
- isOverLatency diagnostics not properly set if msrpAccumulatedLatency is not set
50+
- _Media Clock Chain_ not recomputed when a connection changes without disconnecting first
51+
- [Crash when trying to access unknown localized string](https://github.com/L-Acoustics/avdecc/issues/153)
52+
- Locales from all configurations are loaded (if defined) for virtual entities
53+
- [Incorrect cached AEM](https://github.com/L-Acoustics/avdecc/issues/163)
54+
- Checksum of the AEM of a ControlledEntity was incorrectly using some fields that are not part of the AEM (in AVB_INTERFACE descriptor). Introduced checksum v3
55+
756
## [3.4.1] - 2023-01-11
857
### Fixed
958
- [Crash when trying to get a ControlledEntity during OnPreAdvertise events](https://github.com/L-Acoustics/avdecc/issues/125)

CMakeLists.txt

Lines changed: 53 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ cmake_minimum_required(VERSION 3.22)
1010
# It should have 3 digits (x.y.z) on main branch, and 4 digits (x.y.z.w) on dev and task branches. The last digit being used as beta label.
1111
# As soon as an API change occurs in dev or task branch, update the version number by following SemVer rules (so the API breaking changes are not lost/forgotten).
1212
# Example: 1.5.0 is the upcoming release version (main branch) of current 1.5.0.3 devel version (dev/task) which will be labelled 1.5.0-beta3
13-
set(LA_AVDECC_VERSION 3.4.1)
14-
set(LA_AVDECC_CONTROLLER_VERSION 3.4.1)
15-
set(LA_AVDECC_C_VERSION 3.4.1)
13+
set(LA_AVDECC_VERSION 4.0.0)
14+
set(LA_AVDECC_CONTROLLER_VERSION 4.0.0)
15+
set(LA_AVDECC_C_VERSION 4.0.0)
1616

1717
############ Override from command line "CMake -D<OPTION>=TRUE/FALSE/0/1/ON/OFF"
1818

@@ -23,6 +23,7 @@ option(BUILD_AVDECC_LIB_SHARED_CXX "Build C++ shared library." TRUE)
2323
option(BUILD_AVDECC_LIB_STATIC_RT_SHARED "Build static library (runtime shared)." TRUE)
2424
option(BUILD_AVDECC_DOC "Build documentation." FALSE)
2525
option(BUILD_AVDECC_BINDINGS_C "Build avdecc C bindings library." FALSE)
26+
option(BUILD_AVDECC_BINDINGS_CSHARP "Build avdecc C# bindings library." FALSE)
2627
option(BUILD_AVDECC_CONTROLLER "Build avdecc controller library." TRUE)
2728
option(BUILD_AVDECC_INTERFACE_PCAP "Build the pcap protocol interface." TRUE)
2829
option(BUILD_AVDECC_INTERFACE_PCAP_DYNAMIC_LINKING "Pcap protocol interface uses dynamic shared library linking (instead of static linking)." TRUE)
@@ -52,6 +53,47 @@ option(ALLOW_GET_AUDIO_MAP_UNSOL "Allow receiving GetAudioMap unsolicited notifi
5253
option(ALLOW_RECV_BIG_AECP_PAYLOADS "Allow receiving AECP payloads bigger than the allowed 524 bytes." TRUE) # Required for Q6 Core devices not splitting AudioMaps into smaller ones, and for Milan devices
5354
option(ALLOW_SEND_BIG_AECP_PAYLOADS "Allow sending AECP payloads bigger than the allowed 524 bytes." FALSE)
5455

56+
############ Override from command line "CMake -D<PARAM>=<VALUE>"
57+
58+
# Configuration options
59+
if(NOT AVDECC_SWIG_LANGUAGES)
60+
set(AVDECC_SWIG_LANGUAGES "csharp" CACHE STRING "Set the languages to compile as SWIG wrappers." FORCE)
61+
endif()
62+
63+
############ Check dependencies
64+
65+
# avdecc-tests needs avdecc.lib
66+
if(BUILD_AVDECC_TESTS)
67+
set(BUILD_AVDECC_LIB_STATIC_RT_SHARED TRUE CACHE BOOL "Build avdecc static library (runtime shared)." FORCE)
68+
endif()
69+
70+
# avdecc-examples needs avdecc.lib
71+
if(BUILD_AVDECC_EXAMPLES)
72+
set(BUILD_AVDECC_LIB_STATIC_RT_SHARED TRUE CACHE BOOL "Build avdecc static library (runtime shared)." FORCE)
73+
endif()
74+
75+
if(NOT CMAKE_HOST_APPLE AND BUILD_AVDECC_INTERFACE_MAC)
76+
set(BUILD_AVDECC_INTERFACE_MAC FALSE)
77+
endif()
78+
79+
if(BUILD_AVDECC_INTERFACE_PROXY)
80+
message(FATAL_ERROR "Proxy interface not supported yet.")
81+
endif()
82+
83+
if(NOT BUILD_AVDECC_INTERFACE_PCAP AND NOT BUILD_AVDECC_INTERFACE_MAC AND NOT BUILD_AVDECC_INTERFACE_PROXY)
84+
message(FATAL_ERROR "At least one valid protocol interface must be built.")
85+
endif()
86+
87+
# Build bindings requires the building of the libraries
88+
if(BUILD_AVDECC_BINDINGS_CSHARP AND NOT BUILD_AVDECC_LIB_SHARED_CXX)
89+
set(BUILD_AVDECC_LIB_SHARED_CXX TRUE CACHE BOOL "Build C++ shared library." FORCE)
90+
endif()
91+
92+
# Install bindings requires the installation of the libraries
93+
if(INSTALL_AVDECC_BINDINGS AND NOT INSTALL_AVDECC_LIB_SHARED_CXX)
94+
set(INSTALL_AVDECC_LIB_SHARED_CXX TRUE CACHE BOOL "Install C++ shared library." FORCE)
95+
endif()
96+
5597
############ CMake configuration
5698

5799
project(LA_avdecc)
@@ -95,26 +137,30 @@ cu_setup_apple_minimum_versions(MACOS 10.13)
95137

96138
# Include fmtlib
97139
if(ENABLE_AVDECC_USE_FMTLIB)
140+
# Override fmt options
141+
set(FMT_INSTALL (${INSTALL_AVDECC_LIB_SHARED_CXX} OR ${INSTALL_AVDECC_LIB_STATIC}) CACHE BOOL "Force install." FORCE)
98142
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/externals/3rdparty/fmtlib EXCLUDE_FROM_ALL)
99143
endif()
100144

101145
# Include json
102146
if(ENABLE_AVDECC_FEATURE_JSON)
103147
set(JSON_BuildTests OFF CACHE INTERNAL "Disable JSON unit tests")
148+
set(JSON_Install (${INSTALL_AVDECC_LIB_SHARED_CXX} OR ${INSTALL_AVDECC_LIB_STATIC} OR ${INSTALL_AVDECC_HEADERS}) CACHE INTERNAL "Install JSON library")
104149
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/externals/3rdparty/json EXCLUDE_FROM_ALL)
105150
endif()
106151

107152
# Override nih options
108153
set(BUILD_NIH_EXAMPLES OFF CACHE BOOL "Build examples." FORCE)
109154
set(BUILD_NIH_TESTS OFF CACHE BOOL "Build unit tests." FORCE)
110155
set(BUILD_C_BINDINGS OFF CACHE BOOL "Build C Bindings." FORCE)
111-
set(BUILD_NIH_SWIG OFF CACHE BOOL "Build SWIG Wrapper." FORCE)
156+
set(BUILD_NIH_SWIG ${BUILD_AVDECC_BINDINGS_CSHARP} CACHE BOOL "Build SWIG Wrapper." FORCE)
157+
set(NIH_SWIG_LANGUAGES ${AVDECC_SWIG_LANGUAGES} CACHE STRING "Set the languages to compile as SWIG wrappers." FORCE)
112158
# Install options
113159
set(INSTALL_NIH_EXAMPLES OFF CACHE BOOL "Install examples." FORCE)
114160
set(INSTALL_NIH_TESTS OFF CACHE BOOL "Install unit tests." FORCE)
115161
set(INSTALL_NIH_LIB_STATIC (${INSTALL_AVDECC_LIB_SHARED_CXX} OR ${INSTALL_AVDECC_LIB_STATIC}) CACHE BOOL "Install static library." FORCE)
116-
set(INSTALL_NIH_LIB_C OFF CACHE BOOL "Install C Bindings libraries." FORCE)
117-
set(INSTALL_NIH_LIB_SWIG OFF CACHE BOOL "Install swig libraries." FORCE)
162+
set(INSTALL_NIH_LIB_C ${INSTALL_AVDECC_BINDINGS} CACHE BOOL "Install C Bindings libraries." FORCE)
163+
set(INSTALL_NIH_LIB_SWIG ${INSTALL_AVDECC_BINDINGS} CACHE BOOL "Install swig libraries." FORCE)
118164
set(INSTALL_NIH_HEADERS ${INSTALL_AVDECC_HEADERS} CACHE BOOL "Install headers." FORCE)
119165

120166
# Include NIH
@@ -141,30 +187,6 @@ if(${ENABLE_CODE_SIGNING})
141187
set(SIGN_FLAG "SIGN")
142188
endif()
143189

144-
############ Check dependencies
145-
146-
# avdecc-tests needs avdecc.lib
147-
if(BUILD_AVDECC_TESTS)
148-
set(BUILD_AVDECC_LIB_STATIC_RT_SHARED TRUE CACHE BOOL "Build avdecc static library (runtime shared)." FORCE)
149-
endif()
150-
151-
# avdecc-examples needs avdecc.lib
152-
if(BUILD_AVDECC_EXAMPLES)
153-
set(BUILD_AVDECC_LIB_STATIC_RT_SHARED TRUE CACHE BOOL "Build avdecc static library (runtime shared)." FORCE)
154-
endif()
155-
156-
if(NOT CMAKE_HOST_APPLE AND BUILD_AVDECC_INTERFACE_MAC)
157-
set(BUILD_AVDECC_INTERFACE_MAC FALSE)
158-
endif()
159-
160-
if(BUILD_AVDECC_INTERFACE_PROXY)
161-
message(FATAL_ERROR "Proxy interface not supported yet.")
162-
endif()
163-
164-
if(NOT BUILD_AVDECC_INTERFACE_PCAP AND NOT BUILD_AVDECC_INTERFACE_MAC AND NOT BUILD_AVDECC_INTERFACE_PROXY)
165-
message(FATAL_ERROR "At least one valid protocol interface must be built.")
166-
endif()
167-
168190
############ Define pcap variables
169191

170192
if(BUILD_AVDECC_INTERFACE_PCAP)
@@ -242,4 +264,4 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
242264
endif()
243265

244266
# Configure a few things that has to be done last
245-
cu_finalize()
267+
cu_finalize(NO_VSCODE_WORKSPACE)

CMakePresets-Project.json

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"version": 6,
3+
"configurePresets": [
4+
{
5+
"name": "project",
6+
"hidden": true,
7+
"cacheVariables": {
8+
"BUILD_AVDECC_EXAMPLES": "TRUE",
9+
"BUILD_AVDECC_TESTS": "TRUE",
10+
"BUILD_AVDECC_LIB_SHARED_CXX": "TRUE",
11+
"BUILD_AVDECC_LIB_STATIC_RT_SHARED": "TRUE",
12+
"BUILD_AVDECC_DOC": "TRUE",
13+
"BUILD_AVDECC_CONTROLLER": "TRUE",
14+
"INSTALL_AVDECC_EXAMPLES": "TRUE",
15+
"INSTALL_AVDECC_TESTS": "TRUE",
16+
"INSTALL_AVDECC_LIB_SHARED_CXX": "TRUE",
17+
"INSTALL_AVDECC_LIB_STATIC": "TRUE",
18+
"INSTALL_AVDECC_HEADERS": "TRUE",
19+
"INSTALL_AVDECC_DOC": "TRUE",
20+
"ENABLE_CODE_SIGNING": "FALSE",
21+
"MARKETING_VERSION_DIGITS": "2",
22+
"MARKETING_VERSION_POSTFIX": "-beta"
23+
}
24+
}
25+
]
26+
}

CMakePresets.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"version": 6,
3+
"include": [
4+
"cmake/cmakeUtils/presets/CMakePresets-Targets.json"
5+
]
6+
}

0 commit comments

Comments
 (0)