Skip to content

Commit

Permalink
Merge pull request google#159 from gendx/console-test
Browse files Browse the repository at this point in the history
Add console_test example to stress-test Tock's console driver.
  • Loading branch information
gendx authored Sep 22, 2020
2 parents 658b767 + a3b9724 commit 88e155f
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 6 deletions.
7 changes: 7 additions & 0 deletions deploy.py
Original file line number Diff line number Diff line change
Expand Up @@ -913,6 +913,13 @@ def main(args):
const="oom_test",
help=("Compiles and installs the oom_test example that tests the "
"allocator until an out-of-memory error occurs."))
apps_group.add_argument(
"--console_test",
dest="application",
action="store_const",
const="console_test",
help=("Compiles and installs the console_test example that tests the "
"console driver with messages of various lengths."))

main_parser.set_defaults(features=["with_ctap1"])

Expand Down
33 changes: 33 additions & 0 deletions examples/console_test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#![no_std]

extern crate lang_items;

use libtock_drivers::console::{Console, BUFFER_SIZE};

fn main() {
// Write messages of length up to the console driver's buffer size.
let mut buf = [0; BUFFER_SIZE];
loop {
for i in 1..buf.len() {
for j in 0..i {
buf[j] = b'0' + ((i % 10) as u8);
}
buf[i] = b'\n';
Console::write_unbuffered(&mut buf[..(i + 1)]);
}
}
}
14 changes: 8 additions & 6 deletions third_party/libtock-drivers/src/console.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ mod allow_nr {
pub const SHARE_BUFFER: usize = 1;
}

const BUFFER_SIZE: usize = 1024;
pub const BUFFER_SIZE: usize = 1024;

pub struct Console {
allow_buffer: [u8; BUFFER_SIZE],
Expand Down Expand Up @@ -70,11 +70,13 @@ impl Console {
// Clear the buffer even in case of error, to avoid an infinite loop.
self.count_pending = 0;

let result = syscalls::allow(
DRIVER_NUMBER,
allow_nr::SHARE_BUFFER,
&mut self.allow_buffer[..count],
);
Console::write_unbuffered(&mut self.allow_buffer[..count]);
}

pub fn write_unbuffered(buf: &mut [u8]) {
let count = buf.len();

let result = syscalls::allow(DRIVER_NUMBER, allow_nr::SHARE_BUFFER, buf);
if result.is_err() {
return;
}
Expand Down

0 comments on commit 88e155f

Please sign in to comment.