RCELE 85 / GSM_MQTT

Dependents:   Nucleo_mqtt_sim800_final _serial_farfan

Revision:
0:e7957e1745cb
diff -r 000000000000 -r e7957e1745cb GSM_MQTT.h
--- /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