]>
Commit | Line | Data |
---|---|---|
d684c216 | 1 | /* |
2d914b45 | 2 | * (C) Copyright 2014,2016 Leo C. <erbl259-lmu@yahoo.de> |
35edb766 | 3 | * |
d684c216 L |
4 | * Copyright 2000-2009 |
5 | * Wolfgang Denk, DENX Software Engineering, wd@denx.de. | |
6 | * | |
2d914b45 | 7 | * SPDX-License-Identifier: GPL-2.0 |
d684c216 L |
8 | */ |
9 | ||
7eecbdac | 10 | #include "cmd_misc.h" |
2d914b45 | 11 | #include "eval_arg.h" |
bbd45c46 | 12 | #include <stdbool.h> |
8a7decea | 13 | |
8a7decea L |
14 | #include "timer.h" |
15 | #include "con-utils.h" | |
bbd45c46 | 16 | #include "getopt-min.h" |
d684c216 L |
17 | |
18 | ||
fcf1d5b3 | 19 | command_ret_t do_echo(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[]) |
d684c216 | 20 | { |
bbd45c46 | 21 | bool put_newline = true; |
8a7decea | 22 | |
d684c216 L |
23 | (void) cmdtp; (void) flag; |
24 | ||
bbd45c46 L |
25 | int opt; |
26 | while ((opt = getopt(argc, argv, PSTR("n"))) != -1) { | |
27 | switch (opt) { | |
28 | case 'n': | |
29 | put_newline = false; | |
30 | break; | |
31 | default: /* '?' */ | |
32 | return CMD_RET_USAGE; | |
33 | } | |
34 | } | |
d684c216 | 35 | |
bbd45c46 | 36 | for (uint_fast8_t i = optind; i < argc; i++) { |
8a7decea | 37 | |
bbd45c46 | 38 | if (i != optind) |
d684c216 | 39 | putchar(' '); |
bbd45c46 L |
40 | |
41 | my_puts(argv[i]); | |
8a7decea L |
42 | } |
43 | ||
bbd45c46 | 44 | if (put_newline) |
d684c216 L |
45 | putchar('\n'); |
46 | ||
d0581f88 | 47 | return CMD_RET_SUCCESS; |
d684c216 L |
48 | } |
49 | ||
8a7decea | 50 | |
fcf1d5b3 | 51 | command_ret_t do_sleep(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[]) |
8a7decea L |
52 | { |
53 | unsigned long start = get_timer(0); | |
54 | unsigned long delay; | |
55 | char *sp; | |
56 | uint_fast8_t millisec = 0; | |
57 | ||
58 | (void) cmdtp; (void) flag; | |
59 | ||
60 | if (argc != 2) | |
61 | return CMD_RET_USAGE; | |
62 | ||
2d914b45 | 63 | delay = eval_arg(argv[1], &sp); |
8a7decea L |
64 | |
65 | if (*sp == 'm') { | |
66 | millisec = 1; | |
67 | sp++; | |
68 | } | |
69 | if (*sp == 's') | |
70 | sp++; | |
71 | if (*sp != '\0') | |
72 | return CMD_RET_USAGE; | |
73 | ||
74 | if (!millisec) | |
75 | delay *= 1000; | |
76 | ||
77 | while (get_timer(start) < delay) { | |
78 | if (ctrlc()) | |
79 | return CMD_RET_FAILURE; | |
80 | ||
81 | udelay(100); | |
82 | } | |
83 | ||
84 | return CMD_RET_SUCCESS; | |
85 | } | |
eb49471e L |
86 | |
87 | command_ret_t do_time(cmd_tbl_t *cmdtp UNUSED, uint_fast8_t flag UNUSED, int argc, char * const argv[]) | |
88 | { | |
89 | uint32_t elapsed_ms = 0; | |
90 | command_ret_t retval; | |
91 | uint_fast8_t repeatable; | |
92 | ||
93 | if (argc == 1) | |
94 | return CMD_RET_USAGE; | |
95 | ||
96 | elapsed_ms = get_timer(0); | |
97 | retval = cmd_process(0, argc - 1, argv + 1, &repeatable); | |
98 | elapsed_ms = get_timer(elapsed_ms); | |
99 | ||
100 | uint32_t min; | |
101 | uint16_t sec, ms; | |
102 | ||
103 | min = elapsed_ms / 1000 / 60; | |
104 | sec = (elapsed_ms / 1000) % 60; | |
105 | ms = elapsed_ms % 1000; | |
106 | ||
aea51b6c | 107 | printf_P(PSTR("\ntime: %lum %u.%03us\n"), min, sec, ms); |
eb49471e L |
108 | |
109 | return retval; | |
110 | } |