#!/bin/sh

clear
NO_CLEAR=""
if [ "$1" = "--no-clear" ]; then
  NO_CLEAR="yes"
fi

if [ "$1" = "help" ]; then
  echo "Galep5M Inbetriebnahme"
  echo
  echo "  --no-clear         - Bildschirm bei Benachrichtigungen nicht loeschen."
  echo
  echo
  echo
  exit 0
fi

# $1 - Error string
# $2 - Error number
error()
{
  echo
  echo
  echo
  echo
  echo
  echo "#########################>>> ERROR / FEHLER <<<######"
  echo "#                                                   #"
  echo "# Error: "$2"                                       #"
  echo "#                                                   #"
  echo "#####################################################"
  echo
  echo
  echo "$1"
  echo
  echo
  REPEAT=""
  CANCEL=""
  while [ true ]; do
    echo -n "R = Wiederholen / C = Abbrechen: "
    read x
    if [ "$x" = "R" ]; then
      REPEAT=yes
      break;
    fi
    if [ "$x" = "r" ]; then
      REPEAT=yes
      break;
    fi
    if [ "$x" = "C" ]; then
      CANCEL="yes"
      break;
    fi
    if [ "$x" = "c" ]; then
      CANCEL="yes"
      break;
    fi
  done;
}

waitUser()
{
  if [ -z "$NO_CLEAR" ]; then
    clear
  fi
  echo
  echo
  echo
  echo ">>> Please confirm  / Bitte bestaetigen <<<"
  echo
  echo -e "$1"
  echo
  echo "Fortsetzen mit Return-Taste."
  echo
  read x
}





echo "********************************************"
echo "*        GALEP5M  Inbetriebnahme           *"
echo "********************************************"
echo
echo


echo "(1) PMU test."





# (1) PMU Test...
PMUInit=""

while [ true ]; do

  if ! pmuTest --initialized 2>/dev/null; then
    echo "Setting up PMU..."
    echo "After the PMU has been configured please shutdown the device."
    if ! pmuInit /fw/pmu.bin; then
      error "PMU Initialization failed!", "#010"
      if [ ! -z "$REPEAT" ]; then
        continue;
      fi
      exit 1
    fi
    PMUInit="true"
    waitUser "Denk daran, dass die Widerstaende R34 und R28* nach dem Ausschalten entfernt werden muessen!"
    # We remove the resistors later...
  fi
  break;
done;



# (2) PS Init...
echo "(2) Power Supplies test."
waitUser "Bitte die Powerplatine aufstecken.\nDabei darauf achten, dass moeglichst alle Pins gleichzeitig kontakt erhalten."
waitUser "Stromaufnahme pruefen!\nIst der Wert groesser 350mA SOFORT Stecker ziehen!"


while [ true ]; do
  if ! psTest --initialized; then
    echo "Setting up Power Supplies..."
    psInit /fw/G5_Power.bin

    if ! psTest --initialized; then
      error "Erros while setting up power supplies!", "#020"
      if [ ! -z "$REPEAT" ]; then
        continue;
      fi
      exit 1
    fi
  fi
  break;
done;


while [ true ]; do
  let try=0
  while pmuTest --is-dc ; do
    let try=try+1
    waitUser "Bitte das DC-Kabel am Galep entfernen!\nBetrieb nur aus USB-Versorgung herstellen!"
    if [ $try -eq 3 ]; then
      error "Eingangsspannung laesst sich nicht messen!", "#021"
      if [ ! -z "$REPEAT" ]; then
        continue;
      fi
      exit 1
    fi
  done
  break;
done;


echo "(2.1) Checking power supplies using USB supply. (uncalibrated)."
while [ true ]; do
  if ! psCheck --is-pd-installed 2>/dev/null; then
    echo "      Test skipped."
    echo "      Dieser Test kann nur ausgefuehrt werden, wenn keine Pintreiberplatine installiert ist!"
  else
    if ! psCheck --test; then
      error "PS-Check (uncalibrated; USB only) failed!", "#022"
      if [ ! -z "$REPEAT" ]; then
        continue;
      fi
      exit 1
    fi
  fi
  break;
done;


while [ true ]; do
  let try=0
  while ! pmuTest --is-dc ; do
    let try=try+1
    waitUser "Bitte den Galep mit DC-Kabel verbinden!\nBetrieb mit DC-Kabel hersetellen!"
    if [ $try -eq 3 ]; then
      error "Eingangsspannung laesst sich nicht messen!", "#023"
      if [ ! -z "$REPEAT" ]; then
        continue;
      fi
      exit 1
    fi
  done
  break;
done;


echo "(2.2) Checking power supplies using DC supply. (uncalibrated)."
while [ true ]; do
  if ! psCheck --is-pd-installed 2>/dev/null; then
    echo "      Test skipped."
    echo "      Dieser Test kann nur ausgefuehrt werden, wenn keine Pintreiberplatine installiert ist!"
  else
    if ! psCheck --test; then
      error "PS-Check (uncalibrated; with DC) failed!", "#024"
      if [ ! -z "$REPEAT" ]; then
        continue;
      fi
      exit 1
    fi
  fi
  break;
done;








echo "(3) Pindrivers"
while [ true ]; do
  let try=0
  while psCheck --is-pd-installed 2>/dev/null; do
    waitUser "Bitte die Pintreiberplatine aufstecken.\nDarauf achten, dass die Pins moeglichst gleichzeitig Kontakt haben!"
    let try=try+1
    if [ $try -eq 3 ]; then
      error "Pintreiber Platine nicht gefunden!", "#030"
      if [ ! -z "$REPEAT" ]; then
        continue;
      fi
      exit 1
    fi
  done
  echo "Pintreiber sind installiert."
  break;
done;

waitUser "Widerstandsbruecken montieren.\nEs koennen die freien Bruecken verwendet werden oder das Galep5M Kalibriermodul in Steckrichtung B."

echo "Starting g5sc..."

while [ true ]; do
  g5sc --force; v=$?
  echo Result: $v
  if [ $v -eq 1 ]; then
    error "Pintreiber (basic) Test nicht bestanden!", "#031"
    if [ ! -z "$REPEAT" ]; then
      continue;
    fi
    exit 1
  fi
  if [ $v -eq 2 ]; then
    error "Powersupply discharge test nicht bestanden!", "#032"
    if [ ! -z "$REPEAT" ]; then
      continue;
    fi
    exit 1
  fi
  break;
done;




echo "(4) Calibration..."
waitUser "Bitte das Galep5-M Kalibriermodul in Stellung A aufsetzen.\nDabei die Richtung Pin1 beachten!\n\nAchtung!\nDas Kalibriermodul muss aus einem Labornetzteil versorgt werden (nicht aus einem Steckernetzteil!"

echo "(4.1) Calibrate..."

while [ true ]; do
  if ! psCalib --self-calib; then
    error "Kalibrierung fehlgeschlagen!", "#041"
    if [ ! -z "$REPEAT" ]; then
      continue;
    fi
    exit 1
  fi
  break;
done;

while [ true ]; do
  echo "(4.2) Check Calibration (using external supply)."
  if ! psCalib --ps-check; then
    error "Kalibriertest fehlgeschlagen!", "#042"
    if [ ! -z "$REPEAT" ]; then
      continue;
    fi
    exit 1
  fi
  break;
done;




echo "(4.3) Check calibration using USB supply."
while pmuTest --is-dc ; do
  waitUser "Bitte das DC-Kabel am Galep entfernen!\nBetrieb nur aus USB-Versorgung herstellen!"
done


echo "(4.4) Check Calibration (usb external supply)."
while [ true ]; do
  if ! psCheck --ps-check; then
    error "Kalibriertest fehlgeschlagen!", "#043"
    if [ ! -z "$REPEAT" ]; then
      continue;
    fi
    exit 1
  fi
  break;
done;



waitUser "Widerstandsbruecken montieren.\nEs koennen die freien Bruecken verwendet werden oder das Galep5M Kalibriermodul in Steckrichtung B."


echo "(5) Pintreibertest."
while [ true ]; do
  if ! G5_Test48; then
    error "Pintreibertest fehlgeschlagen!", "#050"
    if [ ! -z "$REPEAT" ]; then
      continue;
    fi
    exit 1
  fi
  break;
done;


waitUser "Inbetriebnahme erfolgreich!\nGalep kann zusammengebaut werden."


# PMU fixup...
if [ ! -z "$PMUInit" ]; then
  echo "The PMU has been reconfigured!"
  echo
  echo "Please shutdown the device and make sure the following resistors will be removed:"
  echo "  * R34"
  echo "  * R28*"
  read x
fi
