This document provides detailed instructions on how to set up and use the AVB (Audio Video Bridging) functionality on Windows 10 using an Intel i210 NIC.
gPTP ensures time synchronization between AVB devices. The gPTP daemon has been ported from the OpenAvnu repository to Windows and refactored for compatibility with Windows timing APIs and network interfaces.
AVTP handles streaming of audio and video data over AVB networks. It has been integrated into the Windows networking stack, and a user-space or kernel-space driver has been developed to capture and process AVB-specific Ethernet frames.
AVDECC manages and controls devices on the AVB network. An AVDECC controller has been developed for Windows, enabling enumeration and management of AVB streams.
A custom driver has been developed to support AVB-specific features such as gPTP clock synchronization and real-time streaming capabilities. Follow these steps to install and configure the driver:
For detailed AVB-specific documentation, please refer to the Intel i210 AVB Documentation.
A GUI-based tool has been developed to configure and monitor AVB streams, devices, and time synchronization. Follow these steps to use the tool:
AVBTool.exe
executable.The AVTP and gPTP stacks have been ported from the OpenAvnu project to Windows. This porting process involved adapting the code to work with Windows-specific APIs and network interfaces. The AVTP stack is responsible for handling the transport of audio and video data over AVB networks, while the gPTP stack ensures precise time synchronization between AVB devices.
This project bridges the current gap in Windows AVB support, enabling the use of Intel i210 NICs for professional audio/video streaming over an AVB network.
A custom driver is now available to support AVB features on Windows, including gPTP synchronization, priority queuing, and traffic shaping. This driver integrates with the existing AVTP and gPTP implementations in AVTP/AVTP.cpp
and gPTP/gPTP.cpp
.
To install the custom driver, follow these steps:
The current codebase includes AVTP and gPTP implementations in AVTP/AVTP.cpp
and gPTP/gPTP.cpp
, which are now integrated with the Windows driver for Intel i210. This integration ensures that AVTP frames are handled efficiently and gPTP synchronization is maintained accurately.
To assist with your project of implementing AVB (Audio Video Bridging) on Windows using the Intel i210 network adapter, several resources provided by Intel can be highly beneficial. The link you provided leads to Intel's developer tools and documentation, which include various tools, SDKs, and manuals that can aid in your development process. Here's a breakdown of the most relevant resources:
To set up a CI pipeline using GitHub Actions, create a workflow file in the .github/workflows/
directory. Here is an example configuration for a Visual Studio C++ project:
name: CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
permissions:
actions: read
contents: read
issues: write
jobs:
build:
runs-on: windows-latest
outputs:
url: ${{ steps.upload_build_logs.outputs.url }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Visual Studio
uses: microsoft/setup-msbuild@v2
- name: Setup NuGet
uses: NuGet/setup-nuget@v2
- name: Restore NuGet packages
run: nuget restore AVB_Windows.sln
- name: Install Windows Driver Kit (WDK)
run: choco install windowsdriverkit10 --source=https://chocolatey.org/api/v2/
- name: Set WDK environment variables
run: |
echo "WDK_IncludePath=C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0" >> $GITHUB_ENV
- name: Clean solution
run: msbuild AVB_Windows.sln /t:Clean
- name: Build solution
run: msbuild AVB_Windows.sln /p:Configuration=Release > build.log 2>&1
- name: Ensure log file exists
run: |
if [ ! -f build.log ]; then
echo "No build output captured." > build.log
fi
- name: Run Unit Tests
run: |
vstest.console.exe Path\To\Your\TestProject.dll
- name: Run PVS-Studio Analysis
run: |
# Install PVS-Studio
choco install pvs-studio
# Run analysis
"C:\Program Files (x86)\PVS-Studio\PVS-Studio_Cmd.exe" \
--target "AVB_Windows.sln" \
--configuration "Release" \
--output "PVS-Studio.log"
- name: Check Code Formatting
run: |
choco install llvm
clang-format -i -style=file **/*.cpp **/*.h
git diff --exit-code
- name: Download Intel Tools
run: |
curl -o Intel_Ethernet_Controller_I210_Datasheet.pdf https://www.intel.com/content/www/us/en/products/sku/58954/intel-ethernet-controller-i210at/specifications.html
curl -o Intel_Ethernet_Adapter_Complete_Driver_Pack.zip https://downloadcenter.intel.com/product/36773/Intel-Ethernet-Adapters
curl -o Intel_System_Studio.exe https://www.intel.com/content/www/us/en/developer/tools/system-studio/overview.html
curl -o Intel_VTune_Profiler.exe https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler.html
- name: Run Intel Tools
run: |
# Run Intel System Studio
start /wait Intel_System_Studio.exe /S
# Run Intel VTune Profiler
start /wait Intel_VTune_Profiler.exe /S
- name: Validate AVB Implementation
run: |
# Run validation scripts using Intel tools
python validate_avb.py
- name: Update SRS
run: |
# Update the SRS document with new requirements
python update_srs.py
- name: Update Documentation
run: |
# Update the documentation with new requirements and considerations
python update_docs.py
- name: Update README
run: |
# Update the README with new requirements and key insights
python update_readme.py
- name: Run Error Detection
run: |
python scripts/error_detection.py
- name: Save Errors and Metadata
run: |
python scripts/error_detection.py > errors_and_metadata.json
- name: Install PyGithub
run: pip install PyGithub
- name: Upload Build Logs
if: failure()
id: upload_build_logs
uses: actions/upload-artifact@v4
with:
name: build-logs
path: *.log
retention-days: 7
if-no-files-found: error
- name: Check for Missing Logs
run: |
if [ ! -f build.log ] && [ ! -f install_dependencies.log ] && [ ! -f install_windows_sdk.log ] && [ ! -f install_windows_driver_kit.log ] && [ ! -f install_kmdf_build_tools.log ]; then
echo "No logs found. Skipping error-checking step."
fi
- name: Run Issue Creation
if: failure()
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMMIT_SHA: ${{ github.sha }}
BUILD_LOGS_LINK: ${{ steps.upload_build_logs.outputs.url }}
run: |
python scripts/issue_creation.py
- name: Use Milestones for Releases
run: |
milestone_title="v1.0 release"
milestone_due_date="2023-12-31"
milestone_description="Milestone for the v1.0 release"
milestone=$(gh api -X POST /repos/${{ github.repository }}/milestones -f title="$milestone_title" -f due_on="$milestone_due_date" -f description="$milestone_description")
echo "Milestone created: $milestone"
- name: Trigger CI Pipeline for Issue Progress
run: |
issue_status="in progress"
if [ "$issue_status" == "in progress" ]; then
echo "Triggering CI pipeline for issue progress"
# Add logic to trigger CI pipeline
fi
- name: CI Pipeline Alerts for Failed Builds
run: |
if [ -f build.log ]; then
echo "Build failed. Sending alerts."
# Add logic to send alerts via Slack, email, or GitHub notifications
fi
- name: Use Separate Labels for Environments
run: |
environment="development"
if [ "$environment" == "development" ]; then
echo "Labeling as 'in development'"
# Add logic to label issues as 'in development'
elif [ "$environment" == "staging" ]; then
echo "Labeling as 'in staging'"
# Add logic to label issues as 'in staging'
elif [ "$environment" == "production"; then
echo "Labeling as 'in production'"
- name: Enforce Branch Protection Rules
run: |
branch="main"
protection_rules=$(gh api -X GET /repos/${{ github.repository }}/branches/$branch/protection)
if [ -z "$protection_rules" ]; then
echo "Enforcing branch protection rules"
# Add logic to enforce branch protection rules
fi
- name: Continuous Deployment Labels and Issue Auto-Close
run: |
deployment_status="success"
if [ "$deployment_status" == "success"; then
echo "Deployment successful. Auto-closing issues."
# Add logic to auto-close issues
- name: Enforce Issue Templates and CI Requirements
run: |
issue_template="bug_report.md"
if [ -f .github/ISSUE_TEMPLATE/$issue_template ]; then
echo "Enforcing issue templates"
# Add logic to enforce issue templates
- name: Integrate Monitoring and Feedback Tools
run: |
monitoring_tool="Datadog"
if [ "$monitoring_tool" == "Datadog"; then
echo "Integrating Datadog for monitoring and feedback"
# Add logic to integrate Datadog
For more details, refer to the ci.yml file in the repository.
To install the Windows SDK using Chocolatey, follow these steps:
choco install windows-sdk-10.1 --source=https://chocolatey.org/api/v2/
choco install windows-sdk-10 --source=https://chocolatey.org/api/v2/
This command installs the Windows SDK version 10.1 and Windows SDK version 10 from the Chocolatey package repository.
After installing the Windows SDK, it is important to verify that it is properly installed. You can add a step in your CI pipeline to check the installation:
.github/workflows/ci.yml
file:
- name: Verify Windows SDK Installation
run: |
if [ -d "C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0" ]; then
echo "Windows SDK 10 is properly installed."
elif [ -d "C:\Program Files (x86)\Windows Kits\10.1\Include\10.1.18362.1" ]; then
echo "Windows SDK 10.1 is properly installed."
else
echo "Windows SDK is not properly installed."
exit 1
This step ensures that the Windows SDK is installed correctly and is compatible with the WDK.
To install the WindowsKernelModeDriver build tools using Chocolatey, follow these steps:
choco install kmdf
This command installs the WindowsKernelModeDriver build tools from the Chocolatey package repository.
To access and interpret the installation logs generated during the CI pipeline, follow these steps:
Accessing Logs:
Interpreting Logs:
install_dependencies.log
, install_windows_sdk.log
.To ensure compatibility with the appropriate Windows versions, update the CI pipeline to use KMDF 1.31 for Windows 10 and KMDF 1.33 for Windows 11. Follow these steps:
Update the build-windows-7
Job:
build-windows-7
job in the .github/workflows/ci.yml
file to target Windows 10 and Windows 11 instead of Windows 7.WDK_IncludePath
environment variable is set correctly for each Windows version.Modify the build-windows-10
Job:
.github/workflows/ci.yml
file.Modify the build-windows-11
Job:
.github/workflows/ci.yml
file.Verify KMDF Installation:
scripts/verify_wdk_installation.sh
script to verify the installation of KMDF 1.31 for Windows 10 and KMDF 1.33 for Windows 11.By following these steps, you can ensure that the CI pipeline is updated to use the correct KMDF versions for Windows 10 and Windows 11, ensuring compatibility and successful builds.
To ensure that the CI pipeline runs jobs as expected, it is important to set up GitHub Actions permissions in the repository settings. Follow these steps:
By setting up the appropriate permissions, you ensure that the CI pipeline has the necessary access to run jobs and interact with the repository.
The following environment variables are used in the CI pipeline:
WDK_IncludePath
: Specifies the include paths for the Windows Driver Kit (WDK).NUGET
: Specifies the path to the NuGet executable.Ensure that these environment variables are set correctly in the CI pipeline configuration.
The step "Upload Install Windows Driver Kit Logs" in .github/workflows/ci.yml
has been updated to include a uses
key with actions/upload-artifact@v4
. This ensures that the step meets the requirement of defining a uses
or run
key.
uses
Key in the "Upload Install Windows Driver Kit Logs" StepThe "Upload Install Windows Driver Kit Logs" step now includes a uses
key with actions/upload-artifact@v4
, along with a with
section specifying name
, path
, retention-days
, and if-no-files-found
.
To install Visual Studio 2022 with the required components for developing and building the AVB stack, follow these steps:
Download Visual Studio 2022:
Run the Installer:
Select Individual Components:
Install Visual Studio:
Verify Installation:
To install the Windows SDK version 10.0.26100.1742, follow these steps:
Download the Windows SDK:
Run the Installer:
Verify Installation:
dir "C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.1742"
To install the Windows Driver Kit (WDK) version 10.0.26100.1882 and its Visual Studio extension, follow these steps:
Download the WDK:
Run the Installer:
Verify Installation:
Set Environment Variables:
WDK_IncludePath
environment variable is set correctly in your CI configuration.By following these steps, you can ensure that Visual Studio 2022, the Windows SDK, and the WDK are installed correctly with the required components for developing and building the AVB stack.