<?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[RS232: Geschwindigkeit während der übertragung umschalten?]]></title><description><![CDATA[<p>Hi</p>
<p>ich hab folgendes Problem: Das Protokoll das ich implementieren soll für die serielle Schniststelle sieht vor das die übertragugsgeschwindigkeit von Client und Server selbständig ausgehandelt wird. Angefangen wird mit 9600 Baud. Der Client frägt im ersten Schrit den Server welche Baudraten er unterstützt (Kannst du 115200Baud). Der Server antwortet dann mit einer Fehlermeldung oder mit einer Bestätigung. Im 2. Schritt initiert der Client dann die Geschwindigkeits umschaltung. Dann schalten beide auf die neue Baudrate um. Und genau hier trit mein Problem auf.</p>
<p>Wie kann ich festellen, das die ComandoSequenz über die schnitstelle verschickt wurde um selbst in die neue Baudrate umschalten zu können?</p>
<p>Momentan versuch ich mit WaitCommEvent( ... EV_TXENPTY ) ; festzustellen wann die Sequenz verschickt wurde. Das funktioniert leider nicht WaitCommEvent kehrt sofort zurück und ich schalte bereits zu früh in die neue geschwindigkeit um.</p>
<p>OS: XP</p>
<p>nachfolgend ein paar code schnipsel die vileicht interresant sein könnten.</p>
<pre><code class="language-cpp">// Port initallisierung
CreateFile (lpszPortName, // Pointer to the name of the port
            GENERIC_READ | GENERIC_WRITE,
                         // Access (read/write) mode
           0,            // Share mode
           NULL,         // Pointer to the security attribute
           OPEN_EXISTING ,// How to open the serial port
           0,            // Port attributes
           NULL);        // Handle to port with attribute
                         // to copy

...

// Teil 2 der umschaltung verschicken

/* set commMask for detecting transmit empty buffer */
SetCommMask (LOWL_astThreadData[bPortIdentifier].hInterface, EV_TXEMPTY );

/* transmit the data block */
if (!WriteFile (hInterface,                          // Port handle
              pabTransmitData,                       // Pointer to the data to write 
              (DWORD)wTransmitData_len,              // Number of bytes to write
              &amp;dwNumBytesWritten,                    // Pointer to the number of bytes 
                                                     // written
              NULL))                                 // Must be NULL for Windows CE
{
    // WriteFile failed. Report error.
    ...
}

/* Wait for last charecter send */
DWORD events = EV_TXEMPTY ;
BOOL b = WaitCommEvent(hInterface,&amp;events,NULL);

// initieren der umschaltung
</code></pre>
<p>Gruss Termite</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/82694/rs232-geschwindigkeit-während-der-übertragung-umschalten</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 12:48:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/82694.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Aug 2004 09:44:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to RS232: Geschwindigkeit während der übertragung umschalten? on Fri, 13 Aug 2004 09:44:05 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>ich hab folgendes Problem: Das Protokoll das ich implementieren soll für die serielle Schniststelle sieht vor das die übertragugsgeschwindigkeit von Client und Server selbständig ausgehandelt wird. Angefangen wird mit 9600 Baud. Der Client frägt im ersten Schrit den Server welche Baudraten er unterstützt (Kannst du 115200Baud). Der Server antwortet dann mit einer Fehlermeldung oder mit einer Bestätigung. Im 2. Schritt initiert der Client dann die Geschwindigkeits umschaltung. Dann schalten beide auf die neue Baudrate um. Und genau hier trit mein Problem auf.</p>
<p>Wie kann ich festellen, das die ComandoSequenz über die schnitstelle verschickt wurde um selbst in die neue Baudrate umschalten zu können?</p>
<p>Momentan versuch ich mit WaitCommEvent( ... EV_TXENPTY ) ; festzustellen wann die Sequenz verschickt wurde. Das funktioniert leider nicht WaitCommEvent kehrt sofort zurück und ich schalte bereits zu früh in die neue geschwindigkeit um.</p>
<p>OS: XP</p>
<p>nachfolgend ein paar code schnipsel die vileicht interresant sein könnten.</p>
<pre><code class="language-cpp">// Port initallisierung
CreateFile (lpszPortName, // Pointer to the name of the port
            GENERIC_READ | GENERIC_WRITE,
                         // Access (read/write) mode
           0,            // Share mode
           NULL,         // Pointer to the security attribute
           OPEN_EXISTING ,// How to open the serial port
           0,            // Port attributes
           NULL);        // Handle to port with attribute
                         // to copy

...

// Teil 2 der umschaltung verschicken

/* set commMask for detecting transmit empty buffer */
SetCommMask (LOWL_astThreadData[bPortIdentifier].hInterface, EV_TXEMPTY );

/* transmit the data block */
if (!WriteFile (hInterface,                          // Port handle
              pabTransmitData,                       // Pointer to the data to write 
              (DWORD)wTransmitData_len,              // Number of bytes to write
              &amp;dwNumBytesWritten,                    // Pointer to the number of bytes 
                                                     // written
              NULL))                                 // Must be NULL for Windows CE
{
    // WriteFile failed. Report error.
    ...
}

/* Wait for last charecter send */
DWORD events = EV_TXEMPTY ;
BOOL b = WaitCommEvent(hInterface,&amp;events,NULL);

// initieren der umschaltung
</code></pre>
<p>Gruss Termite</p>
]]></description><link>https://www.c-plusplus.net/forum/post/581772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/581772</guid><dc:creator><![CDATA[Termite_]]></dc:creator><pubDate>Fri, 13 Aug 2004 09:44:05 GMT</pubDate></item></channel></rss>