Вопрос № 20833: Здрысть, уважаемые эксперты!
Подскажате, плиз, с какой стороны программить ком порт? Не обязательно писать драйвер, достаточно проги, которая будет хавать сигналы с порта. Если можно, дайте пример кода на C++/C-sharp под .NET или любую другую пла...
Вопрос № 20833
Здрысть, уважаемые эксперты!
Подскажате, плиз, с какой стороны программить ком порт? Не обязательно писать драйвер, достаточно проги, которая будет хавать сигналы с порта. Если можно, дайте пример кода на C++/C-sharp под .NET или любую другую платформу. Если есть, скиньте ссылочку по теме. Спасибо!
Отправлен: 13.05.2005, 23:51
Вопрос задал: Дрищев Василий (статус: Посетитель)
Всего ответов отправлено: 2
Отвечает: Jadd
Здравствуйте, Дрищев Василий!
Копать можно в сторону функции WinAPI CreateFile. В MSDN подробно расписаны варианты параметров для данного случая, а так же как настроить baud rate и тп. Т.е. главное, что делает эта функция - открывает нужный нам порт и возвращает, в случае удачи, хэндл порта. Отсюда и надо плясать. А дальше - дело техники. ReadFile, WriteFile - чтение/запись в порт/из порта. Ну а написать функцию, которая будет "слушать" порт - задача одновременно тривиальная и нетривиальная. Поясню. Можно попытаться просто читать
состояние порта. А можно, что более профессионально, пользоваться такими средствами, как порт завершения ввода вывода (IO Completion Port). Это метод ассинхронной передачи данных. Удачи.
Ответ отправил: Jadd (статус: 3-ий класс)
Отправлен: 14.05.2005, 10:22 Оценка за ответ: 5 Комментарий оценки: Спасибо большое, очень полезная для меня информация!
Отвечает: Pushkin
Здравствуйте, Дрищев Василий!
1. Открываем com-порт как обычный (или почти как обычный) файл функцией CreateFile.
2. Настраиваем com-порт функцией SetCommState, в качестве параметра передаем структуру DCB, возвращаемой функцией GetCommState.
3. Осуществляем чтение и запись данных функциями ReadFile, WriteFile.
Чтение лучше производить в отдельном потоке. После вызова функции ReadFile запускают функцию WaitForSingleObject, которая ждет в течении времени, указанного в параметре TIMEOUT.
4. После работы с портом необходимо закрыть его CloseHandle.
Ответ отправил: Pushkin (статус: 2-ой класс)
Отправлен: 15.05.2005, 20:29