URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1188
[ Назад ]

Исходное сообщение
"Как послушать com-порт?"

Отправлено AlexT , 17-Дек-02 15:44 
Здравствуйте.
Не подскажет ли кто каким образом можно послушать com порт
я тут поискал но нашел примерчик тока на perl'e а надо на
на с++.
если знает кто подскажите или скажите в какую сторону посмотреть.
Тут возникла мысля привязать поток вывода к устройству но вот как это сделать и какой поток ???? вот тут загвоздочка:(
Заранее благодарен.

Содержание

Сообщения в этом обсуждении
"RE: Как послушать com-порт?"
Отправлено Hadash , 17-Дек-02 21:04 
poprobui inb(comport)

"RE: Как послушать com-порт?"
Отправлено AlexT , 18-Дек-02 09:42 
>poprobui inb(comport)

че то я в манах глянул нет там не inb не comport
и вродебы сом порт(1) в *nix называется cuaa0
или я не прав?

"RE: Как послушать com-порт?"
Отправлено NL , 18-Дек-02 13:25 
inb самая что нинаесть низкоуровневая функция и в манах про нее ничего нет
пользуется ей так
var = inb(port);
port это порт твоего ком порта например 0х278
в var записывается текущее значение твоего порта port

"RE: Как послушать com-порт?"
Отправлено AlexT , 18-Дек-02 14:29 
>inb самая что нинаесть низкоуровневая функция и в манах про нее ничего
>нет
>пользуется ей так
>var = inb(port);
>port это порт твоего ком порта например 0х278
>в var записывается текущее значение твоего порта port

а если попробовать читать через файловый дескриптор?


"RE: Как послушать com-порт?"
Отправлено NL , 18-Дек-02 16:00 
>а если попробовать читать через файловый дескриптор?

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


"RE: Как послушать com-порт?"
Отправлено AlexT , 18-Дек-02 16:47 
>вот это самое верное решение! :) почитай по этому поводу man ioctl
>
>какие ioctl используются под ком-порт я точно не помню, в манах все
>есть.
>значит откраваешь файл устройства и вперед. чтобы что то сделать с самим
>ком-портом используешь ioctl. по-моему на эту тему уже где то было
>обсуждение, поищи по форуму

В общем я так сделал
//открытие и проверка сом порта
int fd; // Файловый дескриптор для порта
  fd = open("/dev/cuaa0", O_RDWR | O_NOCTTY | O_NDELAY);
  if(fd==-1)
    cout << "Error!!!  Cant open port!!";
     else
   cout << fd << endl;
//привязываем выходной поток
ifstream is("/dev/cuaa0");
char ch;
//берем все символы из потока и кидаем их на консоль
while (is.get(ch))
  cout << ch;

но эта падла висит на while и все нет ни какой информации :(
а она должна быть так как слушаю цифровую АТС а с нее логи на сом порт идут постоянно.... под виндой проверял по гипер терминалу логи есть а вот как под фрей проверить не знаю :(
и еще одна загвоздка  соединение д б на скорости 9600 а как ее выставить?


"RE: Как послушать com-порт?"
Отправлено vnp , 19-Дек-02 10:13 
>  fd = open("/dev/cuaa0", O_RDWR | O_NOCTTY | O_NDELAY);

В имени устройства вы уверены?

>while (is.get(ch))
>  cout << ch;
>
>но эта падла висит на while и все нет ни какой информации

Не понял, как O_NDELAY может висеть...

>под виндой проверял по гипертерминалу логи есть а вот как под
>фрей проверить не знаю

minicom

>и еще одна загвоздка  соединение д б на скорости 9600 а
>как ее выставить?

man termios


"RE: Как послушать com-порт?"
Отправлено AlexT , 19-Дек-02 10:57 
>>  fd = open("/dev/cuaa0", O_RDWR | O_NOCTTY | O_NDELAY);
>В имени устройства вы уверены?
Да уверен

>>while (is.get(ch))
>>  cout << ch;
>>но эта падла висит на while и все нет ни какой информации
>Не понял, как O_NDELAY может висеть...
Может убрать его?
Ну может и не на while но тогда где?
У меня сделана проверка: после открытия файла выдать его дескриптор
так она его выдает и дальше все.....и не выходит и инфу не пишет...
есть еще одна задумка сделать не while а do чтоб хоть раз цикл пройти

>>под виндой проверял по гипертерминалу логи есть а вот как под
>>фрей проверить не знаю
>
>minicom
спасибо ща попробуем

>>и еще одна загвоздка  соединение д б на скорости 9600 а
>>как ее выставить?
>man termios
еще раз спасибо посмотрим


"RE: Как послушать com-порт?"
Отправлено AlexT , 19-Дек-02 11:29 
>>  fd = open("/dev/cuaa0", O_RDWR | O_NOCTTY | O_NDELAY);
>
>В имени устройства вы уверены?

сорри за предидущий ответ ...
я тут в ядро глянул там ком порт на девайсе cio0 а вот в папке /dev его нет
но есть cuaa0 .... я в тупике :((((


"RE: Как послушать com-порт?"
Отправлено AlexT , 19-Дек-02 10:07 
>вот это самое верное решение! :) почитай по этому поводу man ioctl
>
>какие ioctl используются под ком-порт я точно не помню, в манах все
>есть.
>значит откраваешь файл устройства и вперед. чтобы что то сделать с самим
>ком-портом используешь ioctl. по-моему на эту тему уже где то было
>обсуждение, поищи по форуму

В общем почитал я маны к ioctl и чего то я там не нашел нефига про сом порт . Понял что надо прописать дескриптор файла , а потом какието опции но вот где глянуть эти опции для сом порта??????
ман cuaa0 и подобные ничего не дали :((((
кто знает подскажите плиз, очень надо !!!


"RE: Как послушать com-порт?"
Отправлено NL , 19-Дек-02 11:47 
>кто знает подскажите плиз, очень надо !!!

http://linuxland.itam.nsc.ru/misc/other19/index.html

почитай, очень доходчиво все описано, как раз по твоей теме.сделаю лишь маленькую оговорку. там при  прослушивании компорта (точнее дескриптора компорта) ипользуется функция select, я бы ее заменнил на poll, они по своему назначению эдентичны, но poll мне кажется удобней.



"RE: Как послушать com-порт?"
Отправлено AlexT , 19-Дек-02 12:26 
>http://linuxland.itam.nsc.ru/misc/other19/index.html
>
>почитай, очень доходчиво все описано, как раз по твоей теме.сделаю лишь маленькую
>оговорку. там при  прослушивании компорта (точнее дескриптора компорта) ипользуется функция
>select, я бы ее заменнил на poll, они по своему назначению
>эдентичны, но poll мне кажется удобней.

блин!!!
я эту статью сто раз перечитывал и до ioctl так и не дошел(лох)
но вот щас нашел :)
спасибо


"Всем спасибо!!!!!!!!!!!!"
Отправлено AlexT , 19-Дек-02 14:45 
Все всем спасибо зав помощь!
Все заработало оказывается еще вчера просто я не дождался логов :)))
Или запустил корявую весию и потом не убил она висела в памяти и мешала:)
Короче все хорошо !!!

"RE: Всем спасибо!!!!!!!!!!!!"
Отправлено NL , 19-Дек-02 15:42 
вот и чудненько :)


"RE: Всем спасибо!!!!!!!!!!!!"
Отправлено AlexT , 20-Дек-02 14:28 
>вот и чудненько :)
ели хотите могу подкинуть еще задачку :)
Теперь все эти логи на лить в базу mysql :)