Status Com Port Abfragen



  • Servus

    ich habe gerade ein kleines Problem mit meiner seriellen Komunikation. Ich versuche über rs232 eine Datenbank aus einem Microcontroller zu empfangen. Die Datenbank wird hierbei in mehrere Pakete verpackt. Leider weiß ich die Anzahl der Pakete nicht. Daher habe ich versucht mit "SetCommMask" und "WaitCommEvent" ein ankommendes Paket zu regestrieren. Leider bleibt das Programm immer bei "WaitCommEvent " hängen.

    Hier der Code:

    int ReceivePort(void* puffer, int len)
    {
        DWORD receive = 0;
        DWORD dwCommEvent;
    
        if(!SetCommMask(m_hPort, EV_RXCHAR | EV_TXEMPTY | EV_CTS | EV_DSR | EV_ERR | EV_RLSD | EV_RING))
            return -1;
        else
            if(!WaitComEvent(m_hPort, puffer,len,&receive,NULL))
                return -1;
            else
                if(!ReadFile(m_hPort, puffer, len, &receive, NULL))
                    return -1;
                else 
                    retrun receive;
    }
    

    Wäre sehr dankbar wenn mir jemand meinen Fehler zeigen könnte.

    Gruß



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hmmm, Du also willst eine Anzahl von x Paketen empfangen?
    Wobei jedes Paket wiederum y Bytes haben könnten?
    Sowohl x als auch y sind wahrscheinlich unbekannte Parameter?

    Dann müßtest Du eigentlich eine Schleife verwenden, in der jedesmal ein Byte abgeholt wird.
    Die Schleife wird solange durchlaufen, bis keine Zeichen mehr ankommen.

    Ich würde in etwa mit so einem Ansatz versuchen. Wäre das etwas für Dich?

    Martin



  • Hi

    Fast richtig erkannt ;). Ich will eine unbekannte Anzahl von Paketen empfangen, die größe der einzelnen Pakte steht jedoch im Header der Pakete und ist somit keine Problem. Zur Zeit lese ich immer ein Byte aus bis ein Paket empfangen wurde. Dann will ich versuchen das nächste zu empfangen, wenn noch eins kommt. Da tritt das Problem auf. Wenn ich das ganze nicht mit "SetCommMask" und "WaitCommEvent" kapselle ließt er 1 bis 2 Pakete aus und bleibt dann bei "ReadFile" hängen.

    Gruß


Anmelden zum Antworten