Re: offtopic: http://vitus-wagner.livejournal.com/191559.html
В сообщении от Пятница 07 сентября 2007 13:29 Ed написал(a):
> извиняюсь, что в который раз пишу в этот лист не по теме, но практика
> показывает, что уровень ответов тут будет повыше. если мне подскажут
> лучшее место для обсуждения вопросов программирования на русском языке -
> буду очень благодарен.
>
> возникла и у меня задача работать из своей программы (C) с gsm-модемом.
> то есть отсылать at-команды, анализировать ответы.
> в частности устанавливать ppp-соединение (тут вроде всё просто - делаем
> pty и натравливаем на него pppd - в общем по аналогии с pptpclient);
> отсылать смс и прочую мелочевку.
>
> в общем-то всё можно написать - просто неохота изобретать очередной
> веловипед с квадратными колёсами.
>
> ps: аргументированные предложения кинуть си и написать на каком-нибудь
> скриптовом языке принимаются ;)
Да на любом скриптовом. Когда-то вот так писал:
#!/usr/bin/perl
use Device::Modem;
my $number = $ARGV[0];
chomp $number;
$number =~ s/\+7/8/g;
my $pwd = $ARGV[1];
chomp $pwd;
$pwd = "pwd: $pwd\r\n";
my $unit_id = $ARGV[2];
my $port ||= '/dev/ttyS1';
my $baud ||= 9600;
my $timeout = 10;
my $modem = new Device::Modem ( port => $port );
if( $modem->connect( baudrate => $config{'baud'} || 9600 ) ) {
print "ok connected.\n";
} else {
die "cannot connect to $port serial port!: $!";
}
print '- trying to dial [', $number, ']', "\n";
($ok, $answer) = $modem->dial($number,30);
if( $ok ) {
print "Ok, number dialed\n";
} else {
#print "No luck!\n";
die "No connect: $answer\n";
}
# послать навигатору приглашение к обмену данными
$modem->atsend( $pwd );
my $close = 0;
my $file = '';
my $i=0;
while( !$close )
{
$answer = $modem->answer(), "\n";
if ($answer eq '+++' ||
$answer eq 'NO CARRIER' ||
$answer eq 'AT+CPAS' ||
$answer eq 'ATH')
{
print "hungup '$answer'\n";
$close = 1;
}
else
{
chomp $answer;
$answer =~ s/\r//g;
$answer =~ s/\n//g;
print "[".$answer."]\n";
$file .= $answer;
}
# limit execution circles
if (++$i>$timeout)
{
print "timeout (circles): $timeout\n";
$close = 1;
}
}
# end data session
$modem->attention(); # send 'attention' sequence (+++)
$modem->hangup(); # returns modem answer
$modem->disconnect();
print "got file: \n".$file."\n";
print "success!\n";
Reply to: