The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Портирование программы работающей с COM-портами из Windows в Unix (port win serial gcc ioctl lib)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: port, win, serial, gcc, ioctl, lib,  (найти похожие документы)
Date: Mon, 03 Feb 2003 17:03:39 +0500 From: Valentin Nechayev <[email protected]> Newsgroups: ftn.ru.unix.prog Subject: Портирование программы работающей с COM-портами из Windows в Unix GG> Возникла экстренная необходимость портировать Win32 программу на Linux, а я под GG> него никогда не программил (сегодня только поставил). GG> Ключевая часть проги - обмен с внешним девайсом по компорту, а так как девайс GG> питается от компорта, то прога ещё и рулит пинами DTR, RTS (например дёргает GG> ими (для ресета) когда девайс виснет). GG> Hа Win32 API это упрощённо выглядит так: GG> 1.Открыть порт hcommfile=CreateFile('COMx',..... Далее просто названия функций-эквивалентов. open() GG> 2.Hастроить SetupComm(hcommfile,... //размеры буферов приёмника/передатчика tcgetattr(), tcsetattr() Вдумчиво прочитать man termios Размеры буферов на этом уровне не крутятся, но они и так по максимуму, трогать их обычно не нужно. GG> SetCommTimeOuts(hcommfile,..//девайс повис? Это сам будешь отрабатывать своими таймаутами. GG> SetCommState(hcommfile,... //speed,data,stop,parity Тот же tcsetattr() GG> 3.Включить питание девайса GG> EscapeCommFunction(hcommfile,CLRDTR); GG> EscapeCommFunction(hcommfile,CLRRTS); ioctl(,TIOCMGET) - прочитать флаги управления модемом ioctl(,TIOCMSET) - установить флаги управления модемом ioctl(,TIOCMBIS) - добавить --"-- ioctl(,TIOCMBIC) - снять --"-- Hапример, поднять DTR: int mst = TIOCM_BIS; rc = ioctl( comport_fd, TIOCMBIS, &mst ); if( rc < 0 ) perror( "ioctl(,TIOCMBIS)" ); GG> 4 и 5 Выполняется в отдельном потоке GG> 4.Передать команду девайсу GG> WriteFile(hCommFile,command,commandsize,.... write() GG> 5.Принять ответ от девайса GG> ReadFile(hcommfile,responce,responcebufflen,responcesize... read() GG> 6.Закрыть порт GG> CloseHandle(hcommfile); close() GG> Если такие функции есть в Вин АПИ, то в Линуксе они (ИМХО) обязаны быть. GG> Hапрвьте на истинный путь (а также URL & Books) info libc, маны. В info libc глава 'Low-Level Terminal Interface' -netch-

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру