Skip to content

Commit

Permalink
PR #11969 from dmipx: scripts: ipu6: fix media controller index
Browse files Browse the repository at this point in the history
  • Loading branch information
Nir-Az committed Jul 20, 2023
2 parents fe656b7 + 8bba296 commit ba793d1
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 21 deletions.
25 changes: 17 additions & 8 deletions scripts/rs-enum.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@
# i2c 2 d4xx Firmware /dev/d4xx-dfu-c /dev/d4xx-dfu-2

# Dependency: v4l-utils
v4l2_util=$(which v4l2-ctl)
media_util=$(which media-ctl)
if [ -z ${v4l2_util} ]; then
echo "v4l2-ctl not found, install with: sudo apt install v4l-utils"
exit 1
fi

#
# parse command line parameters
# for '-i' parameter, print links only
Expand Down Expand Up @@ -71,15 +78,15 @@ camera_vid=("depth" "depth-md" "color" "color-md" "ir" "imu")
[[ $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
if [ -n "$(${v4l2_util} --list-devices | grep tegra)" ]; then
for ((i = 0; i < 127; i++)); do
if [ ! -c /dev/video${i} ]; then
break;
fi
cam_id=$((i/6))
sens_id=$((i%6))
vid="/dev/video${i}"
dev_name=$(v4l2-ctl -d ${vid} -D | grep 'Driver name' | head -n1 | awk -F' : ' '{print $2}')
dev_name=$(${v4l2_util} -d ${vid} -D | grep 'Driver name' | head -n1 | awk -F' : ' '{print $2}')
dev_ln="/dev/video-rs-${camera_vid[${sens_id}]}-${cam_id}"
bus="mipi"
if [ "$dev_name" = "uvcvideo" ]; then
Expand All @@ -98,7 +105,7 @@ if [ -n "$(v4l2-ctl --list-devices | grep tegra)" ]; then
[[ -e $dev_ln ]] && sudo unlink $dev_ln
sudo ln -s $vid $dev_ln
# 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 ' '")
subdev=$(${media_util} --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}"
dev_dfu_ln="/dev/d4xx-dfu-${cam_id}"
Expand All @@ -110,8 +117,10 @@ exit 0
fi

#ADL-P IPU6
mdev=$(${v4l2_util} --list-devices | grep -A1 ipu6 | grep media)
#media-ctl -r
# cache media-ctl output
dot=$(media-ctl --print-dot)
dot=$(${media_util} -d ${mdev} --print-dot)
# for all d457 muxes a, b, c and d
for camera in $mux_list; do
create_dfu_dev=0
Expand All @@ -131,7 +140,7 @@ for camera in $mux_list; do
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}')
dev_name=$(${v4l2_util} -d $vid -D | grep Model | awk -F':' '{print $2}')

[[ $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

Expand All @@ -140,7 +149,7 @@ for camera in $mux_list; do
[[ -e $dev_ln ]] && sudo unlink $dev_ln
sudo ln -s $vid $dev_ln
# activate ipu6 link enumeration feature
v4l2-ctl -d $dev_ln -c enumerate_graph_link=1
${v4l2_util} -d $dev_ln -c enumerate_graph_link=1
fi
create_dfu_dev=1 # will create DFU device link for camera
# metadata link
Expand All @@ -151,14 +160,14 @@ for camera in $mux_list; do

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}')
dev_name=$(${v4l2_util} -d "/dev/video$(($vid_num+1))" -D | grep Model | awk -F':' '{print $2}')

[[ $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
sudo ln -s "/dev/video$(($vid_num+1))" $dev_md_ln
v4l2-ctl -d $dev_md_ln -c enumerate_graph_link=3
${v4l2_util} -d $dev_md_ln -c enumerate_graph_link=3
fi
done
# create DFU device link for camera
Expand Down
36 changes: 23 additions & 13 deletions scripts/rs_ipu6_d457_bind.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
#!/bin/bash
# Dependency: v4l-utils
v4l2_util=$(which v4l2-ctl)
media_util=$(which media-ctl)
if [ -z ${v4l2_util} ]; then
echo "v4l2-ctl not found, install with: sudo apt install v4l-utils"
exit 1
fi

# d457_bind.sh
while [[ $# -gt 0 ]]; do
case $1 in
Expand All @@ -24,9 +32,11 @@ 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'}

mdev=$(${v4l2_util} --list-devices | grep -A1 ipu6 | grep media)
media_ctl_cmd="${media_util} -d ${mdev}"
#media-ctl -r
# cache media-ctl output
dot=$(media-ctl --print-dot)
dot=$($media_ctl_cmd --print-dot)

# DS5 MUX. Can be {a, b, c, d}.
for mux in $mux_list; do
Expand All @@ -40,27 +50,27 @@ 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_cmd -v -l "\"Intel IPU6 ${csi2}\":1 -> \"Intel IPU6 ${csi2_be_soc}\":0[1]" 1>/dev/null
$media_ctl_cmd -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
$media_ctl_cmd -v -l "\"D4XX depth ${mux}\":0 -> \"DS5 mux ${mux}\":1[1]" 1>/dev/null
# DEPTH video streaming node
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":1 -> \"Intel IPU6 ${be_soc_cap} 0\":0[5]" 1>/dev/null
$media_ctl_cmd -v -l "\"Intel IPU6 ${csi2_be_soc}\":1 -> \"Intel IPU6 ${be_soc_cap} 0\":0[5]" 1>/dev/null
# DEPTH 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_cmd -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
$media_ctl_cmd -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
$media_ctl_cmd -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
$media_ctl_cmd -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
$media_ctl_cmd -v -l "\"D4XX motion detection ${mux}\":0 -> \"DS5 mux ${mux}\":3[1]" 1>/dev/null
$media_ctl_cmd -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
$media_ctl_cmd -v -l "\"D4XX imu ${mux}\":0 -> \"DS5 mux ${mux}\":4[1]" 1>/dev/null
$media_ctl_cmd -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

0 comments on commit ba793d1

Please sign in to comment.