Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Com порт, Com порт 
:(
    Опции темы
mik19
Дата 20.6.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 30.11.2007

Репутация: нет
Всего: нет



Доброго всем дня, у меня тоже возникла подобная задача, но мне не просто считать данные нужно, а немного посложнее мне нужно его мониторить, и в случае изменений, послать команду в шел (при определенных условиях). Другими словами мне нужен демон, который будет постоянно мониторить СОМ порт, и при поступлении данных, скажем, посылать в шел ансишный код буквы F. 
PM MAIL ICQ   Вверх
chaos
Дата 23.6.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 3
Всего: 44



самый простой вариант настроить таймаут на чтение и в отдельно потоке постоянно пытаться проичтать из порта

PM WWW   Вверх
MAKCim
Дата 23.6.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



select()/poll()/epoll()


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Mal Hack
Дата 29.6.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: нет
Всего: 261



Цитата(study @  1.8.2005,  14:11 Найти цитируемый пост)
Я сам точно не знаю, просто смотрел какой-то класс для Visual C++, а там эти данные вводились...
Так нужны эти данные или нет? smile 

Все эти вещи нужно вводить (DCB, COMMSTATE etc.), но только для Windows, чтобы система разрешила работать с COM портом, как нам надо.
В линуксе этих вещей в принципе нет, т.к. порт по сути - папка/файл. Если попробовать не просто через fopen, а через socket поработать, то может быть, там что-то как-то и придется куда-то указывать.  Правда, не пробовал. У меня в либе fopen висит...

Цитата(chaos @  23.6.2008,  12:54 Найти цитируемый пост)
самый простой вариант настроить таймаут на чтение и в отдельно потоке постоянно пытаться проичтать из порта

Просто тайм-аут может не прокатить. Все зависит какой девайс сидит на порте, и по какому протоколу он работает RS-232, 485, т.к. в этом случае могут быть косяки из-за того, что, дисикнт возникает, короче смещение окна чтения.

PM ICQ   Вверх
Tiffany
Дата 7.7.2008, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 23.12.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Вот тут нашла в своей проге кусочек, вроде то, что ты просил (если я прально поняла). Тока он на QT, но не страшно - переделать недолго =)

Код

    fd_set rfds;
    struct timeval tv;
    int retval;
    int res;
                char buf[255];
                QMutex mut;

                bzero(&buf, sizeof(buf));
    FD_ZERO(&rfds);                    
    FD_SET(ControlThread->COMDevice, &rfds);    
while(1)                  {
    retval = select(ControlThread->COMDevice+1, &rfds, NULL, NULL, NULL); //ждем появления новых данных на порту
    if (retval)        {
mut.lock();    
       res=read(ControlThread->COMDevice, buf, sizeof(buf)); // если что-то появилось - читаем
mut.unlock();    
}


После этих манипуляций в "buf" будут данные с порта, делай с ними что хошь. А ваще читай man select и man termios (настройки порта) 
PM MAIL   Вверх
nworm
Дата 27.9.2008, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: нет
Всего: 8



Тут возникла задача.

При возникновении прерыванию от lpt порта передавать данные на com-порт прям из драйвера lpt-шного прерывания.
Копаюсь в разных примерах драйверов. smile 

Можно в этом случае безнаказанно stdio.h подключить к драйверу прерывания от lpt?
PM MAIL WWW   Вверх
MAKCim
Дата 27.9.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(nworm @  27.9.2008,  00:39 Найти цитируемый пост)
Можно в этом случае безнаказанно stdio.h подключить к драйверу прерывания от lpt? 

нет


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
nworm
Дата 27.9.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: нет
Всего: 8



А может что-нибудь ещё посоветуете?
PM MAIL WWW   Вверх
nworm
Дата 3.10.2008, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: нет
Всего: 8



Что-то я нашёл.

Код

static int skeleton_kernel_initport() {
    struct tty_struct* tty;

    // Get the current options for the port...
    
    f = filp_open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY, 0600);
    fs=get_fs();
    set_fs(KERNEL_DS);

    tty=(struct tty_struct*)f->private_data; 
    unsigned int ccflag = *(tty->termios->c_cflag);

...


В ответ на последнюю строку (unsigned int ccflag = *(tty->termios->c_cflag);) мне выдаётся сообщение:

/home/man/model2_my/lpt_interrupt/skeleton.c: In function ‘skeleton_kernel_initport’:
/home/man/model2_my/lpt_interrupt/skeleton.c:63: error: dereferencing pointer to incomplete type

Никто не знает, что с этим делать?
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0658 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.