Hallo
Beim pollen der serielle Schnittstelle habe ich das Problem, das nach einiger Zeit ein empfangenes byte im Puffer zurückgehalten wird und nicht ausgelesen werden kann.
Erst nachdem ich ein weiteres byte nachschicke, reagiert ReadFile() wieder und ich kann dann 2 bytes sehen, also auch das erwartete welches fehlt. Ich habe das auch schon als event basierende
Lösung programmiert, dort tritt das Problem eher auf.
Hier die Polling Routine, das geht ne Stunde gut, und dann tritt der Fehler auf. Es ist also nicht so dass irgendwas verloren geht, sonder es ist im Puffer drin, nur kann ich es nicht lesen.
Rx und Tx DMA habe ich in der registry eingeschaltet.
public void Poll_Read(ref Queue myQueue)
{
byte[] readbuffer = new Byte[rxBufferSize];
int bytesread = 0;
do
{
// make sure the port handle is valid
if (hPort == (IntPtr)CommAPI.INVALID_HANDLE_VALUE)
{
bytesread = 0;
break;
}
if (!m_CommAPI.ReadFile(hPort, readbuffer, rxBufferSize, ref bytesread, IntPtr.Zero))
{
throw new CommPortException("Serial port -> " + Marshal.GetLastWin32Error());
}
if (bytesread >= 1)
{
lock (myQueue.SyncRoot)
{
for (int b = 0; b < bytesread; b++)
myQueue.Enqueue(readbuffer[b]);
}
}
// Re-specify the set of events to be monitored for the port.
if (CommAPI.FullFramework)
{
m_CommAPI.SetCommMask(hPort, CommEventFlags.ALLPC);
}
else
{
m_CommAPI.SetCommMask(hPort, CommEventFlags.ALLCE);
}
Thread.Sleep(1);
} while (bytesread > 0);
}