<?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[auslesen der seriellen schnittstelle]]></title><description><![CDATA[<p>hallo<br />
also ich habe mir letzte woche bei ebay nen gps-empfänger ersteigert. spitzen ding... funzt auch alles soweit gut.<br />
das ding arbeitet mit NMEA (<a href="http://de.wikipedia.org/wiki/National_Marine_Electronics_Association" rel="nofollow">http://de.wikipedia.org/wiki/National_Marine_Electronics_Association</a>)<br />
jetzt hab ich folgendes geschrieben:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop
#include &lt;iostream&gt;
#include &quot;Serial.h&quot;
#include &quot;Serial.cpp&quot;

using namespace std;

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
    CSerial serial;
	if (serial.Open(2, 9600))
		cout &lt;&lt; &quot;erfolg!&quot; &lt;&lt; endl;
	else
		cout &lt;&lt; &quot;misserfolg!&quot; &lt;&lt; endl;
	char* lpBuffer = new char[100];
	do {
		serial.ReadData(lpBuffer, 100);
	} while (lpBuffer == Null);
	cout &lt;&lt; lpBuffer;
	delete []lpBuffer;
	cin.get();
	return 0;
}
//---------------------------------------------------------------------------
</code></pre>
<p>aber wie zu erwarten: es funktioniert nicht.<br />
ich bekomme zwar meine datensätze (siehe wiki) rein, aber meistens stehn noch irgendwelche wirren zeichen davor oder dahinter. es kommt auch vor dass ich mal garnichts anzeigt, oder auch mal nach 20 zeichen oder so einfach aufhört. ich vermute der liest das was gerade rein kommt. aber wie bekomm ich den dazu beim sinnvollen anzufangen und am ende des sinnvollen aufzuhören?<br />
danke erstmal<br />
bob007<br />
ps:<br />
seriel.h:</p>
<pre><code class="language-cpp">// --------------------------------------------------------------------------------------
// (c) 2003 www.winapi.net
//
// Serial.h
//
// Headerdatei für eine einfache, aber leistungsfähige 
// Kommunikation über die Serielle Schnittstelle
// --------------------------------------------------------------------------------------

#ifndef __SERIAL_H__
#define __SERIAL_H__

class CSerial
{

public:
	CSerial();
	~CSerial();

	BOOL Open (int nComPortNr, int nBaud, int nBits, int nParity, int nStopp);
	BOOL Close (void);
	BOOL ModeSet (int nBaud, int nBits, int nParity, int nStopp);
	BOOL SetTimeout (int iTotalReadTimeout);
	BOOL IsOpen (void);

	int ReadData (char *buffer, int iMaxCount);
	int SendData (const char *buffer, int iBytesToWrite);
	BOOL WriteCommByte (unsigned char ucByte);

private:
	HANDLE hComm;
	DCB dcb_alt;
	COMMTIMEOUTS timeouts_alt;
};

#endif
</code></pre>
<p>und seriel.cpp:</p>
<pre><code class="language-cpp">// --------------------------------------------------------------------------------------
// (c) 2003 www.winapi.net
//
// Serial.cpp
//
// CPP-Datei für eine einfache, aber leistungsfähige 
// Kommunikation über die Serielle Schnittstelle
// --------------------------------------------------------------------------------------

#include &lt;windows.h&gt;
#include &quot;Serial.h&quot;

CSerial::CSerial()
{
	hComm = INVALID_HANDLE_VALUE;
}

CSerial::~CSerial()
{
	Close ();
}

BOOL CSerial::IsOpen()
{
   if (INVALID_HANDLE_VALUE != hComm)
       return (TRUE);
	else
		return (FALSE);
}

BOOL CSerial::ModeSet (int nBaud, int nBits, int nParity, int nStopp)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (FALSE);
	}

   DCB dcb;

   ZeroMemory (&amp;dcb, sizeof(dcb));
	dcb.DCBlength = sizeof(DCB);

   if (!GetCommState (hComm, &amp;dcb))
      return (FALSE);

   dcb.BaudRate = nBaud;
   dcb.ByteSize = (BYTE)nBits;
   dcb.Parity   = (BYTE)nParity;
	dcb.StopBits = (BYTE)nStopp;   

   if (!SetCommState (hComm, &amp;dcb))
		return (FALSE);

	return (TRUE);
}

BOOL CSerial::Open (int nComPortNr, int nBaud, int nBits, int nParity, int nStopp)
{
   if (INVALID_HANDLE_VALUE != hComm)
	{
      return (TRUE);
	}

   char szPort[16];

   wsprintf (szPort, &quot;\\\\.\\COM%d&quot;, nComPortNr);

   hComm = CreateFile (szPort,
						  GENERIC_READ | GENERIC_WRITE,
                    0,
                    0,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);

   if (hComm == INVALID_HANDLE_VALUE)
      return (FALSE);

   if (!GetCommTimeouts(hComm, &amp;timeouts_alt))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

   COMMTIMEOUTS timeouts;
   timeouts.ReadIntervalTimeout = MAXDWORD ;
   timeouts.ReadTotalTimeoutMultiplier = MAXDWORD ;
   timeouts.ReadTotalTimeoutConstant = 3000; // Timeout ist 3000ms 
   timeouts.WriteTotalTimeoutMultiplier = 1000;
   timeouts.WriteTotalTimeoutConstant = 1000;

   if (!SetCommTimeouts(hComm, &amp;timeouts))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

   DCB dcb;
   ZeroMemory (&amp;dcb, sizeof(dcb));
	dcb.DCBlength = sizeof(DCB);

   if (!GetCommState (hComm, &amp;dcb))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

	dcb_alt = dcb;
	dcb.fBinary = TRUE; // muss immer &quot;TRUE&quot; sein!
	dcb.fParity = TRUE;
	dcb.fOutxCtsFlow = FALSE;
	dcb.fOutxDsrFlow = FALSE;
	dcb.fDtrControl = DTR_CONTROL_ENABLE;
	dcb.fDsrSensitivity = FALSE;
	dcb.fTXContinueOnXoff = TRUE;
	dcb.fOutX = FALSE;
	dcb.fInX = FALSE;
	dcb.fErrorChar = FALSE;
	dcb.fNull = FALSE;
	dcb.fRtsControl = RTS_CONTROL_ENABLE;
	dcb.fAbortOnError = FALSE;
	dcb.wReserved = 0; // muss immer &quot;0&quot; sein!

	dcb.BaudRate = nBaud;
	dcb.ByteSize = (BYTE)nBits;
	dcb.Parity   = (BYTE)nParity;
	dcb.StopBits = (BYTE)nStopp;   

   dcb.fParity = (dcb.Parity != NOPARITY);

   if (!SetCommState(hComm, &amp;dcb))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

   return(TRUE);
}

BOOL CSerial::Close (void)
{
   BOOL bResult;

	if(INVALID_HANDLE_VALUE == hComm)
		return (TRUE);

	SetCommTimeouts(hComm, &amp;timeouts_alt);
	SetCommState(hComm, &amp;dcb_alt);

	bResult = CloseHandle(hComm);
	hComm   = INVALID_HANDLE_VALUE;

	return(bResult);
}

BOOL CSerial::SetTimeout (int iTotalReadTimeout)
{
   if (INVALID_HANDLE_VALUE == hComm)
      return (TRUE);

   COMMTIMEOUTS timeouts;
   timeouts.ReadIntervalTimeout = MAXDWORD ;
   timeouts.ReadTotalTimeoutMultiplier = MAXDWORD ;
   timeouts.ReadTotalTimeoutConstant = (DWORD) iTotalReadTimeout;
   timeouts.WriteTotalTimeoutMultiplier = 1000;
   timeouts.WriteTotalTimeoutConstant = 1000;

   if (!SetCommTimeouts(hComm, &amp;timeouts))
      return (FALSE);

   return(TRUE);
}

BOOL CSerial::WriteCommByte (unsigned char ucByte)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (FALSE);
	}

   if (!TransmitCommChar(hComm, ucByte))
		return (FALSE);

   return (TRUE);
}

int CSerial::SendData (const char *buffer, int iBytesToWrite)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (0);
	}

   DWORD dwBytesWritten = 0;
   WriteFile(hComm, buffer, iBytesToWrite, &amp;dwBytesWritten, NULL);

   return ((int) dwBytesWritten);
}

int CSerial::ReadData (char *buffer, int iMaxCount)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (0);
	}

   DWORD dwRead = 0;
   char chRead;
   int i = 0;

   while (ReadFile(hComm, &amp;chRead, 1, &amp;dwRead, NULL))
   {
       if (dwRead != 1)
           break;

       buffer[i++] = chRead;

		 if (i == iMaxCount)
			 break;
	}

	return (i);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/169607/auslesen-der-seriellen-schnittstelle</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 09:07:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/169607.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 06 Jan 2007 21:16:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sat, 06 Jan 2007 21:16:48 GMT]]></title><description><![CDATA[<p>hallo<br />
also ich habe mir letzte woche bei ebay nen gps-empfänger ersteigert. spitzen ding... funzt auch alles soweit gut.<br />
das ding arbeitet mit NMEA (<a href="http://de.wikipedia.org/wiki/National_Marine_Electronics_Association" rel="nofollow">http://de.wikipedia.org/wiki/National_Marine_Electronics_Association</a>)<br />
jetzt hab ich folgendes geschrieben:</p>
<pre><code class="language-cpp">//---------------------------------------------------------------------------

#include &lt;vcl.h&gt;
#pragma hdrstop
#include &lt;iostream&gt;
#include &quot;Serial.h&quot;
#include &quot;Serial.cpp&quot;

using namespace std;

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
    CSerial serial;
	if (serial.Open(2, 9600))
		cout &lt;&lt; &quot;erfolg!&quot; &lt;&lt; endl;
	else
		cout &lt;&lt; &quot;misserfolg!&quot; &lt;&lt; endl;
	char* lpBuffer = new char[100];
	do {
		serial.ReadData(lpBuffer, 100);
	} while (lpBuffer == Null);
	cout &lt;&lt; lpBuffer;
	delete []lpBuffer;
	cin.get();
	return 0;
}
//---------------------------------------------------------------------------
</code></pre>
<p>aber wie zu erwarten: es funktioniert nicht.<br />
ich bekomme zwar meine datensätze (siehe wiki) rein, aber meistens stehn noch irgendwelche wirren zeichen davor oder dahinter. es kommt auch vor dass ich mal garnichts anzeigt, oder auch mal nach 20 zeichen oder so einfach aufhört. ich vermute der liest das was gerade rein kommt. aber wie bekomm ich den dazu beim sinnvollen anzufangen und am ende des sinnvollen aufzuhören?<br />
danke erstmal<br />
bob007<br />
ps:<br />
seriel.h:</p>
<pre><code class="language-cpp">// --------------------------------------------------------------------------------------
// (c) 2003 www.winapi.net
//
// Serial.h
//
// Headerdatei für eine einfache, aber leistungsfähige 
// Kommunikation über die Serielle Schnittstelle
// --------------------------------------------------------------------------------------

#ifndef __SERIAL_H__
#define __SERIAL_H__

class CSerial
{

public:
	CSerial();
	~CSerial();

	BOOL Open (int nComPortNr, int nBaud, int nBits, int nParity, int nStopp);
	BOOL Close (void);
	BOOL ModeSet (int nBaud, int nBits, int nParity, int nStopp);
	BOOL SetTimeout (int iTotalReadTimeout);
	BOOL IsOpen (void);

	int ReadData (char *buffer, int iMaxCount);
	int SendData (const char *buffer, int iBytesToWrite);
	BOOL WriteCommByte (unsigned char ucByte);

private:
	HANDLE hComm;
	DCB dcb_alt;
	COMMTIMEOUTS timeouts_alt;
};

#endif
</code></pre>
<p>und seriel.cpp:</p>
<pre><code class="language-cpp">// --------------------------------------------------------------------------------------
// (c) 2003 www.winapi.net
//
// Serial.cpp
//
// CPP-Datei für eine einfache, aber leistungsfähige 
// Kommunikation über die Serielle Schnittstelle
// --------------------------------------------------------------------------------------

#include &lt;windows.h&gt;
#include &quot;Serial.h&quot;

CSerial::CSerial()
{
	hComm = INVALID_HANDLE_VALUE;
}

CSerial::~CSerial()
{
	Close ();
}

BOOL CSerial::IsOpen()
{
   if (INVALID_HANDLE_VALUE != hComm)
       return (TRUE);
	else
		return (FALSE);
}

BOOL CSerial::ModeSet (int nBaud, int nBits, int nParity, int nStopp)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (FALSE);
	}

   DCB dcb;

   ZeroMemory (&amp;dcb, sizeof(dcb));
	dcb.DCBlength = sizeof(DCB);

   if (!GetCommState (hComm, &amp;dcb))
      return (FALSE);

   dcb.BaudRate = nBaud;
   dcb.ByteSize = (BYTE)nBits;
   dcb.Parity   = (BYTE)nParity;
	dcb.StopBits = (BYTE)nStopp;   

   if (!SetCommState (hComm, &amp;dcb))
		return (FALSE);

	return (TRUE);
}

BOOL CSerial::Open (int nComPortNr, int nBaud, int nBits, int nParity, int nStopp)
{
   if (INVALID_HANDLE_VALUE != hComm)
	{
      return (TRUE);
	}

   char szPort[16];

   wsprintf (szPort, &quot;\\\\.\\COM%d&quot;, nComPortNr);

   hComm = CreateFile (szPort,
						  GENERIC_READ | GENERIC_WRITE,
                    0,
                    0,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);

   if (hComm == INVALID_HANDLE_VALUE)
      return (FALSE);

   if (!GetCommTimeouts(hComm, &amp;timeouts_alt))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

   COMMTIMEOUTS timeouts;
   timeouts.ReadIntervalTimeout = MAXDWORD ;
   timeouts.ReadTotalTimeoutMultiplier = MAXDWORD ;
   timeouts.ReadTotalTimeoutConstant = 3000; // Timeout ist 3000ms 
   timeouts.WriteTotalTimeoutMultiplier = 1000;
   timeouts.WriteTotalTimeoutConstant = 1000;

   if (!SetCommTimeouts(hComm, &amp;timeouts))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

   DCB dcb;
   ZeroMemory (&amp;dcb, sizeof(dcb));
	dcb.DCBlength = sizeof(DCB);

   if (!GetCommState (hComm, &amp;dcb))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

	dcb_alt = dcb;
	dcb.fBinary = TRUE; // muss immer &quot;TRUE&quot; sein!
	dcb.fParity = TRUE;
	dcb.fOutxCtsFlow = FALSE;
	dcb.fOutxDsrFlow = FALSE;
	dcb.fDtrControl = DTR_CONTROL_ENABLE;
	dcb.fDsrSensitivity = FALSE;
	dcb.fTXContinueOnXoff = TRUE;
	dcb.fOutX = FALSE;
	dcb.fInX = FALSE;
	dcb.fErrorChar = FALSE;
	dcb.fNull = FALSE;
	dcb.fRtsControl = RTS_CONTROL_ENABLE;
	dcb.fAbortOnError = FALSE;
	dcb.wReserved = 0; // muss immer &quot;0&quot; sein!

	dcb.BaudRate = nBaud;
	dcb.ByteSize = (BYTE)nBits;
	dcb.Parity   = (BYTE)nParity;
	dcb.StopBits = (BYTE)nStopp;   

   dcb.fParity = (dcb.Parity != NOPARITY);

   if (!SetCommState(hComm, &amp;dcb))
   {
		DWORD dwError = GetLastError();
		Close ();
		SetLastError(dwError);
      return (FALSE);
   }

   return(TRUE);
}

BOOL CSerial::Close (void)
{
   BOOL bResult;

	if(INVALID_HANDLE_VALUE == hComm)
		return (TRUE);

	SetCommTimeouts(hComm, &amp;timeouts_alt);
	SetCommState(hComm, &amp;dcb_alt);

	bResult = CloseHandle(hComm);
	hComm   = INVALID_HANDLE_VALUE;

	return(bResult);
}

BOOL CSerial::SetTimeout (int iTotalReadTimeout)
{
   if (INVALID_HANDLE_VALUE == hComm)
      return (TRUE);

   COMMTIMEOUTS timeouts;
   timeouts.ReadIntervalTimeout = MAXDWORD ;
   timeouts.ReadTotalTimeoutMultiplier = MAXDWORD ;
   timeouts.ReadTotalTimeoutConstant = (DWORD) iTotalReadTimeout;
   timeouts.WriteTotalTimeoutMultiplier = 1000;
   timeouts.WriteTotalTimeoutConstant = 1000;

   if (!SetCommTimeouts(hComm, &amp;timeouts))
      return (FALSE);

   return(TRUE);
}

BOOL CSerial::WriteCommByte (unsigned char ucByte)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (FALSE);
	}

   if (!TransmitCommChar(hComm, ucByte))
		return (FALSE);

   return (TRUE);
}

int CSerial::SendData (const char *buffer, int iBytesToWrite)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (0);
	}

   DWORD dwBytesWritten = 0;
   WriteFile(hComm, buffer, iBytesToWrite, &amp;dwBytesWritten, NULL);

   return ((int) dwBytesWritten);
}

int CSerial::ReadData (char *buffer, int iMaxCount)
{
   if (INVALID_HANDLE_VALUE == hComm)
	{
		SetLastError(ERROR_INVALID_HANDLE);
      return (0);
	}

   DWORD dwRead = 0;
   char chRead;
   int i = 0;

   while (ReadFile(hComm, &amp;chRead, 1, &amp;dwRead, NULL))
   {
       if (dwRead != 1)
           break;

       buffer[i++] = chRead;

		 if (i == iMaxCount)
			 break;
	}

	return (i);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1204679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204679</guid><dc:creator><![CDATA[bob007]]></dc:creator><pubDate>Sat, 06 Jan 2007 21:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sun, 07 Jan 2007 06:38:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>zuerst solltest du darauf achten wie dein Datensatz ausschauen muss: die baudrate, die Anzahl der daten bits , das stopp bit und eventuell dass parity bit (sollte in der Beschreibung des Empfängers nach zu lesen sein)</p>
<p>auf der wikipedia seite kannst du zb sehen das die baudrate 4800 beträgt anstatt 9600</p>
<p>das heist diese zeile ist falsch: if (serial.Open(2, 9600))<br />
richtig: if (serial.Open(2, 4800))</p>
<p>Es ist auch diese zeile in der du zusätlich daten bits und stop bits angeben solltest.(in der serial.cpp siehst du die zusätzlich möglichen parameter anschauen)</p>
<p>und dieser teil macht dein Ergebnis zum Zufall:</p>
<p>char* lpBuffer = new char[100];<br />
do {<br />
serial.ReadData(lpBuffer, 100);<br />
} while (lpBuffer == Null);<br />
cout &lt;&lt; lpBuffer;<br />
delete []lpBuffer;</p>
<p>der do zweig wird genau einaml ausgeführt egal ob in diesem moment indem er erreicht wird gerade etwas gesendet wird oder nicht</p>
<p>versuch mal</p>
<p>int recived = 0;<br />
char* lpBuffer = new char[100];<br />
do {<br />
recived = serial.ReadData(lpBuffer, 100);<br />
} while (!recived);<br />
cout &lt;&lt; lpBuffer;<br />
delete []lpBuffer;</p>
<p>jetzt wird solange gelesen bis wirklich etwas empfangen wurde.<br />
i</p>
<p>hoffe etwas geholfen zu haben.</p>
<p>lg RAY</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1204802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204802</guid><dc:creator><![CDATA[mastaray]]></dc:creator><pubDate>Sun, 07 Jan 2007 06:38:31 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sun, 07 Jan 2007 13:08:57 GMT]]></title><description><![CDATA[<p>also danke erstmal<br />
das mit den 9600baud weis ich. das is ne eigenart von meinem gps. das funktioniert auch soweit<br />
das mit der recived variable geht soweit. jetzt hab ich zumindest immer was drin stehn... sinnvoll is des aber trotzdem noch ned. es kommen immer noch diese sinnlosen zeichen. irgendwie hab ich auch die falsche lib gepostet... bei der geposteten funzt der open befehl immer ned.<br />
ich brauche:<br />
port 2<br />
baud 9600<br />
data 8<br />
parity none<br />
stop 1<br />
wie muss den da der aufruf dazu heißen? bzw was bedeutet none als integerwert???</p>
<p>ich schick mal noch die libs die ich im mom verwende... bzw hat jemand welche mit denen es funzt?<br />
serial.h:</p>
<pre><code class="language-cpp">// Serial.h

#ifndef __SERIAL_H__
#define __SERIAL_H__

#define FC_DTRDSR       0x01
#define FC_RTSCTS       0x02
#define FC_XONXOFF      0x04
#define ASCII_BEL       0x07
#define ASCII_BS        0x08
#define ASCII_LF        0x0A
#define ASCII_CR        0x0D
#define ASCII_XON       0x11
#define ASCII_XOFF      0x13

class CSerial
{

public:
	CSerial();
	~CSerial();

	BOOL Open( int nPort = 2, int nBaud = 9600 );
	BOOL Close( void );

	int ReadData( void *, int );
	int SendData( const char *, int );
	int ReadDataWaiting( void );

	BOOL IsOpened( void ){ return( m_bOpened ); }

protected:
	BOOL WriteCommByte( unsigned char );

	HANDLE m_hIDComDev;
	OVERLAPPED m_OverlappedRead, m_OverlappedWrite;
	BOOL m_bOpened;

};

#endif
</code></pre>
<p>serial.cpp:</p>
<pre><code class="language-cpp">// Serial.cpp

#include &quot;stdafx.h&quot;
#include &quot;Serial.h&quot;

CSerial::CSerial()
{

	memset( &amp;m_OverlappedRead, 0, sizeof( OVERLAPPED ) );
 	memset( &amp;m_OverlappedWrite, 0, sizeof( OVERLAPPED ) );
	m_hIDComDev = NULL;
	m_bOpened = FALSE;

}

CSerial::~CSerial()
{

	Close();

}

BOOL CSerial::Open( int nPort, int nBaud )
{

	if( m_bOpened ) return( TRUE );

	char szPort[15];
	char szComParams[50];
	DCB dcb;

	wsprintf( szPort, &quot;COM%d&quot;, nPort );
	m_hIDComDev = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL );
	if( m_hIDComDev == NULL ) return( FALSE );

	memset( &amp;m_OverlappedRead, 0, sizeof( OVERLAPPED ) );
 	memset( &amp;m_OverlappedWrite, 0, sizeof( OVERLAPPED ) );

	COMMTIMEOUTS CommTimeOuts;
	CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;
	CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
	CommTimeOuts.ReadTotalTimeoutConstant = 0;
	CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
	CommTimeOuts.WriteTotalTimeoutConstant = 5000;
	SetCommTimeouts( m_hIDComDev, &amp;CommTimeOuts );

	wsprintf( szComParams, &quot;COM%d:%d,n,8,1&quot;, nPort, nBaud );

	m_OverlappedRead.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
	m_OverlappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL );

	dcb.DCBlength = sizeof( DCB );
	GetCommState( m_hIDComDev, &amp;dcb );
	dcb.BaudRate = nBaud;
	dcb.ByteSize = 8;
	unsigned char ucSet;
	ucSet = (unsigned char) ( ( FC_RTSCTS &amp; FC_DTRDSR ) != 0 );
	ucSet = (unsigned char) ( ( FC_RTSCTS &amp; FC_RTSCTS ) != 0 );
	ucSet = (unsigned char) ( ( FC_RTSCTS &amp; FC_XONXOFF ) != 0 );
	if( !SetCommState( m_hIDComDev, &amp;dcb ) ||
		!SetupComm( m_hIDComDev, 10000, 10000 ) ||
		m_OverlappedRead.hEvent == NULL ||
		m_OverlappedWrite.hEvent == NULL ){
		DWORD dwError = GetLastError();
		if( m_OverlappedRead.hEvent != NULL ) CloseHandle( m_OverlappedRead.hEvent );
		if( m_OverlappedWrite.hEvent != NULL ) CloseHandle( m_OverlappedWrite.hEvent );
		CloseHandle( m_hIDComDev );
		return( FALSE );
		}

	m_bOpened = TRUE;

	return( m_bOpened );

}

BOOL CSerial::Close( void )
{

	if( !m_bOpened || m_hIDComDev == NULL ) return( TRUE );

	if( m_OverlappedRead.hEvent != NULL ) CloseHandle( m_OverlappedRead.hEvent );
	if( m_OverlappedWrite.hEvent != NULL ) CloseHandle( m_OverlappedWrite.hEvent );
	CloseHandle( m_hIDComDev );
	m_bOpened = FALSE;
	m_hIDComDev = NULL;

	return( TRUE );

}

BOOL CSerial::WriteCommByte( unsigned char ucByte )
{
	BOOL bWriteStat;
	DWORD dwBytesWritten;

	bWriteStat = WriteFile( m_hIDComDev, (LPSTR) &amp;ucByte, 1, &amp;dwBytesWritten, &amp;m_OverlappedWrite );
	if( !bWriteStat &amp;&amp; ( GetLastError() == ERROR_IO_PENDING ) ){
		if( WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 ) ) dwBytesWritten = 0;
		else{
			GetOverlappedResult( m_hIDComDev, &amp;m_OverlappedWrite, &amp;dwBytesWritten, FALSE );
			m_OverlappedWrite.Offset += dwBytesWritten;
			}
		}

	return( TRUE );

}

int CSerial::SendData( const char *buffer, int size )
{

	if( !m_bOpened || m_hIDComDev == NULL ) return( 0 );

	DWORD dwBytesWritten = 0;
	int i;
	for( i=0; i&lt;size; i++ ){
		WriteCommByte( buffer[i] );
		dwBytesWritten++;
		}

	return( (int) dwBytesWritten );

}

int CSerial::ReadDataWaiting( void )
{

	if( !m_bOpened || m_hIDComDev == NULL ) return( 0 );

	DWORD dwErrorFlags;
	COMSTAT ComStat;

	ClearCommError( m_hIDComDev, &amp;dwErrorFlags, &amp;ComStat );

	return( (int) ComStat.cbInQue );

}

int CSerial::ReadData( void *buffer, int limit )
{

	if( !m_bOpened || m_hIDComDev == NULL ) return( 0 );

	BOOL bReadStatus;
	DWORD dwBytesRead, dwErrorFlags;
	COMSTAT ComStat;

	ClearCommError( m_hIDComDev, &amp;dwErrorFlags, &amp;ComStat );
	if( !ComStat.cbInQue ) return( 0 );

	dwBytesRead = (DWORD) ComStat.cbInQue;
	if( limit &lt; (int) dwBytesRead ) dwBytesRead = (DWORD) limit;

	bReadStatus = ReadFile( m_hIDComDev, buffer, dwBytesRead, &amp;dwBytesRead, &amp;m_OverlappedRead );
	if( !bReadStatus ){
		if( GetLastError() == ERROR_IO_PENDING ){
			WaitForSingleObject( m_OverlappedRead.hEvent, 2000 );
			return( (int) dwBytesRead );
			}
		return( 0 );
		}

	return( (int) dwBytesRead );

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1204951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204951</guid><dc:creator><![CDATA[bob007]]></dc:creator><pubDate>Sun, 07 Jan 2007 13:08:57 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sun, 07 Jan 2007 13:32:43 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=10455" rel="nofollow">evilissimo</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=4" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1204966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1204966</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sun, 07 Jan 2007 13:32:43 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sun, 07 Jan 2007 15:39:50 GMT]]></title><description><![CDATA[<p>Nimm doch eine fertige, geprüfte und zuverlässige Klasse:<br />
<a href="http://www.codeproject.com/system/serial.asp" rel="nofollow">http://www.codeproject.com/system/serial.asp</a></p>
<p>Es macht IMHO keinen Sinn das Rad immer wieder neu zu erfinden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205058</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 07 Jan 2007 15:39:50 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sun, 07 Jan 2007 16:49:20 GMT]]></title><description><![CDATA[<p>hm sry aber des funzt irgendwie noch viel weniger... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205095</guid><dc:creator><![CDATA[bob007]]></dc:creator><pubDate>Sun, 07 Jan 2007 16:49:20 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sun, 07 Jan 2007 16:53:57 GMT]]></title><description><![CDATA[<p>bob007 schrieb:</p>
<blockquote>
<p>hm sry aber des funzt irgendwie noch viel weniger... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Wenn ich mir deine main-Funktion so ansehe, vermute ich, dass das an deinem Code liegt, nicht an irgendeiner Bibliothek.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205097</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sun, 07 Jan 2007 16:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sun, 07 Jan 2007 20:01:40 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>Wenn ich mir deine main-Funktion so ansehe, vermute ich, dass das an deinem Code liegt, nicht an irgendeiner Bibliothek.</p>
</blockquote>
<p>hm also mein main sieht jetzt so aus:</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
	CSerial serial;
	serial.Open(_T(&quot;COM2&quot;));
	serial.Setup(CSerial::EBaud9600,CSerial::EData8,CSerial::EParNone,CSerial::EStop1);
	serial.SetupHandshaking(CSerial::EHandshakeHardware);
	DWORD dwBytesRead = 0;
	BYTE  abBuffer[100];
	do
	{
		serial.Read(abBuffer,sizeof(abBuffer),&amp;dwBytesRead);
		if (dwBytesRead &gt; 0)
		{
			cout &lt;&lt; abBuffer;
		}
	}
	while (dwBytesRead == sizeof(abBuffer));
	serial.Close();
	cin.get();
	return 0;
}
</code></pre>
<p>das is so direkt aus dem bespiel kopiert. müsste eigendlich so passen.<br />
Problem:<br />
ich bekomme mal wieder garnichts rein... und wenn ich dann nach einigen versuchen ausgerechte mal den richtigen moment erwische sieht die ausgabe in etwa so aus:</p>
<pre><code>GPGGA,194902.000,5015.1327,N,01f══┘3f3fY4Yã♠Vã&amp;µFãV&amp;&amp;µvãÍcFvµFãÍcã♠♠♠♠ªV&amp;k
$GPGSA,A,3,17,23,20,04,11d,,,,,,,,3.8,2.4,3.0*3D
$GPRMC,194902.000,A,5015.▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄1
</code></pre>
<p>der datensatz in der mittleren zeile scheint soweit zu passen.<br />
in der ersten zeile fehlt am anfang was (hab ich vml ned mit erwischt...) aber ich hab keinen plan was das ab dem &quot;f&quot; darstellen soll. eigendlich müsste es da ganz anders weiter gehen.<br />
genau das gleiche in der letzten zeile nach dem &quot;5.&quot; musste es eigendlich mit 1327,N,&quot; weitergehen und nicht mir irgendwelchen sonderzeichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205230</guid><dc:creator><![CDATA[bob007]]></dc:creator><pubDate>Sun, 07 Jan 2007 20:01:40 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sun, 07 Jan 2007 20:06:43 GMT]]></title><description><![CDATA[<p>hm, sieht so aus, als würdest du da teilweise HTML-Code empfangen, denn &amp;#...; wird in HTML glaube ich verwendet um UNICODE-Zeichen auszugeben.<br />
dem zu Folge wären die Zahlen zwischen &amp;# und ; die Nummern der Zeichen im UNICODE-Zeichensatz.<br />
du solltest dein Prog mal so umschreiben, dass es die ausgaben in einer Datei speichert, und diese Datei solltest du dir mal z.B. im Internet Explorer oder im Firefox anschauen.<br />
Mal sehen, wie das dann aussieht.</p>
<p>MfG DrakoXP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205234</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Sun, 07 Jan 2007 20:06:43 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sun, 07 Jan 2007 20:10:50 GMT]]></title><description><![CDATA[<p>also das, was du da oben geschrieben hast, sieht bei mir so aus:</p>
<p>GPGGA,194902.000,5015.1327,N,01f══┘3f3fY4Yã<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2660.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--spade_suit"
      title=":spade_suit:"
      alt="♠"
    />Vã&amp;µFãV&amp;&amp;µvãÍcFvµFãÍcã<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2660.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--spade_suit"
      title=":spade_suit:"
      alt="♠"
    /><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2660.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--spade_suit"
      title=":spade_suit:"
      alt="♠"
    /><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2660.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--spade_suit"
      title=":spade_suit:"
      alt="♠"
    /><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2660.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--spade_suit"
      title=":spade_suit:"
      alt="♠"
    />ªV&amp;k $GPGSA,A,3,17,23,20,04,11d,,,,,,,,3.8,2.4,3.0*3D $GPRMC,194902.000,A,5015.▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄1</p>
<p>also immer noch ziemlich sinnlos. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205236</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Sun, 07 Jan 2007 20:10:50 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sun, 07 Jan 2007 20:12:38 GMT]]></title><description><![CDATA[<p>DrakoXP: Schreib bitte nicht so einen Müll. Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205238</guid><dc:creator><![CDATA[MKF]]></dc:creator><pubDate>Sun, 07 Jan 2007 20:12:38 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sun, 07 Jan 2007 20:14:30 GMT]]></title><description><![CDATA[<p>in wiefern war das eben Müll?<br />
es war immerhin nen Versuch wert.<br />
schließlich kann man in HTML wirklich &amp;#...; schreiben um ein Zeichen anzuzeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205239</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Sun, 07 Jan 2007 20:14:30 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Sun, 07 Jan 2007 20:59:38 GMT]]></title><description><![CDATA[<p>ja des hat in der ausgabe auch scho so ausgesehen wie du des da beschrieben hast. des is irgendwie nur durch diesen &quot;code&quot; tag hier im forum passiert. richtig sah die ausgabe dann so aus:<br />
GPGGA,194902.000,5015.1327,N,01f══┘3f3fY4Yã<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2660.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--spade_suit"
      title=":spade_suit:"
      alt="♠"
    />Vã&amp;µFãV&amp;&amp;µvãÍcFvµFãÍcã<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2660.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--spade_suit"
      title=":spade_suit:"
      alt="♠"
    /><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2660.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--spade_suit"
      title=":spade_suit:"
      alt="♠"
    /><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2660.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--spade_suit"
      title=":spade_suit:"
      alt="♠"
    /><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/2660.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--spade_suit"
      title=":spade_suit:"
      alt="♠"
    />ªV&amp;k $GPGSA,A,3,17,23,20,04,11d,,,,,,,,3.8,2.4,3.0*3D $GPRMC,194902.000,A,5015.▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205264</guid><dc:creator><![CDATA[bob007]]></dc:creator><pubDate>Sun, 07 Jan 2007 20:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Mon, 08 Jan 2007 04:55:55 GMT]]></title><description><![CDATA[<p>das wusste ich ja nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205376</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Mon, 08 Jan 2007 04:55:55 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Mon, 08 Jan 2007 14:01:52 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>das wusste ich ja nicht</p>
</blockquote>
<p>Konntest du auch nicht und dein Versuch war keine schlechte Idee! Die Trolls hier schreiben halt manchmal merkwürdige Sachen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1205662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205662</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 08 Jan 2007 14:01:52 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Mon, 08 Jan 2007 14:48:37 GMT]]></title><description><![CDATA[<p>jep ganau meine meinung. but now back to topic. kann mir jemand weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205708</guid><dc:creator><![CDATA[bob007]]></dc:creator><pubDate>Mon, 08 Jan 2007 14:48:37 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Mon, 08 Jan 2007 15:01:52 GMT]]></title><description><![CDATA[<p>naja, jetzt mal was anderes:</p>
<p>vielleicht sind die Ausgaben gar nicht sinnlos, sondern nur du kannst nichts damit anfangen.<br />
du solltest dich vllt mal mit der Technologie von GPS auseinandersetzen, also z.B. wie die Pakete aussehen, die verschickt werden.<br />
Dann könntest du einen Parser schreiben, der diese Pakete auswertet und das dann auch für unwissende verständlich macht.</p>
<p>So ist es ja auch bei den ID3Tags.<br />
Wenn man da einfach die letzten 128 Byte ausgibst kommt nur Müll raus.<br />
Wenn du aber diese 128 Byte in folgende Struktur schreibst:</p>
<pre><code class="language-cpp">typedef struct tagID3V1 {
	char szTag[3];			// Kennzeichnung für ID3v1-Tags, bei ID3v1 immer &quot;TAG&quot;
	char szTitle[30];		// Titel des Liedes
	char szInterpret[30];	// Interpret
	char szAlbum[30];		// Album
	char szYear[4];			// Erscheinungsjahr
	char szComment[30];		// beliebiger Kommentar
	char cGenre;			// Genre
} SID3V1_real, *PID3V1_real;
</code></pre>
<p>kannst du aus den ID3Tags einige tolle Informationen erfahren.</p>
<p>so in etwa solltest du es vllt mal bei GPS versuchen.<br />
guck einfach mal Internet, was du so über GPS finden kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205719</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Mon, 08 Jan 2007 15:01:52 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Mon, 08 Jan 2007 20:53:35 GMT]]></title><description><![CDATA[<p>das auseinandersetzten is nicht das problem... ich kann jeden beliebigen Hyperteminal nehmen und einfach den eingang auslesen und bekomm das rein was ich haben will. das muss sozusagen an der bibliothek oder meinem progrämmchen liegen liegen.<br />
richtig müsste die ausgabe so lauten (wobei die zahlenwerte etwas variieren können):</p>
<p><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>G</mi><mi>P</mi><mi>G</mi><mi>G</mi><mi>A</mi><mo separator="true">,</mo><mn>2</mn><mn>0</mn><mn>4</mn><mn>8</mn><mn>3</mn><mn>4</mn><mi mathvariant="normal">.</mi><mn>0</mn><mn>0</mn><mn>0</mn><mo separator="true">,</mo><mn>5</mn><mn>0</mn><mn>1</mn><mn>5</mn><mi mathvariant="normal">.</mi><mn>1</mn><mn>3</mn><mn>3</mn><mn>1</mn><mo separator="true">,</mo><mi>N</mi><mo separator="true">,</mo><mn>0</mn><mn>1</mn><mn>1</mn><mn>5</mn><mn>5</mn><mi mathvariant="normal">.</mi><mn>7</mn><mn>2</mn><mn>8</mn><mn>8</mn><mo separator="true">,</mo><mi>E</mi><mo separator="true">,</mo><mn>1</mn><mo separator="true">,</mo><mn>0</mn><mn>3</mn><mo separator="true">,</mo><mn>3</mn><mi mathvariant="normal">.</mi><mn>0</mn><mo separator="true">,</mo><mn>5</mn><mn>1</mn><mn>0</mn><mi mathvariant="normal">.</mi><mn>2</mn><mo separator="true">,</mo><mi>M</mi><mo separator="true">,</mo><mn>4</mn><mn>7</mn><mi mathvariant="normal">.</mi><mn>4</mn><mo separator="true">,</mo><mi>M</mi><mo separator="true">,</mo><mo separator="true">,</mo><mn>0</mn><mn>0</mn><mn>0</mn><mn>0</mn><mo>∗</mo><mn>5</mn><mn>0</mn></mrow><annotation encoding="application/x-tex">GPGGA,204834.000,5015.1331,N,01155.7288,E,1,03,3.0,510.2,M,47.4,M,,0000*50  
</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.68333em;"></span><span class="strut bottom" style="height:0.8777699999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit">G</span><span class="mord mathit" style="margin-right:0.13889em;">P</span><span class="mord mathit">G</span><span class="mord mathit">G</span><span class="mord mathit">A</span><span class="mpunct">,</span><span class="mord mathrm">2</span><span class="mord mathrm">0</span><span class="mord mathrm">4</span><span class="mord mathrm">8</span><span class="mord mathrm">3</span><span class="mord mathrm">4</span><span class="mord mathrm">.</span><span class="mord mathrm">0</span><span class="mord mathrm">0</span><span class="mord mathrm">0</span><span class="mpunct">,</span><span class="mord mathrm">5</span><span class="mord mathrm">0</span><span class="mord mathrm">1</span><span class="mord mathrm">5</span><span class="mord mathrm">.</span><span class="mord mathrm">1</span><span class="mord mathrm">3</span><span class="mord mathrm">3</span><span class="mord mathrm">1</span><span class="mpunct">,</span><span class="mord mathit" style="margin-right:0.10903em;">N</span><span class="mpunct">,</span><span class="mord mathrm">0</span><span class="mord mathrm">1</span><span class="mord mathrm">1</span><span class="mord mathrm">5</span><span class="mord mathrm">5</span><span class="mord mathrm">.</span><span class="mord mathrm">7</span><span class="mord mathrm">2</span><span class="mord mathrm">8</span><span class="mord mathrm">8</span><span class="mpunct">,</span><span class="mord mathit" style="margin-right:0.05764em;">E</span><span class="mpunct">,</span><span class="mord mathrm">1</span><span class="mpunct">,</span><span class="mord mathrm">0</span><span class="mord mathrm">3</span><span class="mpunct">,</span><span class="mord mathrm">3</span><span class="mord mathrm">.</span><span class="mord mathrm">0</span><span class="mpunct">,</span><span class="mord mathrm">5</span><span class="mord mathrm">1</span><span class="mord mathrm">0</span><span class="mord mathrm">.</span><span class="mord mathrm">2</span><span class="mpunct">,</span><span class="mord mathit" style="margin-right:0.10903em;">M</span><span class="mpunct">,</span><span class="mord mathrm">4</span><span class="mord mathrm">7</span><span class="mord mathrm">.</span><span class="mord mathrm">4</span><span class="mpunct">,</span><span class="mord mathit" style="margin-right:0.10903em;">M</span><span class="mpunct">,</span><span class="mpunct">,</span><span class="mord mathrm">0</span><span class="mord mathrm">0</span><span class="mord mathrm">0</span><span class="mord mathrm">0</span><span class="mbin">∗</span><span class="mord mathrm">5</span><span class="mord mathrm">0</span></span></span></span>GPGSA,A,2,23,04,20,,,,,,,,,,3.2,3.0,1.0<em>37<br />
$GPRMC,204834.000,A,5015.1331,N,01155.7288,E,,357.55,080107,,,A</em>72</p>
<p>und mit so ner ausgabe kann ich dann auch was anfangen und das ganze dann entsprechend verabeiten. aber nicht wenn irgendwo zwischen drin irgendwelche seltsamen, undefinierbaren, im protokoll nicht definierten zeichen vorkommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206029</guid><dc:creator><![CDATA[bob007]]></dc:creator><pubDate>Mon, 08 Jan 2007 20:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to auslesen der seriellen schnittstelle on Wed, 10 Jan 2007 21:01:06 GMT]]></title><description><![CDATA[<p>ok<br />
konnt des problem lösen. unter <a href="http://www.microsoft.com/germany/MSDN/webcasts/library.aspx?id=118762251" rel="nofollow">http://www.microsoft.com/germany/MSDN/webcasts/library.aspx?id=118762251</a> ist alles genaustens beschrieben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207508</guid><dc:creator><![CDATA[bob007]]></dc:creator><pubDate>Wed, 10 Jan 2007 21:01:06 GMT</pubDate></item></channel></rss>