... Jonny wanna live
GP> Подскажите, плз, можно ли в эхотаге работать с сабжем напрямую?
Да, конечно. Открываешь соответствующий файл и вперед.
Обычно прямее в подавляющем числе операционок, на которых работает
эхотаг, тебе не дадут :-)
Eugene
--
Hаучить не кланяться авторитетам, а исследовать их и сравнивать их поучения
с жизнью. Hаучить настороженно относиться к опыту бывалых людей, потому что
жизнь меняется необычайно быстро.
GP>> Подскажите, плз, можно ли в эхотаге работать с сабжем напрямую?
EG> Да, конечно. Открываешь соответствующий файл и вперед.
EG> Обычно прямее в подавляющем числе операционок, на которых работает
EG> эхотаг, тебе не дадут :-)
Спасибо за подсказку, нашёл в инете скрипт Витуса, который переделал под себя.
Однако появился один косяк. который не знаю, как правильно обработать: если
ответа из компорта долго нет, то скрипт так и висит в его ожидании. Можно ли
как-нибудь это время ограничить?
#!/usr/bin/perl -w
use strict;
use Fcntl;
unless (@ARGV == 2) {
die <<EOF
Usage: $0 -l line
Where line is serial port name
EOF
}
unless ($ARGV[0] eq "-l") {
die <<EOF
$ARGV[0]: wrong parameter, must be "-l"
EOF
}
my $port = $ARGV[1];
my $lock_dir = "/var/lock";
my $lock_file = $lock_dir . "/LCK..$port";
my $rssi = "";
lock($port);
open F, "+<$port" or die $!;
select F;
$|=1;
select STDOUT;
print F "AT+CSQ\r" || die $!;
my $rc = <F>;
while (<F>) {
die "Modem error\n" if /^ERROR\r?$/;
if ($_ =~ m/\ (\d+)\,/x) {
$rssi = $1;
printf "INSERT INTO pvalues (alias, value, units) VALUES
('RSSI'
exit (0);
}
}
unlock();
sub lock {
sysopen(F,$lock_file,O_RDWR|O_CREAT|O_EXCL) || die "Cannot lock
$port:$!
print F $$,"\n";
close F;
$SIG{__DIE__}=\&unlock;
}
sub unlock {
unlink $lock_file;
}
... Jonny wanna live
GP> Спасибо за подсказку, нашёл в инете скрипт Витуса, который переделал под
GP> себя.
GP> Однако появился один косяк. который не знаю, как правильно обработать:
GP> если
GP> ответа из компорта долго нет, то скрипт так и висит в его ожидании. Можно
GP> ли
GP> как-нибудь это время ограничить?
Можно. Есть куча способов, но это уже к эхотагу малое отношение имеет.
Простейший способ: alarm(). Так как заблокироваться может даже open(),
если nonblock не выставлять, то прямо перед ним вставь, например:
alarm(10);
GP> open F, "+<$port" or die $!;
GP> select F;
GP> $|=1;
GP> select STDOUT;
GP> print F "AT+CSQ\r" || die $!;
GP> my $rc = <F>;
GP> while (<F>) {
И после каждого успешного чтения выключай таймер:
alarm(0);
GP> die "Modem error\n" if /^ERROR\r?$/;
GP> if ($_ =~ m/\ (\d+)\,/x) {
GP> $rssi = $1;
GP> printf "INSERT INTO pvalues (alias, value, units) VALUES
GP> ('RSSI'
GP> exit (0);
GP> }
А перед следующим опять включай:
alarm(10);
GP> }
GP> unlock();
Если в течение 10 секунд ничего не происходит, придет SIGALRM
и даст процессу по башке. Дефолтный обработчик процесс завершит.
Можно написать свой, который сделает что-то другое.
Eugene
--
Устав от радостных пиров,
Hе зная страхов и желаний
EG> Простейший способ: alarm(). Так как заблокироваться может даже open(),
EG> если nonblock не выставлять,
Причем, если выставлять, то тоже может...
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: r...@jabber.ran.pp.ru
Win-юзеры - это типа Win-модемов и Win-принтеров: такие же юзеры, но попроще,
без мозгов и памяти на борту.
http://www.livejournal.com/~dottedmag/158509.html
EG>> Простейший способ: alarm(). Так как заблокироваться может даже open(),
EG>> если nonblock не выставлять,
AC> Причем, если выставлять, то тоже может...
Чего-то такое в ru.unix.prog обсуждали, но уже забыл, почему может,
не напомнишь? Из-за лежащего на NFS файла устройства?
Eugene
--
Choose SMTP and wondering why the fsck you are logged on on a Sunday morning
GP>> ответа из компорта долго нет, то скрипт так и висит в его
GP>> ожидании. Можно ли как-нибудь это время ограничить?
EG> Можно. Есть куча способов, но это уже к эхотагу малое отношение имеет.
EG> Простейший способ: alarm(). Так как заблокироваться может даже open(),
Просто не знаю, как благодарить!
... Jonny wanna live
EG>>> Простейший способ: alarm(). Так как заблокироваться может даже
EG>>> open(), если nonblock не выставлять,
AC>> Причем, если выставлять, то тоже может...
EG> Чего-то такое в ru.unix.prog обсуждали, но уже забыл, почему может,
EG> не напомнишь? Из-за лежащего на NFS файла устройства?
Я тоже точно не помню. Помню, что грабель был. Можно на NFS, может
быть занятая шина USB, если файл устройства у тебя на USB mass storage
или com на самом деле не честный, а поверх USB... Это я только о
восстановимых ошибках. Может надолго задуматься при чтении файла
устройства с поцарапанного CD.
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: r...@jabber.ran.pp.ru
Байкер - тоже паровоз,
Но всего с двумя колес...
(С)энта
14 марта 2007 года (а было тогда 09:45:45)
Gennadij Pastuhov в своем письме к All писал:
GP> Подскажите, плз, можно ли в эхотаге работать с сабжем напрямую?
Понадобилось тоже порабоать с ком-портом.. (для отсылки смс через gsm-модем).
помог модуль Device-SerialPort
http://prdownloads.sourceforge.net/sendpage/Device-SerialPort-1.002.tar.gz?down
load
С уважением. Anton aka Stalker
np: silence ( Winamp ушел в Партизаны ;-)
Linux Registered User #386476
[#*TEAM:*#] [#_Злой СисОп_#] [*Heavy Metal!*] [*_Усачи_*]
А помимо всего прочего надо рулить линиями DTR и RTS (моё ус-во питается от
этих линий) ? Как быть ?