summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@chromium.org>2019-04-05 10:42:50 -0700
committerCommit Bot <commit-bot@chromium.org>2019-07-02 23:28:41 +0000
commitc7f66d9adc31395fd0fa336ab6050c4953b98b35 (patch)
tree4a90a806eb4c51fbbac54b5a52990c3edbd2d7ad /util
parent4509620f1e7873ee239b558675a47c69f614a732 (diff)
downloadchrome-ec-c7f66d9adc31395fd0fa336ab6050c4953b98b35.tar.gz
add chargen command to allow EC and AP to flood the console
The chargen command sends continuous stream of characters to the console (UART console in case of EC). The stream follows a pattern where the value of each next character is the value of the previous character + 1, while staying in the ASCII range of 0..9A..Za..Z This allows to create tests which validate console output by verifying that no characters in the received sequence were lost. BRANCH=none BUG=b:38448364 TEST=Enabled the command for bobba EC board, and verified that the chargen works on both EC and AP on an Octopus device Change-Id: I9701bb493b0454de4cb4baa4784ab645b33a415f Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1554198 Reviewed-by: Namyoon Woo <namyoon@chromium.org>
Diffstat (limited to 'util')
-rw-r--r--util/chargen69
1 files changed, 69 insertions, 0 deletions
diff --git a/util/chargen b/util/chargen
new file mode 100644
index 0000000000..d9260fcb0b
--- /dev/null
+++ b/util/chargen
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+# Copyright 2019 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import sys
+
+def chargen(modulo, max_chars):
+ """Generate a stream of characters on the console.
+
+ The stream is an ever incrementing pattern of characters from the
+ following set: 0..9A..Za..z.
+
+ Args:
+ modulo: an int, restart the pattern every modulo characters, if
+ modulo is non zero
+ max_chars: an int, stop printing after this number of characters if non
+ zero, if zero - print indefinitely
+ """
+
+ base = '0'
+ c = base
+ counter = 0
+ while True:
+ sys.stdout.write(c)
+ counter = counter + 1
+
+ if (max_chars != 0) and (counter == max_chars):
+ sys.stdout.write('\n')
+ return
+
+ if modulo and ((counter % modulo) == 0):
+ c = base
+ continue
+
+ if c == 'z':
+ c = base
+ elif c == 'Z':
+ c = 'a'
+ elif c == '9':
+ c = 'A'
+ else:
+ c = '%c' % (ord(c) + 1)
+
+
+def main(args):
+ '''Process command line arguments and invoke chargen if args are valid'''
+
+ modulo = 0
+ max_chars = 0
+
+ try:
+ if len(args) > 0:
+ modulo = int(args[0])
+ if len(args) > 1:
+ max_chars = int(args[1])
+ except ValueError:
+ sys.stderr.write('usage %s:'
+ "['seq_length' ['max_chars']]\n")
+ sys.exit(1)
+
+ try:
+ chargen(modulo, max_chars)
+ except KeyboardInterrupt:
+ print
+
+if __name__ == '__main__':
+ main(sys.argv[1:])
+ sys.exit(0)