term.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from .utils import default_port
  4. try:
  5. from serial.tools.miniterm import Miniterm, NEWLINE_CONVERISON_MAP
  6. import serial
  7. MINITERM_AVAILABLE=True
  8. except ImportError:
  9. MINITERM_AVAILABLE=False
  10. try:
  11. from serial.tools.miniterm import console
  12. CONSOLE_AVAILABLE=True
  13. except ImportError:
  14. CONSOLE_AVAILABLE=False
  15. class McuMiniterm(Miniterm):
  16. def __init__(self, serial):
  17. if not MINITERM_AVAILABLE:
  18. print "Miniterm is not available on this system"
  19. return
  20. self.serial = serial
  21. self.echo = False
  22. self.convert_outgoing = 2
  23. self.repr_mode = 1
  24. self.newline = NEWLINE_CONVERISON_MAP[self.convert_outgoing]
  25. self.dtr_state = True
  26. self.rts_state = True
  27. self.break_state = False
  28. def terminal(port=default_port()):
  29. if not MINITERM_AVAILABLE:
  30. print "Miniterm is not available on this system"
  31. return False
  32. sp = serial.Serial(port, 9600)
  33. # Keeps things working, if following conections are made:
  34. ## RTS = CH_PD (i.e reset)
  35. ## DTR = GPIO0
  36. sp.setRTS(False)
  37. sp.setDTR(False)
  38. miniterm = McuMiniterm(sp)
  39. log.info('Started terminal. Hit ctrl-] to leave terminal')
  40. if CONSOLE_AVAILABLE:
  41. console.setup()
  42. miniterm.start()
  43. try:
  44. miniterm.join(True)
  45. except KeyboardInterrupt:
  46. pass
  47. miniterm.join()
  48. sp.close()