init, docs be added
This commit is contained in:
70
shell/send_sms_ucs2.sh
Executable file
70
shell/send_sms_ucs2.sh
Executable file
@ -0,0 +1,70 @@
|
||||
#!/bin/bash
|
||||
PORT="/dev/ttyUSB2"
|
||||
NUMBER="+7..."
|
||||
TEXT="Привет 412385"
|
||||
SMSC="+79585370690"
|
||||
|
||||
# Функция: номер → swapped nibbles
|
||||
format_number() {
|
||||
local num="${1#+}"
|
||||
local len=${#num}
|
||||
if (( len % 2 != 0 )); then
|
||||
num="${num}F"
|
||||
fi
|
||||
local formatted=""
|
||||
for (( i=0; i<${#num}; i+=2 )); do
|
||||
formatted="${formatted}${num:i+1:1}${num:i:1}"
|
||||
done
|
||||
echo "$formatted"
|
||||
}
|
||||
|
||||
# --- SMSC ---
|
||||
SMSC_FMT=$(format_number "$SMSC")
|
||||
SMSC_DIGITS="${SMSC#+}"
|
||||
SMSC_LEN=$(printf "%02X" $(( (${#SMSC_DIGITS} + 1) / 2 + 1 )))
|
||||
SMSC_PART="${SMSC_LEN}91${SMSC_FMT}"
|
||||
|
||||
# --- DA (Destination Address) ---
|
||||
DEST_DIGITS="${NUMBER#+}" # ← убираем плюс
|
||||
DEST_FMT=$(format_number "$NUMBER")
|
||||
DEST_LEN=$(printf "%02X" ${#DEST_DIGITS}) # ← длина в цифрах, НЕ с плюсом!
|
||||
DEST_PART="${DEST_LEN}91${DEST_FMT}"
|
||||
|
||||
# --- Текст (UCS2 / UTF-16BE) ---
|
||||
TEXT_HEX=$(echo -n "$TEXT" | iconv -f UTF-8 -t UTF-16BE | xxd -p | tr 'a-f' 'A-F' | tr -d '\n')
|
||||
TEXT_LEN_BYTES=$(( ${#TEXT_HEX} / 2 ))
|
||||
TEXT_LEN_HEX=$(printf "%02X" $TEXT_LEN_BYTES)
|
||||
|
||||
# --- TPDU ---
|
||||
# FO=01, MR=00, DA, PID=00, DCS=08(UCS2), UDL, текст
|
||||
TPDU="0100${DEST_PART}0008${TEXT_LEN_HEX}${TEXT_HEX}"
|
||||
TPDU_LEN_DEC=$(( ${#TPDU} / 2 ))
|
||||
FULL_PDU="${SMSC_PART}${TPDU}"
|
||||
|
||||
echo "========================================="
|
||||
echo "Текст: $TEXT"
|
||||
echo "HEX текста: $TEXT_HEX"
|
||||
echo "DA Length: $DEST_LEN (${#DEST_DIGITS} цифр)"
|
||||
echo "Длина TPDU: $TPDU_LEN_DEC байт"
|
||||
echo "Итоговая PDU:"
|
||||
echo "$FULL_PDU"
|
||||
echo "========================================="
|
||||
|
||||
# --- Настройка модема ---
|
||||
printf 'AT+CMEE=2\r' > "$PORT"; sleep 0.3
|
||||
printf 'AT+CMGF=0\r' > "$PORT"; sleep 0.3
|
||||
|
||||
# --- Чтение ответов в фоне ---
|
||||
cat "$PORT" &
|
||||
READER_PID=$!
|
||||
sleep 0.3
|
||||
|
||||
# --- Отправка ---
|
||||
printf 'AT+CMGS=%d\r' "$TPDU_LEN_DEC" > "$PORT"
|
||||
sleep 1
|
||||
printf '%s\x1A' "$FULL_PDU" > "$PORT"
|
||||
echo 'Отправлен sms ?'
|
||||
|
||||
# Ждём ответ (до 30 сек, т.к. сеть может думать долго)
|
||||
sleep 30
|
||||
kill $READER_PID 2>/dev/null
|
||||
Reference in New Issue
Block a user