<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Bestimmtes Gerät an COM-Ports finden]]></title><description><![CDATA[<p>Servus,</p>
<p>ich hoffe, ich bin hier im richtigen Forum - nachdem ich im &quot;C++&quot; Forum schon auf Unpässlichkeit hingewiesen wurde <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Also: Ich hab hier einen µC mit dem ich gern Daten über die serielle Schnittstelle austauschen möchte - das klappt auch soweit bestens.</p>
<p>Allerdings muss ich bisher, wenn ich mit meinem C++ Programm eine Verbindung zum µC aufbauen will, den COM-Port, an dem das Gerät hängt, wissen. Das möchte ich vermeiden. Gibt es eine Möglichkeit, Geräte-spezifische Informationen abzufragen, um herauszufinden, an welchem COM mein Gerät hängt?</p>
<p>Es handelt sich übrigens um einen virtuellen COM-Port, das heißt, der µC wird an einen USB Port angeschlossen und emuliert dann eine COM-Schnittstelle. Das Schöne daran: Ich habe zB eine PID und VID, wie mans beim USB halt gewohnt ist. Könnte ich die irgendwie auslesen, um das Gerät zu identifizieren?</p>
<p>Hier noch mein Code, mit dem ich das Gerät bisher anspreche:</p>
<pre><code class="language-cpp">#ifndef __DEV_H__
#define __DEV_H__

class Serial_Device
{
public:
Serial_Device(); // Konstruktor
~Serial_Device(); // Destruktor

int Open (void);
void Close(void);

void Write(unsigned char*, DWORD*);
void Read (unsigned char*, DWORD*);

string GetErrorMessage();

protected:
HANDLE DeviceHandle;
DCB Port;

string ErrorMessage;
};

#endif __DEV_H__
</code></pre>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

Serial_Device :: Serial_Device()
{
    DeviceHandle = NULL;
}

Serial_Device :: ~Serial_Device()
{
    CloseHandle(DeviceHandle);
}

int Serial_Device :: Open(void)
{
    // open port for I/O
    DeviceHandle = CreateFile(L&quot;COM5&quot;, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

    if(DeviceHandle == INVALID_HANDLE_VALUE)
    {
        ErrorMessage = &quot;Port konnte nicht geöffnet werden.&quot;;
        CloseHandle(DeviceHandle);
        return 1;
    }

    // set timeouts
    COMMTIMEOUTS Timeout = { 1, 100, 1000, 0, 0 };

    if(!SetCommTimeouts(DeviceHandle, &amp;Timeout))
    {
        ErrorMessage = &quot;Timeout konnte nicht festgelegt werden.&quot;;
        CloseHandle(DeviceHandle);
        return 1;
    }

    // set Port
    memset(&amp;Port, 0, sizeof(Port));
    Port.DCBlength = sizeof(Port);

    Port.BaudRate = 115200;                    // Baudrate 115,200 kbps
    Port.Parity = NOPARITY;                    // keine Parität
    Port.StopBits = ONESTOPBIT;                // 1 Stopbit
    Port.ByteSize = 8;                        // 8 Datenbits

    Port.fBinary = 1;                        // Binärmodus: Muss gesetzt sein
    Port.fDtrControl = DTR_CONTROL_ENABLE;    // Flusskontrolle aktivieren
    Port.fRtsControl = RTS_CONTROL_ENABLE;

    if(!SetCommState(DeviceHandle, &amp;Port))
    {
        ErrorMessage = &quot;Port konnte nicht konfiguriert werden&quot;;
        CloseHandle(DeviceHandle);
        return 1;
    }

    return 0;
}

void Serial_Device :: Write(unsigned char* Buf, DWORD* BufLen)
{
    WriteFile(DeviceHandle, Buf, *BufLen, BufLen, NULL);    // BufLen wird mit der Anzahl der gesendeten Bytes überschrieben
}

void Serial_Device :: Read(unsigned char* Buf, DWORD* BufLen)
{
    ReadFile(DeviceHandle, Buf, sizeof(Buf), BufLen, NULL); // read is updated with the number of bytes read
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/239063/bestimmtes-gerät-an-com-ports-finden</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Apr 2026 14:31:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/239063.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 18 Apr 2009 21:50:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bestimmtes Gerät an COM-Ports finden on Sat, 18 Apr 2009 21:50:05 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich hoffe, ich bin hier im richtigen Forum - nachdem ich im &quot;C++&quot; Forum schon auf Unpässlichkeit hingewiesen wurde <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Also: Ich hab hier einen µC mit dem ich gern Daten über die serielle Schnittstelle austauschen möchte - das klappt auch soweit bestens.</p>
<p>Allerdings muss ich bisher, wenn ich mit meinem C++ Programm eine Verbindung zum µC aufbauen will, den COM-Port, an dem das Gerät hängt, wissen. Das möchte ich vermeiden. Gibt es eine Möglichkeit, Geräte-spezifische Informationen abzufragen, um herauszufinden, an welchem COM mein Gerät hängt?</p>
<p>Es handelt sich übrigens um einen virtuellen COM-Port, das heißt, der µC wird an einen USB Port angeschlossen und emuliert dann eine COM-Schnittstelle. Das Schöne daran: Ich habe zB eine PID und VID, wie mans beim USB halt gewohnt ist. Könnte ich die irgendwie auslesen, um das Gerät zu identifizieren?</p>
<p>Hier noch mein Code, mit dem ich das Gerät bisher anspreche:</p>
<pre><code class="language-cpp">#ifndef __DEV_H__
#define __DEV_H__

class Serial_Device
{
public:
Serial_Device(); // Konstruktor
~Serial_Device(); // Destruktor

int Open (void);
void Close(void);

void Write(unsigned char*, DWORD*);
void Read (unsigned char*, DWORD*);

string GetErrorMessage();

protected:
HANDLE DeviceHandle;
DCB Port;

string ErrorMessage;
};

#endif __DEV_H__
</code></pre>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

Serial_Device :: Serial_Device()
{
    DeviceHandle = NULL;
}

Serial_Device :: ~Serial_Device()
{
    CloseHandle(DeviceHandle);
}

int Serial_Device :: Open(void)
{
    // open port for I/O
    DeviceHandle = CreateFile(L&quot;COM5&quot;, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

    if(DeviceHandle == INVALID_HANDLE_VALUE)
    {
        ErrorMessage = &quot;Port konnte nicht geöffnet werden.&quot;;
        CloseHandle(DeviceHandle);
        return 1;
    }

    // set timeouts
    COMMTIMEOUTS Timeout = { 1, 100, 1000, 0, 0 };

    if(!SetCommTimeouts(DeviceHandle, &amp;Timeout))
    {
        ErrorMessage = &quot;Timeout konnte nicht festgelegt werden.&quot;;
        CloseHandle(DeviceHandle);
        return 1;
    }

    // set Port
    memset(&amp;Port, 0, sizeof(Port));
    Port.DCBlength = sizeof(Port);

    Port.BaudRate = 115200;                    // Baudrate 115,200 kbps
    Port.Parity = NOPARITY;                    // keine Parität
    Port.StopBits = ONESTOPBIT;                // 1 Stopbit
    Port.ByteSize = 8;                        // 8 Datenbits

    Port.fBinary = 1;                        // Binärmodus: Muss gesetzt sein
    Port.fDtrControl = DTR_CONTROL_ENABLE;    // Flusskontrolle aktivieren
    Port.fRtsControl = RTS_CONTROL_ENABLE;

    if(!SetCommState(DeviceHandle, &amp;Port))
    {
        ErrorMessage = &quot;Port konnte nicht konfiguriert werden&quot;;
        CloseHandle(DeviceHandle);
        return 1;
    }

    return 0;
}

void Serial_Device :: Write(unsigned char* Buf, DWORD* BufLen)
{
    WriteFile(DeviceHandle, Buf, *BufLen, BufLen, NULL);    // BufLen wird mit der Anzahl der gesendeten Bytes überschrieben
}

void Serial_Device :: Read(unsigned char* Buf, DWORD* BufLen)
{
    ReadFile(DeviceHandle, Buf, sizeof(Buf), BufLen, NULL); // read is updated with the number of bytes read
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1697960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697960</guid><dc:creator><![CDATA[Schnapphase]]></dc:creator><pubDate>Sat, 18 Apr 2009 21:50:05 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmtes Gerät an COM-Ports finden on Mon, 20 Apr 2009 21:58:34 GMT]]></title><description><![CDATA[<blockquote>
<p>ich hoffe, ich bin hier im richtigen Forum - nachdem ich im &quot;C++&quot; Forum schon auf Unpässlichkeit hingewiesen wurde</p>
</blockquote>
<p>Mach' Dir nix draus - Die Gralshüter der unbefleckten Sprache brauchen ja auch eine Aufgabe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Für die COM-Schnittstelle gibt es leider kein Protokoll, was Dir Informationen über ein angeschlossenes Gerät gibt, du kannst nur hoffen, daß das Gerät selbst eine Kennung zurückliefern kann.</p>
<p>der VID/PID, den du siehst, sind nur die IDs des USB-COM-Adapters, sagen also auch nichts über den Microcontroller.</p>
<p>Vielleicht findest du was zu dem USB-COM-Adapter selbst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1698900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698900</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Mon, 20 Apr 2009 21:58:34 GMT</pubDate></item><item><title><![CDATA[Reply to Bestimmtes Gerät an COM-Ports finden on Tue, 21 Apr 2009 08:23:49 GMT]]></title><description><![CDATA[<p>Hi Schnapphase,<br />
hab zu diesem thema was ähnliches geschrieben: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-194724.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-194724.html</a></p>
<p>Lasse einfach mal EnumSerialPorts (mittlerweile in Version 1.19) bei Dir laufen und guck Dir die Ausgabe an.<br />
Ich denke, das ist es was Du suchst, und Sourcen sind ja dabei!</p>
<p>Bei Fragen einfach in die tasten hauen...<br />
Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1698998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698998</guid><dc:creator><![CDATA[Mmacher]]></dc:creator><pubDate>Tue, 21 Apr 2009 08:23:49 GMT</pubDate></item></channel></rss>