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)) cmds = { "dw" : digitalWrite, "aw" : analogWrite } def __init__(self, stream, robot): self.stream = stream self.cmd_buff = "" self.robot = robot def poll(self): c=self.stream.read(1) if len(c)==0: print("end") return False if len(self.cmd_buff)==0: if c != b'$': return True self.cmd_buff = "_" else: if c == b';': self.parse_line() else: self.cmd_buff += c.decode() 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 = ""