#! /bin/bash

PROGNAME=$0

usage() {
  cat << EOF >&2
Usage: $PROGNAME -d device [-e]
        -d: video device (e.g. /dev/video0)
        -e: extended info
EOF
  exit 1
}

device=false
extended=false
while getopts "d:e" opt; do
  case ${opt} in
    d ) device=$OPTARG
      ;;
    e ) extended=true
      ;;
    \? ) usage
      ;;
     : ) usage
      ;;
  esac
done
shift "$((OPTIND - 1))"

#  v4l-conf v4l-utils

if [[ $device == false ]] ; then
        usage
        exit 1;
fi

 
path=$(udevadm info -q path -n $device)
#label=$(udevadm info -p $path | grep ID_MODEL=| sed 's/E: ID_MODEL=//g')
label=$(udevadm info -a -p $path | grep -m 1 {name}| sed -E 's/.*\"(.*)"\.*/\1/')
#model_id=$(udevadm info -p $path | grep ID_MODEL_ID| sed 's/E: ID_MODEL_ID=//g')
model_id=$(udevadm info -a -p $path | grep -m 1 {idProduct}| sed -E 's/.*\"(.*)"\.*/\1/')
#vendor_id=$(udevadm info -p $path | grep ID_VENDOR_ID| sed 's/E: ID_VENDOR_ID=//g')
vendor_id=$(udevadm info -a -p $path | grep -m 1 {idVendor}| sed -E 's/.*\"(.*)"\.*/\1/')
bus=$(udevadm info -p $path | grep ID_BUS| sed 's/E: ID_BUS=//g')
#bus="usb"

#search "old style" for serial number, if this fails try new style.
serial=$(udevadm info -p $path | grep ID_SERIAL=| sed 's/E: ID_SERIAL=//g')
if test -z "$serial"
then
        serial=$(udevadm info -a -p $path | grep -m 1 {serial}| sed -E 's/.*\"(.*)"\.*/\1/')
fi

if ! $extended ; then
        echo '{"dev":"'$device'","label":"'$label'","model_id":"'$model_id'","vendor_id":"'$vendor_id'","bus":"'$bus'","serial":"'$serial'"}'
        exit 0;
fi

if fuser -v $device > /dev/null 2>&1 ; then
v_active=true
else
v_active=false
fi


v_resolution=$(v4l-info $device | grep fmt.pix.width | awk '{print($3)}')' x '$(v4l-info $device | grep fmt.pix.height | awk '{print($3)}')


c_numbers=$(v4l-info $device | grep -c VIDIOC_ENUMINPUT)

for (( c=0; c<$c_numbers; c++ )); do


c_label=$(v4l-info $device | grep "VIDIOC_ENUMINPUT($c)" -A 5 | grep name | awk '{print($3)}' | sed 's/"//g')

c_dev=$(v4l-info $device | grep "VIDIOC_ENUMINPUT($c)" -A 5 | grep index | awk '{print($3)}' | sed 's/"//g')


        if [[ $(v4l2-ctl -d $device -I | awk '{print($4)}') == $c_dev ]] ; then
c_active='true'
else
c_active='false'
fi



channel='{"dev":"'$c_dev'","label":"'$c_label'","active":"'$c_active'"}'

if [[ "$c" == "0" ]]; then
channels=$channel
else
channels="$channels,$channel"
fi



#$(v4l-info $device | grep -c "VIDIOC_ENUMINPUT($c)" -A 5 | grep name | awk '{print($3)}' | sed 's/"//g' )

done

videoin='{"dev":"'$device'","label":"'$label'","active":"'$v_active'","model_id":"'$model_id'","vendor_id":"'$vendor_id'","resolution":"'$v_resolution'","bus":"'$bus'","serial":"'$serial'","channels":['$channels']}'
echo $videoin
