From ecd48027faca4cd153fc11fb7e6393e24e77e7c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= <jbrazio@gmail.com>
Date: Sat, 23 Jul 2016 01:41:25 +0100
Subject: [PATCH] Adds short timestamp format to timestamp_t

---
 Marlin/timestamp_t.h | 52 ++++++++++++++++++++++++++------------------
 1 file changed, 31 insertions(+), 21 deletions(-)

diff --git a/Marlin/timestamp_t.h b/Marlin/timestamp_t.h
index 2a18eb00f5e..8295360d148 100644
--- a/Marlin/timestamp_t.h
+++ b/Marlin/timestamp_t.h
@@ -30,13 +30,13 @@ struct timestamp_t {
   uint32_t timestamp;
 
   /**
-   * @brief Date time blank constructor
+   * @brief Timestamp blank constructor
    */
   timestamp_t()
     : timestamp_t(0) {};
 
   /**
-   * @brief Date time constructor
+   * @briefTimestamp constructor
    * @details Initializes the timestamp_t structure based on a number of seconds
    *
    * @param seconds The number of seconds
@@ -46,7 +46,7 @@ struct timestamp_t {
   }
 
   /**
-   * @brief Formats the date as number of years
+   * @brief Formats the timestamp in years
    * @return The number of years
    */
   inline uint8_t year() const {
@@ -54,7 +54,7 @@ struct timestamp_t {
   }
 
   /**
-   * @brief Formats the date as number of days
+   * @brief Formats the timestamp in days
    * @return The number of days
    */
   inline uint16_t day() const {
@@ -62,7 +62,7 @@ struct timestamp_t {
   }
 
   /**
-   * @brief Formats the date as number of hours
+   * @brief Formats the timestamp in hours
    * @return The number of hours
    */
   inline uint32_t hour() const {
@@ -70,7 +70,7 @@ struct timestamp_t {
   }
 
   /**
-   * @brief Formats the date as number of minutes
+   * @brief Formats the timestamp in minutes
    * @return The number of minutes
    */
   inline uint32_t minute() const {
@@ -78,7 +78,7 @@ struct timestamp_t {
   }
 
   /**
-   * @brief Formats the date as number of seconds
+   * @brief Formats the timestamp in seconds
    * @return The number of seconds
    */
   inline uint32_t second() const {
@@ -86,12 +86,14 @@ struct timestamp_t {
   }
 
   /**
-   * @brief Formats the date as a string
+   * @brief Formats the timestamp as a string
    * @details Returns the timestamp formated as a string
    *
-   * @param buffer The array pointed to must be able to accommodate 21 bytes
+   * @param buffer The array pointed to must be able to accommodate 21 bytes when
+   *               on standard mode or 10 bytes otherwise.
+   * @param shorty If true a short representation will be returned.
    *
-   * String output examples:
+   * Standard toString() output examples:
    *  123456789012345678901 (strlen)
    *  135y 364d 23h 59m 59s
    *  364d 23h 59m 59s
@@ -99,19 +101,27 @@ struct timestamp_t {
    *  59m 59s
    *  59s
    *
+   * Short toString() output examples:
+   *  1234567890 (strlen)
+   *  1193046:59
+   *
    */
-  void toString(char *buffer) const {
-    int y = this->year(),
-        d = this->day() % 365,
-        h = this->hour() % 24,
-        m = this->minute() % 60,
-        s = this->second() % 60;
+  void toString(char *buffer, bool const &shorty = false) const {
+    int h = this->hour() % 24,
+        m = this->minute() % 60;
 
-    if (y) sprintf_P(buffer, PSTR("%iy %id %ih %im %is"), y, d, h, m, s);
-    else if (d) sprintf_P(buffer, PSTR("%id %ih %im %is"), d, h, m, s);
-    else if (h) sprintf_P(buffer, PSTR("%ih %im %is"), h, m, s);
-    else if (m) sprintf_P(buffer, PSTR("%im %is"), m, s);
-    else sprintf_P(buffer, PSTR("%is"), s);
+    if (shorty) sprintf_P(buffer, PSTR("%02i:%02i"), h, m);
+    else {
+      int y = this->year(),
+          d = this->day() % 365,
+          s = this->second() % 60;
+
+      if (y) sprintf_P(buffer, PSTR("%iy %id %ih %im %is"), y, d, h, m, s);
+      else if (d) sprintf_P(buffer, PSTR("%id %ih %im %is"), d, h, m, s);
+      else if (h) sprintf_P(buffer, PSTR("%ih %im %is"), h, m, s);
+      else if (m) sprintf_P(buffer, PSTR("%im %is"), m, s);
+      else sprintf_P(buffer, PSTR("%is"), s);
+    }
   }
 };