#!/bin/sh

# Copyright (c) 2010 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.

XAUTH=/usr/bin/xauth
XAUTH_FILE=/home/chronos/.Xauthority
SERVER_READY=
DISPLAY=":0"

SUITE_FACTORY="$(dirname "$0")"/../../site_tests/suite_Factory
BOARD_SETUP="$(readlink -f "$SUITE_FACTORY")/board_setup_x.sh"

# Default X server parameters
X_ARG="-r -s 0 -p 0 -dpms -nolisten tcp vt01 -auth ${XAUTH_FILE}"

board_pre_setup() {
  true
}

board_post_setup() {
  true
}

setup_xauth() {
  MCOOKIE=$(head -c 8 /dev/urandom | openssl md5)
  ${XAUTH} -q -f ${XAUTH_FILE} add ${DISPLAY} . ${MCOOKIE}
}

setup_cursor() {
  # The following logic is copied from /sbin/xstart.sh to initialize the
  # touchpad device adequately.
  if [ -d /home/chronos -a ! -f /home/chronos/.syntp_enable ] ; then
    # serio_rawN devices come from the udev rules for the Synaptics binary
    # driver throwing the PS/2 interface into raw mode.  If we find any
    # that are TP devices, put them back into normal mode to use the default
    # driver instead.
    for P in /sys/class/misc/serio_raw*
    do
      # Note: It's OK if globbing fails, since the next line will drop us out
      udevadm info -q env -p $P | grep -q ID_INPUT_TOUCHPAD=1 || continue
      # Rescan everything; things that don't have another driver will just
      # restart in serio_rawN mode again, since they won't be looking for
      # the disable in their udev rules.
      SERIAL_DEVICE=/sys$(dirname $(dirname $(udevadm info -q path -p $P)))
      echo -n "rescan" > ${SERIAL_DEVICE}/drvctl
    done
  else
    udevadm trigger
    udevadm settle
  fi
}

user1_handler () {
  echo "X server ready..." 1>&2
  SERVER_READY=y
}

start_x_server() {
  trap user1_handler USR1
  /bin/sh -c "
    trap '' USR1 TTOU TTIN
    exec /usr/bin/X $X_ARG 2>/var/log/factory.X.log" &

  while [ -z ${SERVER_READY} ]; do
    sleep .1
  done
}

# Load board-specific parameters, and override any startup procedures.
if [ -s $BOARD_SETUP ]; then
  echo "Loading board-specific X parameters..." 1>&2
  . $BOARD_SETUP
fi

board_pre_setup

setup_xauth
setup_cursor

start_x_server

export DISPLAY=${DISPLAY}
export XAUTHORITY=${XAUTH_FILE}

board_post_setup

/sbin/initctl emit factory-ui-started
cat /proc/uptime > /tmp/uptime-x-started

echo "export DISPLAY=${DISPLAY}"
echo "export XAUTHORITY=${XAUTH_FILE}"
