Здравствуйте.
Не подскажет ли кто каким образом можно послушать com порт
я тут поискал но нашел примерчик тока на perl'e а надо на
на с++.
если знает кто подскажите или скажите в какую сторону посмотреть.
Тут возникла мысля привязать поток вывода к устройству но вот как это сделать и какой поток ???? вот тут загвоздочка:(
Заранее благодарен.
poprobui inb(comport)
>poprobui inb(comport)
че то я в манах глянул нет там не inb не comport
и вродебы сом порт(1) в *nix называется cuaa0
или я не прав?
inb самая что нинаесть низкоуровневая функция и в манах про нее ничего нет
пользуется ей так
var = inb(port);
port это порт твоего ком порта например 0х278
в var записывается текущее значение твоего порта port
>inb самая что нинаесть низкоуровневая функция и в манах про нее ничего
>нет
>пользуется ей так
>var = inb(port);
>port это порт твоего ком порта например 0х278
>в var записывается текущее значение твоего порта portа если попробовать читать через файловый дескриптор?
>а если попробовать читать через файловый дескриптор?вот это самое верное решение! :) почитай по этому поводу man ioctl
какие ioctl используются под ком-порт я точно не помню, в манах все есть.
значит откраваешь файл устройства и вперед. чтобы что то сделать с самим ком-портом используешь ioctl. по-моему на эту тему уже где то было обсуждение, поищи по форуму
>вот это самое верное решение! :) почитай по этому поводу 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 а как ее выставить?
> fd = open("/dev/cuaa0", O_RDWR | O_NOCTTY | O_NDELAY);В имени устройства вы уверены?
>while (is.get(ch))
> cout << ch;
>
>но эта падла висит на while и все нет ни какой информацииНе понял, как O_NDELAY может висеть...
>под виндой проверял по гипертерминалу логи есть а вот как под
>фрей проверить не знаюminicom
>и еще одна загвоздка соединение д б на скорости 9600 а
>как ее выставить?man termios
>> 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
еще раз спасибо посмотрим
>> fd = open("/dev/cuaa0", O_RDWR | O_NOCTTY | O_NDELAY);
>
>В имени устройства вы уверены?сорри за предидущий ответ ...
я тут в ядро глянул там ком порт на девайсе cio0 а вот в папке /dev его нет
но есть cuaa0 .... я в тупике :((((
>вот это самое верное решение! :) почитай по этому поводу man ioctl
>
>какие ioctl используются под ком-порт я точно не помню, в манах все
>есть.
>значит откраваешь файл устройства и вперед. чтобы что то сделать с самим
>ком-портом используешь ioctl. по-моему на эту тему уже где то было
>обсуждение, поищи по форумуВ общем почитал я маны к ioctl и чего то я там не нашел нефига про сом порт . Понял что надо прописать дескриптор файла , а потом какието опции но вот где глянуть эти опции для сом порта??????
ман cuaa0 и подобные ничего не дали :((((
кто знает подскажите плиз, очень надо !!!
>кто знает подскажите плиз, очень надо !!!http://linuxland.itam.nsc.ru/misc/other19/index.html
почитай, очень доходчиво все описано, как раз по твоей теме.сделаю лишь маленькую оговорку. там при прослушивании компорта (точнее дескриптора компорта) ипользуется функция select, я бы ее заменнил на poll, они по своему назначению эдентичны, но poll мне кажется удобней.
>http://linuxland.itam.nsc.ru/misc/other19/index.html
>
>почитай, очень доходчиво все описано, как раз по твоей теме.сделаю лишь маленькую
>оговорку. там при прослушивании компорта (точнее дескриптора компорта) ипользуется функция
>select, я бы ее заменнил на poll, они по своему назначению
>эдентичны, но poll мне кажется удобней.блин!!!
я эту статью сто раз перечитывал и до ioctl так и не дошел(лох)
но вот щас нашел :)
спасибо
Все всем спасибо зав помощь!
Все заработало оказывается еще вчера просто я не дождался логов :)))
Или запустил корявую весию и потом не убил она висела в памяти и мешала:)
Короче все хорошо !!!
вот и чудненько :)
>вот и чудненько :)
ели хотите могу подкинуть еще задачку :)
Теперь все эти логи на лить в базу mysql :)