You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
3.9 KiB
Bash
165 lines
3.9 KiB
Bash
#!/bin/sh
|
|
|
|
. /lib/functions.sh
|
|
. /usr/share/libubox/jshn.sh
|
|
|
|
POWERLINE=""
|
|
[ -d /lib/firmware/plc ] && POWERLINE=plc
|
|
[ -d /lib/firmware/ghn ] && POWERLINE=ghn
|
|
if [ -z "$POWERLINE" ]; then
|
|
logger "rpcd (network.powerline): No powerline technology found, please deselect this script in the .config for this device"
|
|
echo '{}'
|
|
exit 1
|
|
fi
|
|
|
|
MT=$(uci_get_state delos baptization MT)
|
|
|
|
# HPAV specific functions
|
|
|
|
PATCHDIR=/lib/firmware/$POWERLINE/$(cat /tmp/sysinfo/board_name)
|
|
|
|
find_default_mode_plc() {
|
|
local mode=""
|
|
[ -f "$PATCHDIR"/default_mode_name.txt ] && mode=$(cat "$PATCHDIR"/default_mode_name.txt)
|
|
echo "${mode:-default}"
|
|
}
|
|
|
|
get_mode_plc() {
|
|
uci_get plc.plc.compat_mode
|
|
}
|
|
|
|
get_notches_plc() {
|
|
uci_get plc.plc.user_notches
|
|
}
|
|
|
|
set_and_apply_mode_plc() {
|
|
local mode="$1"
|
|
|
|
if [ -z "$mode" ] || [ -f "$PATCHDIR"/patches_mt"$MT"_"$mode".txt ]; then
|
|
uci_set plc plc compat_mode "$mode"
|
|
uci_commit plc
|
|
reload_config
|
|
echo "ok"
|
|
else
|
|
echo "error"
|
|
fi
|
|
}
|
|
|
|
set_and_apply_notches_plc() {
|
|
local notches="$1"
|
|
|
|
uci_set plc plc user_notches "$notches"
|
|
|
|
uci_commit plc
|
|
reload_config
|
|
|
|
echo "ok"
|
|
}
|
|
|
|
make_mode_list_plc() {
|
|
json_add_string "" "$(find_default_mode_$POWERLINE)"
|
|
|
|
local pat
|
|
for pat in "$PATCHDIR"/patches_mt"$MT"_*.txt; do
|
|
local mode=$(basename "$pat" .txt | sed -e 's/^patches_mt[0-9]*_//')
|
|
if [ -n "$mode" ] && [ "$mode" != "*" ] && [ "$mode" != "default" ]; then
|
|
json_add_string "" "$mode"
|
|
fi
|
|
done
|
|
}
|
|
|
|
# G.hn specific functions
|
|
|
|
get_mode_ghn() {
|
|
uci_get ghn.ghn.compat_mode
|
|
}
|
|
|
|
get_notches_ghn() {
|
|
uci_get ghn.ghn.user_notches
|
|
}
|
|
|
|
set_and_apply_mode_ghn() {
|
|
if [ -n "$mode" ]; then
|
|
uci_set ghn ghn compat_mode "$mode"
|
|
uci_commit ghn
|
|
reload_config
|
|
echo "ok"
|
|
else
|
|
echo "error"
|
|
fi
|
|
}
|
|
|
|
set_and_apply_notches_ghn() {
|
|
local notches="$1"
|
|
|
|
uci_set ghn ghn user_notches "$notches"
|
|
|
|
uci_commit ghn
|
|
reload_config
|
|
|
|
echo "ok"
|
|
}
|
|
|
|
find_default_mode_ghn() {
|
|
# our default mode handling is done in the G.hn init script
|
|
echo "-"
|
|
}
|
|
|
|
make_mode_list_ghn() {
|
|
IF=$(uci_get ghn ghn interface)
|
|
DlanMacAddress=$(uci_get_state delos baptization DlanMacAddress | tr a-f A-F)
|
|
PW=$(uci_get_state delos-private baptization PwdGhnConfig)
|
|
COMPAT_MODES_AVAILABLE=$(configlayer -i $IF -m $DlanMacAddress -w $PW -o GET -p DEVOLO.POWERMASK.PROFILES_AVAILABLE | grep DEVOLO.POWERMASK.PROFILES_AVAILABLE | cut -d= -f2- | sed 's/,/ /g')
|
|
for COMPAT_MODE in ${COMPAT_MODES_AVAILABLE}; do
|
|
json_add_string "" "${COMPAT_MODE}"
|
|
done
|
|
}
|
|
|
|
# common code
|
|
|
|
case "$1" in
|
|
list)
|
|
echo '{"get_compat_mode":{}, "set_compat_mode":{"mode":"String"}, "get_user_notches":{}, "set_user_notches":{"notches":"String"}}'
|
|
;;
|
|
|
|
call)
|
|
case "$2" in
|
|
get_compat_mode)
|
|
mode=$(get_mode_$POWERLINE)
|
|
[ -z "$mode" ] && mode=$(find_default_mode_$POWERLINE)
|
|
|
|
json_init
|
|
json_add_string "current_mode" "$mode"
|
|
json_add_array "available_modes"
|
|
make_mode_list_$POWERLINE
|
|
json_close_array
|
|
json_dump
|
|
;;
|
|
|
|
set_compat_mode)
|
|
read input
|
|
json_load "$input"
|
|
json_get_var mode mode
|
|
[ "$mode" = "$(find_default_mode_$POWERLINE)" ] && mode=""
|
|
|
|
result=$(set_and_apply_mode_$POWERLINE "$mode")
|
|
echo '{"result":"'"$result"'"}'
|
|
;;
|
|
|
|
get_user_notches)
|
|
notches=$(get_notches_$POWERLINE)
|
|
echo '{"notches":"'"$notches"'"}'
|
|
;;
|
|
|
|
set_user_notches)
|
|
read input
|
|
json_load "$input"
|
|
json_get_var notches notches
|
|
|
|
result=$(set_and_apply_notches_$POWERLINE "$notches")
|
|
echo '{"result":"'"$result"'"}'
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|