Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
986096b
[ADL-P] LRS V4L2 Backend MPLANE streaming support [LRS-572]
Jan 5, 2023
21acbcb
PR #11295 from dmipx: [ADL-P] LRS V4L2 Backend MPLANE streaming suppo…
Nir-Az Jan 8, 2023
68d5f5e
color processing block acc to platform
remibettan Jan 5, 2023
4084c7c
using gev_dev_capabilities method
remibettan Jan 8, 2023
abd95d8
cr
remibettan Jan 10, 2023
a416a09
PR #11294 from remibettan: color processing block acc to platform
Nir-Az Jan 11, 2023
3cb1dd9
Enumerate video nodes by name
Jan 12, 2023
3e6b496
Following code review.
Jan 16, 2023
996d7b6
PR #11319 from dmipx: Enumerate video nodes by name
Nir-Az Jan 19, 2023
f00007b
merge development
Nir-Az Feb 13, 2023
ed4e624
PR #11435 from Nir-Az: Align ADL-P to Development
Nir-Az Feb 14, 2023
38dfbbf
Merge remote-tracking branch 'origin/development' into adl-p
Nir-Az Feb 26, 2023
5e26e12
PR #11485 from Nir-Az: align adl-p to dev
Nir-Az Feb 27, 2023
06644ee
backend: dfu - add support for multiple cameras
Feb 22, 2023
058726d
scripts: rs-enum: cleanup
Mar 1, 2023
0c69294
PR #11472 from dmipx: backend: dfu - add support for multiple cameras
Nir-Az Mar 2, 2023
64dd453
[ADL-P] Automate rs-enum script to udev rules
Mar 9, 2023
022bad7
PR #11550 from dmipx: Automate rs-enum script to udev rules
Nir-Az Mar 12, 2023
0e613b5
rs-enum: support for metadata nodes format updates
Mar 20, 2023
a58c7df
PR #11592 from dmipx: rs-enum: support for metadata nodes format updates
Nir-Az Mar 21, 2023
875270f
Merge remote-tracking branch 'origin/development' into adl-p
Nir-Az Mar 23, 2023
71da796
PR #11605 from Nir-Az: Align ADL-P to development (23/3)
Nir-Az Mar 26, 2023
95a7572
adl-p temporary disable metadata node
Mar 27, 2023
5f1f209
PR #11618 from dmipx: adl-p temporary disable metadata node
Nir-Az Mar 28, 2023
32b7038
Merge remote-tracking branch 'origin/development' into adl-p
Nir-Az May 23, 2023
f0939d4
PR #11832 from Nir-Az: align adl-p to development (23/5/23)
Nir-Az May 24, 2023
fd1f272
backend-v4l: ipu6 integration
May 18, 2023
7498df3
udev rules: update dfu filter for all d4xx dfu node names
May 21, 2023
154b658
backend-v4l2: use custom structure for metadata.
May 22, 2023
8786dc5
scripts: enable metadata bindings.
May 24, 2023
c2b47dd
PR #11822 from dmipx: Adlp metadata
Nir-Az May 25, 2023
7fbdd13
backend-v4l: stop metadata before video for ipu6
Jun 5, 2023
fe656b7
PR #11902 from dmipx: backend-v4l: stop metadata before video for ipu6
Nir-Az Jun 14, 2023
a2336b8
scripts: ipu6: fix media controller index
Jul 5, 2023
8bba296
scripts: enum/bind check for dependencies.
Jul 17, 2023
ba793d1
PR #11969 from dmipx: scripts: ipu6: fix media controller index
Nir-Az Jul 20, 2023
afb06fd
Merge remote-tracking branch 'origin/development' into adl-p
Nir-Az Jul 24, 2023
1a02ed2
PR #12032 from Nir-Az: align adl-p to development (24/7/23)
Nir-Az Jul 24, 2023
e13b9d5
scripts: rs-enum: update enumeration for jetson devices.
Jul 20, 2023
1c3769f
scripts: udev: unify tegra and ipu6 rules
Jul 23, 2023
4ee1057
scripts: ipu6-bind: skip for non ipu6 case.
Jul 24, 2023
5083434
scripts: rs-enum: remove sudo, check for root user on run.
Jul 24, 2023
6f34bbb
scripts: udev: Merge all mipi platforms to single rule.
Jul 24, 2023
4c61dea
PR #12023 from dmipx: scripts: rs-enum: update enumeration for jetson…
Nir-Az Aug 1, 2023
4612539
scripts: ipu6 aggregated camera support.
Aug 4, 2023
439c5a0
PR #12070 from dmipx: scripts: ipu6 aggregated camera support.
Nir-Az Aug 9, 2023
e9e57bf
-sscripts: ipu6 bind commentary
Aug 14, 2023
0abacd1
PR #12102 from dmipx: scripts: ipu6 bind commentary
Nir-Az Aug 14, 2023
812cf43
PR #12108 from IntelRealSense: adl-p align to development
Nir-Az Aug 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions config/99-realsense-d4xx-ipu6.rules
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
##Version=1.0##
# Device rules for Intel RealSense MIPI devices on IPU6
#KERNEL=="d4xx", SUBSYSTEM=="module", RUN+="/bin/bash -c 'echo UDEV-D4XX > /dev/kmsg'"
SUBSYSTEM=="video4linux", ATTR{name}=="DS5 mux a", RUN+="/bin/bash -c 'echo UDEV-%s{name} > /dev/kmsg; /usr/local/bin/rs_ipu6_d457_bind.sh -m a > /dev/kmsg; /usr/local/bin/rs-enum.sh -q -m a > /dev/kmsg'"
SUBSYSTEM=="video4linux", ATTR{name}=="DS5 mux b", RUN+="/bin/bash -c 'echo UDEV-%s{name} > /dev/kmsg; /usr/local/bin/rs_ipu6_d457_bind.sh -m b > /dev/kmsg; /usr/local/bin/rs-enum.sh -q -m b > /dev/kmsg'"
SUBSYSTEM=="video4linux", ATTR{name}=="DS5 mux c", RUN+="/bin/bash -c 'echo UDEV-%s{name} > /dev/kmsg; /usr/local/bin/rs_ipu6_d457_bind.sh -m c > /dev/kmsg; /usr/local/bin/rs-enum.sh -q -m c > /dev/kmsg'"
SUBSYSTEM=="video4linux", ATTR{name}=="DS5 mux d", RUN+="/bin/bash -c 'echo UDEV-%s{name} > /dev/kmsg; /usr/local/bin/rs_ipu6_d457_bind.sh -m d > /dev/kmsg; /usr/local/bin/rs-enum.sh -q -m d > /dev/kmsg'"
62 changes: 45 additions & 17 deletions scripts/rs-enum.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,22 @@
#
# Alderlake:
#$ ./rs-enum.sh
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add some comment with explanation of the commands sent in this script

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you are not commenting c++ code for every magic you do.
This is simple filtering, nothing specific can be commented. No magic involved.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think Remi meant command line parameters
i.e.

# parse command line parameters
# for '-i' parameter, print links only

# Bus Camera Sensor Node Type Video Node RS Link
# ipu6 3 depth Streaming /dev/video52 /dev/video-rs-depth-3
# ipu6 3 depth Metadata /dev/video53 /dev/video-rs-depth-md-3
# ipu6 3 ir Streaming /dev/video56 /dev/video-rs-ir-3
# ipu6 3 color Streaming /dev/video54 /dev/video-rs-color-3
# ipu6 3 color Metadata /dev/video55 /dev/video-rs-color-md-3
#
#Bus Camera Sensor Node Type Video Node RS Link
# ipu6 0 depth Streaming /dev/video4 /dev/video-rs-depth-0
Comment thread
Nir-Az marked this conversation as resolved.
# ipu6 0 depth Metadata /dev/video5 /dev/video-rs-depth-md-0
# ipu6 0 ir Streaming /dev/video8 /dev/video-rs-ir-0
# ipu6 0 imu Streaming /dev/video9 /dev/video-rs-imu-0
# ipu6 0 color Streaming /dev/video6 /dev/video-rs-color-0
# ipu6 0 color Metadata /dev/video7 /dev/video-rs-color-md-0
# i2c 0 d4xx Firmware /dev/d4xx-dfu-a /dev/d4xx-dfu-0
# ipu6 2 depth Streaming /dev/video36 /dev/video-rs-depth-2
# ipu6 2 depth Metadata /dev/video37 /dev/video-rs-depth-md-2
# ipu6 2 ir Streaming /dev/video40 /dev/video-rs-ir-2
# ipu6 2 imu Streaming /dev/video41 /dev/video-rs-imu-2
# ipu6 2 color Streaming /dev/video38 /dev/video-rs-color-2
# ipu6 2 color Metadata /dev/video39 /dev/video-rs-color-md-2
# i2c 2 d4xx Firmware /dev/d4xx-dfu-c /dev/d4xx-dfu-2

# Dependency: v4l-utils
#
# parse command line parameters
Expand All @@ -33,22 +42,33 @@ while [[ $# -gt 0 ]]; do
info=1
shift
;;
-q|--quiet)
quiet=1
shift
;;
-m|--mux)
shift
mux_param=$1
shift
;;
*)
info=0
quiet=0
shift
;;
esac
done
#set -x
mux_list=${mux_param:-'a b c d'}

declare -A camera_idx=( [a]=0 [b]=1 [c]=2 [d]=3 )
declare -A d4xx_vc=([1]=1 [2]=3 [4]=5)
declare -A d4xx_vc_named=([depth]=1 [rgb]=3 ["motion detection"]=5 [imu]=7)
declare -A d4xx_vc_named=([depth]=1 [rgb]=3 ["motion detection"]=5 [imu]=6)
declare -A camera_names=( [depth]=depth [rgb]=color ["motion detection"]=ir [imu]=imu )

camera_vid=("depth" "depth-md" "color" "color-md" "ir" "imu")

printf "Bus\tCamera\tSensor\tNode Type\tVideo Node\tRS Link\n"
[[ $quiet -eq 0 ]] && printf "Bus\tCamera\tSensor\tNode Type\tVideo Node\tRS Link\n"

# For Jetson we have simple method
if [ -n "$(v4l2-ctl --list-devices | grep tegra)" ]; then
Expand All @@ -72,12 +92,12 @@ if [ -n "$(v4l2-ctl --list-devices | grep tegra)" ]; then
type="Streaming"
fi
sensor_name=$(echo "${camera_vid[${sens_id}]}" | awk -F'-' '{print $1}')
printf '%s\t%d\t%s\t%s\t%s\t%s\n' ${bus} ${cam_id} ${sensor_name} ${type} ${vid} ${dev_ln}
[[ $quiet -eq 0 ]] && printf '%s\t%d\t%s\t%s\t%s\t%s\n' ${bus} ${cam_id} ${sensor_name} ${type} ${vid} ${dev_ln}
# create link only in case we choose not only to show it
if [[ $info -eq 0 ]] && [[ $bus != "usb" ]]; then
[[ -e $dev_ln ]] && sudo unlink $dev_ln
sudo ln -s $vid $dev_ln
#TODO: create DFU device link for camera on jetson
# Create DFU device link for camera on jetson
subdev=$(media-ctl --print-dot | grep "D4XX depth ${camera} | awk -F'|' '{print $2}' | awk -F'/' '{print $3}' | tr -d ' '")
i2cdev=$(ls -l /sys/class/video4linux/${subdev}/device | awk -F'/' '{print $9}')
dev_dfu_name="/dev/d4xx-dfu-${i2cdev}"
Expand All @@ -93,23 +113,28 @@ fi
# cache media-ctl output
dot=$(media-ctl --print-dot)
# for all d457 muxes a, b, c and d
for camera in a b c d; do
for camera in $mux_list; do
create_dfu_dev=0
for sens in "${!d4xx_vc_named[@]}"; do
# get sensor binding from media controller
d4xx_sens=$(echo "${dot}" | grep "D4XX $sens $camera" | awk '{print $1}')

[[ -z $d4xx_sens ]] && continue; # echo "SENS $sens NOT FOUND" && continue

d4xx_sens_mux=$(echo "${dot}" | grep $d4xx_sens:port0 | awk '{print $3}' | awk -F':' '{print $1}')
csi2=$(echo "${dot}" | grep $d4xx_sens_mux:port0 | awk '{print $3}' | awk -F':' '{print $1}')
be_soc=$(echo "${dot}" | grep $csi2:port1 | grep -v dashed | awk '{print $3}' | awk -F':' '{print $1}')
vid_nd=$(echo "${dot}" | grep "$be_soc:port${d4xx_vc_named[${sens}]}" | grep -v dashed | awk '{print $3}' | awk -F':' '{print $1}')

[[ -z $vid_nd ]] && continue; # echo "SENS $sens NOT FOUND" && continue

vid=$(echo "${dot}" | grep "${vid_nd}" | grep video | tr '\\n' '\n' | grep video | awk -F'"' '{print $1}')
[[ -z $vid ]] && continue;
dev_ln="/dev/video-rs-${camera_names["${sens}"]}-${camera_idx[${camera}]}"
dev_name=$(v4l2-ctl -d $vid -D | grep Model | awk -F':' '{print $2}')
# echo Sensor: $sens,\t Device: $vid,\t Link $dev_ln
printf '%s\t%d\t%s\tStreaming\t%s\t%s\n' "$dev_name" ${camera_idx[${camera}]} ${camera_names["${sens}"]} $vid $dev_ln

[[ $quiet -eq 0 ]] && printf '%s\t%d\t%s\tStreaming\t%s\t%s\n' "$dev_name" ${camera_idx[${camera}]} ${camera_names["${sens}"]} $vid $dev_ln

# create link only in case we choose not only to show it
if [[ $info -eq 0 ]]; then
[[ -e $dev_ln ]] && sudo unlink $dev_ln
Expand All @@ -121,11 +146,14 @@ for camera in a b c d; do
# metadata link
# skip IR metadata node for now.
[[ ${camera_names["${sens}"]} == 'ir' ]] && continue
# skip IMU metadata node.
[[ ${camera_names["${sens}"]} == 'imu' ]] && continue

vid_num=$(echo $vid | grep -o '[0-9]\+')
dev_md_ln="/dev/video-rs-${camera_names["${sens}"]}-md-${camera_idx[${camera}]}"
dev_name=$(v4l2-ctl -d "/dev/video$(($vid_num+1))" -D | grep Model | awk -F':' '{print $2}')
# echo Metadata: $sens,\t Device: "/dev/video$(($vid_num+1))",\t Link: $dev_md_ln
printf '%s\t%d\t%s\tMetadata\t/dev/video%s\t%s\n' "$dev_name" ${camera_idx[${camera}]} ${camera_names["${sens}"]} $(($vid_num+1)) $dev_md_ln

[[ $quiet -eq 0 ]] && printf '%s\t%d\t%s\tMetadata\t/dev/video%s\t%s\n' "$dev_name" ${camera_idx[${camera}]} ${camera_names["${sens}"]} $(($vid_num+1)) $dev_md_ln
# create link only in case we choose not only to show it
if [[ $info -eq 0 ]]; then
[[ -e $dev_md_ln ]] && sudo unlink $dev_md_ln
Expand All @@ -140,7 +168,7 @@ for camera in a b c d; do
[[ -e $dev_dfu_ln ]] && sudo unlink $dev_dfu_ln
sudo ln -s $dev_dfu_name $dev_dfu_ln
else
printf '%s\t%d\t%s\tFirmware \t%s\t%s\n' " i2c " ${camera_idx[${camera}]} "d4xx " $dev_dfu_name $dev_dfu_ln
[[ $quiet -eq 0 ]] && printf '%s\t%d\t%s\tFirmware \t%s\t%s\n' " i2c " ${camera_idx[${camera}]} "d4xx " $dev_dfu_name $dev_dfu_ln
fi
fi
done
Expand Down
66 changes: 66 additions & 0 deletions scripts/rs_ipu6_d457_bind.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#!/bin/bash
# d457_bind.sh
while [[ $# -gt 0 ]]; do
case $1 in
-q|--quiet)
quiet=1
shift
;;
-m|--mux)
shift
mux_param=$1
shift
;;
*)
quiet=0
shift
;;
esac
done

declare -A media_mux_capture_link=( [a]='' [b]='1 ' [c]='2 ' [d]='3 ' )
declare -A media_mux_csi2_link=( [a]=0 [b]=1 [c]=2 [d]=3 )

declare -A serdes_mux_i2c_bus=( [a]=2 [b]=2 [c]=4 [d]=4 )
mux_list=${mux_param:-'a b c d'}

#media-ctl -r
# cache media-ctl output
dot=$(media-ctl --print-dot)

# DS5 MUX. Can be {a, b, c, d}.
for mux in $mux_list; do
is_mux=$(echo "${dot}" | grep "DS5 mux ${mux}")
[[ -z $is_mux ]] && continue;

[[ $quiet -eq 0 ]] && echo -n "Bind DS5 mux ${mux} .. "
csi2_be_soc="CSI2 BE SOC ${media_mux_csi2_link[${mux}]}"

csi2="CSI-2 ${media_mux_csi2_link[${mux}]}"

be_soc_cap="BE SOC ${media_mux_capture_link[${mux}]}capture"

media-ctl -v -l "\"Intel IPU6 ${csi2}\":1 -> \"Intel IPU6 ${csi2_be_soc}\":0[1]" 1>/dev/null
media-ctl -v -l "\"DS5 mux ${mux}\":0 -> \"Intel IPU6 ${csi2}\":0[1]" 1>/dev/null

media-ctl -v -l "\"D4XX depth ${mux}\":0 -> \"DS5 mux ${mux}\":1[1]" 1>/dev/null
# video streaming node
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":1 -> \"Intel IPU6 ${be_soc_cap} 0\":0[5]" 1>/dev/null
# metadata node
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":2 -> \"Intel IPU6 ${be_soc_cap} 1\":0[5]" 1>/dev/null

media-ctl -v -l "\"D4XX rgb ${mux}\":0 -> \"DS5 mux ${mux}\":2[1]" 1>/dev/null
# RGB link
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":3 -> \"Intel IPU6 ${be_soc_cap} 2\":0[5]" 1>/dev/null
# RGB metadata node
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":4 -> \"Intel IPU6 ${be_soc_cap} 3\":0[5]" 1>/dev/null

# IR link
media-ctl -v -l "\"D4XX motion detection ${mux}\":0 -> \"DS5 mux ${mux}\":3[1]" 1>/dev/null
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":5 -> \"Intel IPU6 ${be_soc_cap} 4\":0[5]" 1>/dev/null

# IMU link
media-ctl -v -l "\"D4XX imu ${mux}\":0 -> \"DS5 mux ${mux}\":4[1]" 1>/dev/null
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":6 -> \"Intel IPU6 ${be_soc_cap} 5\":0[5]" 1>/dev/null
[[ $quiet -eq 0 ]] && echo done
done
39 changes: 39 additions & 0 deletions scripts/setup_ipu6_udev_rules.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/bin/bash -e

# USAGE:
# Normal usecase - without any parameters.
#
# [optional parameters]:
# --uninstall : remove permissions for realsense devices.

install=true

for var in "$@"
do
if [ "$var" = "--uninstall" ]; then
install=false
fi
done

if [ "$install" = true ]; then
echo "Setting-up binding IPU6 and D4XX for RealSense devices"
else
echo "Remove binding for RealSense devices"
fi

if [ "$install" = true ]; then
sudo cp scripts/rs-enum.sh /usr/local/bin/rs-enum.sh
sudo cp scripts/rs_ipu6_d457_bind.sh /usr/local/bin/rs_ipu6_d457_bind.sh
sudo cp config/99-realsense-d4xx-ipu6.rules /etc/udev/rules.d/
else
sudo rm /etc/udev/rules.d/99-realsense-d4xx-ipu6.rules
sudo rm /usr/local/bin/rs_ipu6_d457_bind.sh
sudo rm /usr/local/bin/rs-enum.sh
fi

sudo udevadm control --reload-rules && sudo udevadm trigger
if [ "$install" = true ]; then
echo "udev-rules successfully installed"
else
echo "udev-rules successfully uninstalled"
fi