2010-06-03

Кодировки GSM модемов

Ужас, сколько всего :)
На самом деле строчка "*100#" превращается такими командами (слегка попортив GSM::PDA код)

$_='AA180C3602';
print;
$_=unpack'b*',pack"H*",$_;
s/([01]{7})/${1}0/g;
$_=pack 'b*',$_;

print "'$_'";

$_=unpack 'b*',$_;
s/([01]{7})0/$1/g;
print unpack"H*", pack'b*',$_;
# aa180c360200

Декодировка. Упаковать в lsb-бинарную строчку (младший бит первый):
AA => 01010101
18 => 00011000
0c => 00110000
36 => 01101100
02 => 01000000
Собираем в кучу:
0101010100011000001100000110110001000000
Нарезаем по 7 бит (я просто добавил по биту после каждого 7-го - а потом снова порезал на 8)
и декодируем.

bits = 01010100 10001100 00001100 00001100 11000100
septet = 0101010
septet = 1000110
septet = 0000110
septet = 0000110
septet = 1100010
Получили '*100#'

Ответ в UCS2 или UTF-16BE..
И ещё интересно:
at+cscs=?
+CSCS: ("IRA","GSM","UCS2")
Хотя at+cscs="GSM" выдаёт ОК и ничего не меняется :)

Да. И всё отправляется и принимается чудненько через консольку ttyUSB1.
Не надо писать в одну и читать в другую :)

Комментариев нет: