Проблема в том, что после отправки 12290-й строки из txt-файла программа всегда "останавливается" (независимо от того, что содержит эта строка или следующая строка), а это значит, что он ждет подтверждения. Я не могу проверить его, но вполне уверен, что оно было отправлено, поскольку плоттер перезагрузится, если не сможет отправить через COM-порт.
Я не могу понять, в чем проблема.
Код: Выделить всё
int main(int argc, char ** argv)
{
HANDLE port = CreateFile(L"\\\\.\\COM12", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
if((port == INVALID_HANDLE_VALUE) || (port == NULL))
{
DWORD error = GetLastError();
fprintf(stderr, "Could not open port. Error 0x%lx.\n", error);
return 1;
}
initcomport(port);
DWORD flags = EV_RXFLAG;
BOOL success = SetCommMask(port, flags);
if (!success)
{
fprintf(stderr, "Could not set comm mask.\n");
}
OVERLAPPED osStatus = {0};
osStatus.hEvent = CreateEvent(NULL, true, false, NULL);
assert(osStatus.hEvent);
if( osStatus.hEvent == NULL ) // error creating overlapped event handle
{
return -1;
}
std::string line;
std::string PltFilename;
std::cout PltFilename;
std::ifstream fin(PltFilename);
if(!fin)
{
return -1;
}
int cmd_done_flag = 0;
DWORD dwCommEvent = 0;
BOOL fWaitingOnStat = FALSE;
while (true)
{
if(std::getline(fin,line))
{
cmd_done_flag = 0;
m_transmit(port, osStatus, line, 255);
}
else
{
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78546049/sending-file-via-com-port-always-stops-at-a-particular-number-of-line-in-file[/url]