Skip to content

Commit e5a6bac

Browse files
author
whitequark
committedJan 2, 2016
Add --serial-boot argument to flterm.
1 parent 3e0e5cc commit e5a6bac

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed
 

Diff for: ‎misoc/tools/flterm.py

+22-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99

1010
from serial.tools.miniterm import console, character, LF
1111

12-
sfl_magic_len = 14
12+
sfl_prompt_req = "F7: boot from serial\n"
13+
sfl_prompt_ack = "\x06"
14+
1315
sfl_magic_req = "sL5DdSMmkekro\n"
1416
sfl_magic_ack = "z6IHG7cYDID6o\n"
1517

@@ -108,13 +110,15 @@ def get_file_data(filename):
108110

109111

110112
class Flterm:
111-
def __init__(self, kernel_image, kernel_address):
113+
def __init__(self, serial_boot, kernel_image, kernel_address):
114+
self.serial_boot = serial_boot
112115
self.kernel_image = kernel_image
113116
self.kernel_address = kernel_address
114117

115118
self.reader_alive = False
116119
self.writer_alive = False
117120

121+
self.detect_prompt_str = " "*len(sfl_prompt_req)
118122
self.detect_magic_str = " "*len(sfl_magic_req)
119123

120124
def open(self, port, speed):
@@ -195,6 +199,17 @@ def boot(self):
195199
frame.payload.append(d)
196200
self.send_frame(frame)
197201

202+
def detect_prompt(self, data):
203+
if data is not "":
204+
self.detect_prompt_str = self.detect_prompt_str[1:] + data
205+
return self.detect_prompt_str == sfl_prompt_req
206+
else:
207+
return False
208+
209+
def answer_prompt(self):
210+
print("[FLTERM] Received serial boot prompt from the device.")
211+
self.write_exact(sfl_prompt_ack)
212+
198213
def detect_magic(self, data):
199214
if data is not "":
200215
self.detect_magic_str = self.detect_magic_str[1:] + data
@@ -221,6 +236,8 @@ def reader(self):
221236
sys.stdout.flush()
222237

223238
if self.kernel_image is not None:
239+
if self.serial_boot and self.detect_prompt(c):
240+
self.answer_prompt()
224241
if self.detect_magic(c):
225242
self.answer_magic()
226243

@@ -285,14 +302,16 @@ def _get_args():
285302
parser = argparse.ArgumentParser()
286303
parser.add_argument("port", help="serial port")
287304
parser.add_argument("--speed", default=115200, help="serial baudrate")
305+
parser.add_argument("--serial-boot", default=False, action='store_true',
306+
help="automatically initiate serial boot")
288307
parser.add_argument("--kernel", default=None, help="kernel image")
289308
parser.add_argument("--kernel-adr", type=lambda a: int(a, 0), default=0x40000000, help="kernel address")
290309
return parser.parse_args()
291310

292311

293312
def main():
294313
args = _get_args()
295-
flterm = Flterm(args.kernel, args.kernel_adr)
314+
flterm = Flterm(args.serial_boot, args.kernel, args.kernel_adr)
296315
flterm.open(args.port, args.speed)
297316
flterm.start()
298317
try:

0 commit comments

Comments
 (0)
Please sign in to comment.