#!/bin/zsh -feu

CONFIG_FILE=/etc/ddc.conf
# to source

# Usage:
PROGNAME=$0
# ddc-brightness

usage()
{
    cat <<EOF
${0##*/} [+-th] [-o h|c|d]

+N  brightness
-N
-t  switch to other input
-o  h|c|d
-d  detect (ddc chips)
-c  list capabilities (of the configured chip) in $CONFIG_FILE
-g NR   Get the register
-s NR  Set the register

-v verbose

Environment
Config files: $CONFIG_FILE

example:
$PROGNAME  - 20
EOF
}

test -f $CONFIG_FILE && source $CONFIG_FILE
# HINT=(--bus 8)

# I need i2c-dev in /etc/modules-load.d/ddccontrol-i2c-dev.conf
brightness_register=10
input_register=60

# better add group i2c or /etc/sudoers.d/10maruska
# to avoid password prompt ?


# --display 1
# sudo
# Giving the bus speeds up very much.
DDCUTIL=(ddcutil $HINT)
# I have suid ddcutil:
# DDCUTIL=(ddcutil)

# time sudo /usr/local/bin/ddcutil --trace i2c --trace ddc   --timestamp --ddc  -vv --disable-usb  --timeout-i2c-io    --lazy-sleep  --async   --timestamp   setvcp 10 + 10


while getopts :cdg:ho:s:tv OPT; do
    case $OPT in
        v)
            set -x
            ;;
        d)
            ddcutil detect
            exit
            ;;
        c)
            exec $DDCUTIL capabilities
            ;;
        g)
            exec $DDCUTIL getvcp $OPTARG
            ;;
        s)
            set -x
            shift OPTIND-1
            exec $DDCUTIL setvcp $OPTARG $1
            ;;
        o)
            # map:
            typeset -A mapping
            mapping=(h 0x11 c 0x1b d 0x0f)
            $DDCUTIL setvcp $input_register $mapping[$OPTARG]
            exit
            ;;
        t|+t)
            $DDCUTIL setvcp $input_register $NEXT_INPUT
            exit 0
            ;;
        h|+h)
            usage
            exit 0
            ;;
        *)
            usage >&2
            exit 2
    esac
done
shift OPTIND-1
OPTIND=1


if [[ $# -gt 0 ]]
then
    $DDCUTIL setvcp $brightness_register $@
    $DDCUTIL getvcp $brightness_register
else
    $DDCUTIL getvcp $brightness_register
fi
