snowgum

ussd.sh

Nov 28th, 2021
778
122 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/sh
  2.  
  3. CURRMODEM=$(uci get modem.general.modemnum)
  4. COMMPORT="/dev/ttyUSB"$(uci get modem.modem$CURRMODEM.commport)
  5. ROOTER=/usr/lib/rooter
  6.  
  7. if [ -n "$1" ]; then
  8.     echo "$1" > /tmp/ussd_arg$CURRMODEM
  9. fi
  10.  
  11. while true; do
  12.     if [ -e /tmp/ussd_arg$CURRMODEM ]; then
  13.         read USSDSTR < /tmp/ussd_arg$CURRMODEM
  14.         rm /tmp/ussd_arg$CURRMODEM
  15.     fi
  16.     if [ -n "$USSDSTR" ]; then
  17.         ATCMDD="AT+CUSD=1,\"$USSDSTR\",15"
  18.         OX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "ussd.gcom" "$CURRMODEM" "$ATCMDD" | tr "\n" "\v")
  19.         USSD=$(echo "$OX" | grep -o "+CUSD: .\+\",[0-9]\+" | tr "\v" "\n")
  20.         USSDL=${#USSD}
  21.         USSDLx=$((USSDL - 2))
  22.         DCS=$(printf "${USSD:$USSDLx:2}")
  23.         if [ $USSDL -ge 14 ]; then
  24.             USSDL=$((USSDL - 14))
  25.             USSD=$(printf "${USSD:10:$USSDL}")
  26.             if [ $DCS -eq "72" ]; then
  27.                 USSDx=""
  28.                 USSDL=${#USSD}
  29.                 nV=0
  30.                 until [ $nV -ge $USSDL ]; do
  31.                     UU=$(printf "%d" "0x"${USSD:$nV:4})
  32.                     if [[ $UU -lt 128 ]]; then
  33.                         USSDx="$USSDx"$(printf "%b" "\\$(printf "0%o" "$UU")")
  34.                     elif [[ $UU -lt 2048 ]]; then
  35.                         UUU=$(((($UU & 1984) >> 6) | 192))
  36.                         USSDx="$USSDx"$(printf "%b" "\\$(printf "0%o" "$UUU")")
  37.                         UUU=$((($UU & 63) | 128))
  38.                         USSDx="$USSDx"$(printf "%b" "\\$(printf "0%o" "$UUU")")
  39.                     else
  40.                         UUU=$(((($UU & 61440) >> 12) | 224))
  41.                         USSDx="$USSDx"$(printf "%b" "\\$(printf "0%o" "$UUU")")
  42.                         UUU=$(((($UU & 4032) >> 6) | 128))
  43.                         USSDx="$USSDx"$(printf "%b" "\\$(printf "0%o" "$UUU")")
  44.                         UUU=$((($UU & 63) | 128))
  45.                         USSDx="$USSDx"$(printf "%b" "\\$(printf "0%o" "$UUU")")
  46.                     fi
  47.                     nV=$(( $nV + 4 ))
  48.                 done
  49.                 USSD="$USSDx"
  50.             fi
  51.         else
  52.             USSD=$(echo "$OX" | tr "\v" "\n")
  53.         fi
  54.         echo
  55.         echo "-----------------------------------------------------------"
  56.         echo "$USSD"
  57.         echo "-----------------------------------------------------------"
  58.         echo
  59.     fi
  60.     printf "Enter blank to quit, or a USSD string to send: "; read USSDSTR
  61.     if [ -z "$USSDSTR" ]; then
  62.         break
  63.     fi
  64. done
  65. ATCMDD="AT+CUSD=2"
  66. OX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "run-at.gcom" "$CURRMODEM" "$ATCMDD")
  67. exit 0
  68.  
RAW Paste Data