Browse Source

Implemented the stopwatch class and methods

João Brázio 8 years ago
parent
commit
399101fff3
2 changed files with 176 additions and 0 deletions
  1. 77
    0
      Marlin/stopwatch.cpp
  2. 99
    0
      Marlin/stopwatch.h

+ 77
- 0
Marlin/stopwatch.cpp View File

1
+/*
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * Based on Sprinter and grbl.
6
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU General Public License as published by
10
+ * the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU General Public License
19
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+#include "Marlin.h"
24
+#include "stopwatch.h"
25
+
26
+stopwatch::stopwatch() {
27
+   this->reset();
28
+ }
29
+
30
+void stopwatch::stop() {
31
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("stopwatch::stop()");
32
+  if (!this->isRunning()) return;
33
+
34
+  this->status = STPWTCH_STOPPED;
35
+  this->stopTimestamp = millis();
36
+}
37
+
38
+void stopwatch::pause() {
39
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("stopwatch::pause()");
40
+  if (!this->isRunning()) return;
41
+
42
+  this->status = STPWTCH_PAUSED;
43
+  this->stopTimestamp = millis();
44
+}
45
+
46
+void stopwatch::start() {
47
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("stopwatch::start()");
48
+  if (this->isRunning()) return;
49
+
50
+  if (this->isPaused()) this->accumulator = this->duration();
51
+  else this->reset();
52
+
53
+  this->status = STPWTCH_RUNNING;
54
+  this->startTimestamp = millis();
55
+}
56
+
57
+void stopwatch::reset() {
58
+  if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("stopwatch::reset()");
59
+
60
+  this->status = STPWTCH_STOPPED;
61
+  this->startTimestamp = 0;
62
+  this->stopTimestamp = 0;
63
+  this->accumulator = 0;
64
+}
65
+
66
+bool stopwatch::isRunning() {
67
+  return (this->status == STPWTCH_RUNNING) ? true : false;
68
+}
69
+
70
+bool stopwatch::isPaused() {
71
+  return (this->status == STPWTCH_PAUSED) ? true : false;
72
+}
73
+
74
+uint16_t stopwatch::duration() {
75
+  return (((this->isRunning()) ? millis() : this->stopTimestamp)
76
+          - this->startTimestamp) / 1000 + this->accumulator;
77
+}

+ 99
- 0
Marlin/stopwatch.h View File

1
+/*
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * Based on Sprinter and grbl.
6
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU General Public License as published by
10
+ * the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU General Public License
19
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+#ifndef STOPWATCH_H
24
+#define STOPWATCH_H
25
+
26
+enum stopwatch_s {
27
+  STPWTCH_STOPPED = 0x0,
28
+  STPWTCH_RUNNING = 0x1,
29
+  STPWTCH_PAUSED  = 0x2
30
+};
31
+
32
+/**
33
+ * @brief Stopwatch class
34
+ * @details This class acts as a timer proving stopwatch functionality including
35
+ * the ability to pause the running time counter.
36
+ */
37
+class stopwatch {
38
+  private:
39
+    stopwatch_s status;
40
+    uint16_t accumulator;
41
+    uint32_t startTimestamp;
42
+    uint32_t stopTimestamp;
43
+
44
+  public:
45
+    /**
46
+     * @brief Class constructor
47
+     */
48
+    stopwatch();
49
+
50
+    /**
51
+     * @brief Stops the stopwatch
52
+     * @details Stops the running timer, it will silently ignore the request if
53
+     * no timer is currently running.
54
+     */
55
+    void stop();
56
+
57
+    /**
58
+     * @brief Pauses the stopwatch
59
+     * @details Pauses the running timer, it will silently ignore the request if
60
+     * no timer is currently running.
61
+     */
62
+    void pause();
63
+
64
+    /**
65
+     * @brief Starts the stopwatch
66
+     * @details Starts the timer, it will silently ignore the request if the
67
+     * timer is already running.
68
+     */
69
+    void start();
70
+
71
+    /**
72
+     * @brief Resets the stopwatch
73
+     * @details Resets all settings to their default values.
74
+     */
75
+    void reset();
76
+
77
+    /**
78
+     * @brief Checks if the timer is running
79
+     * @details Returns true if the timer is currently running, false otherwise.
80
+     * @return bool
81
+     */
82
+    bool isRunning();
83
+
84
+    /**
85
+     * @brief Checks if the timer is paused
86
+     * @details Returns true if the timer is currently paused, false otherwise.
87
+     * @return bool
88
+     */
89
+    bool isPaused();
90
+
91
+    /**
92
+     * @brief Gets the running time
93
+     * @details Returns the total number of seconds the timer has been running.
94
+     * @return uint16_t
95
+     */
96
+    uint16_t duration();
97
+};
98
+
99
+#endif //STOPWATCH_H

Loading…
Cancel
Save