GR-KURUMI Shell
A follow-up on my previous articles about a GR-KURUMI Writer and the GR-KURUMI Makefiles. Here is a program written for the GR-KURUMI that provides a command shell interface against its LED and timer functions.
The shell is spawned on UART #0, the same one used for flashing, since this is most convenient. The DTR signal must be disconnected in order to avoid the chip going into flashing mode though. The shell provides a simple BASIC-style scripting interface. Commands can be put into a script/program buffer, indexed by 0 to 99, which can be run continuously.
Get the source code here and check the article on Makefiles on how to get the tool chain up and running. Then use the article on the Writer to flash the chip.
Here is a Python script that can be used to load script files remotely in an easy manner:
#!/usr/bin/python import serial class Kurumi(object): def __init__(self, port): self.s = serial.Serial() self.s.port = port self.s.baudrate = 9600 self.s.bytesize = serial.EIGHTBITS self.s.parity = serial.PARITY_NONE self.s.stopbits = serial.STOPBITS_ONE self.s.xonxoff = False self.s.rtscts = False self.s.dsrdtr = False self.s.open() self.s.flushInput() self.s.flushOutput() def __del__(self): self.s.close() def _command(self, cmd): print ">", cmd for char in cmd: self.s.write(char) # Write one character at a time... self.s.read(1) # ...and read the echo. self.s.write("\r") # Finish command... self.s.read(10) # ...and read the prompt. def script(self, filename): self._command("stop") self._command("red off") self._command("green off") self._command("blue off") self._command("clear") with open(filename) as fh: for line_no, line in enumerate(fh): self._command("%s %s" % (line_no, line.strip())) self._command("run") if __name__ == "__main__": import sys k = Kurumi("/dev/ttyUSB0") if len(sys.argv) > 1: k.script(sys.argv[1]) else: print "Usage: %s <script file>" % (sys.argv[0])
A typical script file can look like this:
red on sleep 50 red off sleep 50 green on blue on sleep 100 green off sleep 100 blue off sleep 500