new

Dependencies:   mbed CANMsg

Committer:
francescopistone
Date:
Thu Jan 31 07:56:52 2019 +0000
Branch:
V6_R2C_DE_HwV5_Versione2
Revision:
15:2d5ae9acff83
Parent:
0:1e09cd7d66b4
2V_2019

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nerit 0:1e09cd7d66b4 1 /// @file Watchdog.h provides the interface to the Watchdog module
nerit 0:1e09cd7d66b4 2 ///
nerit 0:1e09cd7d66b4 3 /// This provides basic Watchdog service for the mbed. You can configure
nerit 0:1e09cd7d66b4 4 /// various timeout intervals that meet your system needs. Additionally,
nerit 0:1e09cd7d66b4 5 /// it is possible to identify if the Watchdog was the cause of any
nerit 0:1e09cd7d66b4 6 /// system restart, permitting the application code to take appropriate
nerit 0:1e09cd7d66b4 7 /// behavior.
nerit 0:1e09cd7d66b4 8 ///
nerit 0:1e09cd7d66b4 9 /// Adapted from Simon's Watchdog code from http://mbed.org/forum/mbed/topic/508/
nerit 0:1e09cd7d66b4 10 ///
nerit 0:1e09cd7d66b4 11 /// @note Copyright © 2011 by Smartware Computing, all rights reserved.
nerit 0:1e09cd7d66b4 12 /// This software may be used to derive new software, as long as
nerit 0:1e09cd7d66b4 13 /// this copyright statement remains in the source file.
nerit 0:1e09cd7d66b4 14 /// @author David Smart
nerit 0:1e09cd7d66b4 15 ///
nerit 0:1e09cd7d66b4 16 /// History
nerit 0:1e09cd7d66b4 17 /// \li v1.00 - 20110616: initial release with some documentation improvements
nerit 0:1e09cd7d66b4 18 ///
nerit 0:1e09cd7d66b4 19 #ifndef WATCHDOG_H
nerit 0:1e09cd7d66b4 20 #define WATCHDOG_H
nerit 0:1e09cd7d66b4 21 #include "mbed.h"
nerit 0:1e09cd7d66b4 22
nerit 0:1e09cd7d66b4 23 /// The Watchdog class provides the interface to the Watchdog feature
nerit 0:1e09cd7d66b4 24 ///
nerit 0:1e09cd7d66b4 25 /// Embedded programs, by their nature, are usually unattended. If things
nerit 0:1e09cd7d66b4 26 /// go wrong, it is usually important that the system attempts to recover.
nerit 0:1e09cd7d66b4 27 /// Aside from robust software, a hardware watchdog can monitor the
nerit 0:1e09cd7d66b4 28 /// system and initiate a system reset when appropriate.
nerit 0:1e09cd7d66b4 29 ///
nerit 0:1e09cd7d66b4 30 /// This Watchdog is patterned after one found elsewhere on the mbed site,
nerit 0:1e09cd7d66b4 31 /// however this one also provides a method for the application software
nerit 0:1e09cd7d66b4 32 /// to determine the cause of the reset - watchdog or otherwise.
nerit 0:1e09cd7d66b4 33 ///
nerit 0:1e09cd7d66b4 34 /// example:
nerit 0:1e09cd7d66b4 35 /// @code
nerit 0:1e09cd7d66b4 36 /// Watchdog wd;
nerit 0:1e09cd7d66b4 37 ///
nerit 0:1e09cd7d66b4 38 /// ...
nerit 0:1e09cd7d66b4 39 /// main() {
nerit 0:1e09cd7d66b4 40 /// if (wd.WatchdogCausedReset())
nerit 0:1e09cd7d66b4 41 /// pc.printf("Watchdog caused reset.\r\n");
nerit 0:1e09cd7d66b4 42 ///
nerit 0:1e09cd7d66b4 43 /// wd.Configure(3.0); // sets the timeout interval
nerit 0:1e09cd7d66b4 44 /// for (;;) {
nerit 0:1e09cd7d66b4 45 /// wd.Service(); // kick the dog before the timeout
nerit 0:1e09cd7d66b4 46 /// // do other work
nerit 0:1e09cd7d66b4 47 /// }
nerit 0:1e09cd7d66b4 48 /// }
nerit 0:1e09cd7d66b4 49 /// @endcode
nerit 0:1e09cd7d66b4 50 ///
nerit 0:1e09cd7d66b4 51 class Watchdog {
nerit 0:1e09cd7d66b4 52 public:
nerit 0:1e09cd7d66b4 53 /// Create a Watchdog object
nerit 0:1e09cd7d66b4 54 ///
nerit 0:1e09cd7d66b4 55 /// example:
nerit 0:1e09cd7d66b4 56 /// @code
nerit 0:1e09cd7d66b4 57 /// Watchdog wd; // placed before main
nerit 0:1e09cd7d66b4 58 /// @endcode
nerit 0:1e09cd7d66b4 59 Watchdog();
nerit 0:1e09cd7d66b4 60
nerit 0:1e09cd7d66b4 61 /// Configure the timeout for the Watchdog
nerit 0:1e09cd7d66b4 62 ///
nerit 0:1e09cd7d66b4 63 /// This configures the Watchdog service and starts it. It must
nerit 0:1e09cd7d66b4 64 /// be serviced before the timeout, or the system will be restarted.
nerit 0:1e09cd7d66b4 65 ///
nerit 0:1e09cd7d66b4 66 /// example:
nerit 0:1e09cd7d66b4 67 /// @code
nerit 0:1e09cd7d66b4 68 /// ...
nerit 0:1e09cd7d66b4 69 /// wd.Configure(1.4); // configure for a 1.4 second timeout
nerit 0:1e09cd7d66b4 70 /// ...
nerit 0:1e09cd7d66b4 71 /// @endcode
nerit 0:1e09cd7d66b4 72 ///
nerit 0:1e09cd7d66b4 73 /// @param[in] timeout in seconds, as a floating point number
nerit 0:1e09cd7d66b4 74 /// @returns none
nerit 0:1e09cd7d66b4 75 ///
nerit 0:1e09cd7d66b4 76 void Configure(float timeout);
nerit 0:1e09cd7d66b4 77
nerit 0:1e09cd7d66b4 78 /// Service the Watchdog so it does not cause a system reset
nerit 0:1e09cd7d66b4 79 ///
nerit 0:1e09cd7d66b4 80 /// example:
nerit 0:1e09cd7d66b4 81 /// @code
nerit 0:1e09cd7d66b4 82 /// wd.Service();
nerit 0:1e09cd7d66b4 83 /// @endcode
nerit 0:1e09cd7d66b4 84 /// @returns none
nerit 0:1e09cd7d66b4 85 void Service();
nerit 0:1e09cd7d66b4 86
nerit 0:1e09cd7d66b4 87 /// WatchdogCausedReset identifies if the cause of the system
nerit 0:1e09cd7d66b4 88 /// reset was the Watchdog
nerit 0:1e09cd7d66b4 89 ///
nerit 0:1e09cd7d66b4 90 /// example:
nerit 0:1e09cd7d66b4 91 /// @code
nerit 0:1e09cd7d66b4 92 /// if (wd.WatchdogCausedReset())) {
nerit 0:1e09cd7d66b4 93 /// @endcode
nerit 0:1e09cd7d66b4 94 ///
nerit 0:1e09cd7d66b4 95 /// @returns true if the Watchdog was the cause of the reset
nerit 0:1e09cd7d66b4 96 bool WatchdogCausedReset();
nerit 0:1e09cd7d66b4 97 private:
nerit 0:1e09cd7d66b4 98 bool wdreset;
nerit 0:1e09cd7d66b4 99 };
nerit 0:1e09cd7d66b4 100
nerit 0:1e09cd7d66b4 101 #endif // WATCHDOG_H