#!/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) # USB mount/unmount mount | grep -q /dev/mmcblk0p4 if [ $? -eq 0 ]; then message=" USB MOUNT" else message=" USB UNMOUNT" fi ;; 1) # USB check message=" USB CHECK" ;; 2) # USB format message=" USB FORMAT" ;; 3) # Network enable/disable if [ -e /mnt/usbnet ]; then message=" NETWORK DISABLE" else message=" NETWORK ENABLE" fi ;; 4) # QR code message=" QR CODE" ;; 5) # Factory tests enable/disable if [ -e /mnt/.assembly_tests ]; then message=" FACTORY TESTS DISABLE" else message=" FACTORY TESTS ENABLE" fi ;; 6) # Exit Recovery message=" EXIT RECOVERY" ;; esac notif "${message}" } # Run menu item menu_run () { local entry=${1} case ${entry} in 0) # 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 ;; 1) # 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 ;; 2) # 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 ;; 3) # 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 ;; 4) # QR code qrencode -o /tmp/qrcode.png "https://www.funkey-project.com/_functions/qrcode/$(get_sid)" fbv -e /tmp/qrcode.png -d 1 ;; 5) # Factory tests enable/disable mount | grep -q /dev/mmcblk0p4 if [ $? -eq 0 ]; then if [ -e /mnt/.assembly_tests ]; then rm -f /mnt/.assembly_tests message=" FACTORY TESTS ENABLE" else touch /mnt/.assembly_tests message=" FACTORY TESTS DISABLE" fi notif "${message}" else notif "${message}...^CANNOT TEST IF MOUNTED!" fi ;; 6) notif "^^^^^^^^ RESTARTING...^^^^^^^^" normal_mode ;; 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}%7 if [ ${entry} -eq -1 ]; then entry=6 fi menu_display ${entry} ;; 200001|200002) # Key DOWN pressed or repeat let entry=${entry}+1 let entry=${entry}%7 menu_display ${entry} ;; 1e0001|1e0002) # Key A pressed or repeat menu_run ${entry} ;; esac done