Программирование на C++ глазами хакера



             

Работа с СОМ-портом


Мне по долгу службы часто приходилось работать с интерфейсом RS-232. Так в официальной документации называется СОМ-порт компьютера. Современное оборудование (контроллеры, устройства сбора информации и т.д.) работают через этот порт. К любому модему, даже внутреннему, обращение происходит именно через СОМ-порт. А сколько существует внешних устройств, подключаемых по этому интерфейсу, сосчитать невозможно.

Работа с портами похожа на работу с файлами. Давайте рассмотрим простейший пример. Для этого создайте новое приложение MFC Application на основе диалога с именем COMport. Внешний вид главного окна будущей программы вы можете увидеть на рис. 5.5.

Рис. 5.5. Окно будущей программы Comport

В верхней части окна находится выпадающий список Combo Box, в котором можно выбирать имя порта. Рядом со списком две кнопки: для открытия и закрытия порта. Чуть ниже расположены текстовое поле для ввода команды и кнопка для ее отправки.

В центре окна расположились элементы управления List Box: для отображения хода работы с портом и многострочное поле ввода для отображения пришедших данных.

Создайте подобный интерфейс, и можно переходить к программированию. По нажатию кнопки Open port должен выполняться код из листинга 5.5.

Листинг 5.5. Открытие порта
void CCOMportDlg::OnBnClickedOpenportButton() { if (hCom != INVALID_HANDLE_VALUE) { OnBnClickedButton1(); Sleep(300); }

char sPortName[10]; cbPorts.GetWindowText(sPortName, 10);

hCom = CreateFile(sPortName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

if (hCom == INVALID_HANDLE_VALUE) lLogList.AddString("Error opening port"); else { lLogList.AddString("Port successfully opened."); hThread = CreateThread(0, 0, ReadThread, (LPVOID)this, 0, 0);

DCB dcb; GetCommState(hCom, &dcb); dcb.BaudRate = CBR_57600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; if (SetCommState(hCom, &dcb)) lLogList.AddString("Configuring OK"); else lLogList.AddString("Configuring Error"); } }




Содержание  Назад  Вперед