any mbed board with 1 Harware uart for SIM800 and SIM900 MQTT
Dependents: Nucleo_mqtt_sim800_final _serial_farfan
GSM_MQTT.h
- Committer:
- rcele_85
- Date:
- 2018-04-17
- Revision:
- 0:e7957e1745cb
File content as of revision 0:e7957e1745cb:
/* ========================================================================================= * GSM_MQTT == MQTT CLIENT LIBRARY FOR GPRS MODEM * SUPPORTED GPRS MODEM ==> SIM800, SIM900, SIM300 * SUPPORTED MBED HARDWARE ==> Any hardware with two Hardware Serial port and 1 timer * * Developed By : Ravi Butani * Prof. Marwadi University, Rajkkot-INDIA * Contact: ravi_butani@yahoo.com * * License : This library released under CC-BY-SA 4.0 license * https://creativecommons.org/licenses/by-sa/4.0/legalcode.txt * * This library is derived from Arduino MQTT Client for SIM800 at * https://github.com/elementzonline/SIM800_MQTT *============================================================================================*/ #ifndef GSM_MQTT_H_ #define GSM_MQTT_H_ #include <stdint.h> #include <string> #define UART_BUFFER_LENGTH 300 //Maximum length allowed for UART data #define TOPIC_BUFFER_LENGTH 50 //Maximum length allowed Topic #define MESSAGE_BUFFER_LENGTH 250 //Maximum length allowed data // ###################################################################################################################### #define CONNECT 1 //Client request to connect to Server Client Server #define CONNACK 2 //Connect Acknowledgment Server/Client Server/Client #define PUBLISH 3 //Publish message Server/Client Server/Client #define PUBACK 4 //Publish Acknowledgment Server/Client Server/Client #define PUBREC 5 //Publish Received (assured delivery part 1) Server/Client Server/Client #define PUBREL 6 //Publish Release (assured delivery part 2) Server/Client Server/Client #define PUBCOMP 7 //Publish Complete (assured delivery part 3) Server/Client Server/Client #define SUBSCRIBE 8 //Client Subscribe request Client Server #define SUBACK 9 //Subscribe Acknowledgment Server Client #define UNSUBSCRIBE 10 //Client Unsubscribe request Client Server #define UNSUBACK 11 //Unsubscribe Acknowledgment Server Client #define PINGREQ 12 //PING Request Client Server #define PINGRESP 13 //PING Response Server Client #define DISCONNECT 14 //Client is Disconnecting Client Server // QoS value bit 2 bit 1 Description // 0 0 0 At most once Fire and Forget <=1 // 1 0 1 At least once Acknowledged delivery >=1 // 2 1 0 Exactly once Assured delivery =1 // 3 1 1 Reserved #define DUP_Mask 8 // Duplicate delivery Only for QoS>0 #define QoS_Mask 6 // Quality of Service #define QoS_Scale 2 // (()&QoS)/QoS_Scale #define RETAIN_Mask 1 // RETAIN flag #define User_Name_Flag_Mask 128 #define Password_Flag_Mask 64 #define Will_Retain_Mask 32 #define Will_QoS_Mask 24 #define Will_QoS_Scale 8 #define Will_Flag_Mask 4 #define Clean_Session_Mask 2 #define DISCONNECTED 0 #define CONNECTED 1 #define NO_ACKNOWLEDGEMENT 255 class GSM_MQTT { public: volatile bool TCP_Flag;// = false; volatile char GSM_ReplyFlag; char reply[10]; volatile bool pingFlag ;//= false; volatile char tcpATerrorcount;// = 0; volatile bool MQTT_Flag ;//= false; volatile int ConnectionAcknowledgement;// = NO_ACKNOWLEDGEMENT ; volatile int PublishIndex;// = 0; char Topic[TOPIC_BUFFER_LENGTH]; volatile int TopicLength;// = 0; char Message[MESSAGE_BUFFER_LENGTH]; volatile int MessageLength ;//= 0; volatile int MessageFlag ;//= false; volatile char modemStatus ;//= 0; volatile uint32_t index ;//= 0; volatile uint32_t length , lengthLocal; char inputString[UART_BUFFER_LENGTH]; GSM_MQTT(unsigned long KeepAlive); void begin(void); void connect(char *ClientIdentifier, char UserNameFlag = 0, char PasswordFlag = 0, char *UserName = "", char *Password = "", char CleanSession = 1, char WillFlag = 0, char WillQoS = 0, char WillRetain = 0, char *WillTopic = "", char *WillMessage = ""); void publish(char *Topic, char *Message, char DUP = 0, char Qos = 0, char RETAIN = 0, unsigned int MessageID = 0); void subscribe(char *SubTopic, char DUP = 0, unsigned int MessageID = 0, char SubQoS = 0); void unsubscribe(char *SubTopic, char DUP = 0, unsigned int MessageID = 0); void disconnect(void); void processing(void); bool available(void); void AutoConnect(void); void OnConnect(void); void OnMessage(char *Topic, int TopicLength, char *Message, int MessageLength); void publishACK(unsigned int MessageID); void publishREC(unsigned int MessageID); void publishREL(char DUP, unsigned int MessageID); void publishCOMP(unsigned int MessageID); void printMessageType(uint8_t Message); void printConnectAck(uint8_t Ack); char sendATreply(char *command, char *replystr, unsigned long waitms); private: volatile unsigned int _LastMessaseID;// = 0; volatile char _ProtocolVersion;// = 3; volatile unsigned long _PingPrevMillis;// = 0; volatile char _tcpStatus;// = 0; volatile char _tcpStatusPrev;// = 0; volatile unsigned long _KeepAliveTimeOut; void _sendUTFString(char *string); void _sendLength(int len); void _ping(void); void _tcpInit(void); char _sendAT(char *command, unsigned long waitms); unsigned int _generateMessageID(void); }; #endif /* GSM_MQTT_H_ */