x86: add upgrade support to diag.sh
[openwrt/staging/mkresin.git] / target / linux / x86 / base-files / etc / diag.sh
1 #!/bin/sh
2 #
3 # Copyright © 2017 OpenWrt.org
4 #
5
6 . /lib/functions.sh
7 . /lib/functions/leds.sh
8 . /usr/share/libubox/jshn.sh
9
10 preinit_match_diag_led() {
11 local CFG keys key cfg name sysfs default
12
13 CFG=/etc/board.json
14 if [ ! -s $CFG ]; then
15 CFG=/tmp/board.json
16 [ -s /tmp/sysinfo/model ] || return
17 /bin/board_detect $CFG || return
18 fi
19
20 json_init
21 json_load "$(cat $CFG)"
22 json_get_keys keys led
23 json_is_a led object || return
24
25 json_select led
26 for key in $keys; do
27 json_select "$key"
28 json_get_vars name sysfs default
29
30 if [ "$name" = "DIAG" -a "$default" = "1" ]; then
31 status_led="$sysfs"
32 return
33 fi
34 json_select ..
35 done
36 }
37
38 match_diag_led() {
39 local name
40 local default
41 local sysfs
42 config_get name "$1" name
43 config_get default "$1" default
44 config_get sysfs "$1" sysfs
45
46 if [ "$name" = "DIAG" -a "$default" = "1" ]; then
47 status_led="$sysfs"
48 fi
49 }
50
51 get_status_led() {
52 if [ -s /etc/config/system ]; then
53 config_load system
54 config_foreach match_diag_led led
55 else
56 preinit_match_diag_led
57 fi
58 }
59
60 set_state() {
61 get_status_led
62
63 case "$1" in
64 preinit)
65 status_led_blink_preinit
66 ;;
67
68 failsafe)
69 status_led_blink_failsafe
70 ;;
71
72 preinit_regular)
73 status_led_blink_preinit_regular
74 ;;
75
76 upgrade)
77 status_led_blink_preinit_regular
78 ;;
79
80 done)
81 status_led_on
82 ;;
83 esac
84 }