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
Handlers/GprsHandler.h
- Committer:
- Joseph Radford
- Date:
- 2016-04-10
- Revision:
- 0:2df78a4443cd
File content as of revision 0:2df78a4443cd:
#ifndef GPRSHANDLER_H_ #define GPRSHANDLER_H_ #include "config.h" #ifdef ENABLE_GPRS_TESTING /* * This section of the program is currently under development. The rest of the functions * can run wtihout this component by using the ENABLE_GPRS_TESTING flag. */ #include "USBDevice.h" // need to include this, so that USBSerial has correct typedefs! #include "USBSerial.h" #include "AbstractHandler.h" #define GPRS_BUF_LEN 20 #define GPRS_MESSAGE_MAXLEN 160 #define GPRS_RECIPIENTS_MAXLEN 20 struct GprsRequest { char message[GPRS_MESSAGE_MAXLEN]; char recipients[GPRS_RECIPIENTS_MAXLEN]; }; class UsbComms; class CircBuff; /*! * \brief The GprsHandler class saves recipients and looks after incoming and outgoing messages * * Options: save recipients internally to this class. * Or - request sends a struct that includes recipients list and message string */ class GprsHandler : public AbstractHandler { public: GprsHandler(MyTimers * _timer, UsbComms *_usb); virtual ~GprsHandler(); void run(); void setRequest(int request, void *data = 0); enum request_t{ gprsreq_GprsNone, ///< No request (for tracking what the last request was, this is initial value for that) gprsreq_SmsSend, ///< got a string to send to recipient(s) gprsreq_SetRecipients ///< got a string holding the number(s) we want to send }; private: enum mode_t{ gprs_Start, ///< Set up the state machine and the hardware // Restart sequence gprs_PowerOff, ///< Ensure module is powered down first, so we know it is in its initial state gprs_PowerOffWait, ///< Give module time to power down gprs_PowerSupplyOn, ///< Once module has fully powered down, power back up to begin using it gprs_PowerSupplyOnWait, ///< Give time to power on properly gprs_PowerSwitchOn, gprs_PowerSwitchOnWait, gprs_CheckATReqs, ///< Check was AT request is next // read AT+CMGR=? // write AT+CMGS=? gprs_PostTx, ///< Send the current buffer to SIM900 and setup timeouts gprs_WaitRx, ///< Wait for a response over serial gprs_CheckRx, ///< Check the response. Go back into state machine depending on response gprs_WaitUntilNextRequest, gprs_RxTimeout, ///< no response gprs_RxError ///< wrong response }; mode_t mode; ///< the current state in the state machine mode_t returnMode; ///< the state to go back to when the expected reply returns from the SIM900 /// /// \brief The at_req enum stores what AT command should be sent/was just sent to the SIM900 /// enum at_req { atreq_Test, ///< Ping the SIM900 atreq_CheckSMS, ///< Check if an SMS is available atreq_SendSMS ///< Send an SMS, according to m_lastRequest }; at_req m_atReq; request_t m_lastRequest; GprsRequest m_lastMessage; Serial * m_serial; //!< Serial port for comms with SIM900 DigitalOut * m_sim900_pwr; //!< pin used to enable the SIM900 power switch DigitalOut * m_sim900_on; //!< pin used to drive the power key uint8_t m_reqReg; ///< request register unsigned char txBuf[GPRS_BUF_LEN]; uint16_t txBufLen; unsigned char rxBuf[GPRS_BUF_LEN]; UsbComms *m_usb; CircBuff *m_rxBuff; }; #endif #endif /* GPRSHANDLER_H_ */