29 lines
984 B
Python
Executable File
29 lines
984 B
Python
Executable File
#!/usr/bin/python3
|
|
import usb.core
|
|
from usb.util import *
|
|
|
|
REBOOT_BOOTLOADER = 0
|
|
PLOOPY_VID = 0x2e8a
|
|
PLOOPY_PID = 0xfedd
|
|
|
|
device_count = 0
|
|
|
|
# Find all connected Ploopy headphone devices
|
|
for dev in usb.core.find(find_all=True, idVendor=PLOOPY_VID, idProduct=PLOOPY_PID):
|
|
device_count += 1
|
|
|
|
# The vendor command expects the wValue to be equal to the Ploopy vendor id. This
|
|
# will hopefully prevent badly behaved software from accidentally triggering bootloader
|
|
# mode.
|
|
try:
|
|
dev.ctrl_transfer(CTRL_RECIPIENT_DEVICE | CTRL_TYPE_VENDOR, REBOOT_BOOTLOADER, PLOOPY_VID)
|
|
except Exception as e:
|
|
# The headphones do not respond to the vendor command, as they have already rebooted,
|
|
# so for now, we always end up here.
|
|
if e.errno == 32:
|
|
# libusb pipe error, this is expected. OpenUSB doesnt report an error.
|
|
pass
|
|
else:
|
|
print(e)
|
|
|
|
print(f"Sent a reboot command to {device_count} Ploopy devices.") |