Created
May 16, 2020 12:18
-
-
Save furbrain/7ab706c638955b5f5202ac83e9049fef to your computer and use it in GitHub Desktop.
Wrapper for using usbip with specific programs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import subprocess | |
import re | |
import sys | |
if sys.platform=="linux": | |
USBIP_EXEC = ["sudo", "/usr/bin/usbip"] | |
else: | |
USBIP_EXEC = ["C:\summat"] | |
PORTS = ["3240", "3241"] | |
SERVER = "192.168.1.28" | |
VENDOR = sys.argv[1] | |
PRODUCT = sys.argv[2] | |
TARGET = sys.argv[3] | |
def get_bus_id(): | |
search_string = "^(.*?):.*{vendor}:{product}".format(vendor=VENDOR, product=PRODUCT) | |
for port in PORTS: | |
output = subprocess.run(USBIP_EXEC + ["--tcp-port", port, "list", "-r", SERVER], stdout=subprocess.PIPE) | |
for line in output.stdout.decode('utf8').splitlines(): | |
match = re.search(search_string, line) | |
if match: | |
bus_id = match.group(1) | |
print("Found match on port {port}, bus_id {bus_id}".format(port=port, bus_id=bus_id)) | |
return port, bus_id | |
print("No remote found") | |
return None, None | |
def get_port(): | |
search_string = "Port (\d\d).*?{vendor}:{product}".format(vendor=VENDOR, product=PRODUCT) | |
output = subprocess.run(USBIP_EXEC + ["port"], stdout=subprocess.PIPE) | |
match = re.search(search_string, output.stdout.decode('utf8'),re.DOTALL) | |
if match: | |
port = match.group(1) | |
print("Connection found on port: ", port) | |
return port | |
else: | |
print("No port found") | |
return None | |
def attach(port, bus_id): | |
print("Attaching to {b}".format(b=bus_id)) | |
res = subprocess.run(USBIP_EXEC + ["--tcp-port", port, "attach", "-r", SERVER, "-b", bus_id], stdout=subprocess.PIPE) | |
print("Attachment output: ", res.stdout) | |
def detach(port): | |
res = subprocess.run(USBIP_EXEC + ["--tcp-port", port, "detach", "-p", port], stdout=subprocess.PIPE) | |
print("Detaching output: ", res) | |
port, bus_id = get_bus_id() | |
if bus_id is None: | |
print ("Device not found") | |
else: | |
attach(port, bus_id.strip()) | |
subprocess.run(TARGET) | |
port = get_port() | |
if port is not None: | |
detach(port) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment