| #!/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 |
| |