menu 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. #!/bin/sh
  2. source /usr/local/lib/utils
  3. # Get a key
  4. getkey() {
  5. local key=$(dd if=/dev/input/event0 bs=32 count=1 status=none | xxd -p -c 32 | cut -b 21-26)
  6. echo ${key}
  7. }
  8. # Display meny item
  9. menu_display () {
  10. local entry=${1}
  11. #clear_notif
  12. case ${entry} in
  13. 0)
  14. # Information
  15. message=" INFO"
  16. ;;
  17. 1)
  18. # USB mount/unmount
  19. mount | grep -q /dev/mmcblk0p4
  20. if [ $? -eq 0 ]; then
  21. message=" USB MOUNT"
  22. else
  23. message=" USB UNMOUNT"
  24. fi
  25. ;;
  26. 2)
  27. # USB check
  28. message=" USB CHECK"
  29. ;;
  30. 3)
  31. # USB format
  32. message=" USB FORMAT"
  33. ;;
  34. 4)
  35. # Network enable/disable
  36. if [ -e /mnt/usbnet ]; then
  37. message=" NETWORK DISABLE"
  38. else
  39. message=" NETWORK ENABLE"
  40. fi
  41. ;;
  42. 5)
  43. # QR code
  44. message=" QR CODE"
  45. ;;
  46. 6)
  47. # Factory tests enable/disable
  48. RUN_ENV_VAR=$(fw_printenv -n assembly_tests 2>/dev/null)
  49. if [ "x${RUN_ENV_VAR}" == "x1" ]; then
  50. message=" FACTORY TESTS DISABLE"
  51. else
  52. message=" FACTORY TESTS ENABLE"
  53. fi
  54. ;;
  55. 7)
  56. # First boot enable/disable
  57. FIRST_BOOT_OK_ENV_VAR=$(fw_printenv -n first_boot_ok 2>/dev/null)
  58. if [ "x${FIRST_BOOT_OK_ENV_VAR}" == "x1" ]; then
  59. message=" FIRST BOOT DISABLE"
  60. else
  61. message=" FACTORY TESTS ENABLE"
  62. fi
  63. ;;
  64. 8)
  65. # Exit Recovery
  66. message=" EXIT RECOVERY"
  67. ;;
  68. 9)
  69. # Shutdown
  70. message=" SHUTDOWN"
  71. ;;
  72. esac
  73. notif "${message}"
  74. }
  75. # Run menu item
  76. menu_run () {
  77. local entry=${1}
  78. case ${entry} in
  79. 0)
  80. # Information
  81. rootfs_mount=/tmp/rootfs
  82. mkdir -p ${rootfs_mount}
  83. mount -t ext4 -o ro /dev/mmcblk0p2 ${rootfs_mount}
  84. if [ $? -ne 0 ]; then
  85. version_rootfs="???"
  86. else
  87. version_rootfs=$(grep rootfs ${rootfs_mount}/etc/sw-versions | cut -f 2)
  88. fi
  89. umount ${rootfs_mount}
  90. version_recovery=$(grep Recovery /etc/sw-versions | cut -f 2)
  91. ip_addr=$(ifconfig usb0 | grep "inet " | awk -F'[: ]+' '{ print $4 }')
  92. notif "${message}^^ Recovery: ${version_recovery}^ rootfs : ${version_rootfs}^ IP addr : ${ip_addr}"
  93. ;;
  94. 1)
  95. # USB mount/unmount
  96. mount | grep -q /dev/mmcblk0p4
  97. if [ $? -eq 0 ]; then
  98. notif "${message}..."
  99. share start
  100. if [ $? -ne 0 ]; then
  101. notif "${message}...^CANNOT MOUNT USB!"
  102. else
  103. message=" USB UNMOUNT"
  104. notif "${message}"
  105. fi
  106. else
  107. notif "${message}..."
  108. share stop
  109. if [ $? -ne 0 ]; then
  110. notif "${message}...^CANNOT UNMOUNT USB!"
  111. else
  112. for file in $(ls /mnt/FunKey-*.fwu); do
  113. swupdate -i "${file}"
  114. if [ $? -ne 0 ]; then
  115. notif_disp 10 "${message}...^ CORRUPTED^ UPDATE FILE"
  116. rm -f "${file}"
  117. notif "^^^^^^^^ RESTARTING...^^^^^^^^"
  118. normal_mode
  119. fi
  120. done
  121. message=" USB MOUNT"
  122. notif "${message}"
  123. fi
  124. fi
  125. ;;
  126. 2)
  127. # USB check
  128. mount | grep -q /dev/mmcblk0p4
  129. if [ $? -eq 0 ]; then
  130. notif "${message}..."
  131. umount /mnt >/dev/null 2>&1
  132. if [ $? -ne 0 ]; then
  133. notif "${message}...^CANNOT CHECK USB!"
  134. fi
  135. fsck.fat -a -v -w /dev/mmcblk0p4
  136. if [ $? -ne 0 ]; then
  137. notif "${message}...^CANNOT CHECK USB!"
  138. fi
  139. mount /mnt
  140. if [ $? -ne 0 ]; then
  141. notif "${message}...^CANNOT CHECK USB!"
  142. else
  143. notif "${message} DONE"
  144. fi
  145. else
  146. notif "${message}...^CANNOT CHECK USB WHEN MOUNTED!"
  147. fi
  148. ;;
  149. 3)
  150. # USB format
  151. mount | grep -q /dev/mmcblk0p4
  152. if [ $? -eq 0 ]; then
  153. notif "${message}...^PRESS A TO CONFIRM"
  154. while true; do
  155. case $(getkey) in
  156. 1e0001|1e0002)
  157. umount /mnt &&
  158. mkfs.vfat /dev/mmcblk0p4 &&
  159. mount /mnt
  160. if [ $? -ne 0 ]; then
  161. notif "${message}...^CANNOT FORMAT USB!"
  162. else
  163. notif "${message} DONE"
  164. fi
  165. break
  166. ;;
  167. 1e0000)
  168. ;;
  169. *)
  170. notif "${message}...^ABORTED!"
  171. break
  172. ;;
  173. esac
  174. done
  175. else
  176. notif "${message}...^CANNOT FORMAT USB WHEN MOUNTED!"
  177. fi
  178. ;;
  179. 4)
  180. # Network enable/disable
  181. mount | grep -q /dev/mmcblk0p4
  182. if [ $? -eq 0 ]; then
  183. if [ -e /mnt/usbnet ]; then
  184. rm -f /mnt/usbnet
  185. message=" NETWORK ENABLE"
  186. else
  187. touch /mnt/usbnet
  188. message=" NETWORK DISABLE"
  189. fi
  190. notif "${message}"
  191. else
  192. notif "${message}...^CANNOT CHANGE NET IF MOUNTED!"
  193. fi
  194. ;;
  195. 5)
  196. # QR code
  197. qrencode -o /tmp/qrcode.png "https://www.funkey-project.com/_functions/qrcode/$(get_sid)"
  198. fbv -e /tmp/qrcode.png -d 1
  199. ;;
  200. 6)
  201. # Factory tests enable/disable
  202. RUN_ENV_VAR=$(fw_printenv -n assembly_tests 2>/dev/null)
  203. if [ "x${RUN_ENV_VAR}" == "x1" ]; then
  204. fw_setenv assembly_tests 0
  205. message=" FACTORY TESTS ENABLE"
  206. else
  207. fw_setenv assembly_tests 1
  208. message=" FACTORY TESTS DISABLE"
  209. fi
  210. notif "${message}"
  211. ;;
  212. 7)
  213. # First boot enable/disable
  214. FIRST_BOOT_OK_ENV_VAR=$(fw_printenv -n first_boot_ok 2>/dev/null)
  215. if [ "x${FIRST_BOOT_OK_ENV_VAR}" == "x1" ]; then
  216. fw_setenv first_boot_ok
  217. message=" FIRST BOOT ENABLE"
  218. else
  219. fw_setenv first_boot_ok 1
  220. message=" FIRST BOOT DISABLE"
  221. fi
  222. notif "${message}"
  223. ;;
  224. 8)
  225. notif "^^^^^^^^ RESTARTING...^^^^^^^^"
  226. normal_mode
  227. ;;
  228. 9)
  229. notif "^^^^^^^^ SHUTDOWN...^^^^^^^^"
  230. poweroff
  231. ;;
  232. esac
  233. }
  234. # Display first menu entry
  235. entry=0
  236. menu_display ${entry}
  237. # Recovery menu loop
  238. while true; do
  239. # Get key events
  240. case $(getkey) in
  241. 160001|160002)
  242. # Key UP pressed or repeat
  243. let entry=${entry}-1
  244. let entry=${entry}%9
  245. if [ ${entry} -eq -1 ]; then
  246. entry=8
  247. fi
  248. menu_display ${entry}
  249. ;;
  250. 200001|200002)
  251. # Key DOWN pressed or repeat
  252. let entry=${entry}+1
  253. let entry=${entry}%9
  254. menu_display ${entry}
  255. ;;
  256. 1e0001|1e0002)
  257. # Key A pressed or repeat
  258. menu_run ${entry}
  259. ;;
  260. esac
  261. done