use Device::SerialPort;
use Data::Dump qw(dump);
-my $device = $ENV{DEVICE} || '/dev/ttyUSB0';
+my $device = $ENV{DEVICE} || shift @ARGV || '/dev/ttyUSB0';
my $port = Device::SerialPort->new( $device ) || die "$device: $!";
$port->baudrate(115200) || die "fail $device baudrate";
print STDERR ">>> $cmd >>> $message\n";
$port->write("$cmd\r");
# $port->write_done(1); # flush
- $port->write_drain;
+# $port->write_drain;
+ $port->read( length($cmd) + 1 ); # slurp echo
+
my $ret = $port->read(1);
again:
while ( my $c = $port->input ) {
return $ret;
}
-c 'ATE0' => 'echo off';
-#c 'ATZ' => 'reset';
-#
+#c 'ATE0' => 'echo off';
+c 'ATZ' => 'reset';
+
c 'ATI' => 'info';
-c 'AT+CGMI' => 'manufacturer';
+c 'AT+CPIN?' => 'SIM pin';
+
+my $manufacturer = c 'AT+CGMI' => 'manufacturer';
c 'AT+CGMM' => 'model';
c 'AT+CLCK=?' => 'facility lock';
+if ( $manufacturer =~ m/Huawei/i ) {
+
+print "# Huawei\n";
+
c 'AT^HWVER' => 'hardware version';
c 'AT^CVOICE?' => 'is voice enabled?';
c 'AT^SYSINFO' => 'sys info';
+} elsif ( $manufacturer =~ m/ZTE/i ) {
+
+print "# ZTE\n";
+
+c 'AT+GMR' => 'revision';
+
+c 'AT+GCI?' => '?';
+
+c 'AT+ZOPRT?' => '?';
+
+}
$port->close || die "can't close port $!";