distribution/packages/hardware/quirks/devices/ayn Loki Zero/bin/ledcontrol

162 lines
2.9 KiB
Bash
Executable file

#!/bin/sh
# SPDX-License-Identifier: Apache-2.0
# Copyright (C) 2023-present Fewtarius
#
# A simple tool to manipulate the controller LEDs using ectool, thanks to
# Ayn for the sample code.
#
# Schema:
#
# 0xB3 - RGB Mode
# 0xAA - Save
#
# 0xB0 - Red
# 0xB1 - Green
# 0xB2 - Blue
#
. /etc/profile
RGB_RED="0xB0"
RGB_GREEN="0xB1"
RGB_BLUE="0xB2"
RGB_MODE="0xB3"
RGB_SAVE="0xAA"
RGB_IDLE="0x55"
ECTOOL="/usr/sbin/ectool"
DEBUG=false
function debug_out() {
$DEBUG && echo "ledcontrol: $*"
}
function ec_save() {
TIMEOUT=0
while true
do
STATE="0x$(${ECTOOL} -r ${RGB_MODE})"
if [ "${STATE^^}" == "${RGB_SAVE}" ] || \
[ "${STATE}" == "${RGB_IDLE}" ] || \
[ "${TIMEOUT}" == 5 ]
then
break
fi
sleep .5
TIMEOUT=$(( TIMEOUT + 1 ))
done
${ECTOOL} -w ${RGB_MODE} -z ${RGB_SAVE} >/dev/null 2>&1
}
function ec_set() {
debug_out "Set EC ${1} ${2}"
${ECTOOL} -w ${1} -z ${2} >/dev/null 2>&1
}
function off() {
ec_save
ec_set ${RGB_RED} 0x00
ec_set ${RGB_GREEN} 0x00
ec_set ${RGB_BLUE} 0x00
ec_save
}
function intensity() {
printf "0x%X\n" $((${1} / ${2}))
}
GETBRIGHTNESS=$(get_setting led.brightness)
if [ ! -z "${2}" ]
then
LEDBRIGHTNESS=${2}
debug_out "Arg[2]: ${2}"
elif [ ! -z "${GETBRIGHTNESS}" ]
then
LEDBRIGHTNESS=${GETBRIGHTNESS}
debug_out "GETBRIGHTESS: ${GETBRIGHTNESS}"
else
debug_out "NO SETTING: max"
LEDBRIGHTNESS=mid
set_setting led.brightness max
fi
case ${LEDBRIGHTNESS} in
max)
LEDBRIGHTNESS=1
set_setting led.brightness max
;;
mid)
LEDBRIGHTNESS=2
set_setting led.brightness mid
;;
min)
LEDBRIGHTNESS=4
set_setting led.brightness min
;;
esac
case $1 in
red)
off
COLOR=$(intensity 0xFF ${LEDBRIGHTNESS})
ec_set ${RGB_RED} ${COLOR}
ec_set ${RGB_GREEN} 0x00
ec_set ${RGB_BLUE} 0x00
ec_save
set_setting led.color red
;;
green)
off
COLOR=$(intensity 0xFF ${LEDBRIGHTNESS})
ec_set ${RGB_RED} 0x00
ec_set ${RGB_GREEN} ${COLOR}
ec_set ${RGB_BLUE} 0x00
ec_save
set_setting led.color green
;;
blue)
off
COLOR=$(intensity 0xFF ${LEDBRIGHTNESS})
ec_set ${RGB_RED} 0x00
ec_set ${RGB_GREEN} 0x00
ec_set ${RGB_BLUE} ${COLOR}
ec_save
set_setting led.color blue
;;
teal)
off
COLOR=$(intensity 0x80 ${LEDBRIGHTNESS})
ec_set ${RGB_RED} 0x00
ec_set ${RGB_GREEN} ${COLOR}
ec_set ${RGB_BLUE} ${COLOR}
ec_save
set_setting led.color teal
;;
purple)
off
COLOR=$(intensity 0x80 ${LEDBRIGHTNESS})
ec_set ${RGB_RED} ${COLOR}
ec_set ${RGB_GREEN} 0x00
ec_set ${RGB_BLUE} ${COLOR}
ec_save
set_setting led.color purple
;;
off)
off
set_setting led.color off
;;
default)
del_setting led.color
;;
brightness)
set_setting led.brightness ${2}
;;
*)
COLOR=$(get_setting led.color)
if [ ! -z "${COLOR}" ]
then
ledcontrol ${COLOR}
fi
;;
esac