#!/bin/sh
#############################################################
path="${0%/*}"
. "$path/inc/gwhw.inc"
. "$path/inc/dali.inc"

needRoot
daliI2COK

usage() {
	die 'gwhw dali cmd [short/group/broadcast] [data]'
}

ADDR="$1"
shift
DATA="$@"

[ -z "${ADDR}" ] && usage
[ -z "${DATA}" ] && usage

ADDR="$(echo "$ADDR" | tr '[:upper:]' '[:lower:]')"
DATA="$(echo "$DATA" | tr '[:upper:]' '[:lower:]')"
#############################################################
BYTE1="$(addrToHex "$ADDR")"

case ${DATA} in
	# Level commands
	level*)
		BYTE1="$(( BYTE1 & 0xfe ))"
		BYTE2="$(( ${DATA:5} ))"
	;;
	l*)
		BYTE1="$(( BYTE1 & 0xfe ))"
		BYTE2="$(( ${DATA:1} ))"
	;;
	off)  BYTE2="$(( 0x00 ))"
	;;
	up)   BYTE2="$(( 0x01 ))"
	;;
	down) BYTE2="$(( 0x02 ))"
	;;
	step*up)   BYTE2="$(( 0x03 ))"
	;;
	step*down) BYTE2="$(( 0x04 ))"
	;;
	recall*max*level|max) BYTE2="$(( 0x05 ))"
	;;
	recall*min*level|min) BYTE2="$(( 0x06 ))"
	;;
	step*down*off)  BYTE2="$(( 0x07 ))"
	;;
	on*step*up)     BYTE2="$(( 0x08 ))"
	;;
	scene*) BYTE2="$(( (${DATA:5} & 0x0f) | 0x10 ))"
	;;
	# DTR config commands (0x20..0x40)
	reset) BYTE2="$(( 0x20 ))"
	;;
	# System parameter settings (0x50..0x80)
	add*group*)    BYTE2="$(( (${DATA#*group} & 0x0f) | 0x60 ))"
	;;
	remove*group*) BYTE2="$(( (${DATA#*group} & 0x0f) | 0x70 ))"
	;;
	# Query commands (0x90..0xff)
	*) BYTE2="$(( DATA ))"
esac

FLAGS="$(getFlags "${BYTE1}" "${BYTE2}")"

daliTX3B "$FLAGS" "${BYTE1}" "${BYTE2}"
if [ '02' = "$FLAGS" ]; then
	waitRX
	result="$(daliRX4B)"
	case "${result}" in
		0x2?*) printf "${result:15}\n"
		;;
		0x3?*) printf "no response\n"
		;;
		*) printf "error\n"
	esac
fi
