# 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     "Start the cromo daemon"
author          "chromium-os-dev@chromium.org"

# Carriers prefer modems to disconnect cleanly when systems are shutting
# down. cromo can take on the order of several seconds to exit. Stop the
# process on "starting pre-shutdown" so its exiting blocks the
# chromeos_shutdown script from running (jobs that "stop on stopping
# boot-services" or "stop on stopping system-services" may still be running
# in parallel with chromeos_shutdown if they do not exit quickly).
start on gobi_modem and started system-services
stop on starting pre-shutdown
kill timeout 5
respawn

pre-start script
  mkdir -p /var/run/cromo
  chown cromo:cromo /var/run/cromo

  if [ -h /var/lib/cromo ] ; then
    logger -t "$UPSTART_JOB" "removing /var/lib/cromo symlink"
    rm -f /var/lib/cromo
  fi
  mkdir -p /var/lib/cromo
  chown root:root /var/lib/cromo
  chmod 755 /var/lib/cromo

  config_group=/var/lib/cromo/madison-config-group
  if [ -h $config_group ] ; then
    logger -t "$UPSTART_JOB" "removing $config_group symlink"
    rm -f $config_group
  fi

  # Force upgrade from madison to madison-v2
  if [ -e $config_group ] ; then
    if grep -q '^madison$' $config_group ; then
      rm $config_group
    fi
  fi
  if [ ! -e $config_group ] ; then
    echo madison-v2 > $config_group
    chown chronos:cromo $config_group
    chmod 640 $config_group
  fi
end script

exec cromo

#
# post-stop cleans up (resets) any gobi devices that are listed in the
# usb-devices file.  On normal shutdown, gobi-cromo-plugin will empty
# the file and nothing will be reset.  On abnormal termination, the
# file will contain a list of devices which require a reset.
#
post-stop script
  logger -t "$UPSTART_JOB" "rebooting modems after abnormal termination"
  for dev in $(cat /var/run/cromo/usb-devices); do
    VALID='^[[:digit:].:-]\+$'
    if ! echo "$dev" | grep -q "$VALID" ; then
      logger -t "$UPSTART_JOB" "not rebooting invalid device $dev"
      continue
    fi
    if [ ! -e /sys/bus/usb/devices/$dev ] ; then
      logger -t "$UPSTART_JOB" "not rebooting missing device $dev"
      continue
    fi
    logger -t "$UPSTART_JOB" "rebooting device $dev"
    ( echo 0 > /sys/bus/usb/devices/$dev/authorized &&
      echo 1 > /sys/bus/usb/devices/$dev/authorized &&
      logger -t "$UPSTART_JOB" "rebooted device $dev" ) ||
        logger -t "$UPSTART_JOB" "failed to reboot device $dev"
  done
end script
