2023-04-01 10:00:13 +08:00

68 lines
2.0 KiB
Bash

#!/bin/sh
CURRMODEM=$(uci get modem.general.modemnum)
COMMPORT="/dev/ttyUSB"$(uci get modem.modem$CURRMODEM.commport)
ROOTER=/usr/lib/rooter
if [ -n "$1" ]; then
echo "$1" > /tmp/ussd_arg$CURRMODEM
fi
while true; do
if [ -e /tmp/ussd_arg$CURRMODEM ]; then
read USSDSTR < /tmp/ussd_arg$CURRMODEM
rm /tmp/ussd_arg$CURRMODEM
fi
if [ -n "$USSDSTR" ]; then
ATCMDD="AT+CUSD=1,\"$USSDSTR\",15"
OX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "ussd.gcom" "$CURRMODEM" "$ATCMDD" | tr "\n" "\v")
USSD=$(echo "$OX" | grep -o "+CUSD: .\+\",[0-9]\+" | tr "\v" "\n")
USSDL=${#USSD}
USSDLx=$((USSDL - 2))
DCS=$(printf "${USSD:$USSDLx:2}")
if [ $USSDL -ge 14 ]; then
USSDL=$((USSDL - 14))
USSD=$(printf "${USSD:10:$USSDL}")
if [ $DCS -eq "72" ]; then
USSDx=""
USSDL=${#USSD}
nV=0
until [ $nV -ge $USSDL ]; do
UU=$(printf "%d" "0x"${USSD:$nV:4})
if [[ $UU -lt 128 ]]; then
USSDx="$USSDx"$(printf "%b" "\\$(printf "0%o" "$UU")")
elif [[ $UU -lt 2048 ]]; then
UUU=$(((($UU & 1984) >> 6) | 192))
USSDx="$USSDx"$(printf "%b" "\\$(printf "0%o" "$UUU")")
UUU=$((($UU & 63) | 128))
USSDx="$USSDx"$(printf "%b" "\\$(printf "0%o" "$UUU")")
else
UUU=$(((($UU & 61440) >> 12) | 224))
USSDx="$USSDx"$(printf "%b" "\\$(printf "0%o" "$UUU")")
UUU=$(((($UU & 4032) >> 6) | 128))
USSDx="$USSDx"$(printf "%b" "\\$(printf "0%o" "$UUU")")
UUU=$((($UU & 63) | 128))
USSDx="$USSDx"$(printf "%b" "\\$(printf "0%o" "$UUU")")
fi
nV=$(( $nV + 4 ))
done
USSD="$USSDx"
fi
else
USSD=$(echo "$OX" | tr "\v" "\n")
fi
echo
echo "-----------------------------------------------------------"
echo "$USSD"
echo "-----------------------------------------------------------"
echo
fi
printf "Enter blank to quit, or a USSD string to send: "; read USSDSTR
if [ -z "$USSDSTR" ]; then
break
fi
done
ATCMDD="AT+CUSD=2"
OX=$($ROOTER/gcom/gcom-locked "$COMMPORT" "run-at.gcom" "$CURRMODEM" "$ATCMDD")
exit 0