Beispiel #1
0
    def handleMessages(self):
        if self.conn.poll():
            received = comm.recv_msg(self.conn)
            received_split = received.split(" ")
            if received_split[0] == "controller":
                controller_values = received_split[1].split("-")
                print(received_split)

                print(controller_values)

                # Grab positions
                self.left_joy_xpos = int(controller_values[0].split(":")[1])
                self.right_joy_xpos = int(controller_values[1].split(":")[1])

                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Received")
            if received == "Stop":
                self.is_stopped = True
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Stopped")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()

        while self.is_stopped:
            received = comm.recv_msg(self.conn)
            if received == "Start":
                self.is_stopped = False
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()
Beispiel #2
0
 def start(self):
     if self.assignment is None:
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       "Please load an assignment first.")
     elif self.started:
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       "The assignment has already started.")
         return
     elif self.assignment_conn is not None:
         comm.send_msg(self.assignment_conn, comm.MsgTypes.COMMAND, "Start")
         while comm.recv_msg(self.assignment_conn,
                             comm.MsgTypes.REPLY) != "Started":
             continue
         self.started = True
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       self.assignment.name() + " started.")
     else:
         parent_conn, child_conn = Pipe()
         self.assignment_conn = parent_conn
         self.assignment_proc = Process(target=self.assignment.start,
                                        args=(child_conn, ))
         self.assignment_proc.start()
         while comm.recv_msg(self.assignment_conn,
                             comm.MsgTypes.REPLY) != "Started":
             continue
         self.started = True
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       self.assignment.name() + " started.")
Beispiel #3
0
    def run(self):
        while True:
            if self.interface_conn.poll():
                received = comm.recv_msg(self.interface_conn).split(" ")
                if received[0] == "exit":
                    self.exit()
                if received[0] == "load":
                    self.load(received[1])
                elif received[0] == "unload":
                    self.unload(True)
                elif received[0] == "start":
                    self.start()
                elif received[0] == "stop":
                    self.stop()
                elif received[0] == "send":
                    self.send(" ".join(received[1:]))
                elif received[0] == "monitoring":
                    self.monitoring(received[1])

            if self.started and self.assignment_conn.poll():
                received = comm.recv_msg(self.assignment_conn)
                comm.send_msg(self.interface_conn, comm.MsgTypes.STATUS,
                              received)

            if self.monitoring_started and self.monitoring_conn.poll():
                received = comm.recv_msg(self.monitoring_conn)
                comm.send_msg(self.interface_conn, comm.MsgTypes.STATUS,
                              received)
Beispiel #4
0
    def handleMessages(self):
        if self.conn.poll():
            received = comm.recv_msg(self.conn)
            received_split = received.split(" ")
            if received_split[0] == "controller":
                controller_values = ",".join(received_split[1:]) + ";"
                print(received_split)
                self.serial.write(bytes(controller_values, "utf-8"))
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Received")

            if received == "Stop":
                self.is_stopped = True
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Stopped")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()
            elif received == "turn":
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Received")
                self.moving = True

        while self.is_stopped:
            received = comm.recv_msg(self.conn)
            if received == "Start":
                self.is_stopped = False
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()
Beispiel #5
0
    def handleMessages(self):
        if self.conn.poll():
            received = comm.recv_msg(self.conn)
            received_split = received.split(" ")
            if received_split[0] == "controller":
                controller_values = received_split[1].split("-")
                print(received_split)

                print(controller_values)

                # Grab positions
                self.right_joy_ypos = int(
                    controller_values[0].split(":")[1].split(",")[0])
                self.left_joy_ypos = int(
                    controller_values[1].split(":")[1].split(",")[0])
                self.right_joy_xpos = int(
                    controller_values[0].split(":")[1].split(",")[1])
                self.left_joy_xpos = int(
                    controller_values[1].split(":")[1].split(",")[1])

                # Update motor
                left_speed, left_polarity, right_speed, right_polarity = self.motor_driver.update(
                    self.left_joy_ypos, self.right_joy_ypos)

                motor_values = str(int(
                    round(left_speed))) + "," + str(left_polarity) + "," + str(
                        int(round(right_speed))) + "," + str(right_polarity)

                comm.send_msg(self.conn, comm.MsgTypes.STATUS, motor_values)

                # Write to serial
                self.serial.write(bytes(motor_values + ";", "utf-8"))

                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Received")
            if received == "Stop":
                self.is_stopped = True
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Stopped")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()

        while self.is_stopped:
            received = comm.recv_msg(self.conn)
            if received == "Start":
                self.is_stopped = False
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()
Beispiel #6
0
 def send(self, msg):
     if self.started:
         comm.send_msg(self.assignment_conn, comm.MsgTypes.COMMAND, msg)
         while comm.recv_msg(self.assignment_conn,
                             comm.MsgTypes.REPLY) != "Received":
             continue
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       "Message sent.")
     else:
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       "No assignment is currently running.")
Beispiel #7
0
    def handleMessages(self):
        if self.conn.poll():
            received = comm.recv_msg(self.conn)
            if received == "Stop":
                self.is_stopped = True
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Stopped")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()

        while self.is_stopped:
            received = comm.recv_msg(self.conn)
            if received == "Start":
                self.is_stopped = False
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Started")
            elif received == "Unload":
                self.unload()
                comm.send_msg(self.conn, comm.MsgTypes.REPLY, "Unloaded")
                sys.exit()
Beispiel #8
0
 def stop(self):
     if self.started:
         comm.send_msg(self.assignment_conn, comm.MsgTypes.COMMAND, "Stop")
         self.started = False
         while comm.recv_msg(self.assignment_conn,
                             comm.MsgTypes.REPLY) != "Stopped":
             continue
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       self.assignment.name() + " stopped.")
         return
     else:
         comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                       "No assignment is currently running.")
Beispiel #9
0
 def monitoring(self, msg):
     if self.monitoring_conn is None:
         comm.send_msg(
             self.interface_conn, comm.MsgTypes.REPLY,
             "Monitoring has been unloaded, please restart the application."
         )
     else:
         if msg == "start":
             if not self.monitoring_started:
                 comm.send_msg(self.monitoring_conn, comm.MsgTypes.COMMAND,
                               "Start")
                 comm.send_msg(
                     self.interface_conn, comm.MsgTypes.REPLY,
                     comm.recv_msg(self.monitoring_conn,
                                   comm.MsgTypes.REPLY))
                 self.monitoring_started = True
             else:
                 comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                               "Monitoring is already running.")
         elif msg == "stop":
             if self.monitoring_started:
                 comm.send_msg(self.monitoring_conn, comm.MsgTypes.COMMAND,
                               "Stop")
                 comm.send_msg(
                     self.interface_conn, comm.MsgTypes.REPLY,
                     comm.recv_msg(self.monitoring_conn,
                                   comm.MsgTypes.REPLY))
                 self.monitoring_started = False
             else:
                 comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                               "Monitoring has already been stopped.")
         elif msg == "unload":
             comm.send_msg(self.monitoring_conn, comm.MsgTypes.COMMAND,
                           "Unload")
             comm.send_msg(
                 self.interface_conn, comm.MsgTypes.REPLY,
                 comm.recv_msg(self.monitoring_conn, comm.MsgTypes.REPLY))
             self.monitoring_started = False
Beispiel #10
0
    def run(self):
        print("Welcome!")
        utils.print_dict_keys(self.assignment_mods, "Available assignments:")
        print()
        while True:
            command = input("=> ")
            command_split = command.split(" ")
            command_params = command_split[0] + "/" + str(len(command_split))

            if command_params in self.commands:
                if len(command_split) > 1 and command_split[0] == "load":
                    if command_split[1] in self.assignment_mods.keys():
                        self.send(command)
                    else:
                        print("Received invalid assignment.\n")
                elif len(command_split
                         ) > 1 and command_split[0] == "monitoring":
                    if command_split[1] in monitoring.commands:
                        self.send(command)
                    else:
                        print("Received invalid monitoring command.\n")

                elif command == "quit" or command == "exit":
                    self.send("exit")
                    sys.exit()
                elif command == "read":
                    while self.conn.poll():
                        print(comm.recv_msg(self.conn, strip_header=False))
                elif command == "help":
                    utils.print_dict_keys(self.assignment_mods,
                                          "Available assignments:")
                    print()
                    utils.print_list(self.commands, "Available commands:")
                else:
                    self.send(command)
            elif len(command_split) > 1 and command_split[0] == "send":
                self.send(command)
            else:
                print("Received invalid command.\n")
Beispiel #11
0
    def unload(self, wait):
        if self.assignment is None:
            comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                          "No assignment has been loaded.")
            return
        else:
            if self.assignment_conn is None:
                self.assignment.unload()
            else:
                comm.send_msg(self.assignment_conn, comm.MsgTypes.COMMAND,
                              "Unload")
                while wait and comm.recv_msg(
                        self.assignment_conn,
                        comm.MsgTypes.REPLY) != "Unloaded":
                    continue

            assignment = self.assignment
            self.assignment = None
            self.started = False
            self.assignment_conn = None
            self.assignment_proc = None
            comm.send_msg(self.interface_conn, comm.MsgTypes.REPLY,
                          "Unloaded " + assignment.name() + ".")
            return
Beispiel #12
0
 def send(self, command):
     comm.send_msg(self.conn, comm.MsgTypes.COMMAND, command)
     print(comm.recv_msg(self.conn, comm.MsgTypes.REPLY) + "\n")
Beispiel #13
0
    def run(self):
        mac_addr = constants.bl_mac_address

        print("Connecting...")
        try:
            self.socket = utils.get_socket(mac_addr)
        except bluetooth.btcommon.BluetoothError:
            print("Unable to connect, exiting.")
            self.send("exit")
            sys.exit()

        print("Connection established.\n")

        #self.bl_send("Hello Everyone!")

        print('Listening..')
        while True:
            try:
                commands = self.bl_recv()
                for command in commands:
                    print(command)
                    command_split = command.split(" ")
                    command_params = command_split[0] + "/" + str(
                        len(command_split))

                    if command_params in self.commands:
                        if len(command_split
                               ) > 1 and command_split[0] == "load":
                            if command_split[1] in self.assignment_mods.keys():
                                self.send(command)
                            else:
                                print("Received invalid assignment.\n")
                        if len(command_split
                               ) > 1 and command_split[0] == "monitoring":
                            if command_split[1] in monitoring.commands:
                                self.send(command)
                            else:
                                print("Received invalid monitoring command.\n")
                        elif command == "quit" or command == "exit":
                            self.send("exit")
                            sys.exit()
                        elif command == "read":
                            while self.conn.poll():
                                self.bl_send(
                                    comm.recv_msg(self.conn,
                                                  strip_header=False))
                        else:
                            self.send(command)
                    elif len(command_split) > 1 and command_split[0] == "send":
                        self.send(command)
                    else:
                        print("Received invalid command.\n")

                    self.bl_send("2|Received")

            except bluetooth.BluetoothError:
                print("Exiting...")
                self.send("exit")
                sys.exit()

            except IOError:
                pass