311 lines
5.9 KiB
Bash
Executable File
311 lines
5.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}
|
|
case ${entry} in
|
|
0)
|
|
|
|
# Information
|
|
message=" INFO"
|
|
;;
|
|
|
|
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: ENABLED"
|
|
else
|
|
message=" NETWORK: DISABLED"
|
|
fi
|
|
;;
|
|
|
|
5)
|
|
|
|
# QR code
|
|
message=" QR CODE"
|
|
;;
|
|
|
|
6)
|
|
|
|
# Factory tests enable/disable
|
|
RUN_ENV_VAR=$(fw_printenv -n assembly_tests 2>/dev/null)
|
|
if [ "x${RUN_ENV_VAR}" == "x1" ]; then
|
|
message=" FACTORY TESTS: ENABLED"
|
|
else
|
|
message=" FACTORY TESTS: DISABLED"
|
|
fi
|
|
;;
|
|
|
|
7)
|
|
|
|
# First boot enable/disable
|
|
FIRST_BOOT_OK_ENV_VAR=$(fw_printenv -n first_boot_ok 2>/dev/null)
|
|
if [ "x${FIRST_BOOT_OK_ENV_VAR}" == "x1" ]; then
|
|
message=" FIRST BOOT: DISABLED"
|
|
else
|
|
message=" FIRST BOOT: ENABLED"
|
|
fi
|
|
;;
|
|
|
|
8)
|
|
|
|
# Exit Recovery
|
|
message=" EXIT RECOVERY"
|
|
;;
|
|
|
|
9)
|
|
|
|
# Shutdown
|
|
message=" SHUTDOWN"
|
|
;;
|
|
esac
|
|
notif set 0 "${message}"
|
|
}
|
|
|
|
# Run menu item
|
|
menu_run () {
|
|
local entry=${1}
|
|
|
|
case ${entry} in
|
|
0)
|
|
|
|
# Information
|
|
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)
|
|
ip_addr=$(ifconfig usb0 | grep "inet " | awk -F'[: ]+' '{ print $4 }')
|
|
notif set 0 "${message}^^ Recovery: ${version_recovery}^ rootfs : ${version_rootfs}^ IP addr : ${ip_addr}"
|
|
;;
|
|
|
|
1)
|
|
|
|
# USB mount/unmount
|
|
mount | grep -q /dev/mmcblk0p4
|
|
if [ $? -eq 0 ]; then
|
|
notif set 0 "${message}..."
|
|
share start
|
|
if [ $? -ne 0 ]; then
|
|
notif set 0 "${message}...^CANNOT MOUNT USB!"
|
|
else
|
|
message=" USB UNMOUNT"
|
|
notif set 0 "${message}"
|
|
fi
|
|
else
|
|
notif set 0 "${message}..."
|
|
share stop
|
|
if [ $? -ne 0 ]; then
|
|
notif set 0 "${message}...^CANNOT UNMOUNT USB!"
|
|
else
|
|
for file in $(ls /mnt/FunKey-*.fwu); do
|
|
swupdate -i "${file}"
|
|
if [ $? -ne 0 ]; then
|
|
notif set 0 display 10 "${message}...^ CORRUPTED^ UPDATE FILE"
|
|
rm -f "${file}"
|
|
notif set 0 "^^^^^^^^ RESTARTING...^^^^^^^^"
|
|
normal_mode
|
|
fi
|
|
done
|
|
message=" USB MOUNT"
|
|
notif set 0 "${message}"
|
|
fi
|
|
fi
|
|
;;
|
|
|
|
2)
|
|
|
|
# USB check
|
|
mount | grep -q /dev/mmcblk0p4
|
|
if [ $? -eq 0 ]; then
|
|
notif set 0 "${message}..."
|
|
umount /mnt >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
notif set 0 "${message}...^CANNOT CHECK USB!"
|
|
fi
|
|
fsck.fat -a -v -w /dev/mmcblk0p4
|
|
if [ $? -ne 0 ]; then
|
|
notif set 0 "${message}...^CANNOT CHECK USB!"
|
|
fi
|
|
mount /mnt
|
|
if [ $? -ne 0 ]; then
|
|
notif set 0 "${message}...^CANNOT CHECK USB!"
|
|
else
|
|
notif set 0 "${message} DONE"
|
|
fi
|
|
else
|
|
notif set 0 "${message}...^CANNOT CHECK USB WHEN MOUNTED!"
|
|
fi
|
|
;;
|
|
|
|
3)
|
|
|
|
# USB format
|
|
mount | grep -q /dev/mmcblk0p4
|
|
if [ $? -eq 0 ]; then
|
|
notif set 0 "${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 set 0 "${message}...^CANNOT FORMAT USB!"
|
|
else
|
|
notif set 0 "${message} DONE"
|
|
fi
|
|
break
|
|
;;
|
|
|
|
1e0000)
|
|
;;
|
|
|
|
*)
|
|
notif set 0 "${message}...^ABORTED!"
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
else
|
|
notif set 0 "${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: DISABLED"
|
|
else
|
|
touch /mnt/usbnet
|
|
message=" NETWORK: ENABLED"
|
|
fi
|
|
notif set 0 "${message}"
|
|
else
|
|
notif set 0 "${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: DISABLED"
|
|
else
|
|
fw_setenv assembly_tests 1
|
|
message=" FACTORY TESTS: ENABLED"
|
|
fi
|
|
notif set 0 "${message}"
|
|
;;
|
|
|
|
7)
|
|
|
|
# First boot enable/disable
|
|
FIRST_BOOT_OK_ENV_VAR=$(fw_printenv -n first_boot_ok 2>/dev/null)
|
|
if [ "x${FIRST_BOOT_OK_ENV_VAR}" == "x1" ]; then
|
|
fw_setenv first_boot_ok
|
|
message=" FIRST BOOT: ENABLED"
|
|
else
|
|
fw_setenv first_boot_ok 1
|
|
message=" FIRST BOOT: DISABLED"
|
|
fi
|
|
notif set 0 "${message}"
|
|
;;
|
|
|
|
8)
|
|
notif set 0 "^^^^^^^^ RESTARTING...^^^^^^^^"
|
|
normal_mode
|
|
;;
|
|
|
|
9)
|
|
notif set 0 "^^^^^^^^ 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
|