]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - avr/cmd_misc.c
new command: time
[z180-stamp.git] / avr / cmd_misc.c
index c9a3c4529e255957940bb9f699237d25c1838004..ad913e83815d7938cafd09bcc3eacd2a93cae9b5 100644 (file)
@@ -1,31 +1,27 @@
 /*
- * (C) Copyright 2014 Leo C. <erbl259-lmu@yahoo.de>
+ * (C) Copyright 2014,2016 Leo C. <erbl259-lmu@yahoo.de>
  *
  * Copyright 2000-2009
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
- * SPDX-License-Identifier:    GPL-2.0+
+ * SPDX-License-Identifier:    GPL-2.0
  */
 
-#include "common.h"
-#include <stdlib.h>
+#include "cmd_misc.h"
+#include "eval_arg.h"
 #include <stdbool.h>
 
-#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[])
+command_ret_t do_echo(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
 {
        bool put_newline = true;
 
        (void) cmdtp; (void) flag;
 
-       /* reset getopt() */
-       optind = 1;
-
        int opt;
        while ((opt = getopt(argc, argv, PSTR("n"))) != -1) {
                switch (opt) {
@@ -52,7 +48,7 @@ command_ret_t do_echo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 }
 
 
-command_ret_t do_sleep(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+command_ret_t do_sleep(cmd_tbl_t *cmdtp, uint_fast8_t flag, int argc, char * const argv[])
 {
        unsigned long start = get_timer(0);
        unsigned long delay;
@@ -64,7 +60,7 @@ command_ret_t do_sleep(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
        if (argc != 2)
                return CMD_RET_USAGE;
 
-       delay = strtoul(argv[1], &sp, 10);
+       delay = eval_arg(argv[1], &sp);
 
        if (*sp == 'm') {
                millisec = 1;
@@ -87,3 +83,28 @@ command_ret_t do_sleep(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
 
        return CMD_RET_SUCCESS;
 }
+
+command_ret_t do_time(cmd_tbl_t *cmdtp UNUSED, uint_fast8_t flag UNUSED, int argc, char * const argv[])
+{
+       uint32_t elapsed_ms = 0;
+       command_ret_t retval;
+       uint_fast8_t repeatable;
+
+       if (argc == 1)
+               return CMD_RET_USAGE;
+
+       elapsed_ms = get_timer(0);
+       retval = cmd_process(0, argc - 1, argv + 1, &repeatable);
+       elapsed_ms = get_timer(elapsed_ms);
+
+       uint32_t min;
+       uint16_t sec, ms;
+
+       min = elapsed_ms / 1000 / 60;
+       sec = (elapsed_ms / 1000) % 60;
+       ms = elapsed_ms % 1000;
+
+       printf_P(PSTR("\ntime: %lum%u.%03us\n"), min, sec, ms);
+
+       return retval;
+}