]> cloudbase.mooo.com Git - z180-stamp.git/blame - avr/cmd_misc.c
new command: time
[z180-stamp.git] / avr / cmd_misc.c
CommitLineData
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 19command_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 51command_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
87command_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
107 printf_P(PSTR("\ntime: %lum%u.%03us\n"), min, sec, ms);
108
109 return retval;
110}