/* * (C) Copyright 2014,2016 Leo C. * * Copyright 2000-2009 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * SPDX-License-Identifier: GPL-2.0 */ #include "common.h" #include "eval_arg.h" #include #include "command.h" #include "timer.h" #include "con-utils.h" #include "getopt-min.h" command_ret_t do_echo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { bool put_newline = true; (void) cmdtp; (void) flag; /* reset getopt() */ optind = 0; int opt; while ((opt = getopt(argc, argv, PSTR("n"))) != -1) { switch (opt) { case 'n': put_newline = false; break; default: /* '?' */ return CMD_RET_USAGE; } } for (uint_fast8_t i = optind; i < argc; i++) { if (i != optind) putchar(' '); my_puts(argv[i]); } if (put_newline) putchar('\n'); return CMD_RET_SUCCESS; } command_ret_t do_sleep(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { unsigned long start = get_timer(0); unsigned long delay; char *sp; uint_fast8_t millisec = 0; (void) cmdtp; (void) flag; if (argc != 2) return CMD_RET_USAGE; delay = eval_arg(argv[1], &sp); if (*sp == 'm') { millisec = 1; sp++; } if (*sp == 's') sp++; if (*sp != '\0') return CMD_RET_USAGE; if (!millisec) delay *= 1000; while (get_timer(start) < delay) { if (ctrlc()) return CMD_RET_FAILURE; udelay(100); } return CMD_RET_SUCCESS; }