summaryrefslogtreecommitdiff
path: root/recipes-core/mlinux-scripts/mlinux-scripts-1.2/mlinux-switch-cell-fw
blob: 9edacac0408a2a240f3ad84b1e29c24ee699e41b (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
#!/bin/bash
lna3_chat_link=/etc/ppp/peers/lna3_chat
lna3_readme=/etc/ppp/peers/README.lna3
function usage {
>&2 echo "\
Usage: $0 <image_id> [timeout]
    image_id <0|1|-1>  : for dual FW image SKU-s, the id of the image to switch to
                       (LTE910-NA1 is the only supported radio for now).
                       -1 is based on SIM
    timeout            : wait time for radio to come up if set (default : 15 sec)
    
"
    exit 1
}

if [ $# -gt 2 ] ; then
    usage
fi

#
# Load args (don't wait for the radio by default)
#
FWIMAGE=$1
if ((FWIMAGE < -2)) || ((FWIMAGE > 1)) ; then
    usage
fi
if ! >&2 /usr/sbin/mlinux-cell-radio-ready ; then
    [ "$VERBOSE" ] && >&2 echo Radio is not ready
    [ "$VERBOSE" ] && >&2 echo Try again later
    exit 1
fi
if ((FWIMAGE == -1)) ; then
    iccid=$(radio-query --iccid)
    if (($? == 0)); then
        if ((${#iccid} == 0)) ; then
            [ "$VERBOSE" ] && >&2 echo "No carrier.  Maybe no SIM?"
            [ "$VERBOSE" ] && >&2 echo "ERROR: Cannot decide on firmware"
            exit 1
        fi
        if [[ "$iccid" =~ ^89148.* ]] ; then
            ((FWIMAGE=1))
        else
            ((FWIMAGE=0))
        fi
    else
       >&2 echo "Cannot get ICCID from SIM"
       >&2 echo "Try again later"
       exit 1
    fi
fi
    

TIMEOUT=${2:-15}
if [ "$VERBOSE" != "yes" ]; then
  VERBOSE=""
fi

[ "$VERBOSE" ] && >&2 echo -n "Switching the radio firmware image: "

#
# Check if the radio present
#
MODEL=$(radio-query --model)
if [ $? -ne 0 ]; then
  [ "$VERBOSE" ] && >&2 echo "Assume no radio on this device."
  exit 0
fi

#
# Applicable for LTE910-NA1 with dual FW images only
#
productid=$(/usr/sbin/mts-io-sysfs show product-id)
if [[ $MODEL != LE910-NA1 ]] || ! [[ $productid =~ -LNA3- ]] ; then
  [ "$VERBOSE" ] && >&2 echo "Firmware switch is supported only on LE910-NA1 models with product-id containing -LNA3-."
  exit 0
fi

#
# Check if firmware switch is required
#
FWACTIVE=$(radio-query --active-firmware)
if [ $? -ne 0 ] || [ "$FWACTIVE" == "" ]; then
  [ "$VERBOSE" ] && >&2 echo "The $MODEL radio does not support firmware switching."
  exit 0
fi

if (( FWACTIVE == FWIMAGE )); then
  echo "Cellular radio firmware has already been switched to $FWIMAGE image."
  exit 0
fi

# Disable the LNA3 chat script in case of failure.
if ! [[ -L $lna3_chat_link ]] || [[ $(basename $(readlink -f $lna3_chat_link)) != README.lna3 ]] ; then
  ln -sf "${lna3_readme}" "${lna3_chat_link}"
  echo "Chat script is now disabled."
fi

#
# Switch the firmware
#
RESULT=$(radio-cmd --set-active-firmware "$FWIMAGE")
if [ $? -ne 0 ]; then
  [ "$VERBOSE" ] && >&2 echo "$RESULT"
  exit 1
fi


#
# Exit if no TIMEOUT set
#
# This is somewhat dangerous in that we assume the radio
# will switch.
if ((TIMEOUT == 0)) ; then
   if ((FWIMAGE == 0)) ; then
     [ "$VERBOSE" ] && >&2 echo "Use mlinux-switch-apn to switch the APN when the radio is ready, before dialing"
     exit 0
   fi
fi
# 
#
# Wait for the radio to be ready before continuing
#
COUNTER=0

[ "$VERBOSE" ] && echo -n "Wait..."

#
# Give it some time
#
sleep 5

while [ $COUNTER -lt $TIMEOUT ]; do
  MODEL=$(radio-query --model)
  if [ $? -eq 0 ]; then
    echo "Cellular radio firmware has been switched to $FWIMAGE image."
    exit 0
  fi

  let COUNTER=COUNTER+1

  [ "$VERBOSE" ] && echo -n "."

  sleep 1
done

>&2 echo "Cellular radio is not ready."
>&2 echo "When it becomes ready, invoke /usr/sbin/mlinux-switch-apn"
>&2 echo "to set the APN"
exit 1