Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Nucleo_mqtt_sim800_final _serial_farfan
Diff: GSM_MQTT.h
- Revision:
- 0:e7957e1745cb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GSM_MQTT.h Tue Apr 17 05:02:48 2018 +0000 @@ -0,0 +1,124 @@ +/* ========================================================================================= +* 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_ */ \ No newline at end of file