#! /bin/sh
##################################################################################

#. /etc/init.d/rc.conf

##################################################################################
# install results:
##################################################################################
export INSTALL_SUCCESS_NO_REBOOT=0
export INSTALL_SUCCESS_REBOOT=1
export INSTALL_WRONG_HARDWARE=2
export INSTALL_KERNEL_CHECKSUM=3
export INSTALL_FILESYSTEM_CHECKSUM=4
export INSTALL_URLADER_CHECKSUM=5
export INSTALL_OTHER_ERROR=6
export INSTALL_FIRMWARE_VERSION=7

##################################################################################
echo "install: check and install new firmware ..."

LED_DEVICE=/proc/led_mod/led
if [ ! -f /proc/led_mod/led  ] ; then
    LED_DEVICE=/var/led 
    echo "set led: ${LED_DEVICE}"
fi

need_reboot=$INSTALL_SUCCESS_NO_REBOOT
korrekt_version=0

##################################################################################
# Power LED blinken lassen
##################################################################################
echo "set INFO led to blink (modul=7, state=4)"
echo 7,4>${LED_DEVICE}




##################################################################################
# ACHTUNG ACHTUNG ACHTUNG Memory Layout prfen Entfaellt!!!
# Ggfs. ist ein Urlader- bzw. Memorylayout-Update erforderlich!
##################################################################################
#
# ANM.: Das Handling von alten Gerten ohne Installtype ist nunmehr etwas intransparent...
#
#       Erluterung:
#           Updateversuche auf alte Gerte ohne Installtype erzeugen bereits bei der 
#           Memorylayoutprfung einen Fehler, falls diese Firmware die Falsche fr das alte Gert ist! 
#
#       Fehlerdetektion: 
#           1.) Es gibt zwei Arten von altem Memorylayout mit jeweils eindeutigem Merkmal (s.u.).
#               Wenn das Gert eines mit altem Layout ist, mu auch die fr das Merkmal erwartete 
#               "install-XMB-urlader" Datei in der ankommenden FW vorliegen. 
#           2.) Falls es daran nicht scheitert so stimmt der erwartete Urlader nicht mit 
#               dem mitgelieferten berein. (In der "install-XMB-urlader" Datei wird der erwartete
#               aus der HWRevision des alten Gertes ermittelt und als verfgbar vorausgesetzt). 
#               [ Dieser Fall knnte bei hausinternen verwendeten alten 'FRITZ!Box FON' - mit FW die 
#                 nicht aus echten Releases stammt - auftreten, da diese dasselbe Merkmal 
#                 wie alte 'FRITZ!Box' haben.]
#
#       Voraussetzung fr diese Vorgehensweise ist: 
#           Nur Gerte mit altem Memorylayout haben ggfs. keinen Installtype.
#           Das trifft auf echte Releases von 'FRITZ!Box' (< 05.02.78) und 'FRITZ!Box SL' (< 05.01.70) zu.
#           Alle echten Releases anderer Gerte haben bereits einen Installtype.
#
#       >>> Somit darf die nachfolgende Installtype-Prfung 
#       >>> immer von der Existenz des Installtypes ausgehen!
#
##################################################################################
#if [ -e /dev/mtdblock/5 ] ; then
#    echo "altes 4MB Memory layout, mtd5 existiert"
#    exit $INSTALL_FIRMWARE_VERSION	# altes MemoryLayout wird nicht mehr untersttzt, Umweg ueber Zwischenupdate
#fi 
#
#if [ ! -e /dev/mtdblock/4 ] ; then
#    echo "altes 2MB Memory layout, mtd4 existiert nicht"
#    exit $INSTALL_FIRMWARE_VERSION	# altes MemoryLayout wird nicht mehr untersttzt, Umweg ueber Zwischenupdate
#fi 

##################################################################################
#       Die nachfolgende Installtype-Prfung darf
#       immer von der Existenz des Installtypes ausgehen! (s.o.)
#
#       ANM.: Bei alten Gerten ohne Installtype, welche mit korrekter FW geupdatet werden sollen
#       liefert die nachfolgende Installtype-Prfung via '/etc/version --install=xyz'  immer 'TRUE', 
#       da sich in /etc/version der CASE ohne default-Tag bei nichtexistentem Tag leider so verhlt.
#       Das ist bei alten FW-Versionen noch der Fall und wird hiermit toleriert.
##################################################################################
################################
# list of accepted installtypes:
################################
echo OEM=$OEM
case `uname -r` in
    2.4*)
        echo "install: have Kernel 2.4";
        exit $INSTALL_FIRMWARE_VERSION
        ;;
    2.6*)
        echo "install: have Kernel 2.6";
        ;;
    *)
        exit $INSTALL_OTHER_ERROR
        ;;
esac
# export ANNEX=`cat /proc/sys/urlader/annex`
# if [ -z "${ANNEX}" ] ; then echo ANNEX=${ANNEX} not supported ; exit $INSTALL_WRONG_HARDWARE ; fi
echo ANNEX=$ANNEX
# Fritz_Box_7150
if [ -z "$DISABLE_Fritz_Box_7150" ] ; then
   echo testing acceptance for device Fritz_Box_7150 ...
   if /etc/version --install=ar7_8MB_xilinx_1eth_0ab_pots_isdn_te_usb_host_wlan_dect_57042 ; then
       echo device has installtype ar7_8MB_xilinx_1eth_0ab_pots_isdn_te_usb_host_wlan_dect_57042
#       # passt der ANNEX ?
#       accept_annex=B
#       echo assumed ANNEX ${accept_annex} -- found ANNEX "${ANNEX}"
#       if [ "${accept_annex}" = "${ANNEX}" ] ; then
#           echo device has ANNEX ${ANNEX}
#           # passt der OEM ?
#           echo OK - accept this update for device Fritz_Box_7150 ...
#           korrekt_version=1
#       fi
       korrekt_version=1
   fi
   echo testing acceptance for device Fritz_Box_7150 done
fi

if [ $korrekt_version = 0 ] ; then
    echo "error: installype not korrket"
    echo "set INFO led to off (modul=7, state=1)"
    echo 7,1>${LED_DEVICE}
    exit $INSTALL_WRONG_HARDWARE # warum auch immer: fr diese Gert wird die FW abgelehnt
fi

##################################################################################
# OK - wir duerfen
##################################################################################

##################################################################################
# DECT-Update handling >>>>
##################################################################################
echo MODE=update > /dev/avm_power
if [ -x /var/dect_update ] && [ -e /var/dect_firmware.bin ] ; then
    echo "trigger DECT-Update"

# ToDo: check, ob wir updaten wollen oder nicht - momentan immer

#   Wenn Update: HTML-Seite austauschen
    rm -f /var/flash.html
    cp /var/flash2.html /var/flash.html

    echo '#!/bin/sh' > /var/post_install
    echo 'dect_count=3' >> /var/post_install
    echo 'while [ $dect_count -gt 0 ] &&  ! /var/dect_update -f /var/dect_firmware.bin  ; do' >> /var/post_install
    echo '	echo " wait (dect update retry)"' >> /var/post_install
    echo '	sleep 1' >> /var/post_install
    echo '	dect_count=$((dect_count - 1))' >> /var/post_install
    echo '	if [ "${dect_count}" = "0" ] ; then' >> /var/post_install
    echo '		echo "dect update failed"' >> /var/post_install
    echo '	fi' >> /var/post_install
    echo 'done' >> /var/post_install

    need_reboot=$INSTALL_SUCCESS_REBOOT
fi
##################################################################################
# DECT-Update handling <<<<
##################################################################################


##################################################################################
if [ $need_reboot -eq $INSTALL_SUCCESS_REBOOT ] ; then
    echo "set INFO led to blink (modul=7, state=4)"
    echo 7,4>${LED_DEVICE}
else
    echo "set INFO led to off (modul=7, state=1)"
    echo 7,1>${LED_DEVICE}
fi

##################################################################################
#  returnwerte:  0 kein reboot,  1 reboot
##################################################################################
exit $need_reboot

##################################################################################
echo "****INSTALLSCRIPT STOPPED ON DEVICE FOR TESTING (disabling watchdog)****"
if [ -e /dev/watchdog ] ; then 
    echo "disable" > /dev/watchdog
fi 
exit 0



##################################################################################
