Portál AbcLinuxu, 11. května 2024 00:28


Dotaz: pyserial ztrácí nahodile vždy jen jeden byte.

4.1.2020 18:04 martin
pyserial ztrácí nahodile vždy jen jeden byte.
Přečteno: 297×
Odpovědět | Admin
Ahoj, Programuji si aplikaci s komunikací přes BT.
Celkem už bylo hotovo až na to že win port nepodporuje BT sokety takže smůla.
Jak je to na MacOs jsem ještě nezjištoval.Takže z5 a přepracovat na využití BT
jako seriového portu.Ale ať zkouším cokoliv jednou za čas mi v přijaté zprávě chybí bajt.
Nedá se použít readline protože posílá jen surová data která parsuju.
Zatím napolo fungují jen sysex zprávy.
Inicializace
self.socket = serial.Serial(port="/dev/rfcomm0",
                                            baudrate=2400,
                                            parity=serial.PARITY_NONE,
                                            stopbits=serial.STOPBITS_ONE,
                                            bytesize=serial.EIGHTBITS,
                                            timeout=None,
                                            rtscts=False,
                                            xonxoff=False)
A samotné čtení
            while self.socket.isOpen():
                self.socket.flushInput()
                byte = self.socket.read()
                if byte != b"":
                    msg = byte + self.socket.read_until(b"\xf7", self.socket.in_waiting)
                    try:
                        msg = list(unpack("75B", msg))
                    except struct.error:
                        # log error or try last action again
                        print("ERROR unpacking: ", msg)
za každou radu budu rád.
Díky.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (Bystroushaak)
4.1.2020 19:58 martin
Rozbalit Rozbalit vše Re: pyserial ztrácí nahodile vždy jen jeden byte.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak to nechci zakřiknout ale po všech možných pokusech i po čtení po jednom bajtu ve smyčkách
pomohlo až vyměnit fci "read_until" za "read_all()".

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.