-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathusb_pixel_ring_v2.py
More file actions
executable file
·113 lines (78 loc) · 2.45 KB
/
Copy pathusb_pixel_ring_v2.py
File metadata and controls
executable file
·113 lines (78 loc) · 2.45 KB
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import usb.core
import usb.util
class PixelRing:
TIMEOUT = 8000
def __init__(self, dev):
self.dev = dev
def trace(self):
self.write(0)
def mono(self, color):
self.write(1, [(color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, 0])
def set_color(self, rgb=None, r=0, g=0, b=0):
if rgb:
self.mono(rgb)
else:
self.write(1, [r, g, b, 0])
def off(self):
self.mono(0)
def listen(self, direction=None):
self.write(2)
wakeup = listen
def speak(self):
self.write(3)
def think(self):
self.write(4)
wait = think
def spin(self):
self.write(5)
def show(self, data):
self.write(6, data)
customize = show
def set_brightness(self, brightness):
self.write(0x20, [brightness])
def set_color_palette(self, a, b):
self.write(0x21, [(a >> 16) & 0xFF, (a >> 8) & 0xFF, a & 0xFF, 0, (b >> 16) & 0xFF, (b >> 8) & 0xFF, b & 0xFF, 0])
def set_vad_led(self, state):
self.write(0x22, [state])
def set_volume(self, volume):
self.write(0x23, [volume])
def change_pattern(self, pattern=None):
print('Not support to change pattern')
def write(self, cmd, data=[0]):
self.dev.ctrl_transfer(
usb.util.CTRL_OUT | usb.util.CTRL_TYPE_VENDOR | usb.util.CTRL_RECIPIENT_DEVICE,
0, cmd, 0x1C, data, self.TIMEOUT)
def close(self):
"""
close the interface
"""
usb.util.dispose_resources(self.dev)
def find(vid=0x2886, pid=0x0018):
dev = usb.core.find(idVendor=vid, idProduct=pid)
if not dev:
return
# configuration = dev.get_active_configuration()
# interface_number = None
# for interface in configuration:
# interface_number = interface.bInterfaceNumber
# if dev.is_kernel_driver_active(interface_number):
# dev.detach_kernel_driver(interface_number)
return PixelRing(dev)
if __name__ == '__main__':
import time
pixel_ring = find()
while True:
try:
pixel_ring.wakeup(180)
time.sleep(3)
pixel_ring.listen()
time.sleep(3)
pixel_ring.think()
time.sleep(3)
pixel_ring.set_volume(8)
time.sleep(3)
pixel_ring.off()
time.sleep(3)
except KeyboardInterrupt:
break
pixel_ring.off()