copy
#include <windows.h>
#include <iostream>
#include <string>
int main()
{
std::cout << "===================================================\n";
std::cout << "== COM Sniffer open COM Port Minimal Example ==\n";
std::cout << "===================================================\n\n";
std::string comPort;
std::cout << "Enter COM port (e.g., COM5): ";
std::cin >> comPort;
// Build Windows COM port path: "\\\\.\\COMx"
std::wstring portPath = L"\\\\.\\" + std::wstring(comPort.begin(), comPort.end());
// Open serial port
HANDLE hSerial = CreateFileW(
portPath.c_str(),
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // default security
OPEN_EXISTING,
0, // non-overlapped I/O
NULL
);
if (hSerial == INVALID_HANDLE_VALUE) {
std::cerr << "Error opening port. Error code: " << GetLastError() << "\n";
return 1;
}
std::cout << "Serial port opened successfully.\n";
// Configure serial port
DCB dcbSerialParams = { 0 };
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
if (!GetCommState(hSerial, &dcbSerialParams)) {
std::cerr << "Error getting port state.\n";
CloseHandle(hSerial);
return 1;
}
// Set parameters
dcbSerialParams.BaudRate = CBR_115200;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
if (!SetCommState(hSerial, &dcbSerialParams)) {
std::cerr << "Error setting port state.\n";
CloseHandle(hSerial);
return 1;
}
// Set timeouts
COMMTIMEOUTS timeouts = { 0 };
timeouts.ReadIntervalTimeout = 50;
timeouts.ReadTotalTimeoutConstant = 50;
timeouts.ReadTotalTimeoutMultiplier = 10;
timeouts.WriteTotalTimeoutConstant = 50;
timeouts.WriteTotalTimeoutMultiplier = 10;
if (!SetCommTimeouts(hSerial, &timeouts)) {
std::cerr << "Error setting timeouts.\n";
CloseHandle(hSerial);
return 1;
}
std::cout << "Serial port configured.\n";
// Clean up
CloseHandle(hSerial);
std::cout << "Serial port closed.\n";
return 0;
}