Originally Posted by
dlukanidin
посмотрите последний скрипт...
Декодирование сделано для кодировки русского языка в unicode UTF-8. Если оператор отвечает на другом языке или в другой кодировке, возможно нужны правки.
Проверил ваш скрипт на Huawei E1550 оператор Utel Украина
Code:
Modem: huawei E1550
SysInfo: normal access : roaming : normal SIM : GSM/GPRS(EDGE)
Operator: "UA-KYIVSTAR"(GSM)
SysCfg: Auto-WCDMA prefered(Roaming Supported)
Connection time: 0 days 5 hours 39 min 30 sec :
Upload speed : 0.4 KBits :
Download speed : 0.2 KBits :
Sent data : 2 MB :
Received data : 16 MB :
Signal: 24 : db : -65 dBm : Persent : 80 %
Balance: i640b75<67k021z014Q677N163t503.17q10334L035.2B2071152.17n1*340j276 456H
163x645l116&063.334R74@506\015f542\434&173j021651$676h2076053=475n1n0439655$02a0
24V701
Вроде все работает кроме баланса. Я думаю нужно ориентироваться на последний параметр при ответе у меня он "15" у вас я думаю "72", еще встречал где-то "128". Впрочем насчет 128 не уверен помню только первые 2 цифры - пускай пока будет "12x". Предполагаю что он и говорит в какой кодировке ответ оператора. Для моего случая думаю нужна обратная процедура которой вы кодируете номер USSD(*100#), например decodePDU
Вот пример ответа моего оператора
Code:
+CUSD: 0,"D6F01C0D1287D961F75CA70F9FC3EC933B9F06D9642C9B6D078287D765BA3B9F06C15830D80E447E93C3F4F5DB9E4F83602C180C8496BB5DD0B2BC6C4FCBD76110F94D0ED3D76F7B7E8D06C1DF7376FD0C52C564B111",15
Должно полуиться что-то типа этого
Code:
Vash balans:zagal'nyi 62,66; paketnyi 0,00; dodatkovyi 0,00 hrn.Perevirka dodatkovykh poslug *121#
По крайней мере так раскодирует перловый скрипт не помню где взятый
Сам к сожалению не сильно могу помочь из-за своих обрывочных знаний программирования shell
Добавляю пример "перлового" скрипта
Code:
#!/opt/bin/perl
my $pdu_data = 'D6F01C0D1287D961F75CA70F9FC3EC933B9F06D9642C9B6D078287D765BA3B9F
06C15830D80E447E93C3F4F5DB9E4F83602C180C8496BB5DD0B2BC6C4FCBD76110F94D0ED3D76F7B
7E8D06C1DF7376FD0C52C564B111';
if (@ARGV != 0)
{
$pdu_data = $ARGV[0];
}
@a=split(//,unpack("b*", pack("H*",$pdu_data)));
for ($i=6; $i < $#a; $i+=7)
{
$a[$i].= "0";
}
#print @a,"\n";
print pack("b*", join("", @a)).""