blob: 779399305756b23640de6b88e839a3a15e364af7 [file] [log] [blame]
#!/bin/sh
. /etc/utils.sh
LEDPATTERN="ledpattern /etc/ledpatterns"
SYSFS_GPON_PATH="/sys/devices/platform/gpon"
MONITOR_PATH="/tmp/gpio/ledcontrol"
LASER_STATUS_FILE="/tmp/laser_i2c_status"
ALARM_GPON_FILE="$SYSFS_GPON_PATH/info/alarmGpon"
GPON_INFO_FILE="$SYSFS_GPON_PATH/info/infoGpon"
HALTED_FILE="$MONITOR_PATH/halted"
HW_FAILURE="$MONITOR_PATH/hardware_failure"
LASER_CHANNEL_FILE="$SYSFS_GPON_PATH/misc/laserChannel"
ACS_FILE="$MONITOR_PATH/acsconnected"
PlayPatternAndExit()
{
state="$1"
# ledpattern takes care of all the LED management and state selection.
result="$($LEDPATTERN $state)"
if [ "$?" -ne 0 ]; then
echo "Failed to display pattern $state: $result"
exit 1
fi
exit 0
}
if [ ! -f "$ALARM_GPON_FILE" ]; then
echo "$ALARM_GPON_FILE does not exist"
PlayPatternAndExit UNKNOWN_ERROR
fi
if [ ! -f "$GPON_INFO_FILE" ]; then
echo "$GPON_INFO_FILE does not exist"
PlayPatternAndExit UNKNOWN_ERROR
fi
if [ ! -f "$LASER_CHANNEL_FILE" ]; then
echo "$LASER_CHANNEL_FILE does not exist"
PlayPatternAndExit UNKNOWN_ERROR
fi
# It is a valid state that there may not be a LASER_STATUS_FILE yet.
if [ -f "$LASER_STATUS_FILE" ]; then
laser_status=$(cat "$LASER_STATUS_FILE")
if [ "$laser_status" -ne 0 ]; then
# Blink out requested laser channel that we failed to tune to
laser_channel=$(cat "$LASER_CHANNEL_FILE")
if [ "$laser_channel" -eq -1 ]; then
echo "$LASER_STATUS_FILE indicates success but there is no requested
channel in $LASER_CHANNEL_FILE"
PlayPatternAndExit UNKNOWN_ERROR
fi
echo "Playing SET_LASER_FAILED_${laser_channel} pattern"
PlayPatternAndExit "SET_LASER_FAILED_${laser_channel}"
fi
fi
if [ -f "$HW_FAILURE" ]; then
echo "Playing HALTED pattern on HW_FAILURE"
PlayPatternAndExit HALTED
fi
if [ -f "$HALTED_FILE" ]; then
echo "Playing HALTED pattern on HALTED_FILE"
PlayPatternAndExit HALTED
fi
# Chop the table headers off the output using tail, otherwise grep gets
# confused later.
alarm_info=$(cat "$ALARM_GPON_FILE" | tail -n+7)
los_output=$(echo "$alarm_info" | grep "LOS" | grep "ON")
lof_output=$(echo "$alarm_info" | grep "LOF" | grep "ON")
if [ -n "$los_output" ] || [ -n "$lof_output" ]; then
echo "Playing LOSLOF_ALARM pattern"
PlayPatternAndExit LOSLOF_ALARM
fi
other_alarm=$(echo "$alarm_info" | grep "ON")
if [ -n "$other_alarm" ]; then
echo "Playing OTHER_ALARM pattern"
PlayPatternAndExit OTHER_ALARM
fi
gpon_info=$(cat "$GPON_INFO_FILE" | grep "ONU STATE")
if contains "$gpon_info" "INITIAL"; then
echo "Playing GPON_INITIAL pattern"
PlayPatternAndExit GPON_INITIAL
elif contains "$gpon_info" "STANDBY"; then
echo "Playing GPON_STANDBY pattern"
PlayPatternAndExit GPON_STANDBY
elif contains "$gpon_info" "SERIAL"; then
echo "Playing GPON_SERIAL pattern"
PlayPatternAndExit GPON_SERIAL
elif contains "$gpon_info" "RANGING"; then
echo "Playing GPON_RANGING pattern"
PlayPatternAndExit GPON_RANGING
fi
# GFLT110 does not have tuneable laser
tuneable_laser="false"
if startswith "$(cat /etc/platform)" "GFLT3"; then
tuneable_laser="true"
fi
if [ "$tuneable_laser" = false ]; then
if [ ! -f "$ACS_FILE" ]; then
echo "Playing WAIT_ACS pattern"
PlayPatternAndExit WAIT_ACS
else
echo "Playing ALL_OK pattern"
PlayPatternAndExit ALL_OK
fi
else
laser_channel=$(cat "$LASER_CHANNEL_FILE")
if [ ! -f "$ACS_FILE" ] && [ "$laser_channel" -eq "-1" ]; then
echo "Playing NO_LASER_CHANNEL pattern"
PlayPatternAndExit NO_LASER_CHANNEL
elif [ ! -f "$ACS_FILE" ] && [ "$laser_channel" -ne "-1" ]; then
echo "Playing WAIT_ACS pattern"
PlayPatternAndExit WAIT_ACS
elif [ -f "$ACS_FILE" ] && [ "$laser_channel" -eq "-1" ]; then
echo "Has ACS but no laser channel"
echo "Playing NO_LASER_CHANNEL pattern"
PlayPatternAndExit NO_LASER_CHANNEL
else
echo "Playing ALL_OK pattern"
PlayPatternAndExit ALL_OK
fi
fi