Jacopo Gardin Ответов: 1

Как создать виртуальные последовательные порты с помощью C++ в windows


В Fedora я запускаю команду socat:
socat -d -d pty,link=/dev/ttyS0,raw,echo=0 tcp-listen:1234
таким образом, я могу получать строки от TCP-клиента (созданного с помощью QT) и пересылать их на последовательный порт ttyS0.
В TCP клиенте я тоже создал виртуальный драйвер используя этот код:
<pre lang="c++">
#include <windows.h>

HANDLE hdriver = CreateFileA("\\.\COM12", GENERIC_READ | GENERIC_WRITE, 0, 0, CREATE_NEW, 0, 0); // Create driver
hdriver = CreateFileA("\\.\COM12",  GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); // Open driver
if(hdriver == INVALID_HANDLE_VALUE)
{
    qDebug() << GetLastError();
    CloseHandle(hdriver);
    return 0;
}
else
{
    qDebug("Open");
    qDebug() << hdriver;
    return 1;
}
Теперь я хочу создать виртуальный последовательный порт поверх созданного мной драйвера.
Возможно ли это в c++?

Что я уже пробовал:

Я создаю TCP клиент и создаю драйвер

1 Ответов

Рейтинг:
0

Jochen Arndt

Вы должны прояснить свой вопрос.

Виртуальный последовательный порт может быть "создан" только путем предоставления драйвера, который является системным компонентом и поэтому не может быть реализован обычным приложением.

Даже у самого сокат примеры использования существующего последовательного порта (/dev/ttyS0Если это виртуальное или физическое, то все равно. Но она уже должна существовать.

Да, можно было бы реализовать что-то похожее на сокат пример с C++ в Windows. Но для этого требуется существующий последовательный порт (опять же: ему все равно, физический он или виртуальный). Затем вам просто нужно реализовать функции, которые читают на конечных точках (сокет и последовательный для двунаправленной передачи; обычно потоковые и управляемые событиями), которые записывают полученные данные на другую конечную точку.

Но вы не можете создать новый виртуальный последовательный порт из приложения. Даже если бы это было возможно, он не работал бы с Windows, потому что последовательные порты являются эксклюзивными ресурсами (могут быть открыты только одним приложением одновременно).


Afzaal Ahmad Zeeshan

5ед.

Jacopo Gardin

Что означает "5ed"?