# Module `lib.tools.keyboard_mcp`

Getch utilities for micropython

Expand source code

    # Distributed under Pycameresp License
    # Copyright (c) 2023 Remi BERTHOLET
    """ Getch utilities for micropython """
    import sys
    import select
    import tools.filesystem
    import tools.strings
    import tools.watchdog

    MAXINT = 100000000

    # pylint:disable=ungrouped-imports
    # pylint:disable=consider-using-enumerate
    def getch(raw = True, duration=MAXINT, interchar=0.05):
            """ Wait a key pressed on keyboard and return it """
            key = b""
            tools.watchdog.WatchDog.feed()
            while 1:
                    if len(key) == 0:
                            delay = duration
                    else:
                            delay = interchar
                    keyPressed = kbhit(delay)
                    if tools.strings.is_key_ended(key):
                            break
                    if keyPressed:
                            key += sys.stdin.buffer.read(1)
                    else:
                            if len(key) > 0:
                                    break
                            elif delay < MAXINT:
                                    break

            try:
                    key = key.decode("utf8")
            except:
                    key = tools.strings.dump(key,withColor=False)
            return key

    def kbhit(duration=0.01):
            """ Indicates if a key is pressed or not """
            r,w,e = select.select([sys.stdin],[],[],duration)
            if r != []:
                    return True
            return False

    def kbflush(duration=0.1):
            """ Flush all keys not yet read """
            while 1:
                    r,w,e = select.select([sys.stdin],[],[],duration)
                    if r != []:
                            sys.stdin.buffer.read(1)
                    else:
                            break

## Functions

`def getch(raw=True, duration=100000000, interchar=0.05)`

  Wait a key pressed on keyboard and return it

  Expand source code

      def getch(raw = True, duration=MAXINT, interchar=0.05):
              """ Wait a key pressed on keyboard and return it """
              key = b""
              tools.watchdog.WatchDog.feed()
              while 1:
                      if len(key) == 0:
                              delay = duration
                      else:
                              delay = interchar
                      keyPressed = kbhit(delay)
                      if tools.strings.is_key_ended(key):
                              break
                      if keyPressed:
                              key += sys.stdin.buffer.read(1)
                      else:
                              if len(key) > 0:
                                      break
                              elif delay < MAXINT:
                                      break

              try:
                      key = key.decode("utf8")
              except:
                      key = tools.strings.dump(key,withColor=False)
              return key

`def kbflush(duration=0.1)`

  Flush all keys not yet read

  Expand source code

      def kbflush(duration=0.1):
              """ Flush all keys not yet read """
              while 1:
                      r,w,e = select.select([sys.stdin],[],[],duration)
                      if r != []:
                              sys.stdin.buffer.read(1)
                      else:
                              break

`def kbhit(duration=0.01)`

  Indicates if a key is pressed or not

  Expand source code

      def kbhit(duration=0.01):
              """ Indicates if a key is pressed or not """
              r,w,e = select.select([sys.stdin],[],[],duration)
              if r != []:
                      return True
              return False