Skip to content

Commit

Permalink
Merge 1604883 into 66115a3
Browse files Browse the repository at this point in the history
  • Loading branch information
dpgeorge committed Jun 13, 2021
2 parents 66115a3 + 1604883 commit b15bcbd
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 42 deletions.
31 changes: 20 additions & 11 deletions tools/mpremote/mpremote/console.py
@@ -1,11 +1,11 @@
import sys
import sys, time

try:
import select, termios
except ImportError:
termios = None
select = None
import msvcrt
import msvcrt, signal


class ConsolePosix:
Expand All @@ -31,9 +31,9 @@ def enter(self):
def exit(self):
termios.tcsetattr(self.infd, termios.TCSANOW, self.orig_attr)

def waitchar(self):
# TODO pyb.serial might not have fd
select.select([console_in.infd, pyb.serial.fd], [], [])
def waitchar(self, pyb_serial):
# TODO pyb_serial might not have fd
select.select([self.infd, pyb_serial.fd], [], [])

def readchar(self):
res = select.select([self.infd], [], [], 0)
Expand Down Expand Up @@ -75,20 +75,29 @@ class ConsoleWindows:
b"\x94": b"Z", # Ctrl-Tab = BACKTAB,
}

def __init__(self):
self.ctrl_c = 0

def _sigint_handler(self, signo, frame):
self.ctrl_c += 1

def enter(self):
pass
signal.signal(signal.SIGINT, self._sigint_handler)

def exit(self):
pass
signal.signal(signal.SIGINT, signal.SIG_DFL)

def inWaiting(self):
return 1 if msvcrt.kbhit() else 0
return 1 if self.ctrl_c or msvcrt.kbhit() else 0

def waitchar(self):
while not (self.inWaiting() or pyb.serial.inWaiting()):
def waitchar(self, pyb_serial):
while not (self.inWaiting() or pyb_serial.inWaiting()):
time.sleep(0.01)

def readchar(self):
if self.ctrl_c:
self.ctrl_c -= 1
return b"\x03"
if msvcrt.kbhit():
ch = msvcrt.getch()
while ch in b"\x00\xe0": # arrow or function key prefix?
Expand Down Expand Up @@ -120,7 +129,7 @@ def write(self, buf):

# Windows VT mode ( >= win10 only)
# https://bugs.python.org/msg291732
import ctypes
import ctypes, os
from ctypes import wintypes

kernel32 = ctypes.WinDLL("kernel32", use_last_error=True)
Expand Down
38 changes: 8 additions & 30 deletions tools/mpremote/mpremote/main.py
Expand Up @@ -17,29 +17,14 @@
mpremote repl -- enter REPL
"""

import os, select, sys, time
import os, sys
import serial.tools.list_ports

from . import pyboardextended as pyboard
from .console import Console, ConsolePosix

_PROG = "mpremote"

_AUTO_CONNECT_SEARCH_LIST = [
"/dev/ttyACM0",
"/dev/ttyACM1",
"/dev/ttyACM2",
"/dev/ttyACM3",
"/dev/ttyUSB0",
"/dev/ttyUSB1",
"/dev/ttyUSB2",
"/dev/ttyUSB3",
"COM0",
"COM1",
"COM2",
"COM3",
]

_BUILTIN_COMMAND_EXPANSIONS = {
# Device connection shortcuts.
"a0": "connect /dev/ttyACM0",
Expand Down Expand Up @@ -187,14 +172,12 @@ def do_connect(args):
return None
elif dev == "auto":
# Auto-detect and auto-connect to the first available device.
ports = serial.tools.list_ports.comports()
for dev in _AUTO_CONNECT_SEARCH_LIST:
if any(p.device == dev for p in ports):
try:
return pyboard.PyboardExtended(dev, baudrate=115200)
except pyboard.PyboardError as er:
if not er.args[0].startswith("failed to access"):
raise er
for p in sorted(serial.tools.list_ports.comports()):
try:
return pyboard.PyboardExtended(p.device, baudrate=115200)
except pyboard.PyboardError as er:
if not er.args[0].startswith("failed to access"):
raise er
raise pyboard.PyboardError("no device found")
elif dev.startswith("id:"):
# Search for a device with the given serial number.
Expand Down Expand Up @@ -266,12 +249,7 @@ def _list_recursive(files, path):

def do_repl_main_loop(pyb, console_in, console_out_write, *, code_to_inject, file_to_inject):
while True:
if isinstance(console_in, ConsolePosix):
# TODO pyb.serial might not have fd
select.select([console_in.infd, pyb.serial.fd], [], [])
else:
while not (console_in.inWaiting() or pyb.serial.inWaiting()):
time.sleep(0.01)
console_in.waitchar(pyb.serial)
c = console_in.readchar()
if c:
if c == b"\x1d": # ctrl-], quit
Expand Down
2 changes: 1 addition & 1 deletion tools/mpremote/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = mpremote
version = 0.0.4
version = 0.0.5
author = Damien George
author_email = damien@micropython.org
description = Tool for interacting remotely with MicroPython
Expand Down

0 comments on commit b15bcbd

Please sign in to comment.