HEX
Server: Apache/2.2.34 (Unix) mod_fastcgi/mod_fastcgi-SNAP-0910052141
System: Linux Kou-Etsu-Dou 4.4.59+ #25556 SMP PREEMPT Thu Mar 4 18:03:46 CST 2021 x86_64
User: hosam (1026)
PHP: 7.2.29
Disabled: NONE
Upload Files
File: //usr/syno/etc/rc.sysv/ups-usb.sh
#!/bin/sh
# Copyright (c) 2000-2015 Synology Inc. All rights reserved.

. /usr/syno/bin/synoupscommon

mkdir -p $UPS_ROOT

UPS_DRV_CURR=$UPS_ROOT"/ups_drv.curr"
UPS_DRV_LIST=$UPS_ROOT"/ups_drv.list"
UPS_INFO=$UPS_ROOT"/ups.info"
UPS_DRV_BIN_NAME=""
UPS_VENDER_ID=""
UPS_PROD_ID=""
UPS_CONF="/usr/syno/etc/ups/ups.conf"
SUPPORT_XA=`/bin/get_key_value /etc/synoinfo.conf support_xa`

{
flock -x 58

SwitchConf2Usb() {
	/bin/sed -i "s/^\tport = .*/\tport = auto/" $UPS_CONF
	/bin/sed -i "s/.*community = .*/\t#community = /" $UPS_CONF
	/bin/sed -i "s/.*snmp_version = .*/\t#snmp_version = v2c/" $UPS_CONF
	/bin/sed -i "s/.*mibs = .*/\t#mibs = /" $UPS_CONF
	/bin/sed -i "s/.*secName = .*/\t#secName = /" $UPS_CONF
	/bin/sed -i "s/.*secLevel = .*/\t#secLevel = /" $UPS_CONF
	/bin/sed -i "s/.*authProtocol = .*/\t#authProtocol = /" $UPS_CONF
	/bin/sed -i "s/.*authPassword = .*/\t#authPassword = /" $UPS_CONF
	/bin/sed -i "s/.*privProtocol = .*/\t#privProtocol = /" $UPS_CONF
	/bin/sed -i "s/.*privPassword = .*/\t#privPassword = /" $UPS_CONF
}

IsDrvAlive() {
	if [ ! -e $UPS_DRV_CURR ]; then
		return 1
	fi
	local CUR_DRV=`cat ${UPS_DRV_CURR}`
	local cntDrv=`ps -aux |grep ${CUR_DRV}| grep -cv grep`
	if [ $cntDrv -gt 0 ]; then
		return 0
	else
		return 1
	fi
}

GetDrv() {
	if [ ! -e $UPS_DRV_LIST ]; then
		cp -af $NUTSCAN_USB_H $UPS_DRV_LIST
	fi
	# { 0x0001, 0x0000, "blazer_usb" }
	eval UPS_DRV_BIN_NAME=`grep -r "0x$1, 0x$2," ${UPS_DRV_LIST} |cut -d " " -f 4`
	if [ "x" != "x$UPS_DRV_BIN_NAME" ]; then
		return 0
	else
		return 1
	fi
}

DetectDrv() {
	local count_dev=`cat /proc/bus/usb/devices|grep -c P:`
	local sDev=''
	local i=-1
	for i in `seq 1 1 $count_dev`; do
		sDev=`cat /proc/bus/usb/devices|grep P:|sed -n "${i}p"`
		eval `echo $sDev| awk '{print $2}'` #Vendor=xxxx
		eval `echo $sDev| awk '{print $3}'` #ProdID=xxxx
		GetDrv ${Vendor} ${ProdID}
		if [ $? -eq 0 ]; then
			return 0
		fi
	done
	return 1
}

SaveDrv() {
#	grep 'driver =' $UPS_CONF|grep -v ^#|cut -d '=' -f 2|sed 's/^[[:space:]]*\(.*\)[[:space:]]*$/\1/' > $UPS_DRV_CURR
	/usr/syno/bin/synogetkeyvalue $UPS_CONF driver > $UPS_DRV_CURR
}

StartDrv() { #param: DRV_NAME
	sed -i "s/^\tdriver.*/\tdriver = $1/" $UPS_CONF
	/usr/bin/upsdrvctl ${ARG_PRODUCT} start

	if [ $? -ne 0 ]; then
		return 255
	fi
	return 0
}

StartAllDrv() {
	local DRV_LIST="usbhid-ups blazer_usb bcmxcp_usb richcomm_usb tripplite_usb"
	local iRet=1

	DetectDrv
	if [ $? -eq 0 ]; then
		StartDrv $UPS_DRV_BIN_NAME
		if [ $? -eq 0 ]; then
			DRV_NAME=$UPS_DRV_BIN_NAME
			return 0
		fi
	fi

	for URV in ${DRV_LIST}; do
		StartDrv $URV
		iRet=$?
		if [ $iRet -eq 0 ]; then
			DRV_NAME=$UPS_DRV_BIN_NAME
			break
		fi
	done

	if [ $iRet -ne 0 ]; then
		return 255
	fi
	return 0
}

StartUps() { #param: DRV_NAME
	DRV_NAME=$1
	local i=-1
	for i in `seq 1 1 3`; do
		IsDrvAlive
		if [ 1 -eq $? ]; then
			if [ "xusb" != "x${UpsMode}" ]; then
				StopUps
				SwitchConf2Usb
			fi
			if [ "x" == "x${DRV_NAME}" ]; then
				StartAllDrv
			else
				StartDrv $DRV_NAME
			fi
			if [ 0 -ne $? ]; then
				ShowLog "This UPS is not supported. product=[$PRODUCT], cmd=[$ARG_PRODUCT]"
				if [ $i -eq 3 ]; then
					return 255
				fi
			else
				ShowLog "The UPS is connected. driver=[$DRV_NAME]"
				SaveDrv
				break
			fi
		else
			ShowLog "UPS driver alive"
			if [ $i -eq 3 ]; then
				return 1
			fi
		fi
		sleep 3
	done

	# Slave enabled -> Master, disable both
	if [ $SlaveEnabled -eq 1 ] || [ "xusb" != "x${UpsMode}" ]; then
		/usr/syno/bin/synosetkeyvalue $SYNOINFO_CONF ups_enabled no
		/usr/syno/bin/synosetkeyvalue $SYNOINFO_CONF upsslave_enabled no
		MasterEnabled=0
		SlaveEnabled=0
	fi

	/usr/syno/bin/synosetkeyvalue $SYNOINFO_CONF ups_mode usb
	/usr/syno/bin/synosetkeyvalue $UPS_INFO upsmaster yes

	UPSWaitTime=`/bin/get_key_value $SYNOINFO_CONF ups_wait_time`
	/bin/sed -i "/^AT ONBATT/d" $UPSSCHED_CONF
	echo "AT ONBATT * EXECUTE onbatt" >> $UPSSCHED_CONF
	if [ "x$UPSWaitTime" != "x" ]; then
		echo "AT ONBATT * START-TIMER fsd ${UPSWaitTime}" >> $UPSSCHED_CONF
	fi

	echo "Start UPS Server"
	StartServer
	# Server daemon init time
	sleep 1

	if [ $MasterEnabled -eq 1 ]; then
		echo "Start UPS client"
		CheckUpsmonConf "local"
		StartClient
	fi
	return 0
}

if [ "$SUPPORT_XA" == "yes" ]; then
	exit 0
fi

case "$1" in
start)
	if [ -d $UPS_ROOT ]; then
		rm -rf $UPS_ROOT/*
	fi
	if [ "$PRODUCT" != "" ]; then
		UPS_VENDER_ID=`echo ${PRODUCT} | awk -F/ '{printf("%04s", $1);}' | sed 's: :0:g'`
		UPS_PROD_ID=`echo ${PRODUCT} | awk -F/ '{printf("%04s", $2);}' | sed 's: :0:g'`

		GetDrv $UPS_VENDER_ID $UPS_PROD_ID
		if [ 0 -eq $? ]; then
			StartUps $UPS_DRV_BIN_NAME
			if [ 0 -eq $? ]; then
				ShowLog "$0 $1 invoked."
			fi
		fi
	else
		StartUps
		if [ 0 -eq $? ]; then
			ShowLog "$0 $1 invoked."
		fi
	fi
	;;
stop)
    synobootseq --is-safe-shutdown
    if [ 0 -ne $? ]; then 
    	StopUps
		if [ 0 -eq $? ]; then
	    	/usr/syno/bin/synosetkeyvalue $UPS_INFO upsmaster no
			ShowLog "$0 $1 invoked."
		else
			ShowLog "$0 $1 failed."
		fi
    fi
	;;
restart)
	ShowLog "$0 $1 invoked."

	StopUps
	WaitStop
	StartUps
	;;
esac

flock -u 58
} 58<>$UPS_LOCK