Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prevent update from bricking goggle #495

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 73 additions & 29 deletions mkapp/app/script/update_goggle.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,56 +3,87 @@
GOGGLE_BIN="$1"
TMP_DIR=/tmp/goggle_update

gpio_export()
function gpio_export()
{
if [ ! -f /sys/class/gpio/gpio224/direction ]
then
echo "224">/sys/class/gpio/export
echo "out">/sys/class/gpio/gpio224/direction
fi

echo "out">/sys/class/gpio/gpio224/direction
if [ ! -f /sys/class/gpio/gpio228/direction ]
then
echo "228">/sys/class/gpio/export
echo "out">/sys/class/gpio/gpio228/direction
fi

echo "out">/sys/class/gpio/gpio228/direction
if [ ! -f /sys/class/gpio/gpio258/direction ]
then
echo "258">/sys/class/gpio/export
echo "out">/sys/class/gpio/gpio258/direction
fi
echo "out">/sys/class/gpio/gpio258/direction
if [ ! -f /sys/class/gpio/gpio131/direction ]
then
echo "131">/sys/class/gpio/export
fi
echo "out">/sys/class/gpio/gpio131/direction
}

function beep_success()
{
echo "1">/sys/class/gpio/gpio131/value
sleep 0.1
echo "0">/sys/class/gpio/gpio131/value
sleep 0.5
echo "1">/sys/class/gpio/gpio131/value
sleep 0.05
echo "0">/sys/class/gpio/gpio131/value
}

gpio_set_reset()

function beep_failure()
{
echo "1">/sys/class/gpio/gpio131/value
sleep 1
echo "0">/sys/class/gpio/gpio131/value
sleep 0.5
echo "1">/sys/class/gpio/gpio131/value
sleep 1
echo "0">/sys/class/gpio/gpio131/value
sleep 0.5
echo "1">/sys/class/gpio/gpio131/value
sleep 0.05
echo "0">/sys/class/gpio/gpio131/value
}


function gpio_set_reset()
{
echo "0">/sys/class/gpio/gpio224/value
echo "1">/sys/class/gpio/gpio228/value
}

gpio_clear_reset()
function gpio_clear_reset()
{
echo "1">/sys/class/gpio/gpio224/value
echo "0">/sys/class/gpio/gpio228/value
}

gpio_set_send()
function gpio_set_send()
{
echo "1">/sys/class/gpio/gpio224/value
echo "0">/sys/class/gpio/gpio228/value
}

disconnect_fpga_flash()
function disconnect_fpga_flash()
{
echo "1">/sys/class/gpio/gpio258/value
}

connect_fpga_flash()
function connect_fpga_flash()
{
echo "0">/sys/class/gpio/gpio258/value
}

untar_file()
function untar_file()
{
FILE_TARGET="$1"

Expand All @@ -68,37 +99,55 @@ untar_file()
mv ${TMP_DIR}/HDZGOGGLE_RX*.bin ${TMP_DIR}/HDZGOGGLE_RX.bin
mv ${TMP_DIR}/HDZGOGGLE_VA*.bin ${TMP_DIR}/HDZGOGGLE_VA.bin
}

# eg: check_mtd_write /dev/mtdX check-size erase-size file-size bin-file
function check_mtd_write()
{
mtd_info=`mtd_debug info $1`
echo "$mtd_info"
value=`echo "$mtd_info" | grep mtd.size | grep "($2)"`
if [ ! -z "$value" ];then
echo "$1 size is ($2)"
mtd_debug erase $1 0 $3
mtd_debug write $1 0 $4 $5
beep_success
else
echo "$1 size is NOT ($2) !"
beep_failure
fi
}

update_rx()
function update_rx()
{
echo "find RX update file, start update"
filesize=`ls -l ${TMP_DIR}/HDZGOGGLE_RX*.bin| awk '{print $5}'`
gpio_export
gpio_set_reset
insmod /mnt/app/ko/w25q128.ko

mtd_debug erase /dev/mtd8 0 65536
mtd_debug write /dev/mtd8 0 $filesize ${TMP_DIR}/HDZGOGGLE_RX.bin
mtd_debug erase /dev/mtd9 0 65536
mtd_debug write /dev/mtd9 0 $filesize ${TMP_DIR}/HDZGOGGLE_RX.bin

check_mtd_write /dev/mtd8 1M 65536 $filesize ${TMP_DIR}/HDZGOGGLE_RX.bin
echo "5"
echo "5" > /tmp/progress_goggle
sleep 1
check_mtd_write /dev/mtd9 1M 65536 $filesize ${TMP_DIR}/HDZGOGGLE_RX.bin
echo "10"
echo "10" > /tmp/progress_goggle
echo "update finish RX, running"
gpio_clear_reset
sleep 1
rmmod /mnt/app/ko/w25q128.ko
}

update_fpga()
function update_fpga()
{
echo "find VA update file, start update"
filesize2=`ls -l ${TMP_DIR}/HDZGOGGLE_VA*.bin| awk '{print $5}'`
gpio_export
gpio_set_reset
disconnect_fpga_flash
insmod /mnt/app/ko/w25q128.ko

mtd_debug erase /dev/mtd10 0 16777216
mtd_debug write /dev/mtd10 0 $filesize2 ${TMP_DIR}/HDZGOGGLE_VA.bin
check_mtd_write /dev/mtd10 16M 16777216 $filesize2 ${TMP_DIR}/HDZGOGGLE_VA.bin
echo "45"
echo "45" > /tmp/progress_goggle
echo "update finish VA, running"
gpio_clear_reset
sleep 1
Expand All @@ -123,12 +172,8 @@ then
cp -f /mnt/app/setting.ini /mnt/UDISK/
#disable it66021
i2cset -y 3 0x49 0x10 0xff
update_rx
echo "1"
echo "1" > /tmp/progress_goggle
update_rx
update_fpga
echo "45"
echo "45" > /tmp/progress_goggle
hdz_upgrade_app.sh
echo "100"
echo "100" > /tmp/progress_goggle
Expand All @@ -141,4 +186,3 @@ else
echo "repeat"
fi
fi

151 changes: 107 additions & 44 deletions mkapp/app/script/write_flashes.sh
Original file line number Diff line number Diff line change
@@ -1,15 +1,34 @@
#!/bin/sh

VAbin=/mnt/extsd/HDZGOGGLE_VA.bin
VAcount=1
VAwrites=0
RXbin=/mnt/extsd/HDZGOGGLE_RX.bin
RXcount=2
RXwrites=0

function gpio_export()
{
echo "224">/sys/class/gpio/export
echo "228">/sys/class/gpio/export
echo "131">/sys/class/gpio/export
echo "258">/sys/class/gpio/export
echo "out">/sys/class/gpio/gpio224/direction
if [ ! -f /sys/class/gpio/gpio224/direction ]
then
echo "224">/sys/class/gpio/export
fi
echo "out">/sys/class/gpio/gpio224/direction
if [ ! -f /sys/class/gpio/gpio228/direction ]
then
echo "228">/sys/class/gpio/export
fi
echo "out">/sys/class/gpio/gpio228/direction
if [ ! -f /sys/class/gpio/gpio258/direction ]
then
echo "258">/sys/class/gpio/export
fi
echo "out">/sys/class/gpio/gpio258/direction
if [ ! -f /sys/class/gpio/gpio131/direction ]
then
echo "131">/sys/class/gpio/export
fi
echo "out">/sys/class/gpio/gpio131/direction
echo "out">/sys/class/gpio/gpio258/direction
}

function beep_on()
Expand All @@ -29,6 +48,34 @@ function beep()
echo "0">/sys/class/gpio/gpio131/value
}

function beep_success()
{
echo "1">/sys/class/gpio/gpio131/value
sleep 0.1
echo "0">/sys/class/gpio/gpio131/value
sleep 0.5
echo "1">/sys/class/gpio/gpio131/value
sleep 0.05
echo "0">/sys/class/gpio/gpio131/value
}


function beep_failure()
{
echo "1">/sys/class/gpio/gpio131/value
sleep 1
echo "0">/sys/class/gpio/gpio131/value
sleep 0.5
echo "1">/sys/class/gpio/gpio131/value
sleep 1
echo "0">/sys/class/gpio/gpio131/value
sleep 0.5
echo "1">/sys/class/gpio/gpio131/value
sleep 0.05
echo "0">/sys/class/gpio/gpio131/value
}


function disconnect_fpga_flash()
{
echo "1">/sys/class/gpio/gpio258/value
Expand Down Expand Up @@ -58,13 +105,40 @@ function gpio_set_send()
echo "0">/sys/class/gpio/gpio228/value
}

# eg: check_mtd_write /dev/mtdX check-size erase-size file-size bin-file
function check_mtd_write()
{
mtd_info=`mtd_debug info $1`
echo "$mtd_info"
value=`echo "$mtd_info" | grep mtd.size | grep "($2)"`
if [ ! -z "$value" ];then
echo "$1 size is ($2)"
mtd_debug erase $1 0 $3
mtd_debug write $1 0 $4 $5
if [ $? == 0 ]; then
beep_success
if [ "$5" == "$VAbin" ]; then
VAwrites=$((VAwrites + 1))
fi
if [ "$5" == "$RXbin" ]; then
RXwrites=$((RXwrites + 1))
fi
fi
else
echo "$1 size is NOT ($2) !"
beep_failure
fi
}




echo "<<<<-------------------------------------------------------------------->>>>"

if [ -e /mnt/extsd/HDZGOGGLE_VA.bin ]
if [ -e $VAbin ]
then
echo "find VA update file, start update"
filesize2=`ls -l /mnt/extsd/HDZGOGGLE_VA.bin| awk '{print $5}'`
filesize2=`ls -l $VAbin| awk '{print $5}'`
gpio_export
gpio_set_reset
disconnect_fpga_flash
Expand All @@ -73,67 +147,56 @@ then


touch /tmp/update.ing
mtd_debug erase /dev/mtd10 0 16777216
mtd_debug write /dev/mtd10 0 $filesize2 /mnt/extsd/HDZGOGGLE_VA.bin
# normally the VA is mounted at /dev/mtd10
# check_mtd_write /dev/mtd8 16M 16777216 $filesize2 $VAbin
# check_mtd_write /dev/mtd9 16M 16777216 $filesize2 $VAbin
check_mtd_write /dev/mtd10 16M 16777216 $filesize2 $VAbin
rm /tmp/update.ing -rf

if [ ! -f /mnt/extsd/DONOTREMOVE.txt ]
then
rm /mnt/extsd/HDZGOGGLE_VA.bin -rf
if [ "$VAwrites" == "$VAcount" ]; then
if [ ! -f /mnt/extsd/DONOTREMOVE.txt ]
then
rm $VAbin -rf
fi
fi

echo "update finish VA, running"
echo "update finish $VAwrites VA, running"
gpio_clear_reset
sleep 1
rmmod /mnt/app/ko/w25q128.ko
else
echo "no update file,skip"
echo "no VA update file,skip"
fi


if [ -e /mnt/extsd/HDZGOGGLE_RX.bin ]
if [ -e $RXbin ]
then
echo "find RX update file, start update"
filesize=`ls -l /mnt/extsd/HDZGOGGLE_RX.bin| awk '{print $5}'`
filesize=`ls -l $RXbin| awk '{print $5}'`
gpio_export
gpio_set_reset
sleep 1
insmod /mnt/app/ko/w25q128.ko

valude=`mtd_debug info /dev/mtd8 | grep mtd.size | grep 1M`
if [ "$valude" = "" ];then
beep_on
usleep 500
beep_off
exit 0
fi

valude=`mtd_debug info /dev/mtd9 | grep mtd.size | grep 1M`
if [ "$valude" = "" ];then
beep_on
usleep 500
beep_off
exit 0
fi

mtd_debug erase /dev/mtd8 0 65536
mtd_debug write /dev/mtd8 0 $filesize /mnt/extsd/HDZGOGGLE_RX.bin
mtd_debug erase /dev/mtd9 0 65536
mtd_debug write /dev/mtd9 0 $filesize /mnt/extsd/HDZGOGGLE_RX.bin

if [ ! -f /mnt/extsd/DONOTREMOVE.txt ]
then
rm /mnt/extsd/HDZGOGGLE_RX.bin -rf
# normally the RX modules are mounted at /dev/mtd8 and /dev/mtd9
check_mtd_write /dev/mtd8 1M 65536 $filesize $RXbin
check_mtd_write /dev/mtd9 1M 65536 $filesize $RXbin
# check_mtd_write /dev/mtd10 1M 65536 $filesize $RXbin

if [ "$RXwrites" == "$RXcount" ]; then
if [ ! -f /mnt/extsd/DONOTREMOVE.txt ]
then
rm $RXbin -rf
fi
fi

echo "update finish RX, running"
echo "update finish $RXwrites RX, running"
gpio_clear_reset
sleep 1
rmmod /mnt/app/ko/w25q128.ko

beep
else
echo "no update file,skip"
echo "no RX update file,skip"
fi

echo "<<<<-------------------------------------------------------------------->>>>"