#!/bin/sh

#20140211
# ---- Tshering start
if [ ! -e /bin/kobo_config.sh ]; then
  PRODUCT="trilogy"
else
# ---- Tshering end
  PRODUCT=`/bin/kobo_config.sh`;
# ---- Tshering start
fi
export PRODUCT
# ---- Tshering end

[ $PRODUCT != trilogy ] && PREFIX=$PRODUCT-

mount -o remount,noatime,nodiratime /dev/mmcblk0p1 /

PLATFORM=freescale
if [ `dd if=/dev/mmcblk0 bs=512 skip=1024 count=1 | grep -c "HW CONFIG"` == 1 ]; then
  PLATFORM=ntx508
fi

if [ $PLATFORM == freescale ]; then
  if [ ! -s /lib/firmware/imx/epdc_E60_V220.fw ]; then
    mkdir -p /lib/firmware/imx
    dd if=/dev/mmcblk0 bs=512K skip=10 count=1 | zcat > /lib/firmware/imx/epdc_E60_V220.fw
    sync
  fi
fi

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/lib:
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel

for i in /proc /dev /root /tmp /sys /mnt/sd /mnt/onboard /mnt/user /var/lib /var/log /var/run /lib/modules/`uname -r`; do
  [ ! -d $i ] && mkdir -p $i
done;

/bin/mount -t proc  none  /proc
/bin/mount -t tmpfs none -o size=16m /tmp
/bin/mount -t tmpfs none /dev
/bin/mount -t tmpfs none -o size=16k /var/lib
/bin/mount -t tmpfs none -o size=16k /var/log
/bin/mount -t tmpfs none -o size=128k /var/run
/bin/mount -t sysfs none -o size=500k /sys

for i in /var/run/dbus /var/lib/dbus; do
  mkdir -p $i
done

mkfifo /tmp/nickel-hardware-status
rm -rf /etc/udev/rules.d/70-persistent-net.rules
rm -rf /mnt/onboard/.kobo
rm -rf /mnt/onboard/*

echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug
/sbin/udevd -d

[ "$(ls -s /etc/udev.tgz | awk '{print $1}')" == 0 ] && rm -rf /etc/udev.tgz
if [ $PLATFORM == freescale ] || [ ! -e /etc/udev.tgz ]; then
  /sbin/udevadm control --env=STARTUP=1
  /sbin/udevadm trigger
  /sbin/udevadm settle --timeout=2
  /sbin/udevadm control --env=STARTUP=
  [ $PLATFORM != freescale ] && tar cpzf /etc/udev.tgz /dev &
else
  zcat /etc/udev.tgz > /dev/null || ( rm -rf /etc/udev.tgz; reboot )
  tar zxf /etc/udev.tgz -C /
fi

export UBOOT_MMC=/etc/u-boot/$PLATFORM/u-boot.mmc
export UBOOT_RECOVERY=/etc/u-boot/$PLATFORM/u-boot.recovery

dosfsck -a -w /dev/mmcblk0p3
mount -t vfat -o noatime,nodiratime,shortname=mixed,utf8 /dev/mmcblk0p3 /mnt/onboard
rm -rf /mnt/onboard/fsck*
rm -rf /mnt/onboard/FSCK*
rm -rf /usr/local/Kobo/db.tgz

echo -n 8192 > /proc/sys/vm/min_free_kbytes
echo -n 67108864 > /proc/sys/kernel/shmmax

# ---- Tshering start
isarmhf="FALSE"
newpickelversion="FALSE"
if  [ $(strings /usr/local/Kobo/pickel | grep -c ld-linux-armhf.so) -ge 1 ]; then
  isarmhf="TRUE"
  if [ $(strings /usr/local/Kobo/pickel | grep -c can-upgrade) -ge 1 ]; then
    newpickelversion="TRUE"
  fi
fi
# ---- Tshering end

# ---- Tshering start
#  /usr/local/Kobo/pickel can-upgrade
#  CAN_UPGRADE=$?
# ---- Tshering end


if [ ! -e /mnt/onboard/.kobo ]; then
  mkdir -p /mnt/onboard/.kobo
fi

# ---- Tshering start
INTERFACE=wlan0
WIFI_MODULE=ar6000
if [ $PLATFORM == ntx508 ]; then
  INTERFACE=eth0
  WIFI_MODULE=dhd
fi

export INTERFACE
export WIFI_MODULE

#export QWS_MOUSE_PROTO="tslib_nocal:/dev/input/event1"
#export QWS_KEYBOARD=imx508kbd:/dev/input/event0
#export QWS_DISPLAY=Transformed:imx508:Rot90
export NICKEL_HOME=/mnt/onboard/.kobo
#export LD_LIBRARY_PATH=/usr/local/Kobo
export WIFI_MODULE_PATH=/drivers/$PLATFORM/wifi/$WIFI_MODULE.ko
export LANG=en_US.UTF-8

/bin/dbus-uuidgen > /var/lib/dbus/machine-id
/bin/dbus-daemon --system &
export DBUS_SESSION_BUS_ADDRESS=`/bin/dbus-daemon --session --print-address --fork`
export PLATFORM
# ---- Tshering end



# ---------------- Tshering: insert menu begin
kbmenudir=/mnt/onboard/.kobo/kbmenu
installUpdate="TRUE"
preserveRcS="FALSE"
if [ "$isarmhf" == "TRUE" ] && [ "$(sh $kbmenudir/onstart/checkinstall.sh)" == "ok" ]; then
# switch off leds begin
  echo "ch 4" > /sys/devices/platform/pmic_light.1/lit
  echo "cur 0" > /sys/devices/platform/pmic_light.1/lit
  echo "dc 0" > /sys/devices/platform/pmic_light.1/lit
#switch off leds end
  export kobomenuFontsize=40
  export kobomenuMenuBarFontsize=25

  if [ -e $kbmenudir/usersettings.txt ]; then
    checkscript=$(sh -n $kbmenudir/usersettings.txt 2>&1)
    if [ "$checkscript" == "" ]; then
      . $kbmenudir/usersettings.txt
    fi
  fi

  if [ "$PRODUCT" == "dragon" ]; then
      sh $kbmenudir/kobomenu.sh -autoselectafter=0
  fi

  pwfile="$kbmenudir/kbbouncer/bouncerpw.txt"
  if [ -e $pwfile ] && [ "$(sh $kbmenudir/onstart/checkbouncerinstall.sh)" == "ok" ]; then
    export KBBouncerMode=
    bouncer=$kbmenudir/kbbouncer/kbbouncer.sh
    pw=$(cat $pwfile)
    answer=""
    pwcount=0
    while [ "$answer" != "passed" ] && [ $pwcount -lt 3 ]; do
      answer=$(sh $bouncer "$pw")
      let pwcount++
    done
    if [ "$answer" == "failed" ]; then
      sh $kbmenudir/onstart/poweroff.sh
    fi
  fi

  setoptions() {
    moptions="info:help"
    mupdateoptions=""
    if [ -e /mnt/onboard/.kobo/Kobo.tgz ] || [ -e /mnt/onboard/.kobo/KoboRoot.tgz ]; then
      installUpdate="FALSE"
      moptions="$moptions handle_update:gear.png "
      if [ -e /mnt/onboard/.kobo/KoboRoot.tgz ]; then
        mupdateoptions="$mupdateoptions install_partial_update:execute.png"
      fi
      mupdateoptions="$mupdateoptions install_update:execute.png"
      mupdateoptions="$mupdateoptions delete_update:execute.png"
      mupdateoptions="$mupdateoptions return"
    fi

    moptions="$moptions start_nickel:book.png"

    if [ -e /mnt/onboard/.kobo/koreader/reader.lua ]; then
      moptions="$moptions start_koreader:book.png"
    fi

    if [ -e /mnt/onboard/.kobo/KoboLauncher/launcher ]; then
      moptions="$moptions start_kobolauncher:rocket.png"
    fi
    if [ -e /mnt/onboard/.kobo/vlasovsoft/launcher ]; then
      moptions="$moptions start_vlasovsoftlauncher:rocket.png"
    fi
    if [ "$enablerotation" == "TRUE" ]; then
      moptions="$moptions toggle_rotation:toggle.png"
    fi
    moptions="$moptions usb:usb.png scripts:menu.png sleep:moon reboot:restart.png power_off:poweroff.png"
  }

  mrotation="90"
  export mrotation
#---- do the menu loop
  selection=""
  while [ "$selection" != "EXIT" ]; do
    setoptions
    selection=$(sh $kbmenudir/kobomenu.sh $moptions)
    case $selection in
      info )
        sh $kbmenudir/kbmessage.sh "-f $kbmenudir/txt/start_info.html"
        ;;
      handle_update )
        binfo="capacity: `cat /sys/devices/platform/pmic_battery.1/power_supply/mc13892_bat/capacity`"
        binfo=${binfo// /_}
        updateselection=$(sh $kbmenudir/kobomenu.sh -infolines=1 "-infotext=$binfo" $mupdateoptions)
        case $updateselection in
          install_update )
            installUpdate="TRUE"
            preserveRcS="FALSE"
            selection="EXIT"
            ;;
          install_partial_update )
            installUpdate="TRUE"
            preserveRcS="TRUE"
            selection="EXIT"
            ;;
          delete_update )
            rm -f /mnt/onboard/.kobo/KoboRoot.tgz
            rm -f /mnt/onboard/.kobo/Kobo.tgz
            rm -rf /mnt/onboard/.kobo/upgrade
            rm -f /mnt/onboard/manifest.md5sum
            ;;
          return )
            updateselection=""
            ;;
        esac
        ;;
      toggle_rotation )
        if [ "$mrotation" == "0" ]; then
          mrotation="90"
        elif [ "$mrotation" == "90" ]; then
          mrotation="180"
        elif [ "$mrotation" == "180" ]; then
          mrotation="270"
        elif [ "$mrotation" == "270" ]; then
          mrotation="0"
        fi
        export mrotation
        ;;
      start_nickel )
        sh $kbmenudir/onstart/startreader.sh
        ;;
      power_off )
        sh $kbmenudir/onstart/poweroff.sh
        ;;
      sleep )
        sh $kbmenudir/onstart/suspend.sh
        ;;
      reboot )
        reboot
        ;;
      usb )
        sh $kbmenudir/onstart/scriptmenuusb.sh $kbmenudir/usb
        ;;
      scripts )
        sh $kbmenudir/helpers/list_shscripts.msh $kbmenudir/scripts
        ;;
      start_koreader )
        sh $kbmenudir/onstart/koreader_kobo.sh
        ;;
      start_kobolauncher )
        sh $kbmenudir/onstart/start_KoboLauncherA.sh
        ;;
      start_vlasovsoftlauncher )
        sh $kbmenudir/onstart/start_vlasovlauncher.sh
        ;;
    esac
  done
fi
# ---------------- Tshering: insert menu end


# Tshering: begin
if [ "$installUpdate" == "TRUE" ]; then
  if [ "$newpickelversion" == "TRUE" ]; then
    /usr/local/Kobo/pickel can-upgrade
    CAN_UPGRADE=$?
  else
    CAN_UPGRADE=1
  fi
# Tshering: end

  if [ $CAN_UPGRADE == 1 ] && [ -e /mnt/onboard/.kobo/Kobo.tgz ]; then
    zcat /mnt/onboard/.kobo/Kobo.tgz > /dev/null && tar zxf /mnt/onboard/.kobo/Kobo.tgz -C /usr/local/Kobo/ && ( cat /usr/local/Kobo/revinfo >> /usr/local/Kobo/install.log )
    rm /mnt/onboard/.kobo/Kobo.tgz
    echo "Done upgrading..."
  fi
                               
  if [ $CAN_UPGRADE == 1 ] && [ -e /mnt/onboard/.kobo/KoboRoot.tgz ]; then
    zcat /etc/images/$PREFIX\ghostbuster.raw.gz | /usr/local/Kobo/pickel showpic
    /etc/init.d/update-animator.sh &
# Tshering: begin
    if [ "$preserveRcS" == "TRUE"  ]; then
      zcat /mnt/onboard/.kobo/KoboRoot.tgz > /dev/null && tar --exclude='*/local/Kobo/udev/usb' --exclude='*/init.d/rcS' -zxf /mnt/onboard/.kobo/KoboRoot.tgz -C / && ( cat /usr/local/Kobo/revinfo >> /usr/local/Kobo/install.log )
    else
# Tshering: end
      zcat /mnt/onboard/.kobo/KoboRoot.tgz > /dev/null && tar zxf /mnt/onboard/.kobo/KoboRoot.tgz -C / && ( cat /usr/local/Kobo/revinfo >> /usr/local/Kobo/install.log )
# Tshering: begin
    fi
# Tshering: end



    if [ -e /mnt/onboard/.kobo/upgrade ]; then
      /etc/init.d/upgrade-wifi.sh
      rm -rf /mnt/onboard/.kobo/upgrade
    fi
    rm /mnt/onboard/.kobo/KoboRoot.tgz
    killall update-animator.sh
    echo "Done upgrading..."

    zcat /etc/images/$PREFIX\ghostbuster.raw.gz | /usr/local/Kobo/pickel showpic
    zcat /etc/images/$PREFIX\reboot.raw.gz | /usr/local/Kobo/pickel showpic
    sync
    reboot
  fi

# Tshering: begin
fi
# Tshering: end

( usleep 400000; /etc/init.d/on-animator.sh ) &

(
/usr/local/Kobo/pickel disable.rtc.alarm

if [ ! -e /etc/wpa_supplicant/wpa_supplicant.conf ]; then
  cp /etc/wpa_supplicant/wpa_supplicant.conf.template /etc/wpa_supplicant/wpa_supplicant.conf
fi

echo 1 > /sys/devices/platform/mxc_dvfs_core.0/enable

/sbin/hwclock -s -u
) &


INTERFACE=wlan0
WIFI_MODULE=ar6000
if [ $PLATFORM == ntx508 ]; then
  INTERFACE=eth0
  WIFI_MODULE=dhd
fi

export INTERFACE
export WIFI_MODULE

export QWS_MOUSE_PROTO="tslib_nocal:/dev/input/event1"
export QWS_KEYBOARD=imx508kbd:/dev/input/event0
export QWS_DISPLAY=Transformed:imx508:Rot90
export NICKEL_HOME=/mnt/onboard/.kobo
export LD_LIBRARY_PATH=/usr/local/Kobo
export WIFI_MODULE_PATH=/drivers/$PLATFORM/wifi/$WIFI_MODULE.ko
export LANG=en_US.UTF-8

/bin/dbus-uuidgen > /var/lib/dbus/machine-id
/bin/dbus-daemon --system &
export DBUS_SESSION_BUS_ADDRESS=`/bin/dbus-daemon --session --print-address --fork`

/usr/local/Kobo/hindenburg &
LD_PRELOAD=/root/screenInv.so /usr/local/Kobo/nickel -qws -skipFontLoad &
[ $PLATFORM != freescale ] && rm -rf /dev/mmcblk1* && udevadm trigger &
