init, docs be added

This commit is contained in:
2026-10-25 07:17:14 +03:00
commit affaff0141
2 changed files with 310 additions and 0 deletions

70
shell/send_sms_ucs2.sh Executable file
View 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