Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

com порт

0 views
Skip to first unread message

Gennadij Pastuhov

unread,
Mar 14, 2007, 2:45:30 AM3/14/07
to
Подскажите, плз, можно ли в эхотаге работать с сабжем напрямую?

... Jonny wanna live

Eugene Grosbein

unread,
Mar 14, 2007, 7:23:43 AM3/14/07
to
14 мар 2007, среда, в 09:45 KRAST, Gennadij Pastuhov написал(а):

GP> Подскажите, плз, можно ли в эхотаге работать с сабжем напрямую?

Да, конечно. Открываешь соответствующий файл и вперед.
Обычно прямее в подавляющем числе операционок, на которых работает
эхотаг, тебе не дадут :-)

Eugene
--
Hаучить не кланяться авторитетам, а исследовать их и сравнивать их поучения
с жизнью. Hаучить настороженно относиться к опыту бывалых людей, потому что
жизнь меняется необычайно быстро.

Gennadij Pastuhov

unread,
Mar 14, 2007, 5:19:44 PM3/14/07
to
Среда марта 14 07 14:23 Eugene Grosbein писал к Gennadij Pastuhov:

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

Eugene Grosbein

unread,
Mar 15, 2007, 4:11:12 AM3/15/07
to
15 мар 2007, четверг, в 00:19 KRAST, Gennadij Pastuhov написал(а):

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е зная страхов и желаний

Artem Chuprina

unread,
Mar 15, 2007, 3:52:41 AM3/15/07
to
Eugene Grosbein -> Gennadij Pastuhov @ Thu, 15 Mar 2007 11:11:12 +0300:

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

Eugene Grosbein

unread,
Mar 15, 2007, 8:14:42 AM3/15/07
to
15 мар 2007, четверг, в 10:52 KRAST, Artem Chuprina написал(а):

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

Gennadij Pastuhov

unread,
Mar 15, 2007, 4:18:00 AM3/15/07
to
Четверг марта 15 07 11:11 Eugene Grosbein писал к Gennadij Pastuhov:

GP>> ответа из компорта долго нет, то скрипт так и висит в его

GP>> ожидании. Можно ли как-нибудь это время ограничить?

EG> Можно. Есть куча способов, но это уже к эхотагу малое отношение имеет.

EG> Простейший способ: alarm(). Так как заблокироваться может даже open(),

Просто не знаю, как благодарить!

... Jonny wanna live

Artem Chuprina

unread,
Mar 15, 2007, 5:39:52 AM3/15/07
to
Eugene Grosbein -> Artem Chuprina @ Thu, 15 Mar 2007 15:14:42 +0300:

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

Байкер - тоже паровоз,
Но всего с двумя колес...
(С)энта

Anton Gorlov

unread,
May 6, 2007, 10:18:50 AM5/6/07
to
Привет Gennadij!

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!*] [*_Усачи_*]

Vadim Tzirulnicov

unread,
Jun 11, 2007, 9:48:05 AM6/11/07
to
> Да, конечно. Открываешь соответствующий файл и вперед.
> Обычно прямее в подавляющем числе операционок, на которых работает
> эхотаг, тебе не дадут :-)

А помимо всего прочего надо рулить линиями DTR и RTS (моё ус-во питается от
этих линий) ? Как быть ?


0 new messages