Skip to content

Commit 2ef5e2f

Browse files
authored
Merge pull request #8 from ajfclark/master
Update to handle v2 protocol and Mini-moonboards
2 parents 14047d8 + 45450b8 commit 2ef5e2f

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed

ble/moonboard_BLE_service.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,12 @@ def monitor_btmon(self):
103103

104104
def process_rx(self,ba):
105105
new_problem_string= self.unstuffer.process_bytes(ba)
106+
flags = self.unstuffer.flags
106107

107108
if new_problem_string is not None:
108-
problem= decode_problem_string(new_problem_string)
109+
problem= decode_problem_string(new_problem_string, flags)
109110
self.new_problem(json.dumps(problem))
111+
self.unstuffer.flags = ''
110112
start_adv(self.logger)
111113

112114
@dbus.service.signal(dbus_interface="com.moonboard",
@@ -246,4 +248,4 @@ def main(logger,adapter):
246248
else:
247249
logger.setLevel(logging.INFO)
248250

249-
main(logger,adapter='/org/bluez/hci0')
251+
main(logger,adapter='/org/bluez/hci0')

ble/moonboard_app_protocol.py

+23-9
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,24 @@
33

44
X_GRID_NAMES = string.ascii_uppercase[0:11]
55

6-
def position_trans(p):
6+
def position_trans(p,num_rows):
77
"""convert led number (strip number) to moonboard grid """
8-
col= p//18
9-
row= (p%18) +1
8+
col= p//num_rows
9+
row= (p%num_rows) +1
1010
if col%2==1:
11-
row=19-row
11+
row=(num_rows+1)-row
1212
return X_GRID_NAMES[col]+str(row)
1313

14-
def decode_problem_string(s):
15-
holds = {'START':[],'MOVES':[],'TOP':[]}
14+
def decode_problem_string(s, flags):
15+
holds = {'START':[],'MOVES':[],'TOP':[], 'FLAGS':[flags]}
16+
17+
if flags.find("M") != -1:
18+
num_rows = 12
19+
else:
20+
num_rows = 18
21+
1622
for h in s.split(','):
17-
t,p = h[0],position_trans(int(h[1:]))
23+
t,p = h[0],position_trans(int(h[1:]), num_rows)
1824
if t=='S':
1925
holds['START'].append(p)
2026
if t=='P':
@@ -37,6 +43,7 @@ def __init__(self,logger=None):
3743
else:
3844
self.logger=logger
3945
self.s=''
46+
self.flags=''
4047

4148
def process_bytes(self, ba):
4249
"""
@@ -47,7 +54,14 @@ def process_bytes(self, ba):
4754
s = bytearray.fromhex(ba).decode()
4855
self.logger.debug("incoming bytes:"+str(s))
4956

50-
if s[:2]==self.START:
57+
if s[0] == '~' and s[-1] == '*':
58+
# Flag processing
59+
self.flags=s[1:-1]
60+
if s.find("M") != -1:
61+
self.logger.debug('MINI')
62+
if s.find("D") != -1:
63+
self.logger.debug('BothLights')
64+
elif s[:2]==self.START:
5165
self.logger.debug('START')
5266
if self.s =='':
5367
if s[-1]==self.STOP:
@@ -67,4 +81,4 @@ def process_bytes(self, ba):
6781
self.logger.debug('error: not started')
6882
self.s= ''
6983
else:
70-
self.s+=s
84+
self.s+=s

0 commit comments

Comments
 (0)