LINUX.ORG.RU

Различия в работе с COM-портом в Linux и Windows


0

0

Ситуация такая:
Есть отличный проект написанный под Linux, где используется работа 
с COM-портом. Написан на C++ и работа с портом выделена в отдельный класс. Сами понимаете COM под Linux это termios структура и запись/чтение в /dev/ttyS0 как в обычный файл( я не говорю о более узких местах - это в данном вопросе излишне).
Вопрос собственно состоит в том, как происходит работа с COM-портом под виндой? Надо переписать проект под винду и единственная непонятка только по работе с портом!!! Различия существенные или нет???

блинн google -- ruLLeZ

В КАЧЕСТВЕ ИМЕНИ ФАЙЛА УКАЗЫВАЙ COM{1,2,3,4,5,6,7...}

CreateFile(); ReadFile(); WriteFile();

anonymous
()
Ответ на: комментарий от anonymous

Там кстати есть чтото ещё более удобное но совсем забыл что.

cvv ★★★★★
()
Ответ на: комментарий от anonymous

Ощущения от программирования СОМ порта порд виндами не самое приятное

> В КАЧЕСТВЕ ИМЕНИ ФАЙЛА УКАЗЫВАЙ COM{1,2,3,4,5,6,7...}

более точно \\\\.\\COM1 (от 1 до 256 в NT)

но есть всякие бибилиотечки, которые эту работу берут на себя, например:

http://web4.moxa.com/support/download.asp#PComm2k.zip

с ними нуда комфортней.

Whaler
()
Ответ на: комментарий от anonymous

про Create/Read/WriteFile - это конечно правильно. но только в винде после открытия компорт еще настроить надо. Я тоже поначалу как вы думал, однако налетел на такой глюк:до тех пор, пока сторонней программой (терминалкой) предварительно в порт не ткнешься с нужными параметрами, нихера обмен не работал.

вот рабочий кусок кода для настройки порта:

COMMCONFIG *CC=new COMMCONFIG;
DCB dcb;
bool res;
unsigned long bufsize=sizeof(COMMCONFIG);
memset(&(CC->dcb),0x0, sizeof(CC->dcb)); // NB: Without this setCommState will fail!
res = GetDefaultCommConfig(portname.c_str(),CC,&bufsize);
comport=CreateFile(portname.c_str(),
GENERIC_READ|GENERIC_WRITE,
0l,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
res = SetCommState(comport,&CC->dcb);
COMMTIMEOUTS to;
res = GetCommTimeouts(comport,&to);
to.ReadTotalTimeoutConstant=1000;
to.WriteTotalTimeoutConstant=1000;
res = SetCommTimeouts(comport,&to);
delete CC;


NewComer
()
Ответ на: комментарий от NewComer

что компот настроить надо я в курсе..

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.