def _process_dgt_serial_nr(self): # logging.debug('Serial number {}'.format(message.number)) # actually used for watchdog (once a second) # molli: rolling display if not self._inside_main_menu(): if self.dgtmenu.get_mode() == Mode.PONDER: if self.show_move_or_value >= self.dgtmenu.get_ponderinterval(): if self.hint_move: side = self._get_clock_side(self.hint_turn) beep = self.dgttranslate.bl(BeepLevel.NO) text = Dgt.DISPLAY_MOVE(move=self.hint_move, fen=self.hint_fen, side=side, wait=True, maxtime=1, beep=beep, devs={'ser', 'i2c', 'web'}, uci960=self.uci960, lang=self.dgttranslate.language, capital=self.dgttranslate.capital, long=self.dgttranslate.notation) else: text = self.dgttranslate.text('N10_nomove') else: text = self._combine_depth_and_score() text.wait = True DispatchDgt.fire(text) self.show_move_or_value = (self.show_move_or_value + 1) % (self.dgtmenu.get_ponderinterval() * 2) elif (self.dgtmenu.get_mode() == Mode.BRAIN and self.dgtmenu.get_rolldispbrain()) or (self.dgtmenu.get_mode() == Mode.NORMAL and self.dgtmenu.get_rolldispnorm()): #molli: allow rolling information display (time/score/hint_move) in BRAIN mode according to ## ponder interval if self.play_move == chess.Move.null() and self.c_last_player == 'U': if self.c_time_counter > 2 * self.dgtmenu.get_ponderinterval(): text = self._combine_depth_and_score() text.wait = True DispatchDgt.fire(text) self.c_time_counter = (self.c_time_counter + 1) % (self.dgtmenu.get_ponderinterval() * 3) elif self.c_time_counter > self.dgtmenu.get_ponderinterval(): if self.hint_move: side = self._get_clock_side(self.hint_turn) beep = self.dgttranslate.bl(BeepLevel.NO) text = Dgt.DISPLAY_MOVE(move=self.hint_move, fen=self.hint_fen, side=side, wait=True, maxtime=1, beep=beep, devs={'ser', 'i2c', 'web'}, uci960=self.uci960, lang=self.dgttranslate.language, capital=self.dgttranslate.capital, long=self.dgttranslate.notation) else: text = self.dgttranslate.text('N10_nomove') text.wait = True self.c_time_counter = (self.c_time_counter + 1) % (self.dgtmenu.get_ponderinterval() * 3) DispatchDgt.fire(text) if self.c_time_counter == 2 * self.dgtmenu.get_ponderinterval(): time.sleep(0.3) else: ## molli: standard clock display if self.c_time_counter == 0: time.sleep(0.3) self.c_time_counter = (self.c_time_counter + 1) % (self.dgtmenu.get_ponderinterval() * 3) self._exit_display() if self.c_time_counter == self.dgtmenu.get_ponderinterval(): time.sleep(0.3)
def _exit_display(self, devs=None): if devs is None: # prevent W0102 error devs = {'ser', 'i2c', 'web'} if self.play_move and self.dgtmenu.get_mode() in (Mode.NORMAL, Mode.BRAIN, Mode.REMOTE): side = self._get_clock_side(self.play_turn) beep = self.dgttranslate.bl(BeepLevel.BUTTON) text = Dgt.DISPLAY_MOVE(move=self.play_move, fen=self.play_fen, side=side, wait=True, maxtime=1, beep=beep, devs=devs, uci960=self.uci960, lang=self.dgttranslate.language, capital=self.dgttranslate.capital, long=self.dgttranslate.notation) else: text = None if self._inside_main_menu('dont_care_dev'): text = self.dgtmenu.get_current_text() if text: text.wait = True # in case of "bad pos" message send before else: text = Dgt.DISPLAY_TIME(force=True, wait=True, devs=devs) DgtObserver.fire(text)
def _process_dgt_serial_nr(self): # logging.debug('Serial number {}'.format(message.number)) # actually used for watchdog (once a second) if self.dgtmenu.get_mode( ) == Mode.PONDER and not self._inside_main_menu('dont_care_dev'): if self.show_move_or_value >= self.dgtmenu.get_ponderinterval(): if self.hint_move: side = self._get_clock_side(self.hint_turn) beep = self.dgttranslate.bl(BeepLevel.NO) text = Dgt.DISPLAY_MOVE(move=self.hint_move, fen=self.hint_fen, side=side, wait=True, maxtime=1, beep=beep, devs={'ser', 'i2c', 'web'}, uci960=self.uci960, lang=self.dgttranslate.language, capital=self.dgttranslate.capital, long=self.dgttranslate.notation) else: text = self.dgttranslate.text('N10_nomove') else: text = self._combine_depth_and_score() text.wait = True DgtObserver.fire(text) self.show_move_or_value = (self.show_move_or_value + 1) % ( self.dgtmenu.get_ponderinterval() * 2)
def _process_new_pv(self, message): self.hint_move = message.pv[0] self.hint_fen = message.game.fen() self.hint_turn = message.game.turn # if message.mode == Mode.ANALYSIS and not self._inside_main_menu('dont_care_dev'): if message.mode == Mode.ANALYSIS: devs = { None if self._inside_main_menu(dev) else dev for dev in {'ser', 'i2c', 'web'} } devs.discard(None) side = self._get_clock_side(self.hint_turn) beep = self.dgttranslate.bl(BeepLevel.NO) disp = Dgt.DISPLAY_MOVE(move=self.hint_move, fen=self.hint_fen, side=side, wait=True, maxtime=0, beep=beep, devs=devs, uci960=self.uci960, lang=self.dgttranslate.language, capital=self.dgttranslate.capital, long=self.dgttranslate.notation) if devs: DgtObserver.fire(disp)
def _process_computer_move(self, message): self.force_leds_off(log=True) # can happen in case of a book move move = message.move ponder = message.ponder self.play_move = move self.play_fen = message.game.fen() self.play_turn = message.game.turn if ponder: game_copy = message.game.copy() game_copy.push(move) self.hint_move = ponder self.hint_fen = game_copy.fen() self.hint_turn = game_copy.turn else: self.hint_move = chess.Move.null() self.hint_fen = None self.hint_turn = None # Display the move side = self._get_clock_side(message.game.turn) beep = self.dgttranslate.bl(BeepLevel.CONFIG) disp = Dgt.DISPLAY_MOVE(move=move, fen=message.game.fen(), side=side, wait=message.wait, maxtime=0, beep=beep, devs={'ser', 'i2c', 'web'}, uci960=self.uci960, lang=self.dgttranslate.language, capital=self.dgttranslate.capital, long=self.dgttranslate.notation) DgtObserver.fire(disp) DgtObserver.fire( Dgt.LIGHT_SQUARES(uci_move=move.uci(), devs={'ser', 'web'})) self.leds_are_on = True
def _process_button3(self, dev: str): logging.debug('(%s) clock handle button 3 press', dev) if self._inside_updt_menu(dev): DgtObserver.fire( self.dgtmenu.updt_right()) # button3 cant exit the menu elif self._inside_main_menu(dev): DgtObserver.fire( self.dgtmenu.main_right()) # button3 cant exit the menu else: if self.hint_move: side = self._get_clock_side(self.hint_turn) beep = self.dgttranslate.bl(BeepLevel.BUTTON) text = Dgt.DISPLAY_MOVE(move=self.hint_move, fen=self.hint_fen, side=side, wait=False, maxtime=1, beep=beep, devs={'ser', 'i2c', 'web'}, uci960=self.uci960, lang=self.dgttranslate.language, capital=self.dgttranslate.capital, long=self.dgttranslate.notation) else: text = self.dgttranslate.text('B10_nomove') DgtObserver.fire(text) self._exit_display(devs={dev})
def _process_button0(self, dev): logging.debug('(%s) clock handle button 0 press', dev) if self._inside_main_menu(): text = self.dgtmenu.main_up( ) # button0 can exit the menu, so check if text: DispatchDgt.fire(text) else: self._exit_display() elif self._inside_updt_menu(): self.dgtmenu.updt_up(dev) self._exit_display() # button0 always exit the menu else: if self.last_move: side = self._get_clock_side(self.last_turn) beep = self.dgttranslate.bl(BeepLevel.BUTTON) text = Dgt.DISPLAY_MOVE(move=self.last_move, fen=self.last_fen, side=side, wait=False, maxtime=1, beep=beep, devs={'ser', 'i2c', 'web'}, uci960=self.uci960, lang=self.dgttranslate.language, capital=self.dgttranslate.capital, long=self.dgttranslate.notation) else: text = self.dgttranslate.text('B10_nomove') DispatchDgt.fire(text) self._exit_display()
def _process_new_pv(self, message): self.hint_move = message.pv[0] self.hint_fen = message.game.fen() self.hint_turn = message.game.turn if message.mode == Mode.ANALYSIS and not self._inside_main_menu(): side = self._get_clock_side(self.hint_turn) beep = self.dgttranslate.bl(BeepLevel.NO) disp = Dgt.DISPLAY_MOVE(move=self.hint_move, fen=self.hint_fen, side=side, wait=True, maxtime=0, beep=beep, devs={'ser', 'i2c', 'web'}, uci960=self.uci960, lang=self.dgttranslate.language, capital=self.dgttranslate.capital) DispatchDgt.fire(disp)
def _exit_display(self): if self.play_move and self.dgtmenu.get_mode() in (Mode.NORMAL, Mode.BRAIN, Mode.REMOTE): side = self._get_clock_side(self.play_turn) beep = self.dgttranslate.bl(BeepLevel.BUTTON) text = Dgt.DISPLAY_MOVE(move=self.play_move, fen=self.play_fen, side=side, wait=True, maxtime=1, beep=beep, devs={'ser', 'i2c', 'web'}, uci960=self.uci960, lang=self.dgttranslate.language, capital=self.dgttranslate.capital) else: text = None if self._inside_main_menu(): text = self.dgtmenu.get_current_text() if text: text.wait = True # in case of "bad pos" message send before else: text = Dgt.DISPLAY_TIME(force=True, wait=True, devs={'ser', 'i2c', 'web'}) DispatchDgt.fire(text)