Skip to content

Commit c71fd48

Browse files
p-ogradyyosilvGilShpr
authored
Release 2.2, 25.08. (#34)
* Release 2.2.0-EA, 25.06. Signed-off-by: Patrick O'Grady <[email protected]> * change i2c timeout to enable vb1940-aio (#28) * updated manifest file to fix FPGA ping issue (#29) Co-authored-by: Gil Shapira <[email protected]> * changes to address bugs found on EA codebase (#30) * Release 2.2.0, 25.08. Signed-off-by: Patrick O'Grady <[email protected]> * Add watchdog timeouts to the known anomaly list. (#36) * Update instructions for configuring IP addresses. (#37) * Pin the specific version of cuda-python. (#38) --------- Signed-off-by: Patrick O'Grady <[email protected]> Co-authored-by: Yosi Levi <[email protected]> Co-authored-by: Gil Shapira <[email protected]>
1 parent 5fb5dad commit c71fd48

File tree

441 files changed

+84200
-6445
lines changed

Some content is hidden

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

441 files changed

+84200
-6445
lines changed

.clang-format

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
BasedOnStyle: webkit

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
**/*.pcap filter=lfs diff=lfs merge=lfs -text
22
**/*.pdf filter=lfs diff=lfs merge=lfs -text
33
**/*.png filter=lfs diff=lfs merge=lfs -text
4+
**/*.docx filter=lfs diff=lfs merge=lfs -text
45
.gitlab-ci.yml export-ignore
56
RELEASE.sh export-ignore

.gitignore

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,27 @@ ci/coverage.xml
55
dist
66
tags
77
cscope.*
8+
.vscode/
89
# cache
910
.cache
1011
# build folders
12+
build
1113
*.egg-info
1214
# tao peoplenet files
1315
*.fp16
1416
*.onnx
1517
# NSight profiler files
1618
*.ncu-rep
1719
*.nsys-rep
20+
# Configurator files
21+
configurator/build
22+
configurator/meta-openembedded
23+
configurator/poky
24+
spi-vm.log
25+
spi-vm.pid
26+
27+
# Emulation files
28+
src/hololink/emulation/test_emulator_hsb
29+
*.o
30+
dlpack.h
31+

CMakeLists.txt

Lines changed: 59 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
1+
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
22
# SPDX-License-Identifier: Apache-2.0
33
#
44
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,52 +17,80 @@ cmake_minimum_required(VERSION 3.20)
1717

1818
# Options
1919
option(HOLOLINK_BUILD_PYTHON "Build Hololink Python Bindings" ON)
20+
option(HOLOLINK_BUILD_TESTS "Build Hololink Tests" ON)
21+
option(HOLOLINK_BUILD_ONLY_NATIVE "Build only native (i.e. C++) components" OFF)
22+
option(HOLOLINK_BUILD_SIPL "Build NvSIPL capture components" OFF)
2023

21-
project(hololink)
24+
file(READ "VERSION" HOLOLINK_VERSION)
25+
string(STRIP ${HOLOLINK_VERSION} HOLOLINK_VERSION)
26+
string(REGEX MATCH "^([0-9]+\.[0-9]+\.[0-9]+)" HOLOLINK_VERSION_NUM ${HOLOLINK_VERSION})
2227

23-
include(CTest)
28+
set(PROJECT_LANGUAGES CXX)
29+
if (NOT HOLOLINK_BUILD_ONLY_NATIVE)
30+
list(APPEND PROJECT_LANGUAGES CUDA)
31+
endif()
2432

25-
# Find Holoscan
26-
find_package(holoscan 0.6 REQUIRED CONFIG PATHS "/opt/nvidia/holoscan")
33+
project(hololink
34+
LANGUAGES ${PROJECT_LANGUAGES}
35+
VERSION ${HOLOLINK_VERSION_NUM})
2736

28-
# Find pybind11
29-
find_package(Python3 REQUIRED COMPONENTS Interpreter Development)
37+
if (NOT HOLOLINK_BUILD_ONLY_NATIVE)
38+
include(CTest)
3039

31-
set(HOLOSCAN_SDK_VERSION "$ENV{HOLOSCAN_SDK_VERSION}")
32-
set(HOLOSCAN_SDK_VERSION_EXPECTED "2.7.0")
40+
# Find Holoscan
41+
find_package(holoscan 3.3 REQUIRED CONFIG PATHS "/opt/nvidia/holoscan")
3342

34-
if(NOT HOLOSCAN_SDK_VERSION VERSION_EQUAL HOLOSCAN_SDK_VERSION_EXPECTED)
35-
message(FATAL_ERROR "Expected Holoscan version ${HOLOSCAN_SDK_VERSION_EXPECTED} but found ${HOLOSCAN_SDK_VERSION}, please check pybind11 version of the Holoscan SDK and update here if needed")
36-
endif()
43+
# Find pybind11
44+
find_package(Python3 REQUIRED COMPONENTS Interpreter Development)
45+
46+
# We fetch pybind11 since we need the same version as the Holoscan SDK
47+
# and it's not necessarily available on all the platforms
48+
include(FetchContent)
49+
FetchContent_Declare(pybind11
50+
GIT_REPOSITORY https://github.com/pybind/pybind11
51+
GIT_TAG v2.13.6
52+
GIT_SHALLOW TRUE
53+
)
54+
FetchContent_MakeAvailable(pybind11)
55+
56+
# We fetch googletest since we need the same version as the Holoscan SDK.
57+
# As recommended by the user guide (https://google.github.io/googletest/quickstart-cmake.html),
58+
# we use Git commit hash of the GoogleTest version to use the same version as the Holoscan SDK.
59+
# (https://github.com/google/googletest/releases/tag/release-1.12.1)
60+
FetchContent_Declare(
61+
googletest
62+
URL https://github.com/google/googletest/archive/58d77fa8070e8cec2dc1ed015d66b454c8d78850.zip
63+
)
64+
FetchContent_MakeAvailable(googletest)
65+
66+
# add CMAKE_MODULE_PATH for pybind11_add_hololink_module
67+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
3768

38-
# We fetch pybind11 since we need the same version as the Holoscan SDK
39-
# and it's not necessarily available on all the platforms
40-
include(FetchContent)
41-
FetchContent_Declare(pybind11
42-
GIT_REPOSITORY https://github.com/pybind/pybind11
43-
GIT_TAG v2.11.1
44-
GIT_SHALLOW TRUE
45-
)
46-
FetchContent_MakeAvailable(pybind11)
47-
48-
# add CMAKE_MODULE_PATH for pybind11_add_hololink_module
49-
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
50-
51-
# enabled trace and debug log messages in debug buld only
52-
if(CMAKE_BUILD_TYPE STREQUAL "Release")
53-
add_compile_definitions(HOLOSCAN_LOG_ACTIVE_LEVEL=2)
54-
else()
55-
add_compile_definitions(HOLOSCAN_LOG_ACTIVE_LEVEL=0)
69+
# enabled trace and debug log messages in debug build only
70+
if(CMAKE_BUILD_TYPE STREQUAL "Release")
71+
add_compile_definitions(HOLOSCAN_LOG_ACTIVE_LEVEL=2)
72+
else()
73+
add_compile_definitions(HOLOSCAN_LOG_ACTIVE_LEVEL=0)
74+
endif()
5675
endif()
5776

5877
if(NOT CMAKE_INSTALL_LIBDIR)
5978
set(CMAKE_INSTALL_LIBDIR lib)
6079
endif()
6180

6281
add_subdirectory(src)
82+
add_subdirectory(tools)
83+
add_subdirectory(examples)
6384

85+
if(NOT HOLOLINK_BUILD_ONLY_NATIVE)
86+
if(HOLOLINK_BUILD_TESTS)
87+
add_subdirectory(tests)
88+
endif()
6489
if(HOLOLINK_BUILD_PYTHON)
6590
add_subdirectory(python)
6691
endif()
92+
add_subdirectory(scripts)
93+
endif()
6794

68-
add_subdirectory(examples)
95+
# Add packaging
96+
include(cmake/HololinkCPack.cmake)

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ including instructions for setup on
2222
configurations. Please see the user guide for host configuration and instructions on
2323
running unit tests.
2424

25+
## Troubleshooting
26+
27+
Be sure and check the
28+
[release notes](https://docs.nvidia.com/holoscan/sensor-bridge/latest/release_notes.html)
29+
for frequently asked questions and troubleshooting tips.
30+
2531
## Submitting changes
2632

2733
This software is published under the Apache 2.0 license, allowing unrestricted

RELEASE_NOTES.md

Lines changed: 104 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,108 @@
11
# Release Notes
22

3+
## 2.2-GA, August 2025
4+
5+
### Dependencies
6+
7+
- IGX: [IGX-SW 1.1.2 Production Release](https://developer.nvidia.com/igx-downloads)
8+
- AGX: Use [SDK Manager](https://developer.nvidia.com/sdk-manager) to set up JetPack
9+
6.2.1.
10+
- Holoscan Sensor Bridge, 10G; FPGA v2507.
11+
12+
Be sure and follow the installation instructions included with the release, including
13+
PTP configuration and HSB device firmware updates. To generate documentation, in the
14+
host system, run `sh docs/make_docs.sh`, then use your browser to look at
15+
`docs/user_guide/_build/html/index.html`.
16+
17+
### Updates from 2.0-GA
18+
19+
- **HSB 2.2-GA relies on FPGA IP version 2507.** Check the user guide for instructions
20+
on how to update your configuration. Note that updating your FPGA is only supported
21+
for configurations currently running the 2412 or newer version (included with 2.0-GA).
22+
If your configuration is older, follow the instructions to update to 2.0 first.
23+
24+
- **HSB is updated to work with Holoscan SDK 3.3.** See the
25+
[release notes for HSDK 3.3 here.](https://github.com/nvidia-holoscan/holoscan-sdk/releases/tag/v3.3.0)
26+
27+
- **Synchronized I2C transactions.** By default, the `i2c_transaction` API executes an
28+
I2C bus transaction immediately. Imx274Cam now includes a demonstration method called
29+
`synchronized_set_register`, which queues an I2C transaction to update a camera
30+
configuration register in the blanking interval between video frames. You can see how
31+
this works by following calls to `Imx274Cam.synchronized_test_pattern_update()` as
32+
called in `tests/test_i2c.py`.
33+
34+
- **C++ Tools and utilities, including FPGA programming.** Support for systems without
35+
python is enhanced by moving some tools to a C++ implementation. This includes
36+
37+
- `program_lattice_cpnx100` for programming Lattice CPNX100 based HSB boards
38+
- `hololink-reset` (which replaces the `hololink reset` command)
39+
- `hololink-enumerate` (which replaces the `hololink enumerate` command)
40+
- `hololink-set-ip` (which replaces the `hololink set-ip` command)
41+
- `hololink-read` and `hololink-write` (replace the `hololink read` and
42+
`hololink write` commands)
43+
44+
Run any of these scripts with `--help` to get a description of command-line options.
45+
The `hololink` command (which is python based) will be deprecated in a future release.
46+
47+
- **Support for Leopard Imaging VB1940.** This includes support for stereo imaging with
48+
left and right synchronized operation with global shutter. HSB also provides support
49+
for the on-board IMU: IMU data is sent to the host via a third data channel and (on
50+
appropriately equipped systems) is written directly to GPU memory via RDMA. This
51+
camera sends all data using a single network interface. For example code showing how
52+
to configure and access this data, see `examples/vb1940_stereo_imu_player.py`.
53+
54+
- **COE (P1722B) Support.** Software emulation is provided for another RDMA message
55+
format specified by the upcoming P1722B COE ("camera over Ethernet") standard. Future
56+
host systems will support RDMA of P1722B traffic; this release includes HSB FPGA
57+
support for generating these messages and software handling of received data using CPU
58+
and the Linux network stack.
59+
60+
- **E-con IMX715 and E-con ECam0M30ToF depth sensors.** For examples using these
61+
configurations, see `examples/imx715_player.py` and `examples/ecam0m30tof_player.py`.
62+
63+
### FAQ
64+
65+
- If your application, running in the demo container, halts with a "Failed to initialize
66+
glfw" message, make sure to grant the application permission to connect with the
67+
display via the "xhost +" command. This command is not remembered across reboots.
68+
69+
- Reverting to FPGA 2412 on Lattice HSB units. If you need to revert a Lattice HSB unit
70+
back to 2412, use the 2.2-GA tree and program with the 2412 manifest file. From within
71+
the demo container:
72+
73+
```sh
74+
program_lattice_cpnx100 scripts/manifest-2412.yaml
75+
```
76+
77+
After programming and power cycling, you can update your tree, going back to the
78+
2.0-GA release.
79+
80+
- PTP configuration following boot-up is very touchy and error-prone. If you have
81+
trouble with received PTP timestamps, make sure you follow the user guide
82+
[host setup instructions](https://docs.nvidia.com/holoscan/sensor-bridge/latest/setup.html)
83+
carefully.
84+
85+
- Running tools like "nomachine" on non-RDMA capable systems--where CPU is used to
86+
emulate RDMA functionality, e.g. AGX-- can frequently lead to packet drops for
87+
high-speed sensor data. In camera applications, this can appear as momentary white
88+
streaks on the display. In the current CPU-driven implementation, after a video frame
89+
is delivered to the holoscan pipeline, we clear the receiver buffer to all 0xFF. If a
90+
UDP packet with video data is dropped, then that 0xFF wouldn't be replaced with actual
91+
video data-- and that's where the white streaks come from. Adjusting `rmem_max` (per
92+
[host setup instructions](https://docs.nvidia.com/holoscan/sensor-bridge/latest/setup.html))
93+
and adjusting core affinity for your application may help mitigate packet loss.
94+
95+
### Known Anomalies
96+
97+
- Rare observations of IMX274 producing images with distorted video, which seem to be
98+
system specific. Investigation of this is underway.
99+
100+
- Watchdog timeouts during `pytest --imx274 --ptp`. Testing sometimes terminates early
101+
with a Watchdog exception, indicating that the host is not properly receiving frame
102+
data. This happens occasionally during testing and in varying places, and only under
103+
conditions where frequent reset and reinitialization of the HSB unit and sensor occur.
104+
Investigation of this is underway.
105+
3106
## 2.0-GA, January 2025
4107

5108
### Dependencies
@@ -77,7 +180,7 @@ look at `docs/user_guide/_build/html/index.html`.
77180
manifest file. From within the demo container:
78181

79182
```sh
80-
hololink program scripts/manifest-2407.yaml
183+
program_lattice_cpnx100 scripts/manifest-2407.yaml
81184
```
82185

83186
After programming and power cycling, the board will no longer be visible to the 2.0-GA

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.0.0
1+
2.2.0

ci/Dockerfile.lint

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@ RUN apt-get update \
3232
clang-format \
3333
&& rm -rf /var/lib/apt/lists/*
3434

35-
RUN pip3 install black flake8 isort
35+
RUN pip3 install black flake8 isort codespell
3636
RUN pip3 install mdformat mdformat-tables

ci/acceptable_words.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
OEN
2+
inout

ci/lint.sh

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ SKIP=( \
5858
build*
5959
)
6060

61+
# Codespell checks for spelling mistakes. Don't include PDF files.
62+
CODESPELL_FILES=( `git ls-files | grep -v '.pdf$'` )
63+
6164
C_FILES=( `git ls-files | egrep '.(cpp|hpp)$' ` )
6265
DOCS_FILES=( `git ls-files | egrep '.md$' ` )
6366

@@ -71,6 +74,15 @@ SKIP_ISORT=${SKIP[*]/#/--skip }
7174
# value used by black.
7275
MDFORMAT="--wrap 88 --end-of-line lf"
7376

77+
# Allow some flake8 violations
78+
# E203 - black puts spaces around the ':' in array slices
79+
# E501 - black uses 88 character lengths; flake8 complains for lines longer than 79
80+
# F824 - Allow the code to say 'global x' then only read from that variable; this
81+
# helps readers of your code.
82+
# W503 - black formats long expressions with the operator at the beginning
83+
# of the line
84+
FLAKE8="--ignore=E203,E501,F824,W503"
85+
7486
umask 0
7587

7688
# By default, run lint; specify "--format" to
@@ -83,19 +95,21 @@ case "$1" in
8395
set -o xtrace
8496
isort $SKIP_ISORT --profile black .
8597
black "--extend-exclude=$SKIP_RE" .
86-
flake8 --ignore=E501,E203,W503 --extend-exclude=$SKIP_COMMAS
87-
clang-format --style=webkit -i ${C_FILES[*]}
98+
flake8 $FLAKE8 --extend-exclude=$SKIP_COMMAS
99+
clang-format --style=file:${ROOT}/.clang-format -i ${C_FILES[*]}
88100
mdformat $MDFORMAT ${DOCS_FILES[*]}
101+
codespell --ignore-words=$HERE/acceptable_words.txt ${CODESPELL_FILES[*]}
89102
exit 0
90103
;;
91104
--do-lint)
92105
# We rely on 'set -o errexit' above to terminate on an error
93106
set -o xtrace
94107
isort --check-only $SKIP_ISORT --profile black .
95108
black --check "--extend-exclude=$SKIP_RE" .
96-
flake8 --ignore=E501,E203,W503 --extend-exclude=$SKIP_COMMAS
97-
clang-format --style=webkit --dry-run -Werror ${C_FILES[*]}
109+
flake8 $FLAKE8 --extend-exclude=$SKIP_COMMAS
110+
clang-format --style=file:${ROOT}/.clang-format --dry-run -Werror ${C_FILES[*]}
98111
mdformat --check $MDFORMAT ${DOCS_FILES[*]}
112+
codespell --ignore-words=$HERE/acceptable_words.txt ${CODESPELL_FILES[*]}
99113
exit 0
100114
;;
101115
--do-*)

0 commit comments

Comments
 (0)