A simple WIP that logs data from a Grove sensor, and can send and receive information over USB and SMS.

Dependencies:   DHT DS_1337 SDFileSystem USBDevice mbed

timers.h

Committer:
Joseph Radford
Date:
2016-04-10
Revision:
0:2df78a4443cd

File content as of revision 0:2df78a4443cd:

#ifndef __TIMERS_H__
#define __TIMERS_H__

#include "mbed.h"

/*!
 * \brief The MyTimers class creates a Ticker and decrements a collection of unsigned longs that act as timers across the program
 *
 *  \sa eTimerType is used to link external callers with a collection of unsigned longs which are decremented
 *  each ms by \sa run().
 *  This acts as a collection of timers.
 *  This collection can be set by \sa SetTimer and retrieved by \sa GetTimer.
 */
class MyTimers
{
public:
    MyTimers();
    ~MyTimers();

    ///< eTimerType identifies each of the timers in program, and is used to set and get a timer
    typedef enum
    {
        tmr_GroveMeasure,       ///< Used in GroveDht22 handler
        tmr_GprsPower,          ///< Used to power the SIM900 on and off
        tmr_GprsRxTx,           ///< Timeout waiting for a response from the SIM900 over the serial line
        tmr_SdWaitError,        ///< Sd card has hit an error, wait before retrying
        tmr_MeasFlash           ///< Flash once every 2 seconds for heartbeat
    } eTimerType;

    //! run is called each time Ticker fires, which is every 1ms, and decrements all timers if necessary
    void run();

    /*!
     * \brief SetTimer sets the value of the timer
     * \param timertype identifies the timer whose value we want to set
     * \param time_ms is the value the timer will be set to, to start counting down from, in ms
     */
    void SetTimer(eTimerType timertype, unsigned long time_ms);

    /*!
     * \brief GetTimer gets the value of a timer
     * \param timertype identifies the timer whose value we want to get
     * \return the value of the timer
     */
    unsigned long GetTimer(eTimerType timertype);

private:
    unsigned long groveMeasureTimer;    ///< current value of timer for \sa tmr_GroveMeasure
    unsigned long gprsPowerTimer;       ///< current value of timer for \sa tmr_GprsPower
    unsigned long gprsRxTxTimer;        ///< current value of timer for \sa tmr_GprsRxTx
    unsigned long sdWaitErrorTimer;     ///< current value of timer for \sa tmr_SdWaitError
    unsigned long measFlashTimer;       ///< current value of timer for \sa tmr_MeasFlash

    Ticker *m_tick;        ///< Used to call \a run a function periodically
};

#endif