mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-01-17 18:32:44 +01:00
* added configuration file
* added history * added aliases
This commit is contained in:
parent
3b9e9befa9
commit
21fef20ccc
@ -1,31 +1,108 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import cmd, serial, sys, threading, readline, time
|
import cmd, serial, sys, threading, readline, time, ConfigParser
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from os import path
|
||||||
|
|
||||||
class MyCmd(cmd.Cmd):
|
class SerCmd(cmd.Cmd):
|
||||||
|
|
||||||
|
def __init__(self, port=None):
|
||||||
|
cmd.Cmd.__init__(self)
|
||||||
|
self.port = port
|
||||||
|
self.aliases = dict()
|
||||||
|
self.load_config()
|
||||||
|
try:
|
||||||
|
readline.read_history_file()
|
||||||
|
except IOError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def preloop(self):
|
||||||
|
if not self.port:
|
||||||
|
sys.stderr.write("No port specified!\n")
|
||||||
|
sys.exit(-1)
|
||||||
|
self.ser = serial.Serial(port=self.port, baudrate=115200, dsrdtr=0, rtscts=0)
|
||||||
|
self.ser.setDTR(0)
|
||||||
|
self.ser.setRTS(0)
|
||||||
|
|
||||||
|
# start serial->console thread
|
||||||
|
receiver_thread = threading.Thread(target=reader, args=(self.ser,))
|
||||||
|
receiver_thread.setDaemon(1)
|
||||||
|
receiver_thread.start()
|
||||||
|
|
||||||
def default(self, line):
|
def default(self, line):
|
||||||
for tok in line.split(';'):
|
for tok in line.split(';'):
|
||||||
self.stdout.write(tok.strip() + "\n")
|
tok = self.get_alias(tok)
|
||||||
|
self.ser.write(tok.strip() + "\n")
|
||||||
|
|
||||||
def do_help(self, line):
|
def do_help(self, line):
|
||||||
self.stdout.write("help\n")
|
self.ser.write("help\n")
|
||||||
|
|
||||||
def complete_date(self, text, line, begidx, endidm):
|
def complete_date(self, text, line, begidx, endidm):
|
||||||
date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
return ["%s" % date]
|
return ["%s" % date]
|
||||||
|
|
||||||
def do_reset(self, line):
|
def do_reset(self, line):
|
||||||
ser.setDTR(1)
|
self.ser.setDTR(1)
|
||||||
ser.setRTS(1)
|
self.ser.setRTS(1)
|
||||||
ser.setDTR(0)
|
self.ser.setDTR(0)
|
||||||
ser.setRTS(0)
|
self.ser.setRTS(0)
|
||||||
|
|
||||||
def do_exit(self, line):
|
def do_exit(self, line):
|
||||||
|
readline.write_history_file()
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
def do_save(self, line):
|
||||||
|
if not self.config.has_section("general"):
|
||||||
|
self.config.add_section("general")
|
||||||
|
self.config.set("general", "port", self.port)
|
||||||
|
if len(self.aliases):
|
||||||
|
if not self.config.has_section("aliases"):
|
||||||
|
self.config.add_section("aliases")
|
||||||
|
for alias in self.aliases:
|
||||||
|
self.config.set("aliases", alias, self.aliases[alias])
|
||||||
|
|
||||||
|
with open(path.expanduser('~/.pyterm'), 'wb') as config_fd:
|
||||||
|
self.config.write(config_fd)
|
||||||
|
print("Config saved")
|
||||||
|
|
||||||
|
def do_show_config(self, line):
|
||||||
|
for key in self.__dict__:
|
||||||
|
print(str(key) + ": " + str(self.__dict__[key]))
|
||||||
|
|
||||||
|
def do_alias(self, line):
|
||||||
|
if line.endswith("list"):
|
||||||
|
for alias in self.aliases:
|
||||||
|
print("%s = %s" % (alias, self.aliases[alias]))
|
||||||
|
return
|
||||||
|
if not line.count("="):
|
||||||
|
sys.stderr.write("Usage: alias <ALIAS> = <CMD>\n")
|
||||||
|
return
|
||||||
|
self.aliases[line.split('=')[0].strip()] = line.split('=')[1].strip()
|
||||||
|
|
||||||
|
def do_rmalias(self, line):
|
||||||
|
if not self.aliases.pop(line, None):
|
||||||
|
sys.stderr.write("Alias not found")
|
||||||
|
|
||||||
|
def get_alias(self, tok):
|
||||||
|
for alias in self.aliases:
|
||||||
|
if tok.split()[0] == alias:
|
||||||
|
return self.aliases[alias] + tok[len(alias):]
|
||||||
|
return tok
|
||||||
|
|
||||||
|
def load_config(self):
|
||||||
|
self.config = ConfigParser.SafeConfigParser()
|
||||||
|
self.config.read([path.expanduser('~/.pyterm')])
|
||||||
|
|
||||||
|
for sec in self.config.sections():
|
||||||
|
if sec == "aliases":
|
||||||
|
for opt in self.config.options(sec):
|
||||||
|
self.aliases[opt] = self.config.get(sec, opt)
|
||||||
|
else:
|
||||||
|
for opt in self.config.options(sec):
|
||||||
|
self.__dict__[opt] = self.config.get(sec, opt)
|
||||||
|
|
||||||
|
|
||||||
def reader(ser):
|
def reader(ser):
|
||||||
while (1):
|
while (1):
|
||||||
c = ser.read(1)
|
c = ser.read(1)
|
||||||
@ -33,23 +110,12 @@ def reader(ser):
|
|||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
if (len(sys.argv) > 1):
|
||||||
|
port = sys.argv[1]
|
||||||
|
else:
|
||||||
|
port = None
|
||||||
|
|
||||||
if (len(sys.argv) != 2):
|
myshell = SerCmd(port)
|
||||||
print("Usage: %s <PORT>" % sys.argv[0])
|
myshell.prompt = ''
|
||||||
sys.exit(-1)
|
|
||||||
|
|
||||||
p = sys.argv[1]
|
myshell.cmdloop("Welcome to pyterm")
|
||||||
ser = serial.Serial(port=p, baudrate=115200, dsrdtr=0, rtscts=0)
|
|
||||||
|
|
||||||
ser.setDTR(0)
|
|
||||||
ser.setRTS(0)
|
|
||||||
|
|
||||||
# start serial->console thread
|
|
||||||
receiver_thread = threading.Thread(target=reader, args=(ser,))
|
|
||||||
receiver_thread.setDaemon(1)
|
|
||||||
receiver_thread.start()
|
|
||||||
|
|
||||||
myshell = MyCmd(stdout=ser)
|
|
||||||
myshell.prompt = ""
|
|
||||||
|
|
||||||
myshell.cmdloop("Opening port: %s" % sys.argv[1])
|
|
||||||
|
Loading…
Reference in New Issue
Block a user