-
Notifications
You must be signed in to change notification settings - Fork 0
/
ddc_trigger.py
27 lines (23 loc) · 1.17 KB
/
ddc_trigger.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/env python
import serial
import subprocess
import time
import re
pn = 0 #Initialise past port number as 0. When script first runs, the monitor should flash.
def ddc_console(pn,cn):
ddcmap = [0x19,0x0f,0x11,0x12] #Addresses of individual input sources for Dell UP2720Q: Thunderbolt, DisplayPort, HDMI 1, and HDMI 2, respectively.
if cn != pn:
subprocess.run(f'/usr/bin/ddcutil setvcp 60 {ddcmap[cn-1]}',shell=True) #Switch input source is feature 60 of the MCCS.
return cn
port = serial.Serial('/dev/ttyUSB0') #Serial port is a USB-to-RS485 cable.
while True:
time.sleep(0.2)
port.write(b'info\r') #Send 'info' to Aten US3344i switch; it will respond with the command status, port number, and current firmware version.
out = b'' #Initialise port output.
while port.inWaiting() > 0: #If there are bytes in the output buffer...
out += port.readline() #Write bytes to out.
try:
cn = int(re.findall(b'PORT: 0.',out)[0].decode()[-1]) #Extract current port number of switch.
pn = ddc_console(pn,cn) #Update past port number and send corresponding DDC command to switch input source.
except IndexError:
continue