summaryrefslogtreecommitdiff
path: root/recipes-bsp/multitech/mtre-leds/mtre-leds.sh
blob: 773e331b73de4cb66accb676cc380b8f2fb7c212 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/bin/bash

#
# LED to trigger map
#
declare -A triggers

##################################################################
#                  #                 #                           #
#     LED name     #    Trigger      #         Description       #
# /sys/class/leds  #                 #                           #
##################################################################
triggers[pca955x:0]="led-no-alarm"   # ENABLE
triggers[pca955x:1]="led-alarm"      # ALARM
triggers[pca955x:2]="none"           # 10/100MBPS (HW controlled)
triggers[pca955x:3]="none"           # LNK/ACT (HW controlled)
triggers[pca955x:4]="vizzini1-tx"    # TX (serial)
triggers[pca955x:5]="vizzini1-rx"    # RX (serial)
triggers[pca955x:6]="led-sig4"       # LINK Quality Green
triggers[pca955x:7]="led-sig3"       # LINK Quality Green
triggers[pca955x:8]="led-sig2"       # LINK Quality Yellow
triggers[pca955x:9]="led-sig1"       # LINK Quality Red
triggers[pca955x:10]="led-cd"        # Celullar connectivity
triggers[pca955x:11]="netdev"        # Cellular activity

debug() {
  [[ "$DEBUG" ]] && builtin echo $@
}

leds_enable() {
    cd /sys/class/leds
    for led in "${!triggers[@]}"
    do
        echo ${triggers[$led]} > $led/trigger
        debug "LEDS: $led trigger enabled"
    done
}

leds_disable() {
    cd /sys/class/leds
    for led in "${!triggers[@]}"
    do
        echo "none" > $led/trigger
    done
}

led_set_alarm() {
    local cmd="$1"

    [ x"$cmd" == x"on" ]  && mts-io-sysfs store alarm 1
    [ x"$cmd" == x"off" ] && mts-io-sysfs store alarm 0
    [ x"$cmd" == x"minor" ] && mts-io-sysfs store alarm 2
    [ x"$cmd" == x"update" ] && mts-io-sysfs store alarm 100
    debug "LEDS: alarm set to $1"
}

led_set_device_ready() {
    local cmd="$1"

    [ x"$cmd" == x"on" ]  && mts-io-sysfs store device-ready 1
    [ x"$cmd" == x"off" ] && mts-io-sysfs store device-ready 0
    debug "LEDS: device_ready set to $1"
}

led_set_ppp_act() {
    cd /sys/class/leds
    for led in "${!triggers[@]}"
    do
        if [[ x"${triggers[$led]}" == x"netdev" ]]; then
            echo "ppp0" > $led/device_name
            echo "1" > $led/rx
            echo "1" > $led/tx
            debug "LEDS: ppp activity trigger is set"
        fi
    done
}

leds_set_brightness() {
    cd /sys/class/leds
    for led in "${!triggers[@]}"
    do
        local cmd="$1"

        if [[ x"$cmd" == x"on" ]]; then
            brightness="255"
        elif [[ x"$cmd" == x"off" ]]; then
            brightness="0"
        fi

        if [[ x"${triggers[$led]}" == x"led-alarm" ]]; then
            #
            # led alarm is inverted
            #
            if [[ x"$cmd" == x"on" ]]; then
                brightness="0"
            elif [[ x"$cmd" == x"off" ]]; then
                brightness="255"
            fi
        fi

        echo $brightness > $led/brightness

        debug "LEDS: $led brightness set to $cmd"
    done
}

case $1 in
  start)
    leds_disable            # disable all triggers
    leds_set_brightness off # set all leds to off
    leds_enable             # enable all triggers
    led_set_alarm update    # update alarm leds with current alarm status
    led_set_ppp_act         # setup ppp activity led
    mtre-leds-monitor &     # start push-button monitor
    ;;

  stop)
    killall -q mtre-leds-monitor
    leds_disable            # disable all led triggers
    leds_set_brightness off # set all leds to off
    ;;

  alarm-on)
    led_set_alarm on        # store alarm
    ;;

  alarm-off)
    led_set_alarm off       # set no alarm
    ;;

  alarm-minor)
    led_set_alarm minor     # blink oneshot on minor alarm
    ;;

  device_ready)
    led_set_device_ready on # indicate device readyness
    ;;

  device_not_ready)
    led_set_device_ready off # indicate device readyness
    ;;

  start-test)
    leds_disable            # disable all triggers
    leds_set_brightness on  # set all leds to on
    ;;

  stop-test)
    leds_disable            # disable all led triggers
    leds_set_brightness off # set all leds to off
    leds_enable             # enable all triggers
    led_set_alarm update    # update alarm leds with current alarm status
    led_set_ppp_act         # restore ppp activity settings
    ;;

  *)
    echo "Usage: $0 <start|stop|alarm-on|alarm-off|alarm-minor|device_ready|device_not_ready|start-test|stop-test>"
    exit 2
    ;;
esac