2022-11-24 17:08:44 +01:00

69 lines
1.8 KiB
Python

class aip_parser:
def digitalWrite(self, args):
if len(args) != 2:
return
self.robot.digitalWrite(*map(int, args))
def analogWrite(self, args):
if len(args) != 2:
return
self.robot.analogWrite(*map(int, args))
def updateDt(self, args):
if len(args) != 1:
return
self.robot.setTime(int(args[0]))
cmds = {
"dw" : digitalWrite,
"aw" : analogWrite,
"dt" : updateDt,
}
def __init__(self, stdin, stdout, robot):
self.stdin = stdin
self.stdout = stdout
self.cmd_buff = ""
self.robot = robot
def poll(self):
c=self.stdout.read(1)
if not c:
return True
if c == b'*':
return False
try:
print(c.decode(), end='')
except UnicodeDecodeError:
pass
if len(self.cmd_buff)==0:
if c != b'$':
return True
self.cmd_buff = "_"
else:
if c == b';':
self.parse_line()
else:
try:
self.cmd_buff += c.decode()
except UnicodeDecodeError:
pass
return True
def parse_line(self):
cmd = self.cmd_buff[1:].split(',')
cmdFct = self.cmds.get(cmd[0])
if cmdFct:
cmdFct(self, cmd[1:])
self.cmd_buff = ""
def send_pin_state(self):
for ind, p in enumerate(self.robot.pins):
self.stdin.write(bytes(f"${ind},{p};", "utf-8"))
for ind, p in enumerate(self.robot.dists):
if not p:
p = -10
else:
p = int(1000*p)
print("#######", p)
self.stdin.write(bytes(f"${-ind-1},{p};", "utf-8"))