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

Committer:
Joseph Radford
Date:
Sun Apr 10 15:47:33 2016 +1000
Revision:
0:2df78a4443cd
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Joseph Radford 0:2df78a4443cd 1 #ifndef MEASUREMENTHANDLER_H
Joseph Radford 0:2df78a4443cd 2 #define MEASUREMENTHANDLER_H
Joseph Radford 0:2df78a4443cd 3
Joseph Radford 0:2df78a4443cd 4 #include "AbstractHandler.h"
Joseph Radford 0:2df78a4443cd 5 #include "GroveDht22.h"
Joseph Radford 0:2df78a4443cd 6 #include "config.h"
Joseph Radford 0:2df78a4443cd 7 #ifdef ENABLE_GPRS_TESTING
Joseph Radford 0:2df78a4443cd 8 #include "GprsHandler.h"
Joseph Radford 0:2df78a4443cd 9 #endif
Joseph Radford 0:2df78a4443cd 10
Joseph Radford 0:2df78a4443cd 11 class SdHandler;
Joseph Radford 0:2df78a4443cd 12 class UsbComms;
Joseph Radford 0:2df78a4443cd 13
Joseph Radford 0:2df78a4443cd 14
Joseph Radford 0:2df78a4443cd 15 /*!
Joseph Radford 0:2df78a4443cd 16 * \brief The MeasurementHandler class forms the link between data generation and data output, and stores settings.
Joseph Radford 0:2df78a4443cd 17 *
Joseph Radford 0:2df78a4443cd 18 * Receives requests from \a GroveDht22 when a new measurement has been taken or error has occurred. This handler then
Joseph Radford 0:2df78a4443cd 19 * sends that information on to \a UsbComms for printing that information to terminal and \a SdHandler for printing
Joseph Radford 0:2df78a4443cd 20 * that information to the CSV data file.
Joseph Radford 0:2df78a4443cd 21 *
Joseph Radford 0:2df78a4443cd 22 * This handler also determines if the necessary conditions have been met to send an SMS. This is based on last measurement,
Joseph Radford 0:2df78a4443cd 23 * the set alert threshold, and time since last alert was sent. An SMS is sent using \a GprsHandler.
Joseph Radford 0:2df78a4443cd 24 *
Joseph Radford 0:2df78a4443cd 25 * Other requests from inputs asking for current measurement states (such as the latest measurement) may come from \a UsbComms
Joseph Radford 0:2df78a4443cd 26 * or \a GprsHandler. The string inspection and matching is handled here, and responses sent to the data outputs.
Joseph Radford 0:2df78a4443cd 27 *
Joseph Radford 0:2df78a4443cd 28 *
Joseph Radford 0:2df78a4443cd 29 * Flashes LED4 constantly to inform that normal operation is occurring.
Joseph Radford 0:2df78a4443cd 30 */
Joseph Radford 0:2df78a4443cd 31 class MeasurementHandler : public AbstractHandler
Joseph Radford 0:2df78a4443cd 32 {
Joseph Radford 0:2df78a4443cd 33 public:
Joseph Radford 0:2df78a4443cd 34 #ifdef ENABLE_GPRS_TESTING
Joseph Radford 0:2df78a4443cd 35 MeasurementHandler(SdHandler *_sd, UsbComms *_usb, GprsHandler *_gprs, MyTimers *_timer);
Joseph Radford 0:2df78a4443cd 36 #else
Joseph Radford 0:2df78a4443cd 37 MeasurementHandler(SdHandler *_sd, UsbComms *_usb, MyTimers *_timer);
Joseph Radford 0:2df78a4443cd 38 #endif
Joseph Radford 0:2df78a4443cd 39
Joseph Radford 0:2df78a4443cd 40 void run();
Joseph Radford 0:2df78a4443cd 41
Joseph Radford 0:2df78a4443cd 42 void setRequest(int request, void *data = 0);
Joseph Radford 0:2df78a4443cd 43
Joseph Radford 0:2df78a4443cd 44 Dht22Result lastResult() const { return m_lastResult; }
Joseph Radford 0:2df78a4443cd 45
Joseph Radford 0:2df78a4443cd 46 enum request_t{
Joseph Radford 0:2df78a4443cd 47 measreq_MeasReqNone, ///< No request (for tracking what the last request was, this is initial value for that)
Joseph Radford 0:2df78a4443cd 48 measreq_DhtResult, ///< Dht22 returned with a result
Joseph Radford 0:2df78a4443cd 49 measreq_DhtError, ///< Dht22 returned with an error
Joseph Radford 0:2df78a4443cd 50 #ifdef ENABLE_GPRS_TESTING
Joseph Radford 0:2df78a4443cd 51 measreq_Status, ///< We got an SMS asking for the status (time, last error, last result)
Joseph Radford 0:2df78a4443cd 52 #endif
Joseph Radford 0:2df78a4443cd 53 };
Joseph Radford 0:2df78a4443cd 54
Joseph Radford 0:2df78a4443cd 55 private:
Joseph Radford 0:2df78a4443cd 56 SdHandler *m_sd; ///< Reference to write to SD card
Joseph Radford 0:2df78a4443cd 57 UsbComms *m_usb; ///< Reference to write to USB serial port
Joseph Radford 0:2df78a4443cd 58
Joseph Radford 0:2df78a4443cd 59 #ifdef ENABLE_GPRS_TESTING
Joseph Radford 0:2df78a4443cd 60 GprsHandler *m_gprs; ///< Reference to write to GPRS (SMS)
Joseph Radford 0:2df78a4443cd 61 #endif
Joseph Radford 0:2df78a4443cd 62
Joseph Radford 0:2df78a4443cd 63 Dht22Result m_lastResult; ///< Copy of the last result that came from Dht22
Joseph Radford 0:2df78a4443cd 64 int m_lastError; ///< Copy of the last error that came from Dht22
Joseph Radford 0:2df78a4443cd 65
Joseph Radford 0:2df78a4443cd 66 #ifdef ENABLE_GPRS_TESTING
Joseph Radford 0:2df78a4443cd 67 char m_lastSender[GPRS_RECIPIENTS_MAXLEN]; ///< The last sender of an SMS
Joseph Radford 0:2df78a4443cd 68 #endif
Joseph Radford 0:2df78a4443cd 69
Joseph Radford 0:2df78a4443cd 70 bool m_flashOn; ///< LED is currently on when true
Joseph Radford 0:2df78a4443cd 71
Joseph Radford 0:2df78a4443cd 72 enum mode_t{
Joseph Radford 0:2df78a4443cd 73 meas_Start, ///< Set up the state machine
Joseph Radford 0:2df78a4443cd 74 meas_CheckRequest, ///< Check request register
Joseph Radford 0:2df78a4443cd 75
Joseph Radford 0:2df78a4443cd 76 #ifdef ENABLE_GPRS_TESTING
Joseph Radford 0:2df78a4443cd 77 meas_PostStateSMS, ///< Send an SMS of the last result and state
Joseph Radford 0:2df78a4443cd 78 #endif
Joseph Radford 0:2df78a4443cd 79 meas_PostResult, ///< Write the last Grove result to SD and USB
Joseph Radford 0:2df78a4443cd 80 meas_PostError, ///< Write the last Grove error to USB (and in future, SD syslog)
Joseph Radford 0:2df78a4443cd 81
Joseph Radford 0:2df78a4443cd 82 meas_FlashTimer, ///< Flash an LED on and off so user knows device is still running
Joseph Radford 0:2df78a4443cd 83
Joseph Radford 0:2df78a4443cd 84 meas_WaitError ///< Lots of fails, wait for a while
Joseph Radford 0:2df78a4443cd 85 };
Joseph Radford 0:2df78a4443cd 86 mode_t mode;
Joseph Radford 0:2df78a4443cd 87
Joseph Radford 0:2df78a4443cd 88 request_t m_lastRequest; ///< tracks if result or error was the last request
Joseph Radford 0:2df78a4443cd 89
Joseph Radford 0:2df78a4443cd 90 uint8_t m_requestRegister; ///< contains the current pending requests as bitwise flags
Joseph Radford 0:2df78a4443cd 91
Joseph Radford 0:2df78a4443cd 92 };
Joseph Radford 0:2df78a4443cd 93
Joseph Radford 0:2df78a4443cd 94 #endif // MEASUREMENTHANDLER_H