Я пытаюсь записать шестнадцатеричные данные в мой последовательный порт. Однако, хотя GetOverlappedResult возвращает true, количество отправленных байтов всегда равно 0, несмотря на то, что я отправил 1, 2 или 8 байтов.
Я могу открыть / закрыть порт и получать шестнадцатеричные сообщения. Я просто не могу понять, как записать данные в мой последовательный порт, чтобы их мог использовать другой виртуальный последовательный порт.
Я ссылался на проект TimeReader, который коллега нашел в Интернете. Я протестировал порты с виртуальными последовательными портами, используя утилиту последовательного порта, и сумел успешно установить связь между ними. Поиск в Интернете не помог мне полностью решить проблему.
Как создать ручку:
serialPortHandle = CreateFile(("COM2"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING,
NULL);
Как я создаю свои данные:
typedef struct
{
int len;
char data[1];
}Message;
(и позже в моей основной функции)
message.len = 8;
message.data[0] = 0x30;
Как я вызываю WriteFile:
OVERLAPPED osWriteS = { 0 };
osWriteS.Offset = 0;
osWriteS.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
DWORD bytesSent;
_cprintf("message: %x\r\n", message.data[0]);
_cprintf("message len: %i\r\n", message.len);
if (WriteFile(serialPortHandle, message.data, message.len, &bytesSent, &osWriteS) == false)
{
_cprintf("bytes sent before overlap: %x\n", bytesSent);
if (GetLastError() != ERROR_IO_PENDING)
{
_cprintf("Failed to send message\n");
return;
}
else
{
bool _overlappedResult = GetOverlappedResult(serialPortHandle, &osWriteS, &bytesSent, TRUE);
_cprintf("overlapped: %x\n", _overlappedResult);
_cprintf("bytes: %x\n", bytesSent);
}
}
if (bytesSent != message.len)
{
_cprintf("Failed to send complete message\n");
return;
}
Печать GetOverlappedResult
возвращает значение 1
, но bytesSent = 0
несмотря на сообщение, содержащее 1 byte
, и не было получено никаких данных от другого последовательного порта, ожидающего отправки данных.
Может ли кто-нибудь помочь мне разобраться в проблеме? Спасибо!