Skip to content

Commit

Permalink
Merge pull request #8 from ajfclark/master
Browse files Browse the repository at this point in the history
Update to handle v2 protocol and Mini-moonboards
  • Loading branch information
8cH9azbsFifZ authored Mar 30, 2021
2 parents 14047d8 + 45450b8 commit 2ef5e2f
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 11 deletions.
6 changes: 4 additions & 2 deletions ble/moonboard_BLE_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,12 @@ def monitor_btmon(self):

def process_rx(self,ba):
new_problem_string= self.unstuffer.process_bytes(ba)
flags = self.unstuffer.flags

if new_problem_string is not None:
problem= decode_problem_string(new_problem_string)
problem= decode_problem_string(new_problem_string, flags)
self.new_problem(json.dumps(problem))
self.unstuffer.flags = ''
start_adv(self.logger)

@dbus.service.signal(dbus_interface="com.moonboard",
Expand Down Expand Up @@ -246,4 +248,4 @@ def main(logger,adapter):
else:
logger.setLevel(logging.INFO)

main(logger,adapter='/org/bluez/hci0')
main(logger,adapter='/org/bluez/hci0')
32 changes: 23 additions & 9 deletions ble/moonboard_app_protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,24 @@

X_GRID_NAMES = string.ascii_uppercase[0:11]

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

def decode_problem_string(s):
holds = {'START':[],'MOVES':[],'TOP':[]}
def decode_problem_string(s, flags):
holds = {'START':[],'MOVES':[],'TOP':[], 'FLAGS':[flags]}

if flags.find("M") != -1:
num_rows = 12
else:
num_rows = 18

for h in s.split(','):
t,p = h[0],position_trans(int(h[1:]))
t,p = h[0],position_trans(int(h[1:]), num_rows)
if t=='S':
holds['START'].append(p)
if t=='P':
Expand All @@ -37,6 +43,7 @@ def __init__(self,logger=None):
else:
self.logger=logger
self.s=''
self.flags=''

def process_bytes(self, ba):
"""
Expand All @@ -47,7 +54,14 @@ def process_bytes(self, ba):
s = bytearray.fromhex(ba).decode()
self.logger.debug("incoming bytes:"+str(s))

if s[:2]==self.START:
if s[0] == '~' and s[-1] == '*':
# Flag processing
self.flags=s[1:-1]
if s.find("M") != -1:
self.logger.debug('MINI')
if s.find("D") != -1:
self.logger.debug('BothLights')
elif s[:2]==self.START:
self.logger.debug('START')
if self.s =='':
if s[-1]==self.STOP:
Expand All @@ -67,4 +81,4 @@ def process_bytes(self, ba):
self.logger.debug('error: not started')
self.s= ''
else:
self.s+=s
self.s+=s

0 comments on commit 2ef5e2f

Please sign in to comment.