76 lines
1.3 KiB
Python
76 lines
1.3 KiB
Python
import os
|
|
import select
|
|
import time
|
|
|
|
DEFAULT_DEV = os.environ.get("ASROCK_HID", "/dev/hidraw0")
|
|
|
|
A_OFF = 0x00
|
|
A_STATIC = 0x01
|
|
A_BREATH = 0x02
|
|
A_STROBE = 0x03
|
|
A_CYCLE = 0x04
|
|
A_RANDOM = 0x05
|
|
A_MUSIC = 0x06
|
|
A_WAVE = 0x07
|
|
A_SPRING = 0x08
|
|
A_STACK = 0x09
|
|
A_CRAM = 0x0A
|
|
A_SCAN = 0x0B
|
|
A_NEON = 0x0C
|
|
A_WATER = 0x0D
|
|
A_RAINBOW = 0x0E
|
|
A_DIRECT = 0x0F
|
|
|
|
WRITE = 0x10
|
|
READ = 0x11
|
|
COMMIT = 0x12
|
|
|
|
|
|
def _cmd(c, zone=0, mode=0, r=0, g=0, b=0, speed=0, ff=0, allzone=0):
|
|
m = bytearray(64)
|
|
m[0] = c
|
|
m[2] = zone
|
|
m[3] = mode
|
|
m[4] = r
|
|
m[5] = g
|
|
m[6] = b
|
|
m[7] = speed
|
|
m[8] = ff
|
|
m[9] = allzone
|
|
return m
|
|
|
|
|
|
def open_dev(path=DEFAULT_DEV):
|
|
return os.open(path, os.O_RDWR)
|
|
|
|
|
|
def xfer(fd, msg):
|
|
os.write(fd, bytes(msg))
|
|
time.sleep(0.01)
|
|
r, _, _ = select.select([fd], [], [], 0.2)
|
|
if r:
|
|
return os.read(fd, 256)
|
|
return None
|
|
|
|
|
|
def write_set(fd, zone, mode, r, g, b, speed, allzone):
|
|
return xfer(fd, _cmd(WRITE, zone, mode, r, g, b, speed, 0xFF, allzone))
|
|
|
|
|
|
def read_zone(fd, zone):
|
|
reply = xfer(fd, _cmd(READ, zone=zone))
|
|
if not reply or len(reply) < 11:
|
|
return None
|
|
return {
|
|
"zone": reply[3],
|
|
"mode": reply[4],
|
|
"r": reply[5],
|
|
"g": reply[6],
|
|
"b": reply[7],
|
|
"speed": reply[8],
|
|
"all": reply[10],
|
|
}
|
|
|
|
|
|
def commit(fd):
|
|
return xfer(fd, _cmd(COMMIT)) |