Skip to content

Commit 33143e9

Browse files
author
Yihui Xiong
committed
use global variable pixel_ring as a singleton
1 parent 2b35d71 commit 33143e9

File tree

1 file changed

+24
-71
lines changed

1 file changed

+24
-71
lines changed

respeaker/pixel_ring.py

Lines changed: 24 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,24 @@
1-
from usb_hid import INTERFACE, usb_backend
2-
from spi import SPI
3-
4-
CRC8_TABLE = (
5-
0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15,
6-
0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d,
7-
0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65,
8-
0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d,
9-
0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5,
10-
0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,
11-
0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85,
12-
0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd,
13-
0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2,
14-
0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea,
15-
0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5, 0xa2,
16-
0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,
17-
0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32,
18-
0x1f, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a,
19-
0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42,
20-
0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a,
21-
0x89, 0x8e, 0x87, 0x80, 0x95, 0x92, 0x9b, 0x9c,
22-
0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,
23-
0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec,
24-
0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3, 0xd4,
25-
0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c,
26-
0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44,
27-
0x19, 0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c,
28-
0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,
29-
0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b,
30-
0x76, 0x71, 0x78, 0x7f, 0x6a, 0x6d, 0x64, 0x63,
31-
0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b,
32-
0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13,
33-
0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc, 0xbb,
34-
0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,
35-
0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb,
36-
0xe6, 0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3
37-
)
38-
39-
40-
def crc8(data):
41-
result = 0
42-
for b in data:
43-
result = CRC8_TABLE[result ^ b]
44-
return result
1+
import usb_hid
2+
from spi import spi
453

464

475
class PixelRing:
48-
def __init__(self):
49-
self.hid = self.get_hid()
50-
if not self.hid:
51-
self.spi = SPI()
6+
mono_mode = 1
7+
listening_mode = 2
8+
waiting_mode = 3
9+
speaking_mode = 4
5210

53-
@staticmethod
54-
def get_hid():
55-
interface = INTERFACE[usb_backend]
56-
if interface.isAvailable:
57-
boards = interface.getAllConnectedInterface()
58-
if boards:
59-
return boards[0]
11+
def __init__(self):
12+
self.hid = usb_hid.get()
6013

6114
def off(self):
6215
self.set_color(rgb=0)
6316

64-
def set_color(self, r=0, g=0, b=0, rgb=None):
17+
def set_color(self, rgb=None, r=0, g=0, b=0):
6518
if rgb:
66-
self.write(0, [1, rgb & 0xFF, (rgb >> 8) & 0xFF, (rgb >> 16) & 0xFF])
19+
self.write(0, [self.mono_mode, rgb & 0xFF, (rgb >> 8) & 0xFF, (rgb >> 16) & 0xFF])
6720
else:
68-
self.write(0, [1, b, g, r])
21+
self.write(0, [self.mono_mode, b, g, r])
6922

7023
def listen(self, direction=None):
7124
if direction is None:
@@ -74,10 +27,10 @@ def listen(self, direction=None):
7427
self.write(0, [2, 0, direction & 0xFF, (direction >> 8) & 0xFF])
7528

7629
def wait(self):
77-
self.write(0, [3, 0, 0, 0])
30+
self.write(0, [self.waiting_mode, 0, 0, 0])
7831

7932
def speak(self, strength, direction):
80-
self.write(0, [4, strength, direction & 0xFF, (direction >> 8) & 0xFF])
33+
self.write(0, [self.speaking_mode, strength, direction & 0xFF, (direction >> 8) & 0xFF])
8134

8235
def set_volume(self, volume):
8336
self.write(0, [5, 0, 0, volume])
@@ -103,37 +56,37 @@ def write(self, address, data):
10356
if self.hid:
10457
packet = bytearray([address & 0xFF, (address >> 8) & 0xFF, length & 0xFF, (length >> 8) & 0xFF]) + data
10558
self.hid.write(packet)
106-
else:
107-
crc = crc8(data)
108-
packet = bytearray([0xA5, address & 0xFF, length & 0xFF]) + data + bytearray([crc])
109-
self.spi.write(packet)
59+
print packet
60+
spi.write(address=address, data=data)
11061

11162
def close(self):
11263
if self.hid:
11364
self.hid.close()
11465

11566

67+
pixel_ring = PixelRing()
68+
69+
11670
if __name__ == '__main__':
11771
import time
11872

119-
ring = PixelRing()
120-
ring.listen(0)
73+
pixel_ring.listen()
12174
time.sleep(3)
122-
ring.wait()
75+
pixel_ring.wait()
12376
time.sleep(3)
12477
for level in range(2, 8):
125-
ring.speak(level, 0)
78+
pixel_ring.speak(level, 0)
12679
time.sleep(1)
127-
ring.set_volume(4)
80+
pixel_ring.set_volume(4)
12881
time.sleep(3)
12982

13083
color = 0x800000
13184
while True:
13285
try:
133-
ring.set_color(rgb=color)
86+
pixel_ring.set_color(rgb=color)
13487
color += 0x10
13588
time.sleep(1)
13689
except KeyboardInterrupt:
13790
break
13891

139-
ring.off()
92+
pixel_ring.off()

0 commit comments

Comments
 (0)