@rob87,
das sieht aus als würde es nicht funktionieren.
Code: Alles auswählen
loop = asyncio.get_event_loop()
loop.run_until_complete(read_cont(dev,inputspeicher ))
inputspeicher wird in der Funktion "manager" definiert. Daher dürfte es auf Modul - Ebene gar nicht bekannt sein.
Einge weitere Probleme die Python nicht ausführen kann:
"false" und "true" werden in Python "False" und "True" geschrieben.
"NOT" wird "not" geschrieben.
Nach "else" fehlt ein Doppelpunkt
"input" ist ein Schlüsselwort und sollte nicht alse Variablenname verwendet werden
Du importierst xbox, verwendest später aber Xbox
Warum die Zuweisung Controller = Xbox ?
"SpOn" ist eine einfache Variable und sollte klein geschrieben werden. Außerdem ist unklar was der Name bedeutet.
Ich kenne die xbox und evdev Libraries nicht, daher weiß ich auch nicht, ob der Rest Sinn macht.
asyncio.gather() führt die Coroutines "read_count" und "blinker_write" quasi paralellel aus und wartet bis beide abgeschlossen sind. Man verwendet gather() nur wenn mehrere Couroutines von der Eventloop ausgeführt werden sollte. Dasist hier der Fall.
Bei dir wurden die Coroutines nacheinander ausgeführt, was natürlich keine Kommunikation über die Queue erlaubt.
Ich habe nur die offensichtlichen Syntaxfehler entfernt und die Einrückung korrigiert. Ob das schon das gewünschte Ergebnis liefert kann ich nicht sagen.
Code: Alles auswählen
import asyncio
import xbox
from evdev import InputDevice, categorize, ecodes, KeyEvent
async def read_cont(dev, eventspeicher_queue):
async for ev in dev.async_read_loop():
# Binaer input
if ev.type == ecodes.EV_KEY:
# Input Type , ID und Wert verketten
queuestring = "K " + ev.code + " " + categorize(ev).keystate
eventspeicher_queue.put(queuestring)
async def blinker_write(eventspeicher_queue):
Controller = xbox
spon = True
while True:
# Inputs auslesen
while not eventspeicher_queue.empty():
queue_input = eventspeicher_queue.get_nowait().split()
if queue_input[0] == "K": ##Taste gedrückt?
# ID und Wert an Controllerspeichr übergeben
Controller.InputKEY(queue_input[1], queue_input[2])
if Controller.A == 1.0: # Status Button A gedrückt abfragen
if spon:
print("On")
spon = False
else:
print("Off")
spon = True
await asyncio.sleep(1) # 1Sekunde Pause
async def manager(dev):
inputspeicher = asyncio.Queue()
await asyncio.gather(blinker_write(inputspeicher), read_cont(dev, inputspeicher))
# Eventlistener auf Bluetoothcontoller anlagen und definieren.
dev = InputDevice("/dev/input/event1")
asyncio.run(manager(dev))