#include <windows.h>
#include <stdio.h>
#include <string.h>
bool OpenSendCheck(const char* portName, const char* sendCmd, const char* expectedResp, DWORD baudRate = CBR_9600) {
HANDLE hSerial = CreateFileA(portName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if (hSerial == INVALID_HANDLE_VALUE) {
printf("Failed to open port %s\n", portName);
return false;
}
// Set serial parameters
DCB dcbSerialParams = {0};
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
if (!GetCommState(hSerial, &dcbSerialParams)) { CloseHandle(hSerial); return false; }
dcbSerialParams.BaudRate = baudRate;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
if (!SetCommState(hSerial, &dcbSerialParams)) { CloseHandle(hSerial); return false; }
// Set timeouts
COMMTIMEOUTS timeouts = {0};
timeouts.ReadIntervalTimeout = 50;
timeouts.ReadTotalTimeoutConstant = 200;
timeouts.ReadTotalTimeoutMultiplier = 10;
timeouts.WriteTotalTimeoutConstant = 50;
timeouts.WriteTotalTimeoutMultiplier = 10;
SetCommTimeouts(hSerial, &timeouts);
// Prepare command with CR LF
char sendBuffer[128];
snprintf(sendBuffer, sizeof(sendBuffer), "%s\r\n", sendCmd);
// Send command
DWORD bytesWritten;
if (!WriteFile(hSerial, sendBuffer, strlen(sendBuffer), &bytesWritten, NULL)) {
CloseHandle(hSerial);
return false;
}
// Wait and read response
char buffer[256] = {0};
DWORD bytesRead;
if (!ReadFile(hSerial, buffer, sizeof(buffer)-1, &bytesRead, NULL)) {
CloseHandle(hSerial);
return false;
}
buffer[bytesRead] = '\0'; // Null-terminate
CloseHandle(hSerial);
// Check response
return (strstr(buffer, expectedResp) != NULL);
}
// Example usage:
int main() {
if (OpenSendCheck("\\\\.\\COM3", "HELLO", "MYDEVICE_OK")) {
printf("Device found!\n");
} else {
printf("Device not found.\n");
}
}
#include <windows.h>
#include <stdio.h>
#include <string.h>
// Assume OpenSendCheck is defined as before
const char* FindMyDevicePort(const char* sendCmd, const char* expectedResp, DWORD baudRate = CBR_9600) {
static char foundPort[16] = "";
for (int i = 1; i <= 255; ++i) {
char portName[20];
snprintf(portName, sizeof(portName), "\\\\.\\COM%d", i);
if (OpenSendCheck(portName, sendCmd, expectedResp, baudRate)) {
strncpy(foundPort, portName, sizeof(foundPort));
return foundPort;
}
}
return NULL;
}
// Example usage:
int main() {
const char* port = FindMyDevicePort("HELLO", "MYDEVICE_OK");
if (port) {
printf("Device found on port: %s\n", port);
} else {
printf("Device not found.\n");
}
return 0;
}
const char* FindZaberPort() {
const char* sendCmd = "/1 get id";
const char* expectedResp = "OK ID";
DWORD baudRate = 115200;
return FindMyDevicePort(sendCmd, expectedResp, baudRate);
}
Post Views: 9