[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: