# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

description    "Displays an animation while the system is booting"
author         "chromium-os-dev@chromium.org"

# boot-splash depends on udev-trigger-early because frecon does need
# graphics device to be ready to display splash screen and tty (ptmx)
# device to create terminals, it also uses input devices (though they
# can also be hotplugged).

start on stopped udev-trigger-early

script
  . /usr/share/cros/factory_utils.sh

  if ! is_factory_installer_mode; then
    # Set the backlight to 40% of its maximum level.
    BACKLIGHT_DIR=/sys/class/backlight
    if [ -d $BACKLIGHT_DIR ] &&
       [ -n "$(find $BACKLIGHT_DIR -maxdepth 0 ! -empty)" ]; then
      backlight_tool --set_brightness_percent=40.0 || true
    fi

    ASSETS=/usr/share/chromeos-assets
    ASSETS_200=$ASSETS/images_200_percent
    ASSETS_100=$ASSETS/images_100_percent

    # Use differently-sized images depending on the framebuffer width.
    if [ -x /sbin/frecon ]; then
      if [ -e "$ASSETS_200/boot_splash_frame01.png" ]; then
        BOOT_IMAGES=""
        for image in "$ASSETS_200"/boot_splash_frame*.png; do
          BOOT_IMAGES="${BOOT_IMAGES} --image-hires ${image}"
        done
        for image in "$ASSETS_100"/boot_splash_frame*.png; do
          BOOT_IMAGES="${BOOT_IMAGES} --image ${image}"
        done
      else
        BOOT_IMAGES="$ASSETS_100"/boot_splash_frame*.png
      fi
    else
      WIDTH=$(ply-image --print-resolution | cut -d ' ' -f 1)
      if [ $WIDTH -gt 1920 -a -e "$ASSETS_200/boot_splash_frame01.png" ]; then
        BOOT_IMAGES="$ASSETS_200"/boot_splash_frame*.png
      else
        BOOT_IMAGES="$ASSETS_100"/boot_splash_frame*.png
      fi
    fi

    if is_factory_test_mode; then
      BOOT_IMAGES="${BOOT_IMAGES} /usr/local/factory/misc/boot_splash.png"
    fi

    DEV_END_USER=
    if is_developer_end_user; then
      DEV_END_USER=--dev-mode
    fi

    if [ -x /sbin/frecon ]; then
      frecon --daemon --clear 0xfffefefe $DEV_END_USER --frame-interval 25 \
        $BOOT_IMAGES
    else
      # Disable blinking cursor. Without this, a splash screen will show a
      # distinct cursor shape even when the cursor is set to none.
      echo 0 > /sys/devices/virtual/graphics/fbcon/cursor_blink

      ply-image --set-monitors --clear 0xfefefe --frame-interval 25 $BOOT_IMAGES
     fi
  fi
end script
