Написать на com-порт и сразу прочитать ответ в C++ windows7

У меня есть измерительное устройство, и я хочу сделать серию измерений и сохранить их в файл. Для этого мне нужно правильно прочитать com порт. Все, что я возвращаюсь с этим кодом, это какие-то странные признаки.

#include <windows.h>
#include <process.h>
#include <stdio.h>
#include <iostream>
#include <string>

using namespace std;

int main() {
// opening the serial port
HANDLE hSerial;

fprintf(stderr, "Opening serial port...");
hSerial = CreateFile("\\\\.\\COM2",
GENERIC_READ | GENERIC_WRITE, 0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

if (hSerial == INVALID_HANDLE_VALUE) {
    fprintf(stderr, "Error\n");
    CloseHandle(hSerial);
    return 1;
} else
    fprintf(stderr, "OK\n");

// settings to communicate with device
DCB dcbSerialParams;
ZeroMemory(&dcbSerialParams, sizeof(dcbSerialParams));
dcbSerialParams.DCBlength = sizeof(dcbSerialParams);

if (!GetCommState(hSerial, &dcbSerialParams)) {
    //error getting state
    fprintf(stderr,"error getting state ... ");
}

dcbSerialParams.BaudRate = 9600;
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;

if (!SetCommState(hSerial, &dcbSerialParams)) {
    //error setting state
    fprintf(stderr,"error setting state ...");
}

char out_message[] = "fetch?"; // request for the device to send voltage and 
current
char in_message[32];
DWORD BytesToWrite = sizeof(out_message);
DWORD BytesWritten;
DWORD BytesToRead = sizeof(in_message);
DWORD BytesRead;

WriteFile(hSerial, out_message, BytesToWrite, &BytesWritten, NULL);

ReadFile(hSerial, &in_message, BytesToRead, &BytesRead, NULL);

string buffer;
for (unsigned int i = 0; i < sizeof(in_message); i++) {
    buffer += in_message[i];
}
buffer[sizeof(in_message) - 1] = '\0';

// try outs of different outputs
cout << buffer << "\n";
const char*c = buffer.c_str();
printf("%s\n",c);

CloseHandle(hSerial);
return 0;
}

Я думаю, я не могу написать, чтобы прочитать прочитанное немедленно? Или есть ошибка в преобразовании in_message в буфер?

0 ответов

Другие вопросы по тегам