diff options
| author | Mykyta Dorokhin <mykyta.dorokhin@globallogic.com> | 2020-02-19 15:40:44 +0200 | 
|---|---|---|
| committer | Serhii Kostiuk <serhii.o.kostiuk@globallogic.com> | 2020-05-21 10:40:11 +0300 | 
| commit | 19ca401463153a7694a320f543852412d74cbd8f (patch) | |
| tree | e3720d485786f1f2fc78c909fc2ad2f97829ab8d /recipes-core/mlinux-scripts/mlinux-scripts-1.2/mlinux-switch-cell-fw | |
| parent | ed016261befcdc421ae1ac5d28d21066b56f42f2 (diff) | |
| parent | 92cbb8fb30c624d3be98d6408d6ff7f03264a2c9 (diff) | |
| download | meta-mlinux-19ca401463153a7694a320f543852412d74cbd8f.tar.gz meta-mlinux-19ca401463153a7694a320f543852412d74cbd8f.tar.bz2 meta-mlinux-19ca401463153a7694a320f543852412d74cbd8f.zip | |
mpower-dev-thud: merge meta-mlinux:master (92cbb8fb Feb 11 2020) to meta-mlinux:multiarch5-thud (ed01626 Feb 3 2020)
Diffstat (limited to 'recipes-core/mlinux-scripts/mlinux-scripts-1.2/mlinux-switch-cell-fw')
| -rwxr-xr-x | recipes-core/mlinux-scripts/mlinux-scripts-1.2/mlinux-switch-cell-fw | 211 | 
1 files changed, 211 insertions, 0 deletions
| diff --git a/recipes-core/mlinux-scripts/mlinux-scripts-1.2/mlinux-switch-cell-fw b/recipes-core/mlinux-scripts/mlinux-scripts-1.2/mlinux-switch-cell-fw new file mode 100755 index 0000000..4065ccb --- /dev/null +++ b/recipes-core/mlinux-scripts/mlinux-scripts-1.2/mlinux-switch-cell-fw @@ -0,0 +1,211 @@ +#!/bin/bash +# This script assumes Verizon SIMS ICCID start with 89148 and is firmware 1. +# This script assumes T-Mobile SIMS start with 8901260 and is firmware 2. + +fwsw_modems=(LE910-NA1 LE910C4-NF) +mt_modems=(lna3 l4n1) +readme=/etc/ppp/peers/README.fwswitch +function setactivefirmware +{ +    radio-cmd ${RADIOOPTION} --set-active-firmware $1 +#   RESULT=$(radio-cmd ${RADIOOPTION} 'AT#FWSWITCH='$1',1' 2>&1) +#   if (($? != 0)) ; then +#       >&2 echo "FW Set failed" +#       return 1 +#   fi +#   if [[ $RESULT =~ [Ee][Rr][Rr][Oo][Rr] ]] ; then +#       >&2 echo "FW Set failed" +#       return 1 +#   fi +} + +function getactivefirmware +{ +    /usr/bin/radio-query ${RADIOOPTION} --active-firmware +#   FW=$(/usr/bin/radio-cmd ${RADIOOPTION} 'AT#FWSWITCH?' 2>/dev/null) +#   if (($? != 0)) ; then +#       >&2 echo "FW Query failed" +#       return 1 +#   fi +#   [[ $FW =~ \#FWSWITCH:[[:space:]]*([^,]*) ]] +#   echo "${BASH_REMATCH[1]}" +} + +# See if string is in array of strings +# parm 1 String +# parm 2 Arrays of strings +function findItem { +    local s check="$1" +    shift +    for s ; do  +        [[ "$s" == "$check" ]] && return 0; +    done +    return 1 +} + + +function usage { +>&2 echo " +Usage: $0 <image_id> [timeout] +    image_id <0|1|2|-1>  : for dual FW image SKU-s, the id of the image to switch to +                       -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 + +# +# Check if the radio present +# +MODEL=$(radio-query ${RADIOOPTION} --model 2>&1) +result=$? +if [[ $MCONTEXT =~ [Ee][Rr][Rr][Oo][Rr] ]] ; then +    RADIOOPTION="${RADIOOPTION2}" +    MODEL=$(radio-query ${RADIOOPTION} --model 2>&1) +    result=$? +fi + +if ((result != 0)) ; then +  [ "$VERBOSE" ] && >&2 echo "Assume no radio on this device." +  exit 0 +fi + +# +# Load args (don't wait for the radio by default) +# +FWIMAGE=$1 +if ((FWIMAGE < -2)) || ((FWIMAGE > 2)) ; 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 ${RADIOOPTION} --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 +            # Verizon +            logger -s -t mlinux-sw-firmware -p daemon.info "Assuming $iccid is a Verizon SIM ICCID using Firmware 1" +            ((FWIMAGE=1)) +        elif [[ $iccid =~ ^8901260.* ]] ; then +            # T-Mobile +            logger -s -t mlinux-sw-firmware -p daemon.info "Assuming $iccid is a T-Mobile SIM ICCID using Firmware 2" +            ((FWMAGE=2)) +            if [[ $MODEL == LE910-NA1 ]] ; then  # Assume LNA3 has no firmware image 2 +                ((FWIMAGE=0)) +            fi +        else +            # Everybody else +            logger -s -t mlinux-sw-firmware -p daemon.info "Assuming $iccid is a possibly AT&T SIM using Firmware 0" +            ((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: " + +# +# Applicable for LTE910-NA1 and LE910C4-NF with dual FW images only +# +if ! findItem "$MODEL" "${fwsw_modems[@]}" ; then +    echo "Firmware switch is not supported on ${MODEL}." +    exit 1 +fi + +# +# Check if firmware switch is required +# +FWACTIVE=$(getactivefirmware) +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. +for f in $mt_modems ; do +    linkf=/etc/ppp/peers/${f}_chat +    if ! [[ -L ${linkf} ]] || [[ $(basename $(readlink -f ${linkf})) != ${readme} ]] ; then +        ln -sf "${readme}" "${linkf}" +        echo "Chat script is now disabled." +    fi +done + +# +# Switch the firmware +# +RESULT=$(setactivefirmware "$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 ${RADIOOPTION} --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 | 
