#!/bin/sh # #set camera i2c pin mux # I2C_DEV=10; I2C_ADDR=0x3b; print_usage() { echo "Usage: ./veye_mipi_i2c.sh [-r/w] [-f] function name -p1 param1 -p2 param2 -b bus" echo "options:" echo "sns_reg" } ######################parse arg################################### MODE=read; FUNCTION=version; SENSOR_ID=0; VIDEO_FORMAT=1;# 1 ntsc,0 pal PARAM1=0; PARAM2=0; PARAM3=0; PARAM4=0; b_arg_param1=0; b_arg_param2=0; b_arg_param3=0; b_arg_param4=0; b_arg_functin=0; b_arg_bus=0; b_arg_addr=0; for arg in $@ do if [ $b_arg_functin -eq 1 ]; then b_arg_functin=0; FUNCTION=$arg; if [ -z $FUNCTION ]; then echo "[error] FUNCTION is null" exit; fi fi if [ $b_arg_param1 -eq 1 ] ; then b_arg_param1=0; PARAM1=$arg; fi if [ $b_arg_param2 -eq 1 ] ; then b_arg_param2=0; PARAM2=$arg; fi if [ $b_arg_param3 -eq 1 ] ; then b_arg_param3=0; PARAM3=$arg; fi if [ $b_arg_param4 -eq 1 ] ; then b_arg_param4=0; PARAM4=$arg; fi if [ $b_arg_bus -eq 1 ] ; then b_arg_bus=0; I2C_DEV=$arg; fi if [ $b_arg_addr -eq 1 ] ; then b_arg_addr=0; I2C_ADDR=$arg; fi case $arg in "-r") MODE=read; ;; "-w") MODE=write; ;; "-f") b_arg_functin=1; ;; "-p1") b_arg_param1=1; ;; "-p2") b_arg_param2=1; ;; "-p3") b_arg_param3=1; ;; "-p4") b_arg_param4=1; ;; "-b") b_arg_bus=1; ;; "-d") b_arg_addr=1; ;; "-h") print_usage; ;; esac done #######################parse arg end######################## #######################Action############################### if [ $# -lt 1 ]; then print_usage; exit 0; fi pinmux() { sh ./camera_i2c_config >> /dev/null 2>&1 } function process_number() { if (( $1 >= 0x41 )); then echo $(( $1 - 0x37 )) else echo $(( $1 - 0x30 )) fi } read_sns_reg() { local regaddr=$PARAM1; local regaddr_h=0; local regaddr_l=0; local reg_h=0; local reg_m=0; local reg_s=0; local reg_l=0; local regval=0; local rsplen=0; res=$(./i2c_write $I2C_DEV $I2C_ADDR 0x0005 0xFE ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0x0007 0xFE ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0x0003 0x00 ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0x0003 0xFF ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0x0003 0x00 ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0x0003 0xFF ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 0x23 ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 0x53 ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 0x45 ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 0x4E ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 0x53 ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 0x4F ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 0x52 ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 0x52 ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 0x3F ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 0x38 );#8214 res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 0x32 ); regaddr_h=$(((regaddr >> 4) +48)); regaddr_l=$(((regaddr & 0x0F) +48)); #printf "reg addr is %x %d %d" $regaddr $regaddr_h $regaddr_l; res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 $regaddr_h ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 $regaddr_l ); res=$(./i2c_write $I2C_DEV $I2C_ADDR 0xFF00 0x0D ); sleep 0.01; res=$(./i2c_read $I2C_DEV $I2C_ADDR 0x0004 ); rsplen=$?; #printf "rsp len %d\n" $rsplen;#10 res=$(./i2c_read $I2C_DEV $I2C_ADDR 0xFF00); #echo -e "\x$(printf %x $?)" res=$(./i2c_read $I2C_DEV $I2C_ADDR 0xFF00); #echo -e "\x$(printf %x $?)" res=$(./i2c_read $I2C_DEV $I2C_ADDR 0xFF00); #echo -e "\x$(printf %x $?)" res=$(./i2c_read $I2C_DEV $I2C_ADDR 0xFF00); #echo -e "\x$(printf %x $?)" res=$(./i2c_read $I2C_DEV $I2C_ADDR 0xFF00); #echo -e "\x$(printf %x $?)" res=$(./i2c_read $I2C_DEV $I2C_ADDR 0xFF00); #echo -e "\x$(printf %x $?)" res=$(./i2c_read $I2C_DEV $I2C_ADDR 0xFF00); reg_h=$(process_number $?); res=$(./i2c_read $I2C_DEV $I2C_ADDR 0xFF00); reg_m=$(process_number $?); res=$(./i2c_read $I2C_DEV $I2C_ADDR 0xFF00); reg_s=$(process_number $?); res=$(./i2c_read $I2C_DEV $I2C_ADDR 0xFF00); reg_l=$(process_number $?); #printf "reg addr 0x%x val is 0x%x%x%x%x\n" $regaddr $reg_h $reg_m $reg_s $reg_l; #reg_val=$((($reg_h<<24)+($reg_m<<16)+($reg_s<<8)+$reg_l)); reg_val=$(( (reg_h << 12) | (reg_m << 8) | (reg_s << 4) | reg_l )); printf "reg addr 0x%x val is 0x%x\n" $regaddr $reg_val; res=$(./i2c_write $I2C_DEV $I2C_ADDR 0x0005 0xFF ); } #######################Action# BEGIN############################## pinmux; #./i2c_write $I2C_DEV $I2C_ADDR 0x07 0xFE>/dev/null 2>&1 if [ ${MODE} = "read" ] ; then case $FUNCTION in "sns_reg") read_sns_reg; ;; esac fi