284 lines
4.9 KiB
Bash
Executable File
284 lines
4.9 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
source /usr/local/lib/utils
|
|
|
|
# Get a key
|
|
getkey() {
|
|
local key=$(dd if=/dev/input/event0 bs=32 count=1 status=none | xxd -p -c 32 | cut -b 21-26)
|
|
echo ${key}
|
|
}
|
|
|
|
# Display meny item
|
|
menu_display () {
|
|
local entry=${1}
|
|
|
|
#clear_notif
|
|
case ${entry} in
|
|
0)
|
|
|
|
# Version
|
|
message=" VERSION"
|
|
;;
|
|
|
|
1)
|
|
# USB mount/unmount
|
|
mount | grep -q /dev/mmcblk0p4
|
|
if [ $? -eq 0 ]; then
|
|
message=" USB MOUNT"
|
|
else
|
|
message=" USB UNMOUNT"
|
|
fi
|
|
;;
|
|
|
|
2)
|
|
|
|
# USB check
|
|
message=" USB CHECK"
|
|
;;
|
|
|
|
3)
|
|
|
|
# USB format
|
|
message=" USB FORMAT"
|
|
;;
|
|
|
|
4)
|
|
|
|
# Network enable/disable
|
|
if [ -e /mnt/usbnet ]; then
|
|
message=" NETWORK DISABLE"
|
|
else
|
|
message=" NETWORK ENABLE"
|
|
fi
|
|
;;
|
|
|
|
5)
|
|
|
|
# QR code
|
|
message=" QR CODE"
|
|
;;
|
|
|
|
6)
|
|
|
|
# Factory tests enable/disable
|
|
if [ -e /mnt/.assembly_tests ]; then
|
|
message=" FACTORY TESTS DISABLE"
|
|
else
|
|
message=" FACTORY TESTS ENABLE"
|
|
fi
|
|
;;
|
|
|
|
7)
|
|
|
|
# Exit Recovery
|
|
message=" EXIT RECOVERY"
|
|
;;
|
|
|
|
8)
|
|
|
|
# Shutdown
|
|
message=" SHUTDOWN"
|
|
;;
|
|
esac
|
|
notif "${message}"
|
|
}
|
|
|
|
# Run menu item
|
|
menu_run () {
|
|
local entry=${1}
|
|
|
|
case ${entry} in
|
|
0)
|
|
|
|
# Version
|
|
rootfs_mount=/tmp/rootfs
|
|
mkdir -p ${rootfs_mount}
|
|
mount -t ext4 -o ro /dev/mmcblk0p2 ${rootfs_mount}
|
|
if [ $? -ne 0 ]; then
|
|
version_rootfs="???"
|
|
else
|
|
version_rootfs=$(grep rootfs ${rootfs_mount}/etc/sw-versions | cut -f 2)
|
|
fi
|
|
umount ${rootfs_mount}
|
|
version_recovery=$(grep Recovery /etc/sw-versions | cut -f 2)
|
|
notif "${message}^^ Recovery: ${version_recovery}^ rootfs : ${version_rootfs}"
|
|
;;
|
|
|
|
1)
|
|
|
|
# USB mount/unmount
|
|
mount | grep -q /dev/mmcblk0p4
|
|
if [ $? -eq 0 ]; then
|
|
notif "${message}..."
|
|
share start
|
|
if [ $? -ne 0 ]; then
|
|
notif "${message}...^CANNOT MOUNT USB!"
|
|
else
|
|
message=" USB UNMOUNT"
|
|
notif "${message}"
|
|
fi
|
|
else
|
|
notif "${message}..."
|
|
share stop
|
|
if [ $? -ne 0 ]; then
|
|
notif "${message}...^CANNOT UNMOUNT USB!"
|
|
else
|
|
for file in $(ls /mnt/FunKey-*.fwu); do
|
|
swupdate -i "${file}"
|
|
if [ $? -ne 0 ]; then
|
|
notif "${message}...^CANNOT UPDATE!"
|
|
break
|
|
fi
|
|
done
|
|
message=" USB MOUNT"
|
|
notif "${message}"
|
|
fi
|
|
fi
|
|
;;
|
|
|
|
2)
|
|
|
|
# USB check
|
|
mount | grep -q /dev/mmcblk0p4
|
|
if [ $? -eq 0 ]; then
|
|
notif "${message}..."
|
|
umount /mnt >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
notif "${message}...^CANNOT CHECK USB!"
|
|
fi
|
|
fsck.fat -a -v -w /dev/mmcblk0p4
|
|
if [ $? -ne 0 ]; then
|
|
notif "${message}...^CANNOT CHECK USB!"
|
|
fi
|
|
mount /mnt
|
|
if [ $? -ne 0 ]; then
|
|
notif "${message}...^CANNOT CHECK USB!"
|
|
else
|
|
notif "${message} DONE"
|
|
fi
|
|
else
|
|
notif "${message}...^CANNOT CHECK USB WHEN MOUNTED!"
|
|
fi
|
|
;;
|
|
|
|
3)
|
|
|
|
# USB format
|
|
mount | grep -q /dev/mmcblk0p4
|
|
if [ $? -eq 0 ]; then
|
|
notif "${message}...^PRESS A TO CONFIRM"
|
|
while true; do
|
|
case $(getkey) in
|
|
1e0001|1e0002)
|
|
umount /mnt &&
|
|
mkfs.vfat /dev/mmcblk0p4 &&
|
|
mount /mnt
|
|
if [ $? -ne 0 ]; then
|
|
notif "${message}...^CANNOT FORMAT USB!"
|
|
else
|
|
notif "${message} DONE"
|
|
fi
|
|
break
|
|
;;
|
|
|
|
1e0000)
|
|
;;
|
|
|
|
*)
|
|
notif "${message}...^ABORTED!"
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
else
|
|
notif "${message}...^CANNOT FORMAT USB WHEN MOUNTED!"
|
|
fi
|
|
;;
|
|
|
|
4)
|
|
|
|
# Network enable/disable
|
|
mount | grep -q /dev/mmcblk0p4
|
|
if [ $? -eq 0 ]; then
|
|
if [ -e /mnt/usbnet ]; then
|
|
rm -f /mnt/usbnet
|
|
message=" NETWORK ENABLE"
|
|
else
|
|
touch /mnt/usbnet
|
|
message=" NETWORK DISABLE"
|
|
fi
|
|
notif "${message}"
|
|
else
|
|
notif "${message}...^CANNOT CHANGE NET IF MOUNTED!"
|
|
fi
|
|
;;
|
|
|
|
5)
|
|
|
|
# QR code
|
|
qrencode -o /tmp/qrcode.png "https://www.funkey-project.com/_functions/qrcode/$(get_sid)"
|
|
fbv -e /tmp/qrcode.png -d 1
|
|
;;
|
|
|
|
6)
|
|
|
|
# Factory tests enable/disable
|
|
RUN_ENV_VAR=$(fw_printenv -n assembly_tests 2>/dev/null)
|
|
if [ "x${RUN_ENV_VAR}" == "x1" ]; then
|
|
fw_setenv assembly_tests 0
|
|
message=" FACTORY TESTS ENABLE"
|
|
else
|
|
fw_setenv assembly_tests 1
|
|
message=" FACTORY TESTS DISABLE"
|
|
fi
|
|
notif "${message}"
|
|
;;
|
|
|
|
7)
|
|
notif "^^^^^^^^ RESTARTING...^^^^^^^^"
|
|
normal_mode
|
|
;;
|
|
|
|
8)
|
|
notif "^^^^^^^^ SHUTDOWN...^^^^^^^^"
|
|
poweroff
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Display first menu entry
|
|
entry=0
|
|
menu_display ${entry}
|
|
|
|
# Recovery menu loop
|
|
while true; do
|
|
|
|
# Get key events
|
|
case $(getkey) in
|
|
160001|160002)
|
|
|
|
# Key UP pressed or repeat
|
|
let entry=${entry}-1
|
|
let entry=${entry}%9
|
|
if [ ${entry} -eq -1 ]; then
|
|
entry=8
|
|
fi
|
|
menu_display ${entry}
|
|
;;
|
|
|
|
200001|200002)
|
|
|
|
# Key DOWN pressed or repeat
|
|
let entry=${entry}+1
|
|
let entry=${entry}%9
|
|
menu_display ${entry}
|
|
;;
|
|
|
|
1e0001|1e0002)
|
|
|
|
# Key A pressed or repeat
|
|
menu_run ${entry}
|
|
;;
|
|
esac
|
|
done
|