diff options
author | Vadim Bendebury <vbendeb@chromium.org> | 2019-04-05 10:42:50 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-07-02 23:28:41 +0000 |
commit | c7f66d9adc31395fd0fa336ab6050c4953b98b35 (patch) | |
tree | 4a90a806eb4c51fbbac54b5a52990c3edbd2d7ad /util | |
parent | 4509620f1e7873ee239b558675a47c69f614a732 (diff) | |
download | chrome-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/chargen | 69 |
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) |