В настоящее время я пытаюсь обнаружить соединение кнопки Bluetooth на Raspberry Pi 3 (эта часть работает) и после подключения определить, когда кнопка нажата (эта часть не работает).
Я начал с кода, предоставленного evdev, и попытался настроить его для моего использования (см. Ниже), но мне не удается создать правильный дескриптор файла для использования с select (если я правильно понял, что происходит).
import functools
import pyudev
import evdev
from select import select
context = pyudev.Context()
monitor = pyudev.Monitor.from_netlink(context)
monitor.filter_by(subsystem='bluetooth')
monitor.start()
fds = {monitor.fileno(): monitor}
finalizers = []
while True:
r, w, x = select(fds, [], [])
if monitor.fileno() in r:
r.remove(monitor.fileno())
for udev in iter(functools.partial(monitor.poll, 0), None):
devices = [evdev.InputDevice(fn) for fn in evdev.list_devices()]
for device in devices:
if device.name.strip() == 'AB Shutter3':
if udev.action == u'add':
print('Device added: %s' % udev)
fds[dev.fd] = device #This here breaks. dev.fd undefined.
break
if udev.action == u'remove':
print('Device removed: %s' % udev)
def helper():
global fds
fds = {monitor.fileno(): monitor}
finalizers.append(helper)
break
for fd in r:
dev = fds[fd]
for event in dev.read():
print(event)
for i in range(len(finalizers)):
finalizers.pop()()
Проблема в том, что при попытке добавить устройство dev.fd не определяется. Я пытался определить это, но я понятия не имею, как определить дескриптор файла. Что мне делать?
Device added: Device('/sys/devices/platform/soc/3f201000.serial/tty/ttyAMA0/hci0/hci0:64')
Traceback (most recent call last):
File "dev_status.py", line 27, in <module>
fds = {dev.fd:device} #This here breaks. dev.fd undefined.
NameError: name 'dev' is not defined
Другая информация: Raspberry Pi 3 с Raspbian Strech & Python 3.5.3
Кроме того, это мой первый вопрос о переполнении стека, поэтому, если что-то отсутствует или может быть более подробным, не стесняйтесь упомянуть об этом.
Спасибо
Pom '