コード例 #1
0
ファイル: __init__.py プロジェクト: littleDad/SoundBox
 def __init__(self, SERVER_IP, SERVER_PORT, SCR, RECEPTION_MODE):
     Thread.__init__(self)
     self.SERVER_IP = SERVER_IP
     self.SERVER_PORT = SERVER_PORT
     self.scr = SCR
     self.last_entry = " none"
     self.erreurs = "pas d'erreurs pour le moment"
     self.reception_mode = RECEPTION_MODE
     self.logger = LogFile('app.log')
     self.logger.initself()
コード例 #2
0
ファイル: __init__.py プロジェクト: littleDad/Lotus
 def __init__(self, SCR, arduino_port, arduino_speed, arduino_fake, ncurses):
     Thread.__init__(self)
     self.arduino_port = arduino_port
     self.arduino_speed = arduino_speed
     self.arduino_fake = arduino_fake
     self.logger = LogFile('app.log')
     self.logger.initself()
     self.ncurses=ncurses
     if self.ncurses:
         self.scr = SCR
         self.last_entry = "aucune"
         self.erreurs = "pas d'erreurs pour le moment"
コード例 #3
0
ファイル: __init__.py プロジェクト: littleDad/SoundBox
class core(Thread):
    '''thread principal, gère tous les autres threads à savoir :
        - thread inputs
        - thread de calcul et gestion des données
        - thread outputs (graphique et audio)

        > contient la boucle infinie de capture de touche entrée au clavier.

    '''

    def __init__(self, SERVER_IP, SERVER_PORT, SCR, RECEPTION_MODE):
        Thread.__init__(self)
        self.SERVER_IP = SERVER_IP
        self.SERVER_PORT = SERVER_PORT
        self.scr = SCR
        self.last_entry = " none"
        self.erreurs = "pas d'erreurs pour le moment"
        self.reception_mode = RECEPTION_MODE
        self.logger = LogFile('app.log')
        self.logger.initself()


    def run(self):
        self.logger.p_log('program started', newline=3)

        try:
            d_audio = daemon_audio(self.logger)
            self.logger.p_log('(CORE) start daemon_glove')
            sleep(3)
            d_glove = daemon_glove(
                core_ref=self,
                mode=self.reception_mode
            )
            d_glove.start()

            self.d_data_manager = daemon_data(
                self.scr,
                core_ref=self,
                d_glove_ref=d_glove,
                d_audio_ref=d_audio
            )
            self.d_data_manager.start()  # Thread-2 = OBSOLETE !

            self.d_curses = daemon_curses(
                self.scr,
                core_ref=self,
                d_glove_ref=d_glove
            )
            self.d_curses.start()  # Thread-3 = OBSOLETE !

            sleep(.01)  # wait, pour être sûr que les thread soient bien lancés
            self.d_curses.scr_init()

            # boucle de get_key
            while 1:
                sleep(0.1)
                self.scr.nodelay(1)  # rend getch() non-bloquant
                current_entry = self.scr.getch()
                if 0 < current_entry < 356:  # si lettre connue, on la traite
                    # on commence par le stocker
                    # on remplit avec des blancs pour que ça fasse tjrs 5 " "
                    self.last_entry = current_entry

                    if current_entry == 27:  # <échap>  # ord('q')
                        break
                else:
                    if current_entry == KEY_LEFT:
                        self.last_entry = str(current_entry)
        except:
            self.logger.p_log('(CORE) ERROR in daemons init ', error=exc_info())



        # FIN DU PROGRAMME, ON NETTOIE TOUT. RANGER TOUT ÇA DANS DES MÉTHODES
        # PROPRES À CHAQUE THREAD. en gros, "chacun chez soi" serait + cool !
        #d_audio.server.stop()
        d_glove.kill_daemon_data_network()
        d_glove._Thread__stop()
        self.d_data_manager._Thread__stop()
        self.d_curses._Thread__stop()

        endwin()  # restaure le terminal à son état d'origine
        self.logger.p_log('program ends.')
        print "traceback:"
        traceback.print_exc()  # affiche exception si il y a
コード例 #4
0
ファイル: __init__.py プロジェクト: littleDad/Lotus
class core(Thread):
    '''thread principal, gère tous les autres threads à savoir :
    > contient la boucle infinie de capture de touche entrée au clavier.

    '''

    def __init__(self, SCR, arduino_port, arduino_speed, arduino_fake, ncurses):
        Thread.__init__(self)
        self.arduino_port = arduino_port
        self.arduino_speed = arduino_speed
        self.arduino_fake = arduino_fake
        self.logger = LogFile('app.log')
        self.logger.initself()
        self.ncurses=ncurses
        if self.ncurses:
            self.scr = SCR
            self.last_entry = "aucune"
            self.erreurs = "pas d'erreurs pour le moment"


    def run(self):

        self.logger.p_log('program started', newline=3)

        try:
            # on lance le processus qui gère l'arduino
            self.d_arduino = daemon_arduino(
                core_ref=self, 
                arduino_port=self.arduino_port,
                arduino_speed=self.arduino_speed,
                arduino_fake=self.arduino_fake
            )
            self.d_arduino.start()

            # on lance le processus qui gère l'audio
            self.d_audio = daemon_audio(
                core_ref=self,
            )
            self.d_audio.start()

            # on lance le processus qui gère la sfml
            self.d_sfml = daemon_visuels(
                core_ref=self,
            )
            self.d_sfml.start()            

            # on lance l'interface ncurses si l'utilisateur le veut
            if self.ncurses:
                self.d_curses = daemon_curses(
                    self.scr,
                    core_ref=self,
                )
                self.d_curses.start()

            sleep(.01)  # wait, pour être sûr que les thread soient bien lancés

            if self.ncurses:
                self.d_curses.scr_init()

            if self.ncurses:
                # boucle principale ncurses
                while 1:
                    sleep(0.1)
                    self.scr.nodelay(1)  # rend getch() non-bloquant
                    current_entry = self.scr.getch()
                    if 0 < current_entry < 356:  # si lettre connue, on la traite
                        # on commence par le stocker
                        # on remplit avec des blancs pour que ça fasse tjrs 5 " "
                        self.last_entry = current_entry

                        if current_entry == 27:  # <échap>  # ord('q')
                            break
                        elif current_entry == 258:
                            self.d_arduino.data['capteur1var'] -= 10
                            self.last_entry = str(current_entry)
                        elif current_entry == 259:
                            self.d_arduino.data['capteur1var'] += 10
                            self.last_entry = str(current_entry)
                        elif current_entry == ord('a'):
                            self.d_audio.current = 0
                        elif current_entry == ord('z'):
                            self.d_audio.current = 1
                            self.d_arduino.current = 0
                        elif current_entry == ord('e'):
                            self.d_audio.current = 2
                            self.d_arduino.current = 1
                    else:
                        foo = 42
                        # toutes les touches spéciales sont ici !
            else:
                # instruction principale si ncurses est désactivé
                print 'press ENTER to quit'
                raw_input()


        except:
            self.logger.p_log('(CORE) ERROR in daemons init ', error=exc_info())


        # on tue tous les processus, le plus proprement possible...
        self.d_audio._Thread__stop()
        self.d_arduino._Thread__stop()
        self.d_sfml._Thread__stop()

        if self.ncurses:
            self.d_curses._Thread__stop()
            endwin()  # restaure le terminal à son état d'origine
        
        # fin du programme
        self.logger.p_log('program ends.')
        
        # on affiche les erreurs s'il y a
        print "traceback:"
        traceback.print_exc()