Ejemplo n.º 1
0
 def connect(self, parameters):
     self.stopAll()
     if parameters[0] == "WiFi":
         try:
             self.tcpClient = TCPClient(
                 (str(parameters[1]), int(parameters[2])), self.out_q,
                 self.in_q)
         except Exception as e:
             self.tcpClient = None
             Logger.getInstance().error("Cannot start WiFi connection: " +
                                        str(e))
         else:
             self.tcpClient.start()
             Logger.getInstance().info("Connected to WiFi server")
     elif parameters[0] == "COM":
         try:
             self.comClient = COMClient(str(parameters[1]),
                                        int(parameters[2]), self.out_q,
                                        self.in_q)
         except Exception as e:
             self.comClient = None
             Logger.getInstance().error("Cannot start serial connection: " +
                                        str(e))
         else:
             self.comClient.start()
             Logger.getInstance().info("Connected to COM server")
     if self.comClient or self.tcpClient:
         self.result.emit(True)
     else:
         self.result.emit(False)
 def __init__(self, robot, adresseIP):
     Thread.__init__(self)
     self.robot = robot
     self.adresseIP = adresseIP
     self.termineeAEteEnvoyerAStation = True
     self.demarrageTermine = False
     self.monClient = TCPClient(self.adresseIP)
Ejemplo n.º 3
0
class EmotivController(object):
    """
        Emocon
    """

    __metaclass__ = Singleton

    __socket1 = TCPClient(TARGET_IP, TARGET_PORT1)
    __spawn_socket1 = None

    def __init__(self):
        try:
            self.__socket1.connect()
            print "EmotivController instance is created"
        except IOError:
            print "IOError: Can't connect to emotiv server."

    def send_packet(self, request):
        """
            Send EEG packet to TF Server.
        """
        try:
            self.__socket1.send(request)
            response = self.__socket1.recv(1024)
            return response
        except IOError:
            return 'IOError'
Ejemplo n.º 4
0
class TCPThread(Thread):
    ownerNotifier = None
    terminated = False
    tcpClient = None
    pktHandler = None
    host = None
    port = None

    def __init__(self, pktHandler, ownerNotifier, host, port):
        Thread.__init__(self)
        self.pktHandler = pktHandler
        self.ownerNotifier = ownerNotifier
        self.host = host
        self.port = port

    def cleanup(self):
        if self.tcpClient is not None:
            self.tcpClient.disconnect()
        self.ownerNotifier.notify(self.ownerNotifier.TERMINATE)

    def run(self):
        try:
            log.debug("TCPThread.run")

            self.tcpClient = TCPClient(self.host, self.port)
            if not self.tcpClient.connect(10):
                print "Connection to host failed"
                self.terminated = True

            while not self.terminated:
                data = self.tcpClient.read()
                if data is not None:
                    data = data[1:-3]  # remove leading ' and trailing \n'
                    self.pktHandler.input(data)

                time.sleep(0.001)
            self.cleanup()
        except:  # sys.excepthook does not work in threads
            import traceback

            traceback.print_exc()
            self.terminated = True
            self.cleanup()

    def terminate(self):
        log.debug("TCPThread.terminate")
        self.terminated = True
    def __init__(self, id, dst_ip):
        threading.Thread.__init__(self)
        self.exitflag = False
        self.bank = 0
        self.id = id
        self.alive = True
        self.command = idle_msg
        self.dst_ip = dst_ip
        self.outputs = []
        self.is_request = False
        self.is_start = False
        self.timer1 = None

        if (id % 4) is 0:
            self.dst_port = 5001
            self.power_port = 0
            self.switch_port = 4
            self.redled_port = 8
            self.blueled_port = 9
        elif (id % 4) is 1:
            self.dst_port = 5002
            self.power_port = 1
            self.switch_port = 5
            self.redled_port = 10
            self.blueled_port = 11
        elif (id % 4) is 2:
            self.dst_port = 5003
            self.power_port = 3
            self.switch_port = 7
            self.redled_port = 14
            self.blueled_port = 15
        elif (id % 4) is 3:
            self.dst_port = 5004
            self.power_port = 2
            self.switch_port = 6
            self.redled_port = 12
            self.blueled_port = 13

        lastnumindex = dst_ip.rfind('.')
        lastnum = int(dst_ip[lastnumindex + 1:len(dst_ip)])

        self.module_ip = dst_ip[:lastnumindex + 1] + str(lastnum + id +
                                                         1) + "\r"
        # sys.stdout.write('module ip: %r\n' % self.module_ip)
        self.client = TCPClient(2, self.dst_ip, self.dst_port)
 class ClientRunner():
     
     client = None
     serverPort = None
     
     def __init__(self, port):
         log.debug('Creating ClientRunner, port ' + str(port))
         self.serverPort = port
         pass
     
     def startClient(self):
         self.client = TCPClient('localhost', self.serverPort)
         return self.client.connect(2)
 
     def stopClient(self):
         self.client.disconnect()
         time.sleep(0.1)
         self.client = None
Ejemplo n.º 7
0
def Main():
    
    signal.signal(signal.SIGINT, sigIntHandler)
    client = TCPClient(HOST, PORT)
    
    print 'Connecting to ' + HOST + ':' + str(PORT) + ' ..'
    if not client.connect(10):
        print 'Connection to host failed'
        sys.exit(-1)

    runTime = 0
    while not terminated:
        data = client.read()
        if data is not None:
            print data
        time.sleep(0.1)
        runTime += 0.1
        if runTime > 10:
            print 'Terminating'
            break
 def envoyerIndice(self):
     RequeteJSON("indice " + self.robot.indiceObtenu, 0)
     while 1:
         try:
             self.monClient.sendFile()
             break
         except Exception as e:
             print e
             print "Connection perdue... Tente de reconnecter..."
             time.sleep(0.1)
             self.monClient = TCPClient(self.adresseIP)
             self.monClient._connectToServer()
 def envoyerTension(self):
     RequeteJSON("tension", self.robot.tensionCondensateur)
     while 1:
         try:
             self.monClient.sendFile()
             break
         except Exception as e:
             print e
             print "Connection perdue... Tente de reconnecter..."
             time.sleep(0.1)
             self.monClient = TCPClient(self.adresseIP)
             self.monClient._connectToServer()
 def envoyerLettre(self):
     RequeteJSON("man " + self.robot.lettreObtenue, 0)
     while 1:
         try:
             self.monClient.sendFile()
             self.robot.pretEnvoyerLettre = False
             break
         except Exception as e:
             print e
             print "Connection perdue... Tente de reconnecter..."
             time.sleep(0.1)
             self.monClient = TCPClient(self.adresseIP)
             self.monClient._connectToServer()
 def envoyerPretAStation(self):
     RequeteJSON("robotPret", 0)
     while 1:
         try:
             self.monClient.sendFile()
             break
         except Exception as e:
             print e
             print "Connection perdue... Tente de reconnecter..."
             time.sleep(0.1)
             self.monClient = TCPClient(self.adresseIP)
             self.monClient._connectToServer()
         time.sleep(0.1)
 def envoyerCommandeTerminee(self):
     RequeteJSON("termine", 0)
     while 1:
         try:
             self.monClient.sendFile()
             break
         except Exception as e:
             print e
             print "Connection perdue... Tente de reconnecter..."
             time.sleep(0.1)
             self.monClient = TCPClient(self.adresseIP)
             self.monClient._connectToServer()
     self.robot.commandeTerminee = False
     self.termineeAEteEnvoyerAStation = True
Ejemplo n.º 13
0
def main(assist, ipv4_host, port, color, fpv, bci2000, speech, mapl, mapr):
    try:
        Console.disable_quick_edit()
        file = None
        keyboard = False
        bci = False
        listen = None
        listen_th = None
        sock = sckt.socket(sckt.AF_INET, sckt.SOCK_DGRAM)
        sock.connect(('8.8.8.8', 80))
        p_ip = sock.getsockname()[0]
        tcp_c = TCPClient(ipv4_host, port)
        if tcp_c.join() and input(MSG_READY).lower() == 'y':
            if bci2000:
                inbuff = queue.Queue()
                file = FParse(inbuff)
                file.read(bci2000)
                bci = True
            elif speech:
                listen = threading.Event()
                inbuff = queue.Queue()
                listen_th = threading.Thread(target=speech2txt,
                                             args=(inbuff, listen),
                                             daemon=True)
                listen_th.start()
            else:
                keyboard = True
                inbuff = None
            GameCtrl.init(tcp_c, color, fpv, keyboard, assist, inbuff, file,
                          speech, bci, mapl, mapr, listen)
            GameCtrl.start()
    except KeyboardInterrupt:
        pass
    if listen_th:
        listen_th.join(1)
    print(MSG_CLOSE, flush=True)
    Console.enable_quick_edit()
Ejemplo n.º 14
0
    def __init__(self, width, height, svr_addr, svr_port, host_addr,
                 host_port):  # {{{
        """ """
        self.lan = 'cn'
        self.tcp = TCPClient(4096)
        self.log = dict()

        # window
        self.width = width
        self.height = height
        self.win = tk.Tk()
        self.win.protocol('WM_DELETE_WINDOW', self.onCloseWindow)
        self.win.resizable(width=True, height=False)
        self.screenwidth = self.win.winfo_screenwidth()
        self.screenheight = self.win.winfo_screenheight()

        # homebrain address / port
        self.server_addr = tk.StringVar()
        self.server_port = tk.StringVar()
        self.server_addr.set(svr_addr)
        self.server_port.set(svr_port)

        # host address / port
        self.host_addr = tk.StringVar()
        self.host_port = tk.StringVar()
        self.host_addr.set(host_addr)
        self.host_port.set(host_port)

        self.filter_key = tk.StringVar()
        self.rule_newn_var = tk.StringVar()
        self.rule_switch_var = tk.StringVar()
        self.rule_btm_sw = 0

        self.onGlobalConfigure()
        self.createConnectView()
        self.win.mainloop()
Ejemplo n.º 15
0
class DatagramTransfer :

    def __init__(self, localPort, servHost, servPort) :
        self.serv = None
        self.client = None
        self.startServ(localPort)
        self.startClient(servHost, servPort)


    def startServ(self, port = 6000) :
        self.serv = TCPServThread('0.0.0.0', port)
        self.serv.setDaemon(True)
        self.serv.start()
        pass


    def startClient(self, host, port) :
        self.client = TCPClient(host, port)
        pass


    def sendMsg(self,msg) :
        self.client.send(msg)
        log('D', "[%s]"%msg)
        pass


    def sendMsgWaitForReply(self, msg) :
        self.client.send(msg)
        while self.serv.recvBuffer == "" :
            pass
        return self.serv.flashRecvBuffer()


    def recvMsg(self) :
        if self.serv.recvBuffer != "" :
            return self.serv.flashRecvBuffer()
        else :
            return ""


    # 设置报文格式并结构化报文
    def setDatagram(self, transtype, datagramIn) :
        self.dgParser = DatagramParser(transtype)
        self.dgParser.datagramIn.parser(datagramIn)


    # 发送报文,并等待获取结果报文,并格式化
    def sendDatagramAndGetReply(self) :
        self.client.send(self.dgParser.datagramIn.msg)
        while self.serv.recvBuffer == "" :
            pass
        reply = self.serv.flashRecvBuffer()
        self.dgParser.datagramOut.parser(reply)
    def attendreCommande(self):
        data = -1
        while 1:
            try:
                data = self.monClient.receiveFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()
        if data == -1:
            print("Erreur lors de la lecture du fichier")

        self.termineeAEteEnvoyerAStation = False
        return data
Ejemplo n.º 17
0
class DemoClass():
    tcp = TCPClient()
    default_Server_IP = "192.168.1.07"
    Camera_H_Pos = 90
    Camera_V_Pos = 90
    SERVO_MIN_ANGLE = 0
    SERVO_MAX_ANGLE = 180
    Is_Paint_Thread_On = False
    global t_Paint_Thread
    sonic_Index = 0
    sonic_buff = [0] * 20
    send_Counter = 0
    Is_tcp_Idle = True

    def __init__(self, parent=None):
        self.Camera_V_Pos = self.Camera_V_Pos + 3
        self.Camera_V_Pos = constrain(self.Camera_V_Pos, 0, 90)
        self.tcp.connectToServer(address=(self.default_Server_IP, 12345))
        self.tcp.sendData(cmd.CMD_CAMERA_UP + str(self.Camera_V_Pos))
Ejemplo n.º 18
0
    def run(self):
        try:
            log.debug("TCPThread.run")

            self.tcpClient = TCPClient(self.host, self.port)
            if not self.tcpClient.connect(10):
                print "Connection to host failed"
                self.terminated = True

            while not self.terminated:
                data = self.tcpClient.read()
                if data is not None:
                    data = data[1:-3]  # remove leading ' and trailing \n'
                    self.pktHandler.input(data)

                time.sleep(0.001)
            self.cleanup()
        except:  # sys.excepthook does not work in threads
            import traceback

            traceback.print_exc()
            self.terminated = True
            self.cleanup()
class RobotClient(Thread):
    def __init__(self, robot, adresseIP):
        Thread.__init__(self)
        self.robot = robot
        self.adresseIP = adresseIP
        self.termineeAEteEnvoyerAStation = True
        self.demarrageTermine = False
        self.monClient = TCPClient(self.adresseIP)

    def run(self):
        self.monClient._connectToServer()
        while not self.demarrageTermine:
            time.sleep(0.5)
            print("Attends demarrage...")
        self.envoyerPretAStation()
        data = self.attendreCommande()
        self.traiterCommande(data)
        while 1:
            if self.robot.pretEnvoyerLettre:
                self.envoyerLettre()
                time.sleep(2)
                self.envoyerIndice()
                time.sleep(4)
                self.robot.pretEnvoyerLettre = False

            elif (self.robot.tresorCapturer):
                self.envoyerCaptureTresor()
                time.sleep(0.2)
                self.robot.tresorCapturer = False
                data = self.attendreCommande()
                self.traiterCommande(data)

            elif (self.robot.tresorNonCapturer):
                self.envoyerTresorAbsent()
                time.sleep(0.2)
                self.robot.tresorNonCapturer = False
                data = self.attendreCommande()
                self.traiterCommande(data)

            elif self.robot.commandeTerminee and not self.robot.alignementEnCours:
                    self.envoyerTension()
                    time.sleep(0.2)
                    self.envoyerCommandeTerminee()
                    time.sleep(0.2)
                    data = self.attendreCommande()
                    self.traiterCommande(data)
            else:
                self.envoyerTension()
                time.sleep(0.2)

    def attendreCommande(self):
        data = -1
        while 1:
            try:
                data = self.monClient.receiveFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()
        if data == -1:
            print("Erreur lors de la lecture du fichier")

        self.termineeAEteEnvoyerAStation = False
        return data

    def traiterCommande(self, data):
        print data
        commande = data['commande']
        parametre = data['parametre']
        self.robot.traiterCommande(commande, parametre)
        self.termineeAEteEnvoyerAStation = False

    def envoyerTension(self):
        RequeteJSON("tension", self.robot.tensionCondensateur)
        while 1:
            try:
                self.monClient.sendFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()

    def envoyerLettre(self):
        RequeteJSON("man " + self.robot.lettreObtenue, 0)
        while 1:
            try:
                self.monClient.sendFile()
                self.robot.pretEnvoyerLettre = False
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()

    def envoyerIndice(self):
        RequeteJSON("indice " + self.robot.indiceObtenu, 0)
        while 1:
            try:
                self.monClient.sendFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()

    def envoyerCaptureTresor(self):
        RequeteJSON("present", 0)
        while 1:
            try:
                self.monClient.sendFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()

        self.robot.commandeTerminee = False
        self.termineeAEteEnvoyerAStation = True

    def envoyerTresorAbsent(self):
        RequeteJSON("absent", 0)
        while 1:
            try:
                self.monClient.sendFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()

        self.robot.commandeTerminee = False
        self.termineeAEteEnvoyerAStation = True

    def envoyerCommandeTerminee(self):
        RequeteJSON("termine", 0)
        while 1:
            try:
                self.monClient.sendFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()
        self.robot.commandeTerminee = False
        self.termineeAEteEnvoyerAStation = True

    def envoyerPretAStation(self):
        RequeteJSON("robotPret", 0)
        while 1:
            try:
                self.monClient.sendFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()
            time.sleep(0.1)
Ejemplo n.º 20
0
class ConnectionManager(QtCore.QObject):
    result = QtCore.pyqtSignal(bool)

    def __init__(self, incomming_q, outgoing_q):
        super(ConnectionManager, self).__init__()

        self.in_q = incomming_q
        self.out_q = outgoing_q
        self.tcpClient = None
        self.comClient = None

    def __del__(self):
        if self.tcpClient is not None:
            self.tcpClient.join()
        if self.comClient is not None:
            self.comClient.join()

    @QtCore.pyqtSlot()
    def check(self):
        if self.tcpClient and not self.tcpClient.isAlive():
            self.tcpClient = None
            Logger.getInstance().error("WiFi connection closed unexpectedly")
            self.result.emit(False)
        if self.comClient and not self.comClient.isAlive():
            self.comClient = None
            Logger.getInstance().error("COM connection closed unexpectedly")
            self.result.emit(False)

    @QtCore.pyqtSlot(tuple)
    def connect(self, parameters):
        self.stopAll()
        if parameters[0] == "WiFi":
            try:
                self.tcpClient = TCPClient(
                    (str(parameters[1]), int(parameters[2])), self.out_q,
                    self.in_q)
            except Exception as e:
                self.tcpClient = None
                Logger.getInstance().error("Cannot start WiFi connection: " +
                                           str(e))
            else:
                self.tcpClient.start()
                Logger.getInstance().info("Connected to WiFi server")
        elif parameters[0] == "COM":
            try:
                self.comClient = COMClient(str(parameters[1]),
                                           int(parameters[2]), self.out_q,
                                           self.in_q)
            except Exception as e:
                self.comClient = None
                Logger.getInstance().error("Cannot start serial connection: " +
                                           str(e))
            else:
                self.comClient.start()
                Logger.getInstance().info("Connected to COM server")
        if self.comClient or self.tcpClient:
            self.result.emit(True)
        else:
            self.result.emit(False)

    @QtCore.pyqtSlot()
    def setup(self):
        self.runTimer = QtCore.QTimer()
        self.runTimer.timeout.connect(self.check)
        self.runTimer.start(100)

    def stopAll(self):
        if self.tcpClient is not None:
            self.tcpClient.join()
            self.tcpClient = None
            Logger.getInstance().info("Stopping TCP Client")
        if self.comClient is not None:
            self.comClient.join()
            self.comClient = None
            Logger.getInstance().info("Stopping COM Client")
Ejemplo n.º 21
0
         midi = open(midiname,'r')
         # f is a file-like object. 
         old_file_position = midi.tell()
         midi.seek(0, os.SEEK_END)
         size = midi.tell()
         midi.seek(old_file_position, os.SEEK_SET)
         #size = os.path.getsize(midiname)
         print '[MidiSource] Sending name:"%s" and size:"%s",' % (midiname,str(size))
         udpServer.sendUDPmsgToLastClient(midiname+','+str(size)+',')
         # ********************************************************
         ret = udpServer.receiveUDPmsg(delay)
         print "[MidiSource] Mensagem recebida do ImageSource " , ret
         # ********************************************************
         #Connect to Android TCP server on Android_IP and TCP_PORT
         if(ret=="OK"):
             tcpClient = TCPClient(imageSource_addr[0],TCP_PORT,BUFFER_SIZE)
             tcpClient.connectTCP()
             print '[MidiSource] TCP Client ready to send the MIDI'
             #tcpClient.sendFileByNameAndClose(imgname)
             # ********************************************************
             #Send Image
             tcpClient.sendDataBySize(midi.read(), size)
             # ********************************************************
             #Close TCP socket
             tcpClient.closeTCPclient()
             print '[MidiSource] TCPClient closed'
         # ********************************************************
         #Send MIDI
         # ********************************************************
         #If transfer has finished, Close TCP socket
 
Ejemplo n.º 22
0
 def startClient(self, host, port) :
     self.client = TCPClient(host, port)
     pass
Ejemplo n.º 23
0
from TCPClient import TCPClient
import time

app = TCPClient()  # Create new class object
app.address = ('localhost', 5000)  # Set up ip and port for connection
app.start()  # Start connection and running forever
time.sleep(5)  # Delay 5 secs
app.send("test1")  # Send message
time.sleep(2)  # Delay 2 secs
print(app.rcvmsg)  # Print out to see receive message
time.sleep(1)  # Delay 2 secs
app.stop()  # Stop running
Ejemplo n.º 24
0
# # # # # # # # # # # # # # #
#      Socket Helpers       #
# # # # # # # # # # # # # # #

from sys import argv
from TCPClient import TCPClient

if len(argv) == 3:
    ip = argv[1]
    port = int(argv[2])
else:
    ip = '127.0.0.1'
    port = 1337

TCP = TCPClient(ip, port)


def readString():
    str = TCP.readline()
    print '<', str
    return str


def readArray():
    return readString().split(' ')


def write(str):
    if isinstance(str, (list, tuple)):
        str = ' '.join(str)
    print '>', str
Ejemplo n.º 25
0
def main():

    
    # Open TCP connection to robot
    client = TCPClient()

    # Startup realsense pipeline
    pipeline = rs.pipeline()

    #Create a config and configure the pipeline to stream
    #  different resolutions of color and depth streams
    
    config = rs.config()
    config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 60)
    config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 60)

    # Start streaming
    profile = pipeline.start(config)

    # Getting the depth sensor's depth scale (see rs-align example for explanation)
    depth_sensor = profile.get_device().first_depth_sensor()
    depth_scale = depth_sensor.get_depth_scale()
    print("Depth Scale is: " , depth_scale)

    # Create an align object
    # rs.align allows us to perform alignment of depth frames to others frames
    # The "align_to" is the stream type to which we plan to align depth frames.
    align_to = rs.stream.color
    align = rs.align(align_to)

    # Declare depth filters
    dec_filter = rs.decimation_filter()  # Decimation - reduces depth frame density
    spat_filter = rs.spatial_filter()  # Spatial    - edge-preserving spatial smoothing
    hole_filling = rs.hole_filling_filter()
    temp_filter = rs.temporal_filter()  # Temporal   - reduces temporal noise

    depth_to_disparity = rs.disparity_transform(True)
    disparity_to_depth = rs.disparity_transform(False)

    # initialize variables for trajectory calculation
    buffer_len = 30 #number of points that will be taken into account for trajectory calculation
    pts = deque(maxlen=buffer_len)
    camera_pts = deque(maxlen=buffer_len)
    time_vec = deque(maxlen=buffer_len)
    tic = time.time()
    tic_frame = None
    none_count = 0

    preditcion_store = []
    points_store = []
    catch_point = []

    # loop for video
    while True:
        # Wait for frames from realsense
        frames = pipeline.wait_for_frames()
        # Align the depth frame to color frame
        aligned_frames = align.process(frames)

        # Get aligned frames
        aligned_depth_frame = aligned_frames.get_depth_frame() # aligned_depth_frame is a 640x480 depth image
        color_frame = aligned_frames.get_color_frame()

        # Filter aligned depth frame
        #aligned_depth_frame = dec_filter.process(aligned_depth_frame)
        aligned_depth_frame = depth_to_disparity.process(aligned_depth_frame)
        aligned_depth_frame = spat_filter.process(aligned_depth_frame)
        aligned_depth_frame = temp_filter.process(aligned_depth_frame)
        aligned_depth_frame = disparity_to_depth.process(aligned_depth_frame)
        aligned_depth_frame = hole_filling.process(aligned_depth_frame)

        # Get images to work on
        depth_image = np.asanyarray(aligned_depth_frame.get_data())
        color_image = np.asanyarray(color_frame.get_data())

        # Validate that both frames are valid
        if not aligned_depth_frame or not color_frame:
            print('Frame is none')
            continue

        depth_image = np.asanyarray(aligned_depth_frame.get_data())
        color_image = np.asanyarray(color_frame.get_data())
        
        # Detect the orange ball and return image with results
        center,radius = bd.detect_ball(color_image)

        # update the points queue
        if center is not None :
            
            #get depth from depth_image and append to center, append the current center to the points list
            depth = depth_image[center[1],center[0]]
            if not tic_frame:
                tic_frame = time.time()
            center.append(depth)
            camera_pts.append(center)

            # Transform point from camera coordinates to robot coordinate frame
            center_world = bte.transform_to_world(center)
            pts.append(center_world)
            points_store.append(center_world)

            #append current time to time vector
            toc = time.time()
            time_vec.append(toc-tic)

            

        else:
            none_count = none_count+1


        #if no points were detected for some time (10 frames), reset the point vector and polynomial calculation
        if none_count >10:
            pts.clear()
            camera_pts.clear()
            time_vec.clear()
            none_count = 0

        # if more then x ball positions were detected, calculate the trajectory estimation
        if(len(pts) > 7):
            toce = time.time()
            params_x,params_y,params_z = bte.estimate_trajectory(np.asarray(pts), np.asarray(time_vec))

            catch_point = cpc.get_catching_point(params_x,params_y,params_z)


            #Send catching point to robot
            if catch_point is not None:
                client.send_message(np.round(catch_point,2))
                print("Processing time:",(time.time()-toce))
                print("Sent point: ",np.round(catch_point,2))
                catch_point_camera = bte.transform_to_camera(catch_point)
                cv2.drawMarker(color_image, tuple(catch_point_camera.astype(int)[:2]), (0, 255, 0) ,cv2.MARKER_CROSS,10)

            # calculate future points for ball from the estimated polynomial parameters and draw them
            print("Tic frame: ", tic_frame)
            print("Time now: ", time.time)
            future_points = bte.get_future_points_3D(params_x,params_y,params_z,tic,time.time(),2)
            
            for point in future_points.transpose():
                preditcion_store.append(point)
                camera_point = bte.transform_to_camera(point)
                cv2.drawMarker(color_image, tuple(camera_point.astype(int)[:2]), (255, 0, 0) ,cv2.MARKER_CROSS,5)


            # loop over the set of tracked points to draw the balls past movement
            print("cam points: ", camera_pts)
            for i in range(1, len(camera_pts)):

                # compute the thickness of the line and
                # draw the connecting lines
                thickness = int(np.sqrt(buffer_len / float(i + 1)) * 2.5)
                cv2.drawMarker(color_image, (camera_pts[i][0],camera_pts[i][1]), (0, 0, 255), cv2.MARKER_CROSS,10)
        
            break
        # Display results
        cv2.imshow("Result image", color_image)
        out.write(color_image)  # uncomment to save video
        key = cv2.waitKey(1) & 0xFF

        # if the 'q' key is pressed, stop the loop
        if key == ord("q"):
            break

    cv2.imshow("Result image", color_image)

    del points_store[0]    
    points_store = np.asarray(points_store)
    preditcion_store = np.asarray(preditcion_store)
    print("Catching point: ", catch_point)
    print("points: ", points_store)
    print('first: ', points_store[:,0])
    print('prediction: ',preditcion_store)
    
    visualization(points_store[:,0],points_store[:,1],points_store[:,2],preditcion_store[:,0],preditcion_store[:,1] , preditcion_store[:,2],catch_point)
    # close all windows
    cv2.destroyAllWindows()
   
    client.close()
Ejemplo n.º 26
0
        print '[ImageSource] Sending name:"%s" and size:"%s"' % (imgname,
                                                                 str(size))

        # ********************************************************
        #Initialize UDP socket
        udpClient = UDPClient(BUFFER_SIZE)
        # ********************************************************
        #Send Image Information via UDP packet in the format "IMAGE_NAME,IMAGE_SIZE"
        udpClient.sendUDPmsg(imgname + ',' + str(size), RPI_IP, UDP_PORT)
        #Assert that message with Image Name and Image Size was received
        ret = udpClient.receiveUDPmsg(delay)
        print "[ImageSource] Mensagem recebida do MidiSource", ret
        # ********************************************************
        #Connect to RPI TCP server
        if (ret == "OK"):
            tcpClient = TCPClient(RPI_IP, TCP_PORT, BUFFER_SIZE)
            tcpClient.connectTCP()
            print '[ImageSource] TCP Client ready to send the image'
            #tcpClient.sendFileByNameAndClose(imgname)
            # ********************************************************
            #Send Image
            tcpClient.sendDataBySize(img.read(), size)
            # ********************************************************
            #Close TCP socket
            tcpClient.closeTCPclient()
            print '[ImageSource] TCPClient closed'

            #**************************MIDI PART******************************************
            # ********************************************************
            #Wait for UDP Packet Flag saying MIDI is ready to be sent
            ret = udpClient.receiveUDPmsg(delay)
Ejemplo n.º 27
0
#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from TCPServ import TCPServThread
from TCPClient import TCPClient
from log import log


if __name__=="__main__" :

    serv = TCPServThread('0.0.0.0', 12345)
    serv.setDaemon(True)
    serv.start()

    while serv.recvBuffer == "" :
        pass

    client = TCPClient('127.0.0.1', 6000)
    #recvMsg = serv.flashRecvBuffer()

    while True :
        if serv.recvBuffer != "" :
            recvMsg = serv.flashRecvBuffer()
            log('M','[RECV] %s'%recvMsg)
            ret = "014040230090847054CT1234564000010000004942360010001676   霞編001                       000000000000A2T00000000000000201404176666666666666666    "
            log('D', '[SEND] LEN %d'%len(ret))
            log('D','[SEND] [%s]'%ret)
            client.send(ret)
Ejemplo n.º 28
0
from TCPClient import TCPClient
import Constants


def read_cmd_code():
    try:
        return int(input('Execute: '))
    except ValueError:
        print("ERROR: Not a number")
        print("Example: 1")
        return read_cmd_code()


if __name__ == '__main__':
    client = TCPClient("localhost", 5001)
    if client.fail:
        print("Contolla il server")
        exit(1)
    cmd = ""
    while True:
        print("Available actions")
        cn = 1
        for cmd in Constants.actions:
            print(cn.__str__() + " - " + cmd)
            cn += 1
        cmd = read_cmd_code() - 1
        client.send_message(Constants.actions[cmd])
        if Constants.actions[cmd] == "exit":
            break
    client.close_socket()
    exit(0)
class MainWindow(QMainWindow, Ui_MainWindow):
    tcp = TCPClient()
    default_Server_IP = "192.168.1.108"
    Camera_H_Pos = 90
    Camera_V_Pos = 90
    SERVO_MIN_ANGLE = 0
    SERVO_MAX_ANGLE = 180
    Is_Paint_Thread_On = False
    global t_Paint_Thread
    sonic_Index = 0
    sonic_buff = [0] * 20
    send_Counter = 0
    Is_tcp_Idle = True

    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.setFixedSize(self.width(), self.height())
        self.msgDlg = Messgae_Dialog()
        self.loadLogo()
        self.webView.setZoomFactor(1.2)
        #self.webView.setUrl(QUrl().fromLocalFile("/html/car_photo.html"))
        #self.webView.setUrl(QtCore.QUrl("file:/html/car_photo.html"))
        photo_Path = os.getcwd() + '/html/car_photo.html'
        self.webView.load(QtCore.QUrl.fromUserInput(photo_Path))
        #self.webView.page().settings().setAttribute(QtWebEngineWidgets.QWebEngineSettings.ShowScrollBars, False)
        self.webView.page().mainFrame().setScrollBarPolicy(
            Qt.Horizontal, Qt.ScrollBarAlwaysOff)
        self.webView.page().mainFrame().setScrollBarPolicy(
            Qt.Vertical, Qt.ScrollBarAlwaysOff)
        try:
            file_Config = open("Config.txt", "r")
            self.default_Server_IP = file_Config.read()
        except (Exception, e):
            print((
                "Config.txt is not exist,If the Program is the first executed, To ignore this information",
                e))
        finally:
            file_Config.close()
        self.lineEdit_IP_Addr.setText(self.default_Server_IP)

        self.wgt_Drawing = PaintArea(self)
        self.wgt_Drawing.setGeometry(10, 10, 400, 300)
        self.wgt_Drawing.setVisible(False)
        self.mutex = threading.Lock()
        #self.t_Recv_Sonic_Thread = Recv_Sonic_Thread(self)
        #self.t_Scan_Sonic_Thread = Scan_Sonic_Thread(self)
        #self.t_Paint_Thread = Piant_Thread(self.wgt_Drawing)
        #self.t_Paint_Thread.start()

    def loadLogo(self):
        scene = QGraphicsScene(self)
        #scene.setSceneRect(-600, -600, 1200, 1200)
        #pic = QPixmap("imgs/logo02.png")
        pic = QPixmap(":/imgs/logo_Nomal")
        scene.addPixmap(pic)
        view = self.logo
        view.setStyleSheet("background:transparent")
        view.setScene(scene)
        view.setRenderHint(QPainter.Antialiasing)
        view.show()

    @pyqtSlot()
    def on_btn_Up_pressed(self):
        self.Camera_V_Pos = self.Camera_V_Pos + self.slider_Camera.value()
        self.Camera_V_Pos = constrain(self.Camera_V_Pos, self.SERVO_MIN_ANGLE,
                                      self.SERVO_MAX_ANGLE)
        self.slider_Camera_V.setValue(self.Camera_V_Pos)
        self.tcp.sendData(cmd.CMD_CAMERA_UP + str(self.Camera_V_Pos))

    @pyqtSlot()
    def on_btn_Up_released(self):
        self.tcp.sendData(cmd.CMD_CAMERA_STOP)

    @pyqtSlot()
    def on_btn_Left_pressed(self):
        self.Camera_H_Pos = self.Camera_H_Pos + self.slider_Camera.value()
        self.Camera_H_Pos = constrain(self.Camera_H_Pos, self.SERVO_MIN_ANGLE,
                                      self.SERVO_MAX_ANGLE)
        self.slider_Camera_H.setValue(self.Camera_H_Pos)
        self.tcp.sendData(cmd.CMD_CAMERA_LEFT + str(self.Camera_H_Pos))

    @pyqtSlot()
    def on_btn_Left_released(self):
        self.tcp.sendData(cmd.CMD_CAMERA_STOP)

    @pyqtSlot()
    def on_btn_Down_pressed(self):
        self.Camera_V_Pos = self.Camera_V_Pos - self.slider_Camera.value()
        self.Camera_V_Pos = constrain(self.Camera_V_Pos, 80,
                                      self.SERVO_MAX_ANGLE)
        self.slider_Camera_V.setValue(self.Camera_V_Pos)
        self.tcp.sendData(cmd.CMD_CAMERA_DOWN + str(self.Camera_V_Pos))

    @pyqtSlot()
    def on_btn_Down_released(self):
        self.tcp.sendData(cmd.CMD_CAMERA_STOP)

    @pyqtSlot()
    def on_btn_Right_pressed(self):
        self.Camera_H_Pos = self.Camera_H_Pos - self.slider_Camera.value()
        self.Camera_H_Pos = constrain(self.Camera_H_Pos, self.SERVO_MIN_ANGLE,
                                      self.SERVO_MAX_ANGLE)
        self.slider_Camera_H.setValue(self.Camera_H_Pos)
        self.tcp.sendData(cmd.CMD_CAMERA_LEFT + str(self.Camera_H_Pos))

    @pyqtSlot()
    def on_btn_Right_released(self):
        self.tcp.sendData(cmd.CMD_CAMERA_STOP)

    @pyqtSlot()
    def on_btn_Home_clicked(self):
        self.Camera_H_Pos = 90
        self.Camera_V_Pos = 90
        self.slider_Camera_H.setValue(self.Camera_H_Pos)
        self.slider_Camera_V.setValue(self.Camera_V_Pos)
        self.tcp.sendData(cmd.CMD_CAMERA_LEFT +
                          str(90 + self.slider_FineServo2.value()))
        self.tcp.sendData(cmd.CMD_CAMERA_UP +
                          str(90 + self.slider_FineServo2.value()))

    @pyqtSlot()
    def on_btn_Forward_pressed(self):
        #self.tcp.sendData(cmd.CMD_FORWARD + str(self.slider_Speed.value()))
        self.setMoveSpeed(cmd.CMD_FORWARD, self.slider_Speed.value())

    @pyqtSlot()
    def on_btn_Forward_released(self):
        self.tcp.sendData(cmd.CMD_STOP)

    @pyqtSlot()
    def on_btn_TurnLeft_pressed(self):
        self.tcp.sendData(cmd.CMD_TURN_LEFT +
                          str(self.slider_Direction.value() +
                              self.slider_FineServo1.value()))

    @pyqtSlot()
    def on_btn_TurnLeft_released(self):
        self.tcp.sendData(cmd.CMD_TURN_CENTER +
                          str(90 + self.slider_FineServo1.value()))

    @pyqtSlot()
    def on_btn_TurnRight_pressed(self):
        self.tcp.sendData(cmd.CMD_TURN_RIGHT +
                          str(self.slider_Direction.value() +
                              self.slider_FineServo1.value()))

    @pyqtSlot()
    def on_btn_TurnRight_released(self):
        self.tcp.sendData(cmd.CMD_TURN_CENTER +
                          str(90 + self.slider_FineServo1.value()))

    @pyqtSlot()
    def on_btn_Backward_pressed(self):
        #self.tcp.sendData(cmd.CMD_BACKWARD + str(self.slider_Speed.value()))
        self.setMoveSpeed(cmd.CMD_BACKWARD, self.slider_Speed.value())

    @pyqtSlot()
    def on_btn_Backward_released(self):
        self.tcp.sendData(cmd.CMD_STOP)

    @pyqtSlot()
    def on_btn_Mode_clicked(self):
        if self.btn_Mode.text() == "VIDEO":
            self.webView.setVisible(False)
            self.wgt_Drawing.setVisible(True)
            if self.btn_Connect.text() == "DisConnect":
                self.t_Paint_Thread = Piant_Thread(self)
                self.t_Paint_Thread.start()
                self.t_Recv_Sonic_Thread = Recv_Sonic_Thread(self)
                self.t_Recv_Sonic_Thread.start()
                self.t_Scan_Sonic_Thread = Scan_Sonic_Thread(self)
                self.t_Scan_Sonic_Thread.start()
                self.Is_Paint_Thread_On = True
            self.btn_Mode.setText("RADAR")
        elif self.btn_Mode.text() == "RADAR":
            self.wgt_Drawing.setVisible(False)
            self.webView.setVisible(True)
            if self.Is_Paint_Thread_On == True:
                if self.t_Paint_Thread.is_alive():
                    #stop_thread(self.t_Paint_Thread)
                    self.t_Paint_Thread.isRun = False
                    print(("Stop_thread ... -> t_Paint_Thread",
                           self.t_Paint_Thread.getName()))
                if self.t_Recv_Sonic_Thread.is_alive():
                    #stop_thread(self.t_Recv_Sonic_Thread)
                    self.t_Recv_Sonic_Thread.isRun = False
                    print(("Stop_thread ... -> t_Recv_Sonic_Thread",
                           self.t_Recv_Sonic_Thread.getName()))
                if self.t_Scan_Sonic_Thread.is_alive():
                    #stop_thread(self.t_Scan_Sonic_Thread)
                    self.t_Scan_Sonic_Thread.isRun = False
                    print(("Stop_thread ... -> t_Scan_Sonic_Thread",
                           self.t_Scan_Sonic_Thread.getName()))
                self.Is_Paint_Thread_On = False
            self.btn_Mode.setText("VIDEO")

    @pyqtSlot()
    def on_btn_Connect_clicked(self):
        if self.btn_Connect.text() == "Connect":
            server_ip = self.lineEdit_IP_Addr.text()
            print(("Connecting......", server_ip))
            try:
                self.tcp.connectToServer(address=(server_ip, 12345))
            except Exception as e:
                print((
                    "Connect to server Faild!: Server IP is right? Server is opend?",
                    e))
                self.msgDlg.showMessage(
                    "Connect to server Faild! \n\t1. Server IP is right? \n\t2. Server is opend?"
                )
                return
            print("Connecttion Successful !")
            if self.default_Server_IP != server_ip:
                file_Config = open("Config.txt", "w")
                file_Config.write(server_ip)
                file_Config.close()
                print("default_Server_IP is Changed!")
            self.webView.setUrl(
                QUrl("http://" + server_ip + ":8090/javascript_simple.html"))

            self.lineEdit_IP_Addr.setEnabled(False)
            self.btn_Connect.setText("DisConnect")
        elif self.btn_Connect.text() == "DisConnect":
            self.tcp.disConnect()
            self.webView.stop()
            self.webView.setUrl(QUrl().fromLocalFile("/html/car_photo.html"))
            #self.webView.setUrl(QUrl("file:/html/car_photo.html"))
            self.lineEdit_IP_Addr.setEnabled(True)
            self.btn_Connect.setText("Connect")

    @pyqtSlot(bool)
    def on_webView_loadFinished(self, p0):
        self.webView.setZoomFactor(1.2)

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Up:
            self.Camera_V_Pos = self.Camera_V_Pos + self.slider_Camera.value(
            ) + self.slider_FineServo3.value()
            self.Camera_V_Pos = constrain(self.Camera_V_Pos,
                                          self.SERVO_MIN_ANGLE,
                                          self.SERVO_MAX_ANGLE)
            self.slider_Camera_V.setValue(self.Camera_V_Pos)
            self.tcp.sendData(cmd.CMD_CAMERA_UP + str(self.Camera_V_Pos))

            self.wgt_Drawing.max_range = self.Camera_V_Pos
            self.wgt_Drawing.repaint()
        elif event.key() == Qt.Key_Down:
            self.Camera_V_Pos = self.Camera_V_Pos - self.slider_Camera.value(
            ) + self.slider_FineServo3.value()
            self.Camera_V_Pos = constrain(self.Camera_V_Pos, 80,
                                          self.SERVO_MAX_ANGLE)
            self.slider_Camera_V.setValue(self.Camera_V_Pos)
            self.tcp.sendData(cmd.CMD_CAMERA_DOWN + str(self.Camera_V_Pos))

            self.wgt_Drawing.max_range = self.Camera_V_Pos
            self.wgt_Drawing.repaint()
        elif event.key() == Qt.Key_Left:
            self.Camera_H_Pos = self.Camera_H_Pos + self.slider_Camera.value(
            ) + self.slider_FineServo2.value()
            self.Camera_H_Pos = constrain(self.Camera_H_Pos,
                                          self.SERVO_MIN_ANGLE,
                                          self.SERVO_MAX_ANGLE)
            self.slider_Camera_H.setValue(self.Camera_H_Pos)
            self.tcp.sendData(cmd.CMD_CAMERA_LEFT + str(self.Camera_H_Pos))
        elif event.key() == Qt.Key_Right:
            self.Camera_H_Pos = self.Camera_H_Pos - self.slider_Camera.value(
            ) + self.slider_FineServo2.value()
            self.Camera_H_Pos = constrain(self.Camera_H_Pos,
                                          self.SERVO_MIN_ANGLE,
                                          self.SERVO_MAX_ANGLE)
            self.slider_Camera_H.setValue(self.Camera_H_Pos)
            self.tcp.sendData(cmd.CMD_CAMERA_LEFT + str(self.Camera_H_Pos))
        elif event.key() == Qt.Key_R:
            self.tcp.sendData(cmd.CMD_RGB_R)
        elif event.key() == Qt.Key_G:
            self.tcp.sendData(cmd.CMD_RGB_G)
        elif event.key() == Qt.Key_B:
            self.tcp.sendData(cmd.CMD_RGB_B)
        elif event.key() == Qt.Key_H:
            self.Camera_H_Pos = 90
            self.Camera_V_Pos = 90
            self.slider_Camera_H.setValue(self.Camera_H_Pos)
            self.slider_Camera_V.setValue(self.Camera_V_Pos)
            self.tcp.sendData(cmd.CMD_CAMERA_LEFT +
                              str(90 + self.slider_FineServo2.value()))
            self.tcp.sendData(cmd.CMD_CAMERA_UP +
                              str(90 + self.slider_FineServo2.value()))

        if event.isAutoRepeat():
            pass
        else:
            #print "You Pressed Key : ", event.key(), event.text()
            if event.key() == Qt.Key_W:
                self.setMoveSpeed(cmd.CMD_FORWARD, self.slider_Speed.value())
            elif event.key() == Qt.Key_S:
                self.setMoveSpeed(cmd.CMD_BACKWARD, self.slider_Speed.value())
            elif event.key() == Qt.Key_A:
                self.tcp.sendData(cmd.CMD_TURN_LEFT +
                                  str(self.slider_Direction.value() +
                                      self.slider_FineServo1.value()))
            elif event.key() == Qt.Key_D:
                self.tcp.sendData(cmd.CMD_TURN_RIGHT +
                                  str(self.slider_Direction.value() +
                                      self.slider_FineServo1.value()))
            elif event.key() == Qt.Key_V:
                self.tcp.sendData(cmd.CMD_BUZZER_ALARM)

    def keyReleaseEvent(self, event):
        if event.isAutoRepeat():
            pass
        else:
            #print "You Released Key : ", event.key()
            if event.key() == Qt.Key_W or event.key() == Qt.Key_S:
                self.tcp.sendData(cmd.CMD_STOP)
            elif event.key() == Qt.Key_A or event.key() == Qt.Key_D:
                self.tcp.sendData(cmd.CMD_TURN_CENTER +
                                  str(90 + self.slider_FineServo1.value()))
            elif event.key() == Qt.Key_V:
                self.tcp.sendData(cmd.CMD_BUZZER_ALARM)
        if event.key() == Qt.Key_Up or event.key() == Qt.Key_Down or event.key(
        ) == Qt.Key_Left or event.key() == Qt.Key_Right:
            self.tcp.sendData(cmd.CMD_CAMERA_STOP)

    def setMoveSpeed(self, CMD, spd):
        self.tcp.sendData(CMD + str(int(spd // 3)))
        self.tcp.sendData(CMD)
        time.sleep(0.07)
        self.tcp.sendData(CMD + str(int(spd // 3 * 2)))
        time.sleep(0.07)
        self.tcp.sendData(CMD + str(int(spd)))

    @pyqtSlot("int")
    def on_slider_Camera_valueChanged(self, value):
        self.tcp.sendData(cmd.CMD_CAMERA_SLIDER + str(value))

    @pyqtSlot("int")
    def on_slider_Speed_valueChanged(self, value):
        pass
        #self.tcp.sendData(cmd.CMD_SPEED_SLIDER + str(value))

    @pyqtSlot("int")
    def on_slider_Direction_valueChanged(self, value):
        pass
        #self.tcp.sendData(cmd.CMD_DIR_SLIDER + str(value))
    @pyqtSlot()
    def on_btn_RGB_R_clicked(self):
        self.tcp.sendData(cmd.CMD_RGB_R)

    @pyqtSlot()
    def on_btn_RGB_G_clicked(self):
        self.tcp.sendData(cmd.CMD_RGB_G)

    @pyqtSlot()
    def on_btn_RGB_B_clicked(self):
        self.tcp.sendData(cmd.CMD_RGB_B)

    @pyqtSlot()
    def on_btn_Buzzer_clicked(self):
        pass
        #self.tcp.sendData(cmd.CMD_BUZZER_ALARM)
    @pyqtSlot()
    def on_btn_Buzzer_pressed(self):
        self.tcp.sendData(cmd.CMD_BUZZER_ALARM + "1")

    @pyqtSlot()
    def on_btn_Buzzer_released(self):
        self.tcp.sendData(cmd.CMD_BUZZER_ALARM)
 def __init__(self):
     super(TCPLocust, self).__init__()
     self.client = TCPClient()
Ejemplo n.º 31
0
class ScratchServer(BaseHTTPRequestHandler):
    tcp = TCPClient()
    Camera_H_Pos = 90
    Camera_V_Pos = 90
    SERVO_MIN_ANGLE = 0
    SERVO_MAX_ANGLE = 180
    Is_Paint_Thread_On = False
    global t_Paint_Thread
    sonic_Index = 0
    sonic_buff = [0] * 20
    send_Counter = 0
    Is_tcp_Idle = True

    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(self.parsePath(self.path).encode('utf-8'))

    def parsePath(self, path):
        pathParts = path.split('/')
        if len(pathParts) < 2:
            ScratchServer.lastError = "ERROR: No Command detected"
            return ScratchServer.lastError

        cmd = pathParts[1]

        if cmd == "favicon.ico": return

        if (cmd != "poll" and cmd != "lastError"): ScratchServer.lastError = ""

        if cmd == "crossdomain.xml":
            return self.getXDomainResponse()
        elif cmd == "connect":
            server_ip = pathParts[2]
            return self.connect2Car(server_ip)
        elif cmd == "disconnect":
            return self.disconnectFromCar()
        elif cmd == "cUp":
            return self.cameraUp(pathParts[2])
        elif cmd == "cDown":
            return self.cameraDown(pathParts[2])
        elif cmd == "cLeft":
            return self.cameraLeft(pathParts[2])
        elif cmd == "cRight":
            return self.cameraRight(pathParts[2])
        elif cmd == "centerCamera":
            return self.centerCamera()
        elif cmd == "moveForward":
            return self.moveForward(pathParts[2])
        elif cmd == "moveBackward":
            return self.moveBackward(pathParts[2])
        elif cmd == "stop":
            return self.stop()
        elif cmd == "stepForward":
            return self.stepForward(pathParts[2], pathParts[3])
        elif cmd == "stepBackward":
            return self.stepBackward(pathParts[2], pathParts[3])
        elif cmd == "turnLeft":
            return self.turnLeft(pathParts[2])
        elif cmd == "turnRight":
            return self.turnRight(pathParts[2])
        elif cmd == "center":
            return self.center()
        elif cmd == "lightRed":
            return self.lightRed()
        elif cmd == "lightGreen":
            return self.lightGreen()
        elif cmd == "lightBlue":
            return self.lightBlue()
        elif cmd == "buzz":
            return self.buzz(pathParts[2])
        elif cmd == "distance":
            return self.distance()
        elif cmd == "lastError":
            return self.getLastError()
        elif cmd == "lastMessage":
            return self.lastMessage()
        elif cmd == "poll":
            return self.poll()
        elif cmd == "reset_all":
            return self.resetAll()

        ScratchServer.lastError = "ERROR: '" + pathParts[
            1] + "' is not a valid command"
        return ScratchServer.lastError

    def lastMessage(self):
        print(ScratchServer.msg)
        return ScratchServer.msg

    def getLastError(self):
        print(ScratchServer.lastError)
        return ScratchServer.lastError

    def getXDomainResponse(self):
        resp = "<cross-domain-policy>\n"
        resp += "<allow-access-from domain=\"*\" to-ports=\"8085\"/>\n"
        resp += "</cross-domain-policy>\x00"
        return resp

    def poll(self):
        ScratchServer.msg = "sonic " + str(ScratchServer.iSonic)
        if ScratchServer.lastError != "":
            ScratchServer.msg += "\nERROR: " + ScratchServer.lastError
        print(ScratchServer.msg)
        return ScratchServer.msg

    def centerCamera(self):
        try:
            ScratchServer.Camera_V_Pos = 90
            ScratchServer.Camera_H_Pos = 90
            self.tcp.sendData(cmd.CMD_CAMERA_UP +
                              str(ScratchServer.Camera_V_Pos))
            self.tcp.sendData(cmd.CMD_CAMERA_LEFT +
                              str(ScratchServer.Camera_H_Pos))
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        return ""

    def resetAll(self):
        try:
            print("returning crossdomain.xml")
            self.centerCamera(0)
            self.stop()
            self.center(0)
            self.buzz(1000)
            return "Reset Complete"
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

    def connect2Car(self, server_ip):
        print("Connecting......", server_ip)
        try:
            self.tcp.connectToServer(address=(str(server_ip), 12345))
        except Exception as e:
            #print(type(server_ip),type(e))
            ScratchServer.lastError = e  #"Connect to server " + server_ip + " Failed!: " +
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Connection Successful !"
        print(ScratchServer.msg)
        return ScratchServer.msg

    def disconnectFromCar(self):
        try:
            self.tcp.disConnect()
            print("Disconnection Successful !")
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Disconnected"
        print(ScratchServer.msg)
        return ScratchServer.msg

    def distance(self):
        try:
            sonic = 0
            iTry = 0
            while sonic == 0 and iTry < 3:
                self.tcp.sendData(cmd.CMD_ULTRASONIC)
                sonic = self.tcp.recvData()
            ScratchServer.iSonic = float(sonic)
        except Exception as e:
            ScratchServer.msg = "Sonic Data error :\n" + e
            ScratchServer.lastError = ScratchServer.msg
            print(ScratchServer.msg)
            ScratchServer.iSonic = 0
            return ScratchServer.msg

        ScratchServer.msg = "distance received: " + str(ScratchServer.iSonic)
        print(ScratchServer.msg)
        return str(ScratchServer.iSonic)

    def cameraUp(self, angle):
        try:
            angle = int(angle)
            ScratchServer.Camera_V_Pos = 90 + angle
            ScratchServer.Camera_V_Pos = constrain(ScratchServer.Camera_V_Pos,
                                                   self.SERVO_MIN_ANGLE,
                                                   self.SERVO_MAX_ANGLE)
            self.tcp.sendData(cmd.CMD_CAMERA_UP +
                              str(ScratchServer.Camera_V_Pos))
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Camera V moved up to " + str(
            ScratchServer.Camera_V_Pos)
        print(ScratchServer.msg)
        return ScratchServer.msg

    def cameraDown(self, angle):
        try:
            angle = int(angle)
            ScratchServer.Camera_V_Pos = 90 - angle
            ScratchServer.Camera_V_Pos = constrain(ScratchServer.Camera_V_Pos,
                                                   80, self.SERVO_MAX_ANGLE)
            self.tcp.sendData(cmd.CMD_CAMERA_DOWN +
                              str(ScratchServer.Camera_V_Pos))
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Camera V moved down to " + str(
            ScratchServer.Camera_V_Pos)
        print(ScratchServer.msg)
        return ScratchServer.msg

    def cameraLeft(self, angle):
        try:
            angle = int(angle)
            ScratchServer.Camera_H_Pos = 90 + angle
            ScratchServer.Camera_H_Pos = constrain(ScratchServer.Camera_H_Pos,
                                                   self.SERVO_MIN_ANGLE,
                                                   self.SERVO_MAX_ANGLE)
            self.tcp.sendData(cmd.CMD_CAMERA_LEFT +
                              str(ScratchServer.Camera_H_Pos))
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Camera h moved LEFT to " + str(
            ScratchServer.Camera_H_Pos)
        print(ScratchServer.msg)
        return ScratchServer.msg

    def cameraRight(self, angle):
        try:
            angle = int(angle)
            ScratchServer.Camera_H_Pos = 90 - angle
            ScratchServer.Camera_H_Pos = constrain(ScratchServer.Camera_H_Pos,
                                                   self.SERVO_MIN_ANGLE,
                                                   self.SERVO_MAX_ANGLE)
            self.tcp.sendData(cmd.CMD_CAMERA_RIGHT +
                              str(ScratchServer.Camera_H_Pos))
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Camera h moved RIGHT to " + str(
            ScratchServer.Camera_H_Pos)
        print(ScratchServer.msg)
        return ScratchServer.msg

    def lightRed(self):
        try:
            self.tcp.sendData(cmd.CMD_RGB_R)
            ScratchServer.msg = "Light to Red"
            print(ScratchServer.msg)
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        return ScratchServer.msg

    def lightGreen(self):
        try:
            self.tcp.sendData(cmd.CMD_RGB_G)
            ScratchServer.msg = "Light to Green"
            print(ScratchServer.msg)
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        return ScratchServer.msg

    def lightBlue(self):
        try:
            self.tcp.sendData(cmd.CMD_RGB_B)
            ScratchServer.msg = "Light to Blue"
            print(ScratchServer.msg)
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        return ScratchServer.msg

    def buzz(self, duration):
        try:
            duration = int(duration)
            print("Buzzing started")
            self.tcp.sendData(cmd.CMD_BUZZER_ALARM + "1")
            time.sleep(float(duration) / 1000)
            self.tcp.sendData(cmd.CMD_BUZZER_ALARM + "0")
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Buzzed for " + str(duration) + "ms"
        print(ScratchServer.msg)
        return ScratchServer.msg

    def moveForward(self, speed):
        try:
            speed = int(speed)
            print("Moving Forward")
            self.setMoveSpeed(cmd.CMD_FORWARD, speed)
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Moving forward at speed " + str(speed)
        print(ScratchServer.msg)
        return ScratchServer.msg

    def moveBackward(self, speed):
        try:
            speed = int(speed)
            print("Moving Backward")
            self.setMoveSpeed(cmd.CMD_BACKWARD, speed)
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Moving Backward at speed " + str(speed)
        print(ScratchServer.msg)
        return ScratchServer.msg

    def stop(self):
        try:
            print("Stopping")
            self.tcp.sendData(cmd.CMD_STOP)
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Stopped"
        print(ScratchServer.msg)
        return ScratchServer.msg

    def stepForward(self, speed, duration):
        try:
            speed = int(speed)
            duration = int(duration)

            print("Stepping Forward")
            self.setMoveSpeed(cmd.CMD_FORWARD, speed)
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Stepping forward at speed " + str(speed)
        print(ScratchServer.msg)
        time.sleep(float(duration) / 1000)
        self.tcp.sendData(cmd.CMD_STOP)
        ScratchServer.msg2 = "Stopped moving after " + str(duration) + "ms"

        return ScratchServer.msg + "\n" + ScratchServer.msg2

    def stepBackward(self, speed, duration):
        try:
            speed = int(speed)
            duration = int(duration)
            print("Stepping Backward")
            self.setMoveSpeed(cmd.CMD_BACKWARD, speed)
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Stepping Backward at speed " + str(speed)
        print(ScratchServer.msg)
        time.sleep(float(duration) / 1000)
        self.tcp.sendData(cmd.CMD_STOP)
        ScratchServer.msg2 = "Stopped moving after " + str(duration) + "ms"

        return ScratchServer.msg + "\n" + ScratchServer.msg2

    def turnLeft(self, angle):
        try:
            angle = int(angle)
            print("Turning Left")
            self.tcp.sendData(cmd.CMD_TURN_LEFT + str(angle))
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Turned Left to " + str(angle)
        print(ScratchServer.msg)
        return ScratchServer.msg

    def center(self):
        try:
            print("Centering")
            self.tcp.sendData(cmd.CMD_TURN_CENTER + str(90))
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Centered"
        print(ScratchServer.msg)
        return ScratchServer.msg

    def turnRight(self, angle):
        try:
            angle = int(angle)
            print("Turning Right")
            self.tcp.sendData(cmd.CMD_TURN_RIGHT + str(angle))
        except Exception as e:
            ScratchServer.lastError = "Error: " + e
            print(ScratchServer.lastError)
            return ScratchServer.lastError

        ScratchServer.msg = "Turned Right to " + str(angle)
        print(ScratchServer.msg)
        return ScratchServer.msg

    def setMoveSpeed(self, CMD, spd):
        self.tcp.sendData(CMD + str(float(spd) / 3))
        time.sleep(0.07)
        self.tcp.sendData(CMD + str(float(spd) / 3 * 2))
        time.sleep(0.07)
        self.tcp.sendData(CMD + str(spd))
Ejemplo n.º 32
0
    def run(self):
        SOCK_CLOSE_STATE = 1
        SOCK_OPENTRY_STATE = 2
        SOCK_OPEN_STATE = 3
        SOCK_CONNECTTRY_STATE = 4
        SOCK_CONNECT_STATE = 5

        idle_state = 1
        datasent_state = 2

        sys.stdout.write('thread for %r ' % self.serverip)
        sys.stdout.write('is starting\r\n')

        # TCPClient instance creation

        client = TCPClient(2, self.serverip, self.serverport)
        filename = self.serverip + '_log.txt'

        #print(filename)
        IsTimeout = 0

        self.f = open(filename, 'w+')

        while True:
            if client.state is SOCK_CLOSE_STATE:
                cur_state = client.state
                client.state = client.open()
                if client.state != cur_state:
                    sys.stdout.write('client.state is %r\r\n' % client.state)
                time.sleep(1)

            elif client.state is SOCK_OPEN_STATE:
                cur_state = client.state
                client.state = client.connect()
                if client.state != cur_state:
                    sys.stdout.write('client.state is %r\r\n' % client.state)
                time.sleep(1)

            elif client.state is SOCK_CONNECT_STATE:
                if client.working_state == idle_state:
                    try:
                        client.write(msg)
                        client.working_state = datasent_state
                        self.istimeout = 0
                        self.totaltrycount += 1

                        self.timer1 = threading.Timer(5.0, self.myTimer)
                        self.timer1.start()
                    except Exception as e:
                        sys.stdout.write('%r\r\n' % e)
                elif client.working_state == datasent_state:
                    response = client.readline()
                    if (response != ""):
                        sys.stdout.write(response)
                        sys.stdout.write('\n')
                        sys.stdout.flush()
                        self.timer1.cancel()
                        self.istimeout = 0

                        if (msg in response):
                            logstr = '[' + self.serverip + ']' + strftime(
                                "%d %b %Y %H:%M:%S",
                                localtime()) + ': success\r\n'
                            sys.stdout.write(logstr)
                            self.successcount += 1
                            time.sleep(10)
                            client.working_state = idle_state
                        else:
                            logstr = '[' + self.serverip + ']' + strftime(
                                "%d %b %Y %H:%M:%S",
                                localtime()) + ': fail by broken data\r\n'
                            sys.stdout.write(logstr)
                            self.failcount += 1
                            self.f.write(logstr)
                            self.f.write("\r\n")
                            time.sleep(10)
                            client.working_state = idle_state

                    if self.istimeout is 1:
                        self.timer1.cancel()
                        self.istimeout = 0
                        logstr = '[' + self.serverip + ']' + strftime(
                            "%d %b %Y %H:%M:%S",
                            localtime()) + ': fail by timeout\r\n'
                        sys.stdout.write(logstr)
                        self.failcount += 1
                        self.f.write(logstr)
                        self.f.write("\r\n")
                        time.sleep(5)
                        client.working_state = idle_state

                    response = ""
class comthread(threading.Thread):
    def __init__(self, id, dst_ip):
        threading.Thread.__init__(self)
        self.exitflag = False
        self.bank = 0
        self.id = id
        self.alive = True
        self.command = idle_msg
        self.dst_ip = dst_ip
        self.outputs = []
        self.is_request = False
        self.is_start = False
        self.timer1 = None

        if (id % 4) is 0:
            self.dst_port = 5001
            self.power_port = 0
            self.switch_port = 4
            self.redled_port = 8
            self.blueled_port = 9
        elif (id % 4) is 1:
            self.dst_port = 5002
            self.power_port = 1
            self.switch_port = 5
            self.redled_port = 10
            self.blueled_port = 11
        elif (id % 4) is 2:
            self.dst_port = 5003
            self.power_port = 3
            self.switch_port = 7
            self.redled_port = 14
            self.blueled_port = 15
        elif (id % 4) is 3:
            self.dst_port = 5004
            self.power_port = 2
            self.switch_port = 6
            self.redled_port = 12
            self.blueled_port = 13

        lastnumindex = dst_ip.rfind('.')
        lastnum = int(dst_ip[lastnumindex + 1:len(dst_ip)])

        self.module_ip = dst_ip[:lastnumindex + 1] + str(lastnum + id +
                                                         1) + "\r"
        # sys.stdout.write('module ip: %r\n' % self.module_ip)
        self.client = TCPClient(2, self.dst_ip, self.dst_port)

    def stop(self):
        sys.stdout.write('[ComThread %r] ' % self.id)
        sys.stdout.write('is shutdowning\r\n')
        if self.client is not None:
            self.client.close()

        if self.timer1 is not None:
            self.timer1.cancel()
        self.alive = False

    def run(self):
        sys.stdout.write('[ComThread %r] Hello\r\n' % self.id)
        #		self.client.open()

        while self.alive:
            if self.client.state is SOCK_CLOSE_STATE:
                cur_state = self.client.state
                self.client.state = self.client.open()
#				if self.client.state != cur_state:
#					print(self.client.state)

            elif self.client.state is SOCK_OPEN_STATE:
                cur_state = self.client.state
                self.client.state = self.client.connect()
#				if self.client.state != cur_state:
#					print(self.client.state)

            elif self.client.state is SOCK_CONNECT_STATE:
                if self.client.working_state == idle_state:
                    try:
                        self.outputs.insert(
                            0, [self.power_port, POWER_OFF, 'POWER OFF'])
                        #						sys.stdout.write('>')
                        time.sleep(0.1)
                        # check input switch value
                        self.client.working_state = check_sw_1_state
                        # logger.debug("Waiting SW%r input\r\n" % (switch_port -4))
                    except:
                        time.sleep(1)

                elif self.client.working_state == check_sw_1_state:
                    if (self.command == keypressed_msg):
                        sys.stdout.write(
                            '[ComThread %r] got key pressed message\r\n' %
                            self.id)
                        self.command = idle_msg
                        self.client.working_state = check_sw_2_state

                elif self.client.working_state == check_sw_2_state:
                    if (self.command == keyreleased_msg):
                        sys.stdout.write(
                            '[ComThread %r] got keyreleased message\r\n' %
                            self.id)
                        self.command = idle_msg
                        self.client.working_state = ready_state

                elif self.client.working_state == ready_state:
                    try:
                        self.outputs.insert(
                            0, [self.redled_port, LED_OFF, 'RED LED OFF'])
                        self.outputs.insert(
                            0, [self.blueled_port, LED_OFF, 'BLUE LED OFF'])
                        self.outputs.insert(
                            0, [self.power_port, POWER_ON, 'POWER ON'])
                        self.outputs.insert(
                            0, [self.redled_port, LED_ON, 'RED LED ON'])
                        self.outputs.insert(
                            0, [self.redled_port, LED_OFF, 'RED LED OFF'])

                        self.client.working_state = gout_1_state
                        sys.stdout.write('timer1 start\r\n')
                        self.timer1 = threading.Timer(10.0, timeoutfunc)
                        IsTimeout = 0
                        self.timer1.start()
                    except Exception as e:
                        sys.stdout.write('%r\r\n' % e)
                        sys.stdout.write('timer1 stop\r\n')
                        self.timer1.cancel()
                        time.sleep(1)

                elif self.client.working_state == gout_1_state:
                    if (len(self.outputs) == 0):
                        self.client.working_state = init_state
                        sys.stdout.write('\r\ninit_state\r\n')
                    else:
                        time.sleep(0.5)

                    if IsTimeout is 1:
                        # self.timer1.cancel()
                        self.client.outputs.remove()
                        self.client.working_state = idle_state

                elif self.client.working_state == init_state:
                    response = self.client.readline()
                    # logger.debug("[init_state] [%r] %r" % (len(response), response))
                    if (response != ""):
                        sys.stdout.write(response)
                        # sys.stdout.flush()
                        if ("9: Load Boot Loader code then write to Flash via TFTP."
                                in response):
                            self.client.write("2")
                            # print 'timer1 stop'
                            self.timer1.cancel()
                            self.client.working_state = menuselect_state

                            sys.stdout.write('\r\nmenuselect_state\r\n')
                            self.timer1 = threading.Timer(3.0, timeoutfunc)
                            IsTimeout = 0
                            self.timer1.start()
                    response = ""

                    if IsTimeout is 1:
                        sys.stdout.write("init_state timeout")
                        self.timer1.cancel()
                        self.client.working_state = fail_state
                        sys.stdout.write('\r\nfail_state\r\n')

                elif self.client.working_state == menuselect_state:
                    response = self.client.readline()
                    if (response != ""):
                        sys.stdout.write(response)
                        # sys.stdout.flush()
                        if ("Warning!! Erase Linux in Flash then burn new one. Are you sure?(Y/N)"
                                in response):
                            self.client.write("Y")

                            self.timer1.cancel()
                            self.client.working_state = flasherase_state
                            # sys.stdout.write('\r\nflasherase_state\r\n')

                            self.timer1 = threading.Timer(3.0, timeoutfunc)
                            IsTimeout = 0
                            self.timer1.start()
                        elif ("3: System Boot system code via Flash"
                              in response):
                            self.timer1.cancel()
                            self.client.working_state = fail_state
                            sys.stdout.write('\r\nfail_state\r\n')

                            self.timer1 = threading.Timer(3.0, timeoutfunc)
                            IsTimeout = 0
                            self.timer1.start()

                    response = ""

                    if IsTimeout is 1:
                        sys.stdout.write("menuselect_state timeout")
                        self.timer1.cancel()
                        self.client.working_state = fail_state
                        sys.stdout.write('\r\nfail_state\r\n')

                elif self.client.working_state == flasherase_state:
                    response = self.client.readline()
                    if (response != ""):
                        sys.stdout.write(response)
                        # sys.stdout.flush()
                        if ("Input device IP (10.10.10.123)" in response):
                            for i in range(12):
                                self.client.write("\b \b")
                                time.sleep(0.1)
                            self.timer1.cancel()
                            self.client.working_state = localIP_state
                            # sys.stdout.write('\r\nlocalIP_state\r\n')
                            self.timer1 = threading.Timer(3.0, timeoutfunc)
                            IsTimeout = 0
                            self.timer1.start()
                        response = ""

                    if IsTimeout is 1:
                        sys.stdout.write("flasherase_state timeout")
                        self.timer1.cancel()
                        self.client.working_state = fail_state
                        sys.stdout.write('\r\nfail_state\r\n')

                elif self.client.working_state == localIP_state:

                    response = self.client.readline()
                    if (response != ""):
                        sys.stdout.write(response)
                        # sys.stdout.flush()
                        response = ""
                        self.timer1.cancel()
                        self.client.write(self.module_ip)
                        self.client.working_state = localIP2_state
                        # sys.stdout.write('\r\nlocalIP2_state\r\n')

                        self.timer1 = threading.Timer(3.0, timeoutfunc)
                        IsTimeout = 0
                        self.timer1.start()
                        response = ""

                    if IsTimeout is 1:
                        sys.stdout.write("localIP_state timeout")
                        self.timer1.cancel()
                        self.client.working_state = fail_state
                        sys.stdout.write('\r\nfail_state\r\n')

                elif self.client.working_state == localIP2_state:

                    response = self.client.readline()
                    if (response != ""):
                        sys.stdout.write(response)
                        # sys.stdout.flush()

                        self.timer1.cancel()
                        self.client.working_state = localIPDone_state
                        # sys.stdout.write('\r\nlocalIPDone_state\r\n')
                        self.timer1 = threading.Timer(3.0, timeoutfunc)
                        IsTimeout = 0
                        self.timer1.start()

                        response = ""

                    if IsTimeout is 1:
                        sys.stdout.write("localIP2_state timeout")
                        self.timer1.cancel()
                        self.client.working_state = fail_state
                        sys.stdout.write('\r\nfail_state\r\n')

                elif self.client.working_state == localIPDone_state:
                    response = self.client.readline()
                    if (response != ""):
                        sys.stdout.write(response)
                        # sys.stdout.flush()
                        if ("Input server IP (10.10.10.3)" in response):
                            for i in range(10):
                                self.client.write("\b \b")
                                time.sleep(0.1)

                            self.timer1.cancel()
                            self.client.working_state = serverIP_state
                            # sys.stdout.write('\r\nserverIP_state\r\n')
                            self.timer1 = threading.Timer(3.0, timeoutfunc)
                            IsTimeout = 0
                            self.timer1.start()

                        response = ""

                    if IsTimeout is 1:
                        sys.stdout.write("localIPDone_state timeout")
                        self.timer1.cancel()
                        self.client.working_state = fail_state
                        sys.stdout.write('\r\nfail_state\r\n')

                elif self.client.working_state == serverIP_state:

                    response = self.client.readline()
                    if (response != ""):
                        sys.stdout.write(response)
                        # sys.stdout.flush()

                        self.client.write("192.168.10.212\r")
                        # self.client.write("192.168.10.235\r")
                        self.timer1.cancel()
                        self.client.working_state = serverIP2_state
                        # sys.stdout.write('\r\nserverIP2_state\r\n')
                        self.timer1 = threading.Timer(3.0, timeoutfunc)
                        IsTimeout = 0
                        self.timer1.start()
                        response = ""

                    if IsTimeout is 1:
                        sys.stdout.write("serverIP_state timeout")
                        self.timer1.cancel()
                        self.client.working_state = fail_state
                        sys.stdout.write('\r\nfail_state\r\n')

                elif self.client.working_state == serverIP2_state:

                    response = self.client.readline()

                    if (response != ""):
                        sys.stdout.write(response)
                        # sys.stdout.flush()
                        self.timer1.cancel()
                        self.client.working_state = checkOrder_state
                        sys.stdout.write('\r\ncheckOrder_state\r\n')
                        self.timer1 = threading.Timer(30.0, timeoutfunc)
                        IsTimeout = 0
                        self.timer1.start()

                        response = ""

                    if IsTimeout is 1:
                        sys.stdout.write("serverIP2_state timeout")
                        self.timer1.cancel()
                        self.client.working_state = fail_state
                        # sys.stdout.write('\r\nfail_state\r\n')

                elif self.client.working_state == checkOrder_state:
                    if self.is_request is False:
                        self.is_request = True
                    else:
                        if self.is_start is True:
                            self.timer1.cancel()
                            self.client.working_state = serverIPDone_state
                            # sys.stdout.write('\r\nserverIPDone_state\r\n')

                    if IsTimeout is 1:
                        sys.stdout.write("checkOrder_state timeout")
                        self.timer1.cancel()
                        self.client.working_state = fail_state
                        self.is_request = False
                        sys.stdout.write('\r\nfail_state\r\n')

                elif self.client.working_state == serverIPDone_state:
                    response = self.client.readline()
                    if (response != ""):
                        sys.stdout.write(response)
                        # sys.stdout.flush()
                        if ("Input Linux Kernel filename ()" in response):
                            self.client.write("std.bin\r")
                            self.client.working_state = filename_state
                            # sys.stdout.write('\r\nfilename_state\r\n')

                        response = ""

                elif self.client.working_state == filename_state:
                    response = self.client.readline()
                    if (response != ""):
                        sys.stdout.write(response)
                        # sys.stdout.flush()
                        # self.timer1.cancel()
                        self.client.working_state = filenameDone_state
                        # sys.stdout.write('\r\nfilenameDone_state\r\n')
                        # self.timer1 = threading.Timer(30.0, timeoutfunc)
                        # IsTimeout = 0
                        # self.timer1.start()
                    response = ""

                    # if IsTimeout is 1:
                    # 	sys.stdout.write("filename_state timeout")
                    # 	self.timer1.cancel()
                    # 	self.client.working_state = fail_state
                    # 	sys.stdout.write('\r\nfail_state\r\n')

                elif self.client.working_state == filenameDone_state:
                    ch = self.client.read()
                    if (ch != ''):
                        self.client.str_list.append(ch)
                        sys.stdout.write("%c" % ch)
                        # sys.stdout.flush()

                        if (ch == '\r'):
                            response = ''.join(self.client.str_list)
                            # sys.stdout.write('[%r-%r]' % (self.bank, self.id))
                            del self.client.str_list[:]
                            if ("done" in response):
                                # self.timer1.cancel()
                                self.client.working_state = tftpDone_state
                                # sys.stdout.write('\r\ntftpDone_state\r\n')
                                self.is_request = False
                                self.is_start = False
                                # self.timer1 = threading.Timer(30.0, timeoutfunc)
                                # IsTimeout = 0
                                # self.timer1.start()
                            elif ("Retry count exceeded; starting again"
                                  in response):
                                self.client.retrycount += 1
                                # logger.debug("retrycount: %r\r\n" % self.client.retrycount)
                                if (self.client.retrycount >= 10):
                                    self.client.retrycount = 0
                                    self.client.working_state = fail_state
                                    sys.stdout.write('\r\nfail_state\r\n')

                            response = ""
                    # if IsTimeout is 1:
                    # 	sys.stdout.write("filenameDone_state timeout")
                    # 	self.timer1.cancel()
                    # 	self.client.working_state = fail_state
                    # 	sys.stdout.write('\r\nfail_state\r\n')

                elif self.client.working_state == tftpDone_state:
                    ch = self.client.read()
                    if (ch != ''):
                        self.client.str_list.append(ch)
                        # if(ch is '#'):
                        # 	sys.stdout.write("%c" % ch)
                        # 	sys.stdout.flush()

                        if (ch == '\r'):
                            response = ''.join(self.client.str_list)
                            # sys.stdout.write(response)
                            sys.stdout.write('%r' % self.id)
                            del self.client.str_list[:]
                            if ("Verifying Checksum ... Bad Data CRC"
                                    in response):
                                # self.timer1.cancel()
                                sys.stdout.write(
                                    'Flashing Failed. Bad CRC\r\n')
                                self.client.write("\r\n\r\n")
                                self.client.working_state = fail_state
                                sys.stdout.write('\r\fail_state\r\n')
                                # self.is_start = False
                                # self.is_request = False
                                # self.timer1 = threading.Timer(10.0, timeoutfunc)
                                # IsTimeout = 0
                                # self.timer1.start()
                            elif ("Verifying Checksum ... OK" in response):
                                self.client.working_state = flashVerified_state
                                sys.stdout.write('\r\nflashverified_state\r\n')

                            response = ""

                elif self.client.working_state == flashVerified_state:
                    ch = self.client.read()
                    if (ch != ''):
                        self.client.str_list.append(ch)
                        # if(ch is '#'):
                        # 	sys.stdout.write("%c" % ch)
                        # 	sys.stdout.flush()

                        if (ch == '\r'):
                            response = ''.join(self.client.str_list)
                            # sys.stdout.write(response)
                            sys.stdout.write('%r' % self.id)
                            del self.client.str_list[:]
                            if ("Please press Enter to activate this console."
                                    in response):
                                # self.timer1.cancel()
                                sys.stdout.write('enter CRLF \r\n')
                                self.client.write("\r\n\r\n")
                                self.client.working_state = done_state
                                sys.stdout.write('\r\done_state\r\n')
                                # self.is_start = False
                                # self.is_request = False
                                # self.timer1 = threading.Timer(10.0, timeoutfunc)
                                # IsTimeout = 0
                                # self.timer1.start()
                            elif ("failsafe button BTN_1 was pressed"
                                  in response):
                                self.client.working_state = done_state
                                sys.stdout.write('\r\ndone_state\r\n')

                            response = ""

                elif self.client.working_state == done_state:
                    response = self.client.readline()
                    if (response != ""):
                        sys.stdout.write(response)
                        if ("root@" in response):  #Standard
                            # if ("IPS-231-0000 login:"******"\r\n")
                            sys.stdout.flush()
                            self.client.write("\r")
                            sys.stdout.write(
                                "===============================================\n"
                            )
                            sys.stdout.write(
                                " Bank %r, ID %r Firmware Update Succeeded!!!\n"
                                % (self.bank, self.id))
                            sys.stdout.write(
                                "===============================================\n"
                            )
                            sys.stdout.flush()
                            # BLUELED ON (HIGH)

                            # self.timer1.cancel()
                            self.outputs.insert(
                                0, [self.blueled_port, LED_ON, 'BLUE LED ON'])
                            self.outputs.insert(
                                0, [self.power_port, POWER_OFF, 'POWER OFF'])

                            self.client.working_state = gout_2_state
                            sys.stdout.write('\r\ngout_2_state\r\n')
                        elif ("Please press Enter to activate this console."
                              in response):
                            self.client.write("\r\n\r\n")
                        else:
                            self.client.write("\r\n")

                        response = ""

                    # if IsTimeout is 1:
                    # 	sys.stdout.write("done_state timeout")
                    # 	self.timer1.cancel()
                    # 	self.client.working_state = fail_state
                    # 	sys.stdout.write('\r\nfail_state\r\n')

                elif self.client.working_state == fail_state:
                    self.outputs.insert(
                        0, [self.redled_port, LED_ON, 'RED LED ON'])
                    self.outputs.insert(
                        0, [self.power_port, POWER_OFF, 'POWER OFF'])
                    self.client.working_state = gout_2_state
                    sys.stdout.write('\r\ngout_2_state\r\n')

                elif self.client.working_state == gout_2_state:
                    if (len(self.outputs) == 0):
                        logger.debug(
                            "You can remove a module on bank%r now\r\n" %
                            self.id)
                        self.client.working_state = idle_state
                        sys.stdout.write('\r\nidle_state\r\n')

        sys.stdout.write('[ComThread %r] Bye! \r\n' % self.id)
        self.client.close()
Ejemplo n.º 34
0
        #size = os.path.getsize(imgname)
        print '[ImageSource] Sending name:"%s" and size:"%s"' % (imgname,str(size))

        # ********************************************************
        #Initialize UDP socket
        udpClient = UDPClient(BUFFER_SIZE)
        # ********************************************************
        #Send Image Information via UDP packet in the format "IMAGE_NAME,IMAGE_SIZE"   
        udpClient.sendUDPmsg(imgname+','+str(size), RPI_IP, UDP_PORT)
        #Assert that message with Image Name and Image Size was received
        ret = udpClient.receiveUDPmsg(delay)
        print "[ImageSource] Mensagem recebida do MidiSource" , ret
        # ********************************************************
        #Connect to RPI TCP server
        if(ret=="OK"):
            tcpClient = TCPClient(RPI_IP,TCP_PORT,BUFFER_SIZE)
            tcpClient.connectTCP()
            print '[ImageSource] TCP Client ready to send the image'
            #tcpClient.sendFileByNameAndClose(imgname)
            # ********************************************************
            #Send Image
            tcpClient.sendDataBySize(img.read(), size)
            # ********************************************************
            #Close TCP socket
            tcpClient.closeTCPclient()
            print '[ImageSource] TCPClient closed'
            
#**************************MIDI PART******************************************            
            # ********************************************************
            #Wait for UDP Packet Flag saying MIDI is ready to be sent
            ret = udpClient.receiveUDPmsg(delay)
class ScratchServer(BaseHTTPRequestHandler):
    tcp = TCPClient()
    Camera_H_Pos = 90
    Camera_V_Pos = 90
    SERVO_MIN_ANGLE = 0
    SERVO_MAX_ANGLE = 180
    Is_Paint_Thread_On = False
    global t_Paint_Thread
    sonic_Index = 0
    sonic_buff = [0]*20
    send_Counter = 0
    Is_tcp_Idle = True

    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(self.parsePath(self.path))

    def parsePath(self, path):
        pathParts = path.split('/')
        if len(pathParts) < 2:
            ScratchServer.lastError = "ERROR: No Command detected"
            return ScratchServer.lastError

        cmd = pathParts[1]

        if cmd == "favicon.ico": return
        
        if (cmd != "poll" and cmd != "lastError"): ScratchServer.lastError = ""

        if cmd == "crossdomain.xml":
            return self.getXDomainResponse()
        elif cmd == "connect":
            server_ip = pathParts[2]
            return self.connect2Car(server_ip)
        elif cmd == "disconnect":
            return self.disconnectFromCar()
        elif cmd == "cUp":
            return self.cameraUp(pathParts[2])
        elif cmd == "cDown":
            return self.cameraDown(pathParts[2])
        elif cmd == "cLeft":
            return self.cameraLeft(pathParts[2])
        elif cmd == "cRight":
            return self.cameraRight(pathParts[2])
        elif cmd == "centerCamera":
            return self.centerCamera()
        elif cmd == "moveForward":
            return self.moveForward(pathParts[2])
        elif cmd == "moveBackward":
            return self.moveBackward(pathParts[2])
        elif cmd == "stop":
            return self.stop()
        elif cmd == "stepForward":
            return self.stepForward(pathParts[2], pathParts[3])
        elif cmd == "stepBackward":
            return self.stepBackward(pathParts[2], pathParts[3])
        elif cmd == "turnLeft":
            return self.turnLeft(pathParts[2])
        elif cmd == "turnRight":
            return self.turnRight(pathParts[2])
        elif cmd == "center":
            return self.center();
        elif cmd == "lightRed":
            return self.lightRed()
        elif cmd == "lightGreen":
            return self.lightGreen()
        elif cmd == "lightBlue":
            return self.lightBlue()
        elif cmd == "buzz":
            return self.buzz(pathParts[2])
        elif cmd == "distance":
            return self.distance()
        elif cmd == "lastError":
            return self.getLastError()
        elif cmd == "lastMessage":
            return self.lastMessage()
        elif cmd == "poll":
            return self.poll()
        elif cmd == "reset_all":
            return self.resetAll()

        ScratchServer.lastError = "ERROR: '" + pathParts[1] + "' is not a valid command"
        return ScratchServer.lastError

    def lastMessage(self):
        print ScratchServer.msg
        return ScratchServer.msg

    def getLastError(self):
        print ScratchServer.lastError
        return ScratchServer.lastError

    def getXDomainResponse(self):
        resp = "<cross-domain-policy>\n"
        resp += "<allow-access-from domain=\"*\" to-ports=\"8085\"/>\n"
        resp += "</cross-domain-policy>\x00"
        return resp

    def poll(self):
        ScratchServer.msg = "sonic " + str(ScratchServer.iSonic)
        if ScratchServer.lastError != "": ScratchServer.msg += "\nERROR: " + ScratchServer.lastError
        print ScratchServer.msg
        return ScratchServer.msg

    
    def centerCamera(self):
        try:
            ScratchServer.Camera_V_Pos = 90
            ScratchServer.Camera_H_Pos = 90
            self.tcp.sendData(cmd.CMD_CAMERA_UP + str(ScratchServer.Camera_V_Pos))
            self.tcp.sendData(cmd.CMD_CAMERA_LEFT + str(ScratchServer.Camera_H_Pos))
        except Exception, e:
            ScratchServer.lastError = "Error: " + e.message
            print ScratchServer.lastError
            return ScratchServer.lastError

        return ""
 def startClient(self):
     self.client = TCPClient('localhost', self.serverPort)
     return self.client.connect(2)
Ejemplo n.º 37
0
class LayerPhy(object):
    '''
    classdocs
    '''


    def __init__(self, upperLayerCallbackFunction, masterHost='127.0.0.1', baseport=10000):
        '''
        Constructor
        '''
        self.__masterHost=masterHost
        self.__controlPort=baseport-1
        
        self.__interfaceSendPort=[0, 0]
        self.__interfaceRecvPort=[0, 0]
        
        self.__incomingTcpServer=[None, None]
        self.__outgoingTcpClient=[None, None]
            
        self.__callLinkLayer=upperLayerCallbackFunction
        
        self.__debugOut=DebugOut()
        self.__openControl_connection();
        self.API_enter()
        
    def API_enter(self):
        self.__debugOut.out("Sending ENTER")
        self.controlTcpClient.send("ENTER\n");
        
    def API_leave(self):
        self.__debugOut.out("Sending ENTER")
        self.controlTcpClient.send("LEAVE\n");

    def API_sendData(self, interfaceNumber=0, data=""):
        if self.__outgoingTcpClient[interfaceNumber] is not None:
            self.__debugOut.out("PHY - PhysicalLayer, Interface %d, sending %s" % (interfaceNumber, data))
            self.__outgoingTcpClient[interfaceNumber].send(data)  

    def __listenControl_connection(self, tcpClient, __connection, clientAddr, data):
        while data:
            (line, separator, data)=data.partition("\n")

            self.__debugOut.out("PHY %s - __listenControl_connection - received %s" % (clientAddr,line))
            (command, separator, line)=line.partition(",")
            if command == "ADDINTERFACE":
                (interfacenumber, separator, line)=line.partition(",")
                (listenport, separator, line)=line.partition(",")
                self.__addInterface(int(interfacenumber), int(listenport))
                self.__debugOut.out("PHY %s done __addInterface" % (clientAddr,))
            elif command == "DELINTERFACE":
                (interfacenumber, separator, line)=line.partition(",")
                self.__delInterface(int(interfacenumber))
            elif command == "CONNECT":
                (interfacenumber, separator, line)=line.partition(",")
                (ipAddress, separator, line)=line.partition(",")
                (listenport, separator, line)=line.partition(",")
                self.__connect(int(interfacenumber), ipAddress, int(listenport))
            elif command == "DISCONNECT":
                (interfacenumber, separator, line)=line.partition(",")
                self.__disconnect(int(interfacenumber))
            else:
                self.__debugOut.out("PHY %s - listenControl_connection - Received unknown command %s." % (clientAddr,command))      
            
            
    def __openControl_connection(self):
        self.controlTcpClient= TCPClient(self.__masterHost, self.__controlPort, self.__listenControl_connection)
        
    def __incomingData_connectionInterface0(self, tcpServer, __connection, clientAddr, data):
        self.__debugOut.out("PHY %s - ListenData_connection on interface 0 received %s" % (clientAddr,data))
        self.__callLinkLayer(0,data)
            
    def __incomingData_connectionInterface1(self, tcpServer, __connection, clientAddr, data):
        self.__debugOut.out("PHY %s - ListenData_connection on interface 1 received %s" % (clientAddr,data))
        self.__callLinkLayer(1,data)

    def __sendControl(self,data):
        self.controlTcpClient.send(data)
            
    def __addInterface(self, interfaceNumber=0, listenport=0):
        self.__debugOut.out("PHY - Adding interface number %d with listenport %d" % (interfaceNumber, listenport))
        
        if self.__incomingTcpServer[interfaceNumber] is None:
            self.__interfaceRecvPort[interfaceNumber]=listenport
            if interfaceNumber==0:
                self.__incomingTcpServer[0]=TCPServer('127.0.0.1',self.__interfaceRecvPort[0],self.__incomingData_connectionInterface0)
            else:
                self.__incomingTcpServer[1]=TCPServer('127.0.0.1',self.__interfaceRecvPort[1],self.__incomingData_connectionInterface1)
            self.__debugOut.out('PHY - Tried to add interface, isServing is : %d' % self.__incomingTcpServer[interfaceNumber].isServing())
            if self.__incomingTcpServer[interfaceNumber].isServing():
                self.__sendControl("STATUS,ACK\n")
            else:
                self.__sendControl("STATUS,NACK,Interface open failed\n")
                self.__incomingTcpServer[interfaceNumber]=None
        else:
            self.__sendControl("STATUS,NACK,Interface is already __connected\n")
    
    def __delInterface(self, interfaceNumber):
        self.__debugOut.out("Removing interface number %d with listenport %d" % (interfaceNumber, self.__interfaceRecvPort[interfaceNumber]))
        if self.__incomingTcpServer[interfaceNumber] is None:
            self.__sendControl("STATUS,NACK,Interface is not active\n")
        else:
            self.__incomingTcpServer[interfaceNumber].stopServer()
            self.__incomingTcpServer[interfaceNumber]=None
            self.__sendControl("STATUS,ACK\n")
        
    def __connect(self, interfaceNumber=0, ipAddress="127.0.0.1",sendport=0):
        self.__debugOut.out("PHY - __connecting interface %d to ip %s port %d" % (interfaceNumber, ipAddress, sendport))
        if self.__outgoingTcpClient[interfaceNumber] is None:
            self.__interfaceSendPort[interfaceNumber]=sendport
            self.__outgoingTcpClient[interfaceNumber]=TCPClient(ipAddress,self.__interfaceSendPort[interfaceNumber],None)
            if self.__outgoingTcpClient[interfaceNumber].isConnected():
                self.__sendControl("STATUS,ACK\n")
            else:
                self.__sendControl("STATUS,NACK,Interface open failed\n")
        else:
            self.__sendControl("STATUS,NACK,Interface is already __connected\n")
    
        
    def __disconnect(self, interfaceNumber=0):
        self.__debugOut.out("PHY - disconnecting interface %d from port %d" % (interfaceNumber, self.__interfaceSendPort[interfaceNumber]))
        if self.__outgoingTcpClient[interfaceNumber] is None:
            self.__sendControl("STATUS,NACK,Interface is not __connected\n")
        else:
            self.__outgoingTcpClient[interfaceNumber].stopClient()
            self.__outgoingTcpClient[interfaceNumber]=None 
            self.__sendControl("STATUS,ACK\n")
Ejemplo n.º 38
0
class WindowGUI(object):
    def __init__(self, width, height, svr_addr, svr_port, host_addr,
                 host_port):  # {{{
        """ """
        self.lan = 'cn'
        self.tcp = TCPClient(4096)
        self.log = dict()

        # window
        self.width = width
        self.height = height
        self.win = tk.Tk()
        self.win.protocol('WM_DELETE_WINDOW', self.onCloseWindow)
        self.win.resizable(width=True, height=False)
        self.screenwidth = self.win.winfo_screenwidth()
        self.screenheight = self.win.winfo_screenheight()

        # homebrain address / port
        self.server_addr = tk.StringVar()
        self.server_port = tk.StringVar()
        self.server_addr.set(svr_addr)
        self.server_port.set(svr_port)

        # host address / port
        self.host_addr = tk.StringVar()
        self.host_port = tk.StringVar()
        self.host_addr.set(host_addr)
        self.host_port.set(host_port)

        self.filter_key = tk.StringVar()
        self.rule_newn_var = tk.StringVar()
        self.rule_switch_var = tk.StringVar()
        self.rule_btm_sw = 0

        self.onGlobalConfigure()
        self.createConnectView()
        self.win.mainloop()
# }}}

    def onGlobalConfigure(self):  # {{{
        self.win.title(gStrings['title'][self.lan])
        style = ttk.Style()
        style.theme_create('monitor',
                           parent="alt",
                           settings=gStyles['monitor'])
        style.theme_use('monitor')
        #  data = {}
        #  for e in style.element_names():
        #      data[e] = style.element_options(e)
        #  print(data)
# }}}

    def onInitWindow(self):  # {{{
        # set window place and size
        alignstr = '%dx%d+%d+%d' % (self.width, self.height,
                                    (self.screenwidth - self.width) / 2,
                                    (self.screenheight - self.height) / 2)
        self.win.geometry(alignstr)

        # set menu
        self.menu_bar = tk.Menu(self.win)
        menu_set = tk.Menu(self.menu_bar)
        menu_set.add_command(label=gStrings['lanSwitch'][self.lan],
                             command=self.onSwitchLang)
        self.menu_bar.add_cascade(label=gStrings['set'][self.lan],
                                  menu=menu_set)

        self.menu_bar.add_command(label=gStrings['quit'][self.lan],
                                  command=self.onCloseWindow)

        self.menu_bar.add_command(label=gStrings['about'][self.lan],
                                  state=tk.DISABLED,
                                  command=self.oShowAbout)
        self.win.config(menu=self.menu_bar)

        # set tabpage
        self.tabControl = ttk.Notebook(self.win)
        self.bi_tab = ttk.Frame(self.tabControl)
        self.tabControl.add(self.bi_tab, text=gStrings['basicInfo'][self.lan])
        self.log_tab = ttk.Frame(self.tabControl)
        self.tabControl.add(self.log_tab, text=gStrings['logSet'][self.lan])
        self.dev_tab = ttk.Frame(self.tabControl)
        self.tabControl.add(self.dev_tab, text=gStrings['ruleCtrl'][self.lan])
        self.scene_tab = ttk.Frame(self.tabControl)
        self.tabControl.add(self.scene_tab,
                            text=gStrings['sceneAuto'][self.lan])
        self.tabControl.pack(expand=1, fill=tk.BOTH)

        self.createBasicInfoView(self.bi_tab)
        self.createLogSetView(self.log_tab)
        self.createRuleControlView(self.dev_tab)
        self.createSceneAutoView(self.scene_tab)
# }}}

    def onSwitchLang(self):  # {{{
        if self.lan == 'en':
            self.lan = 'cn'
        else:
            self.lan = 'en'
        self.menu_bar.destroy()
        self.tabControl.destroy()
        self.onInitWindow()
# }}}

    def oShowAbout(self):  # {{{
        pass  # }}}}}}

    def onCloseWindow(self):  # {{{
        try:
            if self.logthread:
                self.onLogTerminate()
        except Exception:
            pass
        self.tcp.close()
        self.win.destroy()
# }}}

    def onConnect(self):  # {{{
        addr = self.server_addr.get()
        port = self.server_port.get()
        if self.tcp.connect(addr, int(port)):
            self.conn_frm.destroy()
            self.onInitWindow()
        else:
            self.conn_frm.destroy()
            self.onConnectError()
# }}}

    def onBack(self, destoryFrm, showFunc):  # {{{
        destoryFrm.destroy()
        showFunc()
# }}}

    def createConnectView(self):  # {{{
        width = 360
        height = 200
        alignstr = '%dx%d+%d+%d' % (width, height,
                                    (self.screenwidth - width) / 2,
                                    (self.screenheight - height) / 2)
        self.win.geometry(alignstr)
        self.conn_frm = ttk.Frame(self.win,
                                  padding=20,
                                  width=width,
                                  height=height)
        ttk.Label(
            self.conn_frm,
            text=gStrings['serverAddr'][self.lan],
        ).grid(row=1, sticky=tk.E, padx=10, pady=10)
        ttk.Entry(
            self.conn_frm,
            textvariable=self.server_addr,
        ).grid(row=1, column=1, sticky=tk.W, padx=10, pady=10)
        ttk.Label(
            self.conn_frm,
            text=gStrings['serverPort'][self.lan],
        ).grid(row=2, sticky=tk.E, padx=10, pady=10)
        ttk.Entry(
            self.conn_frm,
            textvariable=self.server_port,
        ).grid(row=2, column=1, sticky=tk.W, padx=10, pady=10)
        ttk.Button(
            self.conn_frm,
            text=gStrings['connect'][self.lan],
            command=self.onConnect,
        ).grid(row=3, column=1, columnspan=2, sticky=tk.E, padx=12)
        self.conn_frm.pack(side=tk.BOTTOM, anchor=tk.CENTER)
# }}}

    def onConnectError(self):  # {{{
        width = 360
        height = 150
        alignstr = '%dx%d+%d+%d' % (width, height,
                                    (self.screenwidth - width) / 2,
                                    (self.screenheight - height) / 2)
        self.win.geometry(alignstr)
        self.connerr_frm = ttk.Frame(self.win,
                                     padding=20,
                                     width=width,
                                     height=height)
        ttk.Label(
            self.connerr_frm,
            text=gStrings['connErr'][self.lan],
        ).grid(row=0, sticky=tk.NS, padx=10, pady=10)
        ttk.Button(self.connerr_frm,
                   text=gStrings['back'][self.lan],
                   command=lambda: self.onBack(self.connerr_frm, self.
                                               createConnectView)).grid(
                                                   row=1,
                                                   column=1,
                                                   sticky=tk.W,
                                                   padx=12)
        ttk.Button(
            self.connerr_frm,
            text=gStrings['quit'][self.lan],
            command=self.onCloseWindow,
        ).grid(row=1, column=2, sticky=tk.E, padx=12)
        self.connerr_frm.pack(side=tk.BOTTOM, anchor=tk.CENTER)
# }}}

    def createBasicInfoView(self, tab):  # {{{
        ver_frm = ttk.Frame(tab)
        ttk.Label(ver_frm,
                  text=gStrings['versionInfo'][self.lan],
                  foreground=gColors['Tomato'],
                  font=('Arial', 14)).grid(row=0,
                                           column=0,
                                           columnspan=2,
                                           sticky=tk.W)
        ver_frm.pack(anchor=tk.W)

        ttk.Label(ver_frm,
                  text=gStrings['hbVer'][self.lan],
                  width=15,
                  font=('Arial', 12)).grid(row=1, column=0)

        ttk.Label(ver_frm,
                  text=self.tcp.command('getHomeBrainVersion'),
                  width=15,
                  font=('Arial', 12)).grid(row=1, column=1)

        ttk.Label(ver_frm,
                  text=gStrings['reVer'][self.lan],
                  width=15,
                  font=('Arial', 12)).grid(row=2, column=0)

        ttk.Label(ver_frm,
                  text=self.tcp.command('getRuleEngineVersion'),
                  width=15,
                  font=('Arial', 12)).grid(row=2, column=1)
# }}}

    def createLogSetView(self, tab):  # {{{
        # level frame
        i = 0
        j = 0
        top_frm = ttk.Frame(tab)
        top_frm.pack(anchor=tk.W)

        # Log Level
        level_frm = ttk.Frame(top_frm)
        ttk.Label(level_frm,
                  text=gStrings['loglevel'][self.lan],
                  foreground=gColors['Tomato'],
                  font=('Arial', 14)).grid(row=i,
                                           column=j,
                                           columnspan=6,
                                           sticky=tk.W)
        level_frm.pack(side=tk.LEFT)

        i += 1
        j += 1
        for t in (gStrings['logModule'][self.lan],
                  gStrings['logError'][self.lan],
                  gStrings['logWarn'][self.lan],
                  gStrings['logNormal'][self.lan],
                  gStrings['logInfo'][self.lan],
                  gStrings['logTrace'][self.lan]):
            ttk.Label(level_frm, text=t, anchor=tk.CENTER,
                      width=10).grid(row=i, column=j)
            j += 1
        i += 1
        names = self.tcp.command('getModulesName').split(';')
        for name in names:
            level = self.tcp.command('getModuleLogLevel', name)
            if level == "":
                continue
            self.log[name] = tk.IntVar()
            self.log[name].set(int(level))
            ttk.Label(level_frm, text=name, anchor=tk.CENTER,
                      width=10).grid(row=i, column=1)
            for j in range(1, 6):
                ttk.Radiobutton(
                    level_frm,
                    variable=self.log[name],
                    value=j,
                    command=lambda n=name, l=str(j): self.tcp.command(
                        'setModuleLogLevel', n, l)).grid(row=i, column=j + 1)
            i = i + 1

        # CLP Watch
        watch_frm = ttk.Frame(top_frm)
        watch_frm.pack(side=tk.TOP)

        witems = (('rules', 'statistics'), ('facts', 'activations'),
                  ('focus', 'instances'), ('slots', 'messages'),
                  ('globals', 'message-handlers'))
        ttk.Label(watch_frm,
                  text=gStrings['watch'][self.lan],
                  foreground=gColors['Tomato'],
                  font=('Arial', 14)).grid(row=0,
                                           column=0,
                                           columnspan=3,
                                           sticky=tk.W)
        i = 1
        for row in witems:
            var1 = tk.IntVar()
            ttk.Checkbutton(watch_frm,
                            text=row[0],
                            width=8,
                            variable=var1,
                            command=lambda v=var1, m=row[0]: self.
                            onLogWatchCheck(v, m)).grid(row=i,
                                                        column=0,
                                                        padx=(16, 2),
                                                        pady=2)
            var2 = tk.IntVar()
            ttk.Checkbutton(watch_frm,
                            text=row[1],
                            width=16,
                            variable=var2,
                            command=lambda v=var2, m=row[1]: self.
                            onLogWatchCheck(v, m)).grid(row=i,
                                                        column=1,
                                                        columnspan=2,
                                                        padx=(16, 2),
                                                        pady=2)
            i += 1

        # Log Output
        log_frm = ttk.Frame(tab)
        ttk.Label(log_frm,
                  text=gStrings['logOutput'][self.lan],
                  foreground=gColors['Tomato'],
                  font=('Arial', 14)).grid(row=0, column=0, sticky=tk.W)
        ttk.Label(log_frm, text=gStrings['host'][self.lan]).grid(row=1,
                                                                 column=0)
        ttk.Entry(log_frm, width=16,
                  textvariable=self.host_addr).grid(row=1, column=1)
        ttk.Label(log_frm, text=gStrings['port'][self.lan]).grid(row=1,
                                                                 column=2,
                                                                 padx=5)
        ttk.Entry(log_frm, width=7, textvariable=self.host_port).grid(row=1,
                                                                      column=3,
                                                                      padx=5)
        self.output_btn = ttk.Button(
            log_frm,
            text=gStrings['output'][self.lan],
            command=self.onLogOutput,
        )
        self.output_btn.grid(row=1, column=4, sticky=tk.W, padx=5)
        ttk.Button(
            log_frm,
            text=gStrings['terminate'][self.lan],
            command=self.onLogTerminate,
        ).grid(row=1, column=5, sticky=tk.W, padx=5)
        ttk.Button(
            log_frm,
            text=gStrings['clear'][self.lan],
            command=self.onLogClear,
        ).grid(row=1, column=6, sticky=tk.W, padx=5)
        ttk.Label(log_frm, text=gStrings['filter'][self.lan]).grid(row=1,
                                                                   column=7)
        ttk.Entry(log_frm, width=16,
                  textvariable=self.filter_key).grid(row=1, column=8, padx=5)
        ttk.Button(
            log_frm,
            text=gStrings['printItem'][self.lan],
            command=self.onLogPrintListDialog,
        ).grid(row=1, column=9, sticky=tk.W, padx=(10, 10))

        log_frm.pack(anchor="w")

        # Log Text
        self.log_text = tk.Text(tab,
                                wrap=tk.NONE,
                                width=self.width,
                                height=self.height)
        hscroll = tk.Scrollbar(tab,
                               orient=tk.HORIZONTAL,
                               command=self.log_text.xview)
        hscroll.pack(side=tk.BOTTOM, fill=tk.X)
        vscroll = tk.Scrollbar(tab,
                               orient=tk.VERTICAL,
                               command=self.log_text.yview)
        vscroll.pack(side=tk.RIGHT, fill=tk.Y)
        self.log_text.config(yscrollcommand=vscroll.set)
        self.log_text.config(xscrollcommand=hscroll.set)
        self.log_text.pack()
# }}}

    def onLogWatchCheck(self, var, item):  # {{{
        self.tcp.command('watchItem', str(var.get()), item)
# }}}

    def onLogOutput(self):  # {{{
        self.logthread = LogThread()
        addr = self.server_addr.get()
        port = self.server_port.get()

        def output(log):
            if self.filter_key.get():
                for line in log.splitlines():
                    # TODO using re
                    if self.filter_key.get() in line:
                        self.log_text.insert(tk.END, line + "\n")
                        self.log_text.see(tk.END)
            else:
                self.log_text.insert(tk.END, log)
                self.log_text.see(tk.END)

        self.logthread.start(addr, port, output)
        self.tcp.command('startUDPLog', addr, port)
        self.output_btn.configure(state=tk.DISABLED)
# }}}

    def onLogTerminate(self):  # {{{
        self.tcp.command('stopUDPLog')
        for i in range(0, 3):
            if self.logthread.isAlive():
                self.logthread.stop()
                time.sleep(0.2)
        self.output_btn.configure(state=tk.NORMAL)
# }}}

    def onLogClear(self):  # {{{
        self.log_text.delete(0.0, tk.END)
# }}}

    def onLogPrintListDialog(self):  # {{{
        try:
            self.print_dialog.destroy()
        except Exception as e:
            print("don't worry, that's ok!")
        width = 180
        height = 235
        self.print_dialog = tk.Toplevel()
        self.print_dialog.title(gStrings['selectItem'][self.lan])
        alignstr = '%dx%d+%d+%d' % (width, height,
                                    (self.screenwidth - self.width) / 2 +
                                    (self.width - width) - 40,
                                    (self.screenheight - self.height) / 2 + 60)
        self.print_dialog.geometry(alignstr)
        dialog_frm = ttk.Frame(self.print_dialog,
                               padding=10,
                               width=width,
                               height=height)
        self.debug_items = ('mem', 'fact', 'instance', 'class', 'rule',
                            'agenda', 'global')
        log_listbox = tk.Listbox(dialog_frm,
                                 selectmode=tk.SINGLE,
                                 height=len(self.debug_items),
                                 font=('Arial', 14))
        for item in self.debug_items:
            log_listbox.insert(tk.END, gStrings[item][self.lan])
        log_listbox.bind('<Button-1>', self.onClickDebugListBox)
        log_listbox.pack(side=tk.TOP, anchor=tk.CENTER, fill=tk.BOTH)
        ttk.Button(dialog_frm,
                   text=gStrings['quit'][self.lan],
                   command=lambda: self.onClickQuit('logprint')).pack(
                       side=tk.RIGHT, pady=(20, 10))
        dialog_frm.pack(side=tk.TOP, anchor=tk.CENTER, fill=tk.BOTH)
# }}}

    def createRuleControlView(self, tab):  # {{{
        sel_frm = ttk.Frame(tab)
        sel_frm.pack(pady=(6, 20))

        rul_frm = ttk.Frame(tab)
        rul_frm.pack(side=tk.BOTTOM, expand=1, fill=tk.Y, pady=(20, 0))
        rul_ctl_frm = ttk.Frame(rul_frm)
        rul_ctl_frm.pack(fill=tk.Y, anchor=tk.NW)

        ttk.Label(rul_ctl_frm,
                  text=gStrings['ruleSel'][self.lan],
                  foreground=gColors['Tomato'],
                  font=('Arial', 14)).pack(side=tk.LEFT)
        self.rule_var = tk.StringVar()
        self.rule_list = ttk.Combobox(rul_ctl_frm,
                                      takefocus=False,
                                      state='readonly',
                                      width=23,
                                      textvariable=self.rule_var,
                                      exportselection=0,
                                      font=('Arial', 14))
        result = self.tcp.command('getRules')
        rules = ('<NONE>', )
        if len(result) > 0:
            rules = result.split(';')
        self.rule_list['values'] = rules
        self.rule_list.current(0)
        self.rule_list.bind("<<ComboboxSelected>>", self.onRuleSelected)
        self.rule_list.pack(side=tk.LEFT, padx=(2, 8))

        self.rule_refresh_btn = ttk.Button(
            rul_ctl_frm,
            width=5,
            text=gStrings['refresh'][self.lan],
            command=self.onRefreshRules,
        )
        self.rule_refresh_btn.pack(side=tk.LEFT, padx=(8, 8))
        self.rule_ci_btn = ttk.Button(rul_ctl_frm,
                                      text=gStrings['commit'][self.lan],
                                      command=self.onRuleCommit)
        self.rule_ci_btn.pack(side=tk.LEFT, padx=(8, 8))
        ttk.Button(rul_ctl_frm,
                   text=gStrings['delete'][self.lan],
                   command=self.onRuleDeleteDialog).pack(side=tk.LEFT,
                                                         padx=(8, 8))
        ttk.Button(rul_ctl_frm,
                   textvariable=self.rule_switch_var,
                   command=self.onRuleSwitch).pack(side=tk.LEFT, padx=(8, 12))
        self.rule_newn_btn = ttk.Button(rul_ctl_frm,
                                        text=gStrings['new'][self.lan],
                                        command=lambda: self.onRuleNew('save'))
        self.rule_newn_btn.pack(side=tk.LEFT, padx=(8, 8))
        self.rule_newn_entry = ttk.Entry(rul_ctl_frm,
                                         textvariable=self.rule_newn_var,
                                         state=tk.DISABLED,
                                         font=('Arial', 14))
        self.rule_newn_entry.pack(side=tk.LEFT, padx=(8, 8))
        self.rule_cancel_btn = ttk.Button(
            rul_ctl_frm,
            width=5,
            text=gStrings['cancel'][self.lan],
            command=lambda: self.onRuleNew('cancel'))

        self.rule_text = tk.Text(rul_frm,
                                 wrap=tk.NONE,
                                 width=100,
                                 height=25,
                                 font=('Arial', 14))
        hscroll = tk.Scrollbar(rul_frm,
                               orient=tk.HORIZONTAL,
                               command=self.rule_text.xview)
        hscroll.pack(side=tk.BOTTOM, fill=tk.X)
        vscroll = tk.Scrollbar(rul_frm,
                               orient=tk.VERTICAL,
                               command=self.rule_text.yview)
        vscroll.pack(side=tk.RIGHT, fill=tk.Y)
        self.rule_text.config(yscrollcommand=vscroll.set)
        self.rule_text.config(xscrollcommand=hscroll.set)
        self.rule_text.pack(side=tk.BOTTOM,
                            anchor=tk.CENTER,
                            expand=1,
                            fill=tk.Y)
        self.rule_text.bind("<Control-Key-a>", self.onRuleSelectText)
        self.rule_text.bind("<Control-Key-A>", self.onRuleSelectText)
        self.onRuleSelected()

        #  Devices
        ttk.Label(sel_frm,
                  text=gStrings['deviceSel'][self.lan],
                  foreground=gColors['Tomato'],
                  font=('Arial', 14)).pack(side=tk.LEFT)
        self.device_var = tk.StringVar()
        self.device_list = ttk.Combobox(sel_frm,
                                        takefocus=False,
                                        state='readonly',
                                        width=20,
                                        textvariable=self.device_var,
                                        exportselection=0,
                                        font=('Arial', 14))
        result = self.tcp.command('getDevices')
        devices = ('<NONE>', )
        if len(result) > 0:
            devices = result.split(';')
        self.device_list['values'] = devices
        self.device_list.current(0)
        self.device_list.bind("<<ComboboxSelected>>", self.onDeviceSelected)
        self.device_list.pack(side=tk.LEFT)
        ttk.Label(sel_frm,
                  text=gStrings['deviceID'][self.lan],
                  foreground=gColors['Tomato'],
                  font=('Arial', 14)).pack(side=tk.LEFT, padx=(15, 0))

        #  Instances
        self.ins_var = tk.StringVar()
        self.ins_list = ttk.Combobox(sel_frm,
                                     takefocus=False,
                                     state='readonly',
                                     width=25,
                                     textvariable=self.ins_var,
                                     exportselection=0,
                                     font=('Arial', 14))
        inses = self.tcp.command('getInstaces', devices[0])
        values = ('<NONE>', )
        if len(inses) > 0:
            values = inses.split(';')
        self.ins_list['values'] = values
        self.ins_list.current(0)
        self.ins_list.bind("<<ComboboxSelected>>", self.onInstanceSelected)
        self.ins_list.pack(side=tk.LEFT)

        self.manual_refresh_btn = ttk.Button(
            sel_frm,
            width=8,
            text=gStrings['manualRefresh'][self.lan],
            command=self.onInstanceSelected)
        self.manual_refresh_btn.pack(side=tk.LEFT, padx=(20, 0))

        self.sw_auto_refresh = 0
        auto_refresh_ins = tk.IntVar()
        auto_refresh_ins.set(3)
        self.auto_refresh_btn = ttk.Button(
            sel_frm,
            width=8,
            text=gStrings['autoRefresh'][self.lan],
            command=lambda var=auto_refresh_ins: self.onAutoRefreshInstance(var
                                                                            ))
        self.auto_refresh_btn.pack(side=tk.LEFT, padx=(15, 0))
        self.auto_refresh_entry = ttk.Entry(sel_frm,
                                            width=3,
                                            justify=tk.CENTER,
                                            textvariable=auto_refresh_ins)
        self.auto_refresh_entry.pack(side=tk.LEFT, padx=(8, 0))

        self.onInstanceSelected()
# }}}

    def onDeviceSelected(self, *args):  # {{{
        inses = self.tcp.command('getInstaces', self.device_list.get())
        values = ('<NONE>', )
        if len(inses) > 0:
            values = inses.split(';')
        self.ins_list['values'] = values
        self.ins_list.current(0)
        self.onInstanceSelected()
# }}}

    def onAutoRefreshInstance(self, var):  # {{{
        # refresh thread
        def _refresh_thread(delay):
            while not self.stop_auto_refresh:
                #  self.onInstanceSelected() # blinking because fresh by thread.
                self.manual_refresh_btn.invoke()
                time.sleep(delay)

        if self.sw_auto_refresh == 0:
            self.stop_auto_refresh = False
            threading.Thread(target=_refresh_thread,
                             args=(var.get(), )).start()
            self.auto_refresh_btn.configure(
                text=gStrings['stopRefresh'][self.lan])
            self.auto_refresh_entry.configure(state=tk.DISABLED)
            self.sw_auto_refresh = 1
        else:
            self.stop_auto_refresh = True
            self.auto_refresh_btn.configure(
                text=gStrings['autoRefresh'][self.lan])
            self.auto_refresh_entry.configure(state=tk.NORMAL)
            self.sw_auto_refresh = 0
# }}}

    def onInstanceSelected(self, *args):  # {{{
        try:
            self.pro_frm.destroy()
            del self.curslot_vars
        except Exception as e:
            print("don't worry, that's ok!")
        self.pro_frm = ttk.Frame(self.dev_tab)
        slots = ()
        self.curslot_vars = {}
        result = self.tcp.command('getSlots', self.device_list.get())
        if len(result) > 0:
            slots = result.split(';')

        j = 0
        for pro in slots:
            ttk.Label(self.pro_frm,
                      text=pro,
                      anchor=tk.CENTER,
                      relief=tk.GROOVE,
                      width=15).grid(row=1,
                                     column=j,
                                     columnspan=2,
                                     pady=(10, 10),
                                     padx=(5, 5))
            uuid = self.ins_list.get()
            if uuid != '<NONE>':
                self.curslot_vars[pro] = tk.StringVar()
                val = self.tcp.command('getInstanceValue', uuid, pro)
                if not val.strip():
                    val = 'null'
                self.curslot_vars[pro].set(val)
                ttk.Entry(
                    self.pro_frm,
                    width=10,
                    font=('Arial', 12),
                    justify=tk.CENTER,
                    textvariable=self.curslot_vars[pro],
                ).grid(row=2, column=j, columnspan=2, pady=(10, 10))
                ttk.Button(
                    self.pro_frm,
                    width=5,
                    text=gStrings['setVal'][self.lan] + 'R',
                    command=lambda u=uuid, p=pro: self.onUpdateValue(
                        'setR', u, p),
                ).grid(row=3, column=j, pady=5, padx=2, sticky=tk.E)
                ttk.Button(
                    self.pro_frm,
                    width=5,
                    text=gStrings['getVal'][self.lan] + 'R',
                    command=lambda u=uuid, p=pro: self.onUpdateValue(
                        'getR', u, p),
                ).grid(row=4, column=j, pady=5, padx=2, sticky=tk.E)
                ttk.Button(
                    self.pro_frm,
                    width=5,
                    text=gStrings['setVal'][self.lan] + 'D',
                    command=lambda u=uuid, p=pro: self.onUpdateValue(
                        'setD', u, p),
                ).grid(row=3, column=j + 1, pady=5, padx=2, sticky=tk.W)
                ttk.Button(
                    self.pro_frm,
                    width=5,
                    text=gStrings['getVal'][self.lan] + 'D',
                    command=lambda u=uuid, p=pro: self.onUpdateValue(
                        'getD', u, p),
                ).grid(row=4, column=j + 1, pady=5, padx=2, sticky=tk.W)
            j += 2
        self.pro_frm.pack()
# }}}

    def onUpdateValue(self, target, uuid, pro):  # {{{
        if target == 'setR':
            self.tcp.command('updateInstanceValue', uuid, pro,
                             self.curslot_vars[pro].get())
        elif target == 'setD':
            self.tcp.command('updateDeviceValue', uuid, pro,
                             self.curslot_vars[pro].get())
        elif target == 'getR':
            val = self.tcp.command('getInstanceValue', uuid, pro)
            if not val.strip():
                val = 'null'
            self.curslot_vars[pro].set(val)
        elif target == 'getD':
            val = self.tcp.command('getDeviceValue', uuid, pro)
            if not val.strip():
                val = 'null'
            self.curslot_vars[pro].set(val)
        else:
            print('unkown target:', target)
# }}}

    def onRefreshRules(self):  # {{{
        result = self.tcp.command('getRules')
        rules = ('<NONE>', )
        if len(result) > 0:
            rules = result.split(';')
        self.rule_list['values'] = rules
        self.rule_list.current(0)
        self.onRuleSelected()
# }}}

    def onRuleSelectText(self, event):
        self.rule_text.tag_add(tk.SEL, "1.0", tk.END)
        return 'break'

    def onRuleCommit(self):  # {{{
        name = self.rule_list.get()
        doc = self.rule_text.get(0.0, tk.END)
        self.tcp.command('commitRuleScript', name, doc.strip())
        #  self.rule_refresh_btn.invoke()
# }}}

    def onRuleDeleteDialog(self):  # {{{
        width = 320
        height = 120
        self.rule_dialog = tk.Toplevel()
        self.rule_dialog.title(gStrings['delruletitle'][self.lan])
        alignstr = '%dx%d+%d+%d' % (width, height,
                                    (self.screenwidth - width) / 2,
                                    (self.screenheight - height) / 2)
        self.rule_dialog.geometry(alignstr)
        dialog_frm = ttk.Frame(self.rule_dialog,
                               padding=10,
                               width=width,
                               height=height)
        ttk.Label(
            dialog_frm,
            text=gStrings['delete'][self.lan],
        ).grid(row=1, padx=(5, 2))
        ttk.Label(
            dialog_frm,
            font=('Arial', 14),
            text=self.rule_list.get() + " ?",
        ).grid(row=1, column=1, columnspan=2, padx=(0, 2))
        ttk.Button(dialog_frm,
                   text=gStrings['confirm'][self.lan],
                   command=lambda: self.onClickConfirm('delrule')).grid(
                       row=3, column=1, padx=12, pady=(20, 20))
        ttk.Button(dialog_frm,
                   text=gStrings['cancel'][self.lan],
                   command=lambda: self.onClickCancel('delrule')).grid(
                       row=3, column=2, padx=12, pady=(20, 20))
        dialog_frm.pack(side=tk.TOP, anchor=tk.CENTER, fill=tk.X)
# }}}

    def onRuleSelected(self, *args):  # {{{
        ruleId = self.rule_list.get()
        doc = self.tcp.command('getRuleScript', ruleId)
        if doc:
            self.rule_text.delete(0.0, tk.END)
            self.rule_text.insert(0.0, doc)
            sw = self.tcp.command('getRuleSwitch', ruleId)
            if sw == '1':
                self.rule_switch_var.set(gStrings['stop'][self.lan])
            else:
                self.rule_switch_var.set(gStrings['start'][self.lan])
# }}}

    def onRuleSwitch(self):  # {{{
        ruleId = self.rule_list.get()
        val = self.rule_switch_var.get()
        if val == gStrings['stop'][self.lan]:
            self.tcp.command('switchRule', ruleId, 'false')
        else:
            self.tcp.command('switchRule', ruleId, 'true')
        time.sleep(0.2)
        self.onRuleSelected()
# }}}

    def onRuleNewDialog(self):  # {{{
        width = 300
        height = 160
        self.rule_dialog = tk.Toplevel()
        self.rule_dialog.title(gStrings['newruletitle'][self.lan])
        alignstr = '%dx%d+%d+%d' % (width, height,
                                    (self.screenwidth - width) / 2,
                                    (self.screenheight - height) / 2)
        self.rule_dialog.geometry(alignstr)
        self.rule_newn_var.set('rul-')
        dialog_frm = ttk.Frame(self.rule_dialog,
                               padding=10,
                               width=width,
                               height=height)
        ttk.Label(
            dialog_frm,
            text=gStrings['rulePrompt'][self.lan],
            foreground=gColors['SlateBlue'],
        ).grid(row=0, column=1, columnspan=2, sticky=tk.E)
        ttk.Label(
            dialog_frm,
            text=gStrings['filename'][self.lan],
        ).grid(row=1, sticky=tk.E)
        ttk.Entry(
            dialog_frm,
            font=('Arial', 14),
            textvariable=self.rule_newn_var,
        ).grid(row=1, column=1, columnspan=2, sticky=tk.W)
        ttk.Button(dialog_frm,
                   text=gStrings['confirm'][self.lan],
                   command=lambda: self.onClickConfirm('newrule')).grid(
                       row=3, column=1, padx=12, pady=(20, 20))
        ttk.Button(dialog_frm,
                   text=gStrings['cancel'][self.lan],
                   command=lambda: self.onClickCancel('newrule')).grid(
                       row=3, column=2, padx=12, pady=(20, 20))
        dialog_frm.pack(side=tk.TOP, anchor=tk.CENTER)
# }}}

    def onRuleNew(self, who):  # {{{
        if self.rule_btm_sw == 0:
            # new rule
            self.onRuleNewDialog()
            self.rule_list.configure(state=tk.DISABLED)
            self.rule_ci_btn.configure(state=tk.DISABLED)
            self.rule_refresh_btn.configure(state=tk.DISABLED)
            self.rule_newn_entry.configure(state=tk.NORMAL)
            self.rule_newn_btn.configure(text=gStrings['save'][self.lan])
            self.rule_text.delete(0.0, tk.END)
            self.rule_btm_sw = 1
            return

        # save rule
        if who == 'save':
            name = self.rule_newn_entry.get()
            doc = self.rule_text.get(0.0, tk.END)
            self.tcp.command('commitRuleScript', name, doc)
            time.sleep(1)  # wait save cmd finished

        self.rule_list.configure(state=tk.NORMAL)
        self.rule_ci_btn.configure(state=tk.NORMAL)
        self.rule_refresh_btn.configure(state=tk.NORMAL)
        self.rule_newn_entry.configure(state=tk.DISABLED)
        self.rule_cancel_btn.forget()
        self.rule_newn_var.set('')
        self.rule_newn_btn.configure(text=gStrings['new'][self.lan])
        self.rule_btm_sw = 0

        self.rule_refresh_btn.invoke()
# }}}

    def onClickDebugListBox(self, event):  # {{{
        index = event.widget.nearest(event.y)
        self.filter_key.set('clips_')
        self.tcp.command("printItem", self.debug_items[index])
# }}}

    def onClickConfirm(self, who):  # {{{
        if who == 'newrule':
            rule_id = self.rule_newn_var.get()
            self.rule_text.insert(0.0, gFormatRuleStr % (rule_id, rule_id))
            self.rule_cancel_btn.pack(side=tk.RIGHT, padx=(10, 10))
            self.rule_dialog.destroy()
            return

        if who == 'delrule':
            self.tcp.command('deleteRuleScript', self.rule_list.get())
            time.sleep(1)  # wait delete cmd finished
            self.rule_dialog.destroy()
            self.rule_refresh_btn.invoke()
            return

        if who == 'assert':
            fact = self.assert_var.get()
            if fact[0] != '(' or fact[-1] != ')':
                fact = "(" + fact + ")"
            self.tcp.command('assertFact', fact)
            self.cmd2_display.set(self.cmd1_display.get())
            self.cmd1_display.set(fact)
            return

# }}}

    def onClickCancel(self, who):  # {{{
        if who == 'newrule':
            self.rule_newn_var.set('')
            self.rule_dialog.destroy()
            self.onRuleNew('cancel')
            return

        if who == 'delrule':
            self.rule_dialog.destroy()
            return
# }}}

    def onClickQuit(self, who):  # {{{
        if who == 'logprint':
            self.print_dialog.destroy()
            self.filter_key.set('')
            return
# }}}

    def createSceneAutoView(self, tab):  # {{{
        mode_frm = ttk.Frame(tab)
        mode_frm.pack(anchor=tk.W)

        ttk.Label(mode_frm,
                  text=gStrings['modeTrigger'][self.lan],
                  foreground=gColors['Tomato'],
                  font=('Arial', 14)).pack(side=tk.LEFT)

        modes_list_frm = ttk.Frame(tab)
        modes_list_frm.pack(anchor=tk.CENTER)

        scenes = (('comehome', 'leavehome', 'entermovie', 'exitmovie',
                   'sleepmode', 'getupmode'), )
        i = 0
        for ms in scenes:
            for j in range(0, 6):
                btn = ttk.Button(
                    modes_list_frm,
                    width=10,
                    text=gStrings[ms[j]][self.lan],
                    command=lambda m=ms[j]: self.onSceneSelected(m))
                btn.grid(row=i, column=j, padx=(10, 20), pady=(20, 10))
            i += 1

        fact_frm = ttk.Frame(tab)
        fact_frm.pack(anchor=tk.W)

        ttk.Label(fact_frm,
                  text=gStrings['factTrigger'][self.lan],
                  foreground=gColors['Tomato'],
                  font=('Arial', 14)).pack(side=tk.LEFT)

        fact_stmt_frm = ttk.Frame(tab)
        fact_stmt_frm.pack(anchor=tk.CENTER)

        self.assert_var = tk.StringVar()
        ttk.Entry(
            fact_stmt_frm,
            font=('Arial', 14),
            width=50,
            textvariable=self.assert_var,
        ).grid(row=1, column=1, sticky=tk.W)
        ttk.Button(fact_stmt_frm,
                   text=gStrings['assert'][self.lan],
                   command=lambda: self.onClickConfirm('assert')).grid(
                       row=1, column=2, padx=20)

        cmd_rec_frm = ttk.Frame(tab, width=self.width)
        cmd_rec_frm.pack(side=tk.BOTTOM, fill=tk.X)
        self.cmd1_display = tk.StringVar()
        self.cmd2_display = tk.StringVar()
        ttk.Label(
            cmd_rec_frm,
            textvariable=self.cmd1_display,
            foreground=gColors['Black'],
            font=('Arial', 12),
            borderwidth=0,
            padding=2,
            anchor=tk.W,
        ).pack(side=tk.RIGHT)
        ttk.Label(
            cmd_rec_frm,
            textvariable=self.cmd2_display,
            foreground=gColors['Gray'],
            font=('Arial', 12),
            borderwidth=0,
            padding=2,
            anchor=tk.E,
        ).pack(side=tk.LEFT)
# }}}

    def onSceneSelected(self, mode):  # {{{
        fact = "(scene-enter room1 " + mode + ")"
        self.tcp.command('assertFact', fact)
        self.cmd2_display.set(self.cmd1_display.get())
        self.cmd1_display.set(fact)
Ejemplo n.º 39
0
 def __openControl_connection(self):
     self.controlTcpClient= TCPClient(self.__masterHost, self.__controlPort, self.__listenControl_connection)
Ejemplo n.º 40
0
                           str(mode) + "] [bus:" + str(bus) + "] [device:" +
                           str(device) + "]")
            spi_thread = SPIThread(q_spi_write, mode, bus, device)
            Logger.log_spi("Initialized spi-server with: " + "[mode:" +
                           str(mode) + "] [bus:" + str(bus) + "] [device:" +
                           str(device) + "]")

        # GAME
        Logger.log_game("Initializing game")
        game_thread = GameThread()
        Logger.log_game("Initialized game")

        # TCP-SERVER
        Logger.log_tcp("Initializing tcp-server with: " + "[host:" +
                       str(host) + "] [port:" + str(port) + "]")
        tcp_thread = TCPClient(host, port, q_tcp_read, q_tcp_write)
        Logger.log_tcp("Initialized tcp-server with:" + "[host:" + str(host) +
                       "] [port:" + str(port) + "]")

        # START

        # MOTION TRACKING
        if useMotion:
            Logger.log_game("Starting Motion Tracking")
            motion_thread.start()
            Logger.log_game("Started Motion Tracking")

        # SPI-SERVER
        if useSPI:
            Logger.log_spi("Starting spi-server")
            spi_thread.start()
Ejemplo n.º 41
0
if __name__ == '__main__':
    import cv2
    from TCPClient import TCPClient
    from cmdline import command
    
    #cap = cv2.VideoCapture('http://192.168.1.157:8090/?action=stream/frame.mjpg')
    cap = cv2.VideoCapture(0) ## to use your webcam instead of stream    
    tcp = TCPClient()
    cmd = command()
    bConnected = False
    #### uncomment the below lines to interact with the car over TCP
    #### these have been commented out in the absence of the car itself to test its interactino with a TF NN
    #### Note this needs testing with py3.7!!
#    tcp.sendData(cmd.LED_BLUE.encode())
#    tcp.sendData(cmd.LED_RED.encode())
#    tcp.sendData(cmd.LED_GREEN.encode())
    
#    try:
#        tcp.connectToServer(address = ("192.168.1.157", 12345))
    bConnected = True
#        #tcp.sendData(">RGB Blue".encode())
#    except Exception:
#        print("Connect to server Failed!: Check the Server IP is correct and open!")
    
    while bConnected:
        ret, frame = cap.read()
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        faces = cv2.CascadeClassifier('haarcascade_frontalface_default.xml').detectMultiScale(gray, 1.3,5)
        for (x, y, w, h) in faces:
            cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 255, 0), 2)
            roi_gray = gray[y:y+h, x:x+w]