Известно, что модемы от huawei принимают сообщения на /dev/ttyUSB0 и отвечают на /dev/ttyUSB2. для общения с модемом (отправка ussd запросов) существует много скриптов на perl, но они не хотят работать. сам я perl не знаю, так что если кто поможет, буду очень признателен, вот пример скрипта, работать он не хочет, просто висит и ничего не происходит:
#!/usr/bin/perl
use Getopt::Std;
use Device::Gsm::Pdu;
# defaults
$opt_i = "/dev/ttyUSB2";
$opt_o = "/dev/ttyUSB0";
my $USAGE = <<__EOU;
Usage: $0 [-i input_port] [-o output_port] [-n] [-h] [-v] ussd_msg
Description:
Send and receive 7-bit PDU-encoded USSD messages.
Written and tested to work for (just mine) Huawei E1550 GSM/UMTS USB modem.
Options:
-i port Port to receive data from. Default: $opt_i
-o port Port to send AT commands to. Default: $opt_o
-n Do not send any data to port. Useful with -v.
-h Print this help.
-v Be verbose.
__EOU
sub HELP_MESSAGE {print "$USAGE\n"; exit;}
sub VERSION_MESSAGE {};
getopts ('i:o:hnv');
HELP_MESSAGE() and exit if (! $ARGV[0]) or defined($opt_h);
print "USSD MSG: $ARGV[0]\n" if $opt_v;
my $ussd_req = Device::Gsm::Pdu::encode_text7($ARGV[0]);
$ussd_req =~ s/^..//;
print "PDU ENCODED: $ussd_req\n" if $opt_v;
my $ussd_reply;
if (! $opt_n) {
open (SENDPORT, '+<', $opt_o) or die "Can't open '$opt_o': $!\n";
print SENDPORT 'AT+CUSD=1,',$ussd_req,",15\r\n";
close SENDPORT;
open (RCVPORT, $opt_i) or die "Can't open '$opt_i': $!\n";
print "Waiting for USSD reply...\n" if $opt_v;
while (<RCVPORT>) {
chomp;
die "USSD ERROR\n" if $_ eq "+CUSD: 2";
if (/^\+CUSD: 0,\"([A-F0-9]+)\"/) {
$ussd_reply = $1;
print "PDU USSD REPLY: $ussd_reply\n" if $opt_v;
last;
}
print "Got unknown USSD message: $_\n" if /^\+CUSD:/ and $opt_v;
}
}
if ($ussd_reply) {
$decoded_ussd_reply = Device::Gsm::Pdu::decode_text7('00'.$ussd_reply);
print STDOUT "USSD REPLY: $decoded_ussd_reply\n";
}
else {print "No USSD reply!\n";}