-
-
Save Hermann-SW/3c0387c4340e10866af32cc5a3d21036 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
dt=`vcgencmd get_camera | grep "detected=1"` | |
if [ "$dt" = "" ]; then | |
echo "no camera detected" | |
else | |
if [ "`which i2cdetect`" = "" ]; then | |
echo "i2cdetect not installed" ; exit | |
fi | |
cd `dirname $0` | |
if [[ ! -a camera_i2c ]]; then | |
wget https://raw.githubusercontent.com/6by9/raspiraw/master/camera_i2c \ | |
2>/dev/null | |
fi | |
r=`uname -r | head --bytes 1` | |
if [ "$r" = "4" ]; then i2c=0; else i2c=10; fi | |
bash camera_i2c 2>&1 | cat > /dev/null | |
v1=`i2cdetect -y $i2c 54 54 | grep " 36"` | |
v2=`i2cdetect -y $i2c 16 16 | grep " 10"` | |
hq=`i2cdetect -y $i2c 26 26 | grep " 1a"` | |
if [ "$v1" != "" ]; then echo -n "v1"; fi | |
if [ "$v2" != "" ]; then echo -n "v2"; fi | |
if [ "$hq" != "" ]; then echo -n "hq"; fi | |
echo " camera found" | |
fi |
Thanks, I updated the gist, keeping it backwards compatible for old 4.x kernels.
For better readability you can specify the address on the bus in hex:
v1=`i2cdetect -y $i2c 0x36 0x36 | grep " 36"`
v2=`i2cdetect -y $i2c 0x10 0x10 | grep " 10"`
hq=`i2cdetect -y $i2c 0x1a 0x1a | grep " 1a"`
If you want to detect the Auvidea B101, try this:
hdmicaptureb101=`i2cdetect -y $i2c 0x0f 0x0f | grep " 0f"`
if [ "$hdmicaptureb101" != "" ]; then echo -n "hdmicaptureb101"; fi
By the way, on the Pi 4 the wget command is not sufficient because camera_i2c will call rpi3-gpiovirtbuf which needs to be downloaded as well.
There is no error handling for missing VC I2C support in the device tree. Enabling I2C in raspi-config only enables the ARM I2C, not the VC I2C. If dtparam=i2c_vc=on is not present in /boot/config.txt, you get this output:
$ ./camver
Error: Could not open file /dev/i2c-10' or
/dev/i2c/10': No such file or directory
Error: Could not open file /dev/i2c-10' or
/dev/i2c/10': No such file or directory
Error: Could not open file /dev/i2c-10' or
/dev/i2c/10': No such file or directory
camera found
That's suboptimal. The same problem happens if the module i2c-dev is not loaded.
My current version is here.
Changelog:
Switch from decimal to hex in i2cget
Handle the TC358743 HDMI-to-CSI converter
Handle the case where tc358743 dtoverlay is active, both if TC358743 or a Pi camera are present
Remove useless use of cat
Assume camera_i2c is directly executable in $PATH
@Hermann-SW I was unable to find which license applies to the code, but I hope you'll accept the changes.
#!/bin/bash
# From Hermann Stamm-Wilbrandt, https://gist.github.com/Hermann-SW/3c0387c4340e10866af32cc5a3d21036
# Added TC358743 HDMI-to-CSI converter support (Auvidea B101) by Carl-Daniel Hailfinger
# License unclear
r=`uname -r | head --bytes 1`
if [ "$r" = "4" ]; then i2c=0; else i2c=10; fi
dt=`vcgencmd get_camera | grep "detected=1"`
# Ignore the result of vcgencmd get_camera as it claims no camera is installed if the tc358743 dtoverlay is loaded
if [ "`which i2cdetect`" = "" ]; then
echo "i2cdetect not installed" ; exit
fi
if [ "`which camera_i2c`" = "" ]; then
echo "camera_i2c not installed" ; exit
fi
camera_i2c >/dev/null 2>&1
v1=`i2cdetect -y $i2c 0x36 0x36 | grep " 36"`
v2=`i2cdetect -y $i2c 0x10 0x10 | grep " 10"`
hq=`i2cdetect -y $i2c 0x1a 0x1a | grep " 1a"`
tc358743hdmicapture=`i2cdetect -y $i2c 0x0f 0x0f | grep " 0f\| UU"`
if [ "$v1" != "" ]; then cam="v1 camera"; fi
if [ "$v2" != "" ]; then cam="v2 camera"; fi
if [ "$hq" != "" ]; then cam="hq camera"; fi
if [ "$tc358743hdmicapture" != "" ]; then cam="tc358743 hdmi capture"; fi
if [ "$cam" != "" ]; then
echo "$cam found"
else
echo "no camera detected"
fi
For linux 5.4 as 6by9's comment
Tested with v1 camera