any mbed board with 1 Harware uart for SIM800 and SIM900 MQTT
Dependents: Nucleo_mqtt_sim800_final _serial_farfan
GSM_MQTT.cpp@0:e7957e1745cb, 2018-04-17 (annotated)
- Committer:
- rcele_85
- Date:
- Tue Apr 17 05:02:48 2018 +0000
- Revision:
- 0:e7957e1745cb
MQTT Implementation using sim800 on any Mbed supported board having 1 Hardware UART for SIM800 interfacing and 1 Hardware UART/USB for serial Debug
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rcele_85 | 0:e7957e1745cb | 1 | /* ========================================================================================= |
rcele_85 | 0:e7957e1745cb | 2 | * GSM_MQTT == MQTT CLIENT LIBRARY FOR GPRS MODEM |
rcele_85 | 0:e7957e1745cb | 3 | * SUPPORTED GPRS MODEM ==> SIM800, SIM900, SIM300 |
rcele_85 | 0:e7957e1745cb | 4 | * SUPPORTED MBED HARDWARE ==> Any hardware with two Hardware Serial port and 1 timer |
rcele_85 | 0:e7957e1745cb | 5 | * |
rcele_85 | 0:e7957e1745cb | 6 | * Developed By : Ravi Butani |
rcele_85 | 0:e7957e1745cb | 7 | * Prof. Marwadi University, Rajkkot-INDIA |
rcele_85 | 0:e7957e1745cb | 8 | * Contact: ravi_butani@yahoo.com |
rcele_85 | 0:e7957e1745cb | 9 | * |
rcele_85 | 0:e7957e1745cb | 10 | * License : This library released under CC-BY-SA 4.0 license |
rcele_85 | 0:e7957e1745cb | 11 | * https://creativecommons.org/licenses/by-sa/4.0/legalcode.txt |
rcele_85 | 0:e7957e1745cb | 12 | * |
rcele_85 | 0:e7957e1745cb | 13 | * This library is derived from Arduino MQTT Client for SIM800 at |
rcele_85 | 0:e7957e1745cb | 14 | * https://github.com/elementzonline/SIM800_MQTT |
rcele_85 | 0:e7957e1745cb | 15 | *============================================================================================*/ |
rcele_85 | 0:e7957e1745cb | 16 | |
rcele_85 | 0:e7957e1745cb | 17 | |
rcele_85 | 0:e7957e1745cb | 18 | #include "GSM_MQTT.h" |
rcele_85 | 0:e7957e1745cb | 19 | #include "mbed.h" |
rcele_85 | 0:e7957e1745cb | 20 | #include <stdint.h> |
rcele_85 | 0:e7957e1745cb | 21 | #include <string> |
rcele_85 | 0:e7957e1745cb | 22 | #define ESP_RXBUF_LEN 300 |
rcele_85 | 0:e7957e1745cb | 23 | |
rcele_85 | 0:e7957e1745cb | 24 | volatile char esp_buf[ESP_RXBUF_LEN]; // Circular Buffer for Serial Receive As MODSERIAL not supported in GRPeach |
rcele_85 | 0:e7957e1745cb | 25 | volatile uint32_t esp_pos = 0, esp_por = 0, esp_ok = 0, esp_head = 0; // Variable used for hold head and tail of Circular Buffer |
rcele_85 | 0:e7957e1745cb | 26 | |
rcele_85 | 0:e7957e1745cb | 27 | Timer timer800; |
rcele_85 | 0:e7957e1745cb | 28 | extern uint8_t GSM_Response; |
rcele_85 | 0:e7957e1745cb | 29 | |
rcele_85 | 0:e7957e1745cb | 30 | extern string MQTT_HOST;// = "test.mosquitto.org"; |
rcele_85 | 0:e7957e1745cb | 31 | extern string MQTT_PORT;// = "1883"; |
rcele_85 | 0:e7957e1745cb | 32 | extern Serial SerialDBG; |
rcele_85 | 0:e7957e1745cb | 33 | extern Serial Serial800; |
rcele_85 | 0:e7957e1745cb | 34 | extern GSM_MQTT MQTT; |
rcele_85 | 0:e7957e1745cb | 35 | uint8_t GSM_Response = 0; |
rcele_85 | 0:e7957e1745cb | 36 | unsigned long previousMillis = 0; |
rcele_85 | 0:e7957e1745cb | 37 | //char inputString[UART_BUFFER_LENGTH]; // a string to hold incoming data |
rcele_85 | 0:e7957e1745cb | 38 | bool stringComplete = false; // whether the string is complete |
rcele_85 | 0:e7957e1745cb | 39 | |
rcele_85 | 0:e7957e1745cb | 40 | |
rcele_85 | 0:e7957e1745cb | 41 | |
rcele_85 | 0:e7957e1745cb | 42 | // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ESP8266 UART returns how many chars available to read <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
rcele_85 | 0:e7957e1745cb | 43 | int Serial800_available(void) |
rcele_85 | 0:e7957e1745cb | 44 | { |
rcele_85 | 0:e7957e1745cb | 45 | return ((ESP_RXBUF_LEN + esp_pos - esp_por) % ESP_RXBUF_LEN); |
rcele_85 | 0:e7957e1745cb | 46 | } |
rcele_85 | 0:e7957e1745cb | 47 | |
rcele_85 | 0:e7957e1745cb | 48 | |
rcele_85 | 0:e7957e1745cb | 49 | // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ESP8266 UART returns read one char <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
rcele_85 | 0:e7957e1745cb | 50 | char Serial800_read(void) |
rcele_85 | 0:e7957e1745cb | 51 | { |
rcele_85 | 0:e7957e1745cb | 52 | char c = esp_buf[esp_por]; |
rcele_85 | 0:e7957e1745cb | 53 | esp_por = (esp_por + 1)% ESP_RXBUF_LEN; |
rcele_85 | 0:e7957e1745cb | 54 | return(c); |
rcele_85 | 0:e7957e1745cb | 55 | } |
rcele_85 | 0:e7957e1745cb | 56 | |
rcele_85 | 0:e7957e1745cb | 57 | // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ESP8266 UART Flush receive Buffer <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
rcele_85 | 0:e7957e1745cb | 58 | void Serial800_flush(void) |
rcele_85 | 0:e7957e1745cb | 59 | { |
rcele_85 | 0:e7957e1745cb | 60 | esp_pos = 0; |
rcele_85 | 0:e7957e1745cb | 61 | esp_por = 0; |
rcele_85 | 0:e7957e1745cb | 62 | } |
rcele_85 | 0:e7957e1745cb | 63 | // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ESP8266 UART Receive CallBack(ISR) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
rcele_85 | 0:e7957e1745cb | 64 | void Serial800_callback() { |
rcele_85 | 0:e7957e1745cb | 65 | esp_buf[esp_pos] = Serial800.getc(); |
rcele_85 | 0:e7957e1745cb | 66 | esp_pos = (esp_pos+1)% ESP_RXBUF_LEN; |
rcele_85 | 0:e7957e1745cb | 67 | } |
rcele_85 | 0:e7957e1745cb | 68 | void serialEvent(); |
rcele_85 | 0:e7957e1745cb | 69 | |
rcele_85 | 0:e7957e1745cb | 70 | GSM_MQTT::GSM_MQTT(unsigned long KeepAlive) |
rcele_85 | 0:e7957e1745cb | 71 | { |
rcele_85 | 0:e7957e1745cb | 72 | _KeepAliveTimeOut = KeepAlive; |
rcele_85 | 0:e7957e1745cb | 73 | } |
rcele_85 | 0:e7957e1745cb | 74 | |
rcele_85 | 0:e7957e1745cb | 75 | void GSM_MQTT::begin(void) |
rcele_85 | 0:e7957e1745cb | 76 | { |
rcele_85 | 0:e7957e1745cb | 77 | TCP_Flag = false; |
rcele_85 | 0:e7957e1745cb | 78 | GSM_ReplyFlag; |
rcele_85 | 0:e7957e1745cb | 79 | pingFlag = false; |
rcele_85 | 0:e7957e1745cb | 80 | tcpATerrorcount = 0; |
rcele_85 | 0:e7957e1745cb | 81 | MQTT_Flag = false; |
rcele_85 | 0:e7957e1745cb | 82 | ConnectionAcknowledgement = NO_ACKNOWLEDGEMENT ; |
rcele_85 | 0:e7957e1745cb | 83 | PublishIndex = 0; |
rcele_85 | 0:e7957e1745cb | 84 | TopicLength = 0; |
rcele_85 | 0:e7957e1745cb | 85 | MessageLength = 0; |
rcele_85 | 0:e7957e1745cb | 86 | MessageFlag = false; |
rcele_85 | 0:e7957e1745cb | 87 | modemStatus = 0; |
rcele_85 | 0:e7957e1745cb | 88 | index = 0; |
rcele_85 | 0:e7957e1745cb | 89 | length = 0; |
rcele_85 | 0:e7957e1745cb | 90 | lengthLocal = 0; |
rcele_85 | 0:e7957e1745cb | 91 | _LastMessaseID = 0; |
rcele_85 | 0:e7957e1745cb | 92 | _ProtocolVersion = 3; |
rcele_85 | 0:e7957e1745cb | 93 | _PingPrevMillis = 0; |
rcele_85 | 0:e7957e1745cb | 94 | _tcpStatus = 0; |
rcele_85 | 0:e7957e1745cb | 95 | _tcpStatusPrev = 0; |
rcele_85 | 0:e7957e1745cb | 96 | _KeepAliveTimeOut; |
rcele_85 | 0:e7957e1745cb | 97 | SerialDBG.baud(9600); |
rcele_85 | 0:e7957e1745cb | 98 | Serial800.baud(9600); |
rcele_85 | 0:e7957e1745cb | 99 | Serial800.attach(&Serial800_callback); |
rcele_85 | 0:e7957e1745cb | 100 | Serial800.printf("AT\r\n"); |
rcele_85 | 0:e7957e1745cb | 101 | timer800.start(); |
rcele_85 | 0:e7957e1745cb | 102 | wait(1); |
rcele_85 | 0:e7957e1745cb | 103 | _tcpInit(); |
rcele_85 | 0:e7957e1745cb | 104 | } |
rcele_85 | 0:e7957e1745cb | 105 | char GSM_MQTT::_sendAT(char *command, unsigned long waitms) |
rcele_85 | 0:e7957e1745cb | 106 | { |
rcele_85 | 0:e7957e1745cb | 107 | |
rcele_85 | 0:e7957e1745cb | 108 | unsigned long PrevMillis = timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 109 | strcpy(reply, "none"); |
rcele_85 | 0:e7957e1745cb | 110 | GSM_Response = 0; |
rcele_85 | 0:e7957e1745cb | 111 | Serial800.printf("%s",command); |
rcele_85 | 0:e7957e1745cb | 112 | unsigned long currentMillis = timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 113 | // SerialDBG.println(PrevMillis); |
rcele_85 | 0:e7957e1745cb | 114 | // SerialDBG.println(currentMillis); |
rcele_85 | 0:e7957e1745cb | 115 | while ( (GSM_Response == 0) && ((currentMillis - PrevMillis) < waitms) ) |
rcele_85 | 0:e7957e1745cb | 116 | { |
rcele_85 | 0:e7957e1745cb | 117 | // delay(1); |
rcele_85 | 0:e7957e1745cb | 118 | serialEvent(); |
rcele_85 | 0:e7957e1745cb | 119 | currentMillis = timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 120 | } |
rcele_85 | 0:e7957e1745cb | 121 | return GSM_Response; |
rcele_85 | 0:e7957e1745cb | 122 | } |
rcele_85 | 0:e7957e1745cb | 123 | char GSM_MQTT::sendATreply(char *command, char *replystr, unsigned long waitms) |
rcele_85 | 0:e7957e1745cb | 124 | { |
rcele_85 | 0:e7957e1745cb | 125 | strcpy(reply, replystr); |
rcele_85 | 0:e7957e1745cb | 126 | unsigned long PrevMillis = timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 127 | GSM_ReplyFlag = 0; |
rcele_85 | 0:e7957e1745cb | 128 | Serial800.printf("%s",command); |
rcele_85 | 0:e7957e1745cb | 129 | unsigned long currentMillis =timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 130 | |
rcele_85 | 0:e7957e1745cb | 131 | // SerialDBG.println(PrevMillis); |
rcele_85 | 0:e7957e1745cb | 132 | // SerialDBG.println(currentMillis); |
rcele_85 | 0:e7957e1745cb | 133 | while ( (GSM_ReplyFlag == 0) && ((currentMillis - PrevMillis) < waitms) ) |
rcele_85 | 0:e7957e1745cb | 134 | { |
rcele_85 | 0:e7957e1745cb | 135 | // delay(1); |
rcele_85 | 0:e7957e1745cb | 136 | serialEvent(); |
rcele_85 | 0:e7957e1745cb | 137 | currentMillis = timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 138 | } |
rcele_85 | 0:e7957e1745cb | 139 | return GSM_ReplyFlag; |
rcele_85 | 0:e7957e1745cb | 140 | } |
rcele_85 | 0:e7957e1745cb | 141 | void GSM_MQTT::_tcpInit(void) |
rcele_85 | 0:e7957e1745cb | 142 | { |
rcele_85 | 0:e7957e1745cb | 143 | switch (modemStatus) |
rcele_85 | 0:e7957e1745cb | 144 | { |
rcele_85 | 0:e7957e1745cb | 145 | case 0: |
rcele_85 | 0:e7957e1745cb | 146 | { |
rcele_85 | 0:e7957e1745cb | 147 | wait(1); |
rcele_85 | 0:e7957e1745cb | 148 | Serial800.printf("+++"); |
rcele_85 | 0:e7957e1745cb | 149 | wait(0.5); |
rcele_85 | 0:e7957e1745cb | 150 | if (_sendAT("AT\r\n", 5000) == 1) |
rcele_85 | 0:e7957e1745cb | 151 | { |
rcele_85 | 0:e7957e1745cb | 152 | modemStatus = 1; |
rcele_85 | 0:e7957e1745cb | 153 | } |
rcele_85 | 0:e7957e1745cb | 154 | else |
rcele_85 | 0:e7957e1745cb | 155 | { |
rcele_85 | 0:e7957e1745cb | 156 | modemStatus = 0; |
rcele_85 | 0:e7957e1745cb | 157 | break; |
rcele_85 | 0:e7957e1745cb | 158 | } |
rcele_85 | 0:e7957e1745cb | 159 | } |
rcele_85 | 0:e7957e1745cb | 160 | case 1: |
rcele_85 | 0:e7957e1745cb | 161 | { |
rcele_85 | 0:e7957e1745cb | 162 | if (_sendAT("ATE1\r\n", 2000) == 1) |
rcele_85 | 0:e7957e1745cb | 163 | { |
rcele_85 | 0:e7957e1745cb | 164 | modemStatus = 2; |
rcele_85 | 0:e7957e1745cb | 165 | } |
rcele_85 | 0:e7957e1745cb | 166 | else |
rcele_85 | 0:e7957e1745cb | 167 | { |
rcele_85 | 0:e7957e1745cb | 168 | modemStatus = 1; |
rcele_85 | 0:e7957e1745cb | 169 | break; |
rcele_85 | 0:e7957e1745cb | 170 | } |
rcele_85 | 0:e7957e1745cb | 171 | } |
rcele_85 | 0:e7957e1745cb | 172 | case 2: |
rcele_85 | 0:e7957e1745cb | 173 | { |
rcele_85 | 0:e7957e1745cb | 174 | if (sendATreply("AT+CREG?\r\n", "0,1", 5000) == 1) |
rcele_85 | 0:e7957e1745cb | 175 | { |
rcele_85 | 0:e7957e1745cb | 176 | _sendAT("AT+CIPMUX=0\r\n", 2000); |
rcele_85 | 0:e7957e1745cb | 177 | _sendAT("AT+CIPMODE=1\r\n", 2000); |
rcele_85 | 0:e7957e1745cb | 178 | if (sendATreply("AT+CGATT?\r\n", ": 1", 4000) != 1) |
rcele_85 | 0:e7957e1745cb | 179 | { |
rcele_85 | 0:e7957e1745cb | 180 | _sendAT("AT+CGATT=1\r\n", 2000); |
rcele_85 | 0:e7957e1745cb | 181 | } |
rcele_85 | 0:e7957e1745cb | 182 | modemStatus = 3; |
rcele_85 | 0:e7957e1745cb | 183 | _tcpStatus = 2; |
rcele_85 | 0:e7957e1745cb | 184 | } |
rcele_85 | 0:e7957e1745cb | 185 | else |
rcele_85 | 0:e7957e1745cb | 186 | { |
rcele_85 | 0:e7957e1745cb | 187 | modemStatus = 2; |
rcele_85 | 0:e7957e1745cb | 188 | break; |
rcele_85 | 0:e7957e1745cb | 189 | } |
rcele_85 | 0:e7957e1745cb | 190 | } |
rcele_85 | 0:e7957e1745cb | 191 | case 3: |
rcele_85 | 0:e7957e1745cb | 192 | { |
rcele_85 | 0:e7957e1745cb | 193 | if (GSM_ReplyFlag != 7) |
rcele_85 | 0:e7957e1745cb | 194 | { |
rcele_85 | 0:e7957e1745cb | 195 | _tcpStatus = sendATreply("AT+CIPSTATUS\r\n", "STATE", 4000); |
rcele_85 | 0:e7957e1745cb | 196 | if (_tcpStatusPrev == _tcpStatus) |
rcele_85 | 0:e7957e1745cb | 197 | { |
rcele_85 | 0:e7957e1745cb | 198 | tcpATerrorcount++; |
rcele_85 | 0:e7957e1745cb | 199 | if (tcpATerrorcount >= 10) |
rcele_85 | 0:e7957e1745cb | 200 | { |
rcele_85 | 0:e7957e1745cb | 201 | tcpATerrorcount = 0; |
rcele_85 | 0:e7957e1745cb | 202 | _tcpStatus = 7; |
rcele_85 | 0:e7957e1745cb | 203 | } |
rcele_85 | 0:e7957e1745cb | 204 | |
rcele_85 | 0:e7957e1745cb | 205 | } |
rcele_85 | 0:e7957e1745cb | 206 | else |
rcele_85 | 0:e7957e1745cb | 207 | { |
rcele_85 | 0:e7957e1745cb | 208 | _tcpStatusPrev = _tcpStatus; |
rcele_85 | 0:e7957e1745cb | 209 | tcpATerrorcount = 0; |
rcele_85 | 0:e7957e1745cb | 210 | } |
rcele_85 | 0:e7957e1745cb | 211 | } |
rcele_85 | 0:e7957e1745cb | 212 | _tcpStatusPrev = _tcpStatus; |
rcele_85 | 0:e7957e1745cb | 213 | SerialDBG.printf("%d",_tcpStatus); |
rcele_85 | 0:e7957e1745cb | 214 | switch (_tcpStatus) |
rcele_85 | 0:e7957e1745cb | 215 | { |
rcele_85 | 0:e7957e1745cb | 216 | case 2: |
rcele_85 | 0:e7957e1745cb | 217 | { |
rcele_85 | 0:e7957e1745cb | 218 | _sendAT("AT+CSTT=\"www\"\r\n", 5000); |
rcele_85 | 0:e7957e1745cb | 219 | break; |
rcele_85 | 0:e7957e1745cb | 220 | } |
rcele_85 | 0:e7957e1745cb | 221 | case 3: |
rcele_85 | 0:e7957e1745cb | 222 | { |
rcele_85 | 0:e7957e1745cb | 223 | _sendAT("AT+CIICR\r\n", 5000) ; |
rcele_85 | 0:e7957e1745cb | 224 | break; |
rcele_85 | 0:e7957e1745cb | 225 | } |
rcele_85 | 0:e7957e1745cb | 226 | case 4: |
rcele_85 | 0:e7957e1745cb | 227 | { |
rcele_85 | 0:e7957e1745cb | 228 | sendATreply("AT+CIFSR\r\n", ".", 4000) ; |
rcele_85 | 0:e7957e1745cb | 229 | break; |
rcele_85 | 0:e7957e1745cb | 230 | } |
rcele_85 | 0:e7957e1745cb | 231 | case 5: |
rcele_85 | 0:e7957e1745cb | 232 | { |
rcele_85 | 0:e7957e1745cb | 233 | Serial800.printf("AT+CIPSTART=\"TCP\",\""); |
rcele_85 | 0:e7957e1745cb | 234 | Serial800.printf("%s",MQTT_HOST); |
rcele_85 | 0:e7957e1745cb | 235 | Serial800.printf("\",\""); |
rcele_85 | 0:e7957e1745cb | 236 | Serial800.printf("%s",MQTT_PORT); |
rcele_85 | 0:e7957e1745cb | 237 | if (_sendAT("\"\r\n", 5000) == 1) |
rcele_85 | 0:e7957e1745cb | 238 | { |
rcele_85 | 0:e7957e1745cb | 239 | unsigned long PrevMillis = timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 240 | unsigned long currentMillis = timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 241 | while ( (GSM_Response != 4) && ((currentMillis - PrevMillis) < 20000) ) |
rcele_85 | 0:e7957e1745cb | 242 | { |
rcele_85 | 0:e7957e1745cb | 243 | // delay(1); |
rcele_85 | 0:e7957e1745cb | 244 | serialEvent(); |
rcele_85 | 0:e7957e1745cb | 245 | currentMillis = timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 246 | } |
rcele_85 | 0:e7957e1745cb | 247 | } |
rcele_85 | 0:e7957e1745cb | 248 | break; |
rcele_85 | 0:e7957e1745cb | 249 | } |
rcele_85 | 0:e7957e1745cb | 250 | case 6: |
rcele_85 | 0:e7957e1745cb | 251 | { |
rcele_85 | 0:e7957e1745cb | 252 | unsigned long PrevMillis =timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 253 | unsigned long currentMillis = timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 254 | while ( (GSM_Response != 4) && ((currentMillis - PrevMillis) < 20000) ) |
rcele_85 | 0:e7957e1745cb | 255 | { |
rcele_85 | 0:e7957e1745cb | 256 | // delay(1); |
rcele_85 | 0:e7957e1745cb | 257 | serialEvent(); |
rcele_85 | 0:e7957e1745cb | 258 | currentMillis = timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 259 | } |
rcele_85 | 0:e7957e1745cb | 260 | break; |
rcele_85 | 0:e7957e1745cb | 261 | } |
rcele_85 | 0:e7957e1745cb | 262 | case 7: |
rcele_85 | 0:e7957e1745cb | 263 | { |
rcele_85 | 0:e7957e1745cb | 264 | sendATreply("AT+CIPSHUT\r\n", "OK", 4000) ; |
rcele_85 | 0:e7957e1745cb | 265 | modemStatus = 0; |
rcele_85 | 0:e7957e1745cb | 266 | _tcpStatus = 2; |
rcele_85 | 0:e7957e1745cb | 267 | break; |
rcele_85 | 0:e7957e1745cb | 268 | } |
rcele_85 | 0:e7957e1745cb | 269 | } |
rcele_85 | 0:e7957e1745cb | 270 | } |
rcele_85 | 0:e7957e1745cb | 271 | } |
rcele_85 | 0:e7957e1745cb | 272 | |
rcele_85 | 0:e7957e1745cb | 273 | } |
rcele_85 | 0:e7957e1745cb | 274 | |
rcele_85 | 0:e7957e1745cb | 275 | void GSM_MQTT::_ping(void) |
rcele_85 | 0:e7957e1745cb | 276 | { |
rcele_85 | 0:e7957e1745cb | 277 | |
rcele_85 | 0:e7957e1745cb | 278 | if (pingFlag == true) |
rcele_85 | 0:e7957e1745cb | 279 | { |
rcele_85 | 0:e7957e1745cb | 280 | unsigned long currentMillis = timer800.read_ms(); |
rcele_85 | 0:e7957e1745cb | 281 | if ((currentMillis - _PingPrevMillis ) >= _KeepAliveTimeOut * 1000) |
rcele_85 | 0:e7957e1745cb | 282 | { |
rcele_85 | 0:e7957e1745cb | 283 | // save the last time you blinked the LED |
rcele_85 | 0:e7957e1745cb | 284 | _PingPrevMillis = currentMillis; |
rcele_85 | 0:e7957e1745cb | 285 | Serial800.putc(char(PINGREQ * 16)); |
rcele_85 | 0:e7957e1745cb | 286 | _sendLength(0); |
rcele_85 | 0:e7957e1745cb | 287 | } |
rcele_85 | 0:e7957e1745cb | 288 | } |
rcele_85 | 0:e7957e1745cb | 289 | } |
rcele_85 | 0:e7957e1745cb | 290 | void GSM_MQTT::_sendUTFString(char *string1) |
rcele_85 | 0:e7957e1745cb | 291 | { |
rcele_85 | 0:e7957e1745cb | 292 | int localLength = strlen(string1); |
rcele_85 | 0:e7957e1745cb | 293 | Serial800.putc(char(localLength / 256)); |
rcele_85 | 0:e7957e1745cb | 294 | Serial800.putc(char(localLength % 256)); |
rcele_85 | 0:e7957e1745cb | 295 | Serial800.printf("%s",string1); |
rcele_85 | 0:e7957e1745cb | 296 | } |
rcele_85 | 0:e7957e1745cb | 297 | void GSM_MQTT::_sendLength(int len) |
rcele_85 | 0:e7957e1745cb | 298 | { |
rcele_85 | 0:e7957e1745cb | 299 | bool length_flag = false; |
rcele_85 | 0:e7957e1745cb | 300 | while (length_flag == false) |
rcele_85 | 0:e7957e1745cb | 301 | { |
rcele_85 | 0:e7957e1745cb | 302 | if ((len / 128) > 0) |
rcele_85 | 0:e7957e1745cb | 303 | { |
rcele_85 | 0:e7957e1745cb | 304 | Serial800.putc(char(len % 128 + 128)); |
rcele_85 | 0:e7957e1745cb | 305 | len /= 128; |
rcele_85 | 0:e7957e1745cb | 306 | } |
rcele_85 | 0:e7957e1745cb | 307 | else |
rcele_85 | 0:e7957e1745cb | 308 | { |
rcele_85 | 0:e7957e1745cb | 309 | length_flag = true; |
rcele_85 | 0:e7957e1745cb | 310 | Serial800.putc(char(len)); |
rcele_85 | 0:e7957e1745cb | 311 | } |
rcele_85 | 0:e7957e1745cb | 312 | } |
rcele_85 | 0:e7957e1745cb | 313 | } |
rcele_85 | 0:e7957e1745cb | 314 | //void GSM_MQTT::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 = "") |
rcele_85 | 0:e7957e1745cb | 315 | void GSM_MQTT::connect(char *ClientIdentifier, char UserNameFlag, char PasswordFlag, char *UserName, char *Password, char CleanSession, char WillFlag, char WillQoS, char WillRetain, char *WillTopic, char *WillMessage) |
rcele_85 | 0:e7957e1745cb | 316 | { |
rcele_85 | 0:e7957e1745cb | 317 | //SerialDBG.printf("in connect\r\n"); |
rcele_85 | 0:e7957e1745cb | 318 | ConnectionAcknowledgement = NO_ACKNOWLEDGEMENT ; |
rcele_85 | 0:e7957e1745cb | 319 | Serial800.putc(char(CONNECT * 16 )); |
rcele_85 | 0:e7957e1745cb | 320 | char ProtocolName[7] = "MQIsdp"; |
rcele_85 | 0:e7957e1745cb | 321 | int localLength = (2 + strlen(ProtocolName)) + 1 + 3 + (2 + strlen(ClientIdentifier)); |
rcele_85 | 0:e7957e1745cb | 322 | if (WillFlag != 0) |
rcele_85 | 0:e7957e1745cb | 323 | { |
rcele_85 | 0:e7957e1745cb | 324 | localLength = localLength + 2 + strlen(WillTopic) + 2 + strlen(WillMessage); |
rcele_85 | 0:e7957e1745cb | 325 | } |
rcele_85 | 0:e7957e1745cb | 326 | if (UserNameFlag != 0) |
rcele_85 | 0:e7957e1745cb | 327 | { |
rcele_85 | 0:e7957e1745cb | 328 | localLength = localLength + 2 + strlen(UserName); |
rcele_85 | 0:e7957e1745cb | 329 | |
rcele_85 | 0:e7957e1745cb | 330 | if (PasswordFlag != 0) |
rcele_85 | 0:e7957e1745cb | 331 | { |
rcele_85 | 0:e7957e1745cb | 332 | localLength = localLength + 2 + strlen(Password); |
rcele_85 | 0:e7957e1745cb | 333 | } |
rcele_85 | 0:e7957e1745cb | 334 | } |
rcele_85 | 0:e7957e1745cb | 335 | _sendLength(localLength); |
rcele_85 | 0:e7957e1745cb | 336 | _sendUTFString(ProtocolName); |
rcele_85 | 0:e7957e1745cb | 337 | Serial800.putc(char(_ProtocolVersion)); |
rcele_85 | 0:e7957e1745cb | 338 | Serial800.putc(char(UserNameFlag * User_Name_Flag_Mask + PasswordFlag * Password_Flag_Mask + WillRetain * Will_Retain_Mask + WillQoS * Will_QoS_Scale + WillFlag * Will_Flag_Mask + CleanSession * Clean_Session_Mask)); |
rcele_85 | 0:e7957e1745cb | 339 | Serial800.putc(char(_KeepAliveTimeOut / 256)); |
rcele_85 | 0:e7957e1745cb | 340 | Serial800.putc(char(_KeepAliveTimeOut % 256)); |
rcele_85 | 0:e7957e1745cb | 341 | _sendUTFString(ClientIdentifier); |
rcele_85 | 0:e7957e1745cb | 342 | if (WillFlag != 0) |
rcele_85 | 0:e7957e1745cb | 343 | { |
rcele_85 | 0:e7957e1745cb | 344 | _sendUTFString(WillTopic); |
rcele_85 | 0:e7957e1745cb | 345 | _sendUTFString(WillMessage); |
rcele_85 | 0:e7957e1745cb | 346 | } |
rcele_85 | 0:e7957e1745cb | 347 | if (UserNameFlag != 0) |
rcele_85 | 0:e7957e1745cb | 348 | { |
rcele_85 | 0:e7957e1745cb | 349 | _sendUTFString(UserName); |
rcele_85 | 0:e7957e1745cb | 350 | if (PasswordFlag != 0) |
rcele_85 | 0:e7957e1745cb | 351 | { |
rcele_85 | 0:e7957e1745cb | 352 | _sendUTFString(Password); |
rcele_85 | 0:e7957e1745cb | 353 | } |
rcele_85 | 0:e7957e1745cb | 354 | } |
rcele_85 | 0:e7957e1745cb | 355 | } |
rcele_85 | 0:e7957e1745cb | 356 | void GSM_MQTT::publish( char *Topic, char *Message, char DUP, char Qos, char RETAIN, unsigned int MessageID) |
rcele_85 | 0:e7957e1745cb | 357 | { |
rcele_85 | 0:e7957e1745cb | 358 | Serial800.putc(char(PUBLISH * 16 + DUP * DUP_Mask + Qos * QoS_Scale + RETAIN)); |
rcele_85 | 0:e7957e1745cb | 359 | int localLength = (2 + strlen(Topic)); |
rcele_85 | 0:e7957e1745cb | 360 | if (Qos > 0) |
rcele_85 | 0:e7957e1745cb | 361 | { |
rcele_85 | 0:e7957e1745cb | 362 | localLength += 2; |
rcele_85 | 0:e7957e1745cb | 363 | } |
rcele_85 | 0:e7957e1745cb | 364 | localLength += strlen(Message); |
rcele_85 | 0:e7957e1745cb | 365 | _sendLength(localLength); |
rcele_85 | 0:e7957e1745cb | 366 | _sendUTFString(Topic); |
rcele_85 | 0:e7957e1745cb | 367 | if (Qos > 0) |
rcele_85 | 0:e7957e1745cb | 368 | { |
rcele_85 | 0:e7957e1745cb | 369 | Serial800.putc(char(MessageID / 256)); |
rcele_85 | 0:e7957e1745cb | 370 | Serial800.putc(char(MessageID % 256)); |
rcele_85 | 0:e7957e1745cb | 371 | } |
rcele_85 | 0:e7957e1745cb | 372 | Serial800.printf("%s",Message); |
rcele_85 | 0:e7957e1745cb | 373 | } |
rcele_85 | 0:e7957e1745cb | 374 | void GSM_MQTT::publishACK(unsigned int MessageID) |
rcele_85 | 0:e7957e1745cb | 375 | { |
rcele_85 | 0:e7957e1745cb | 376 | Serial800.putc(char(PUBACK * 16)); |
rcele_85 | 0:e7957e1745cb | 377 | _sendLength(2); |
rcele_85 | 0:e7957e1745cb | 378 | Serial800.putc(char(MessageID / 256)); |
rcele_85 | 0:e7957e1745cb | 379 | Serial800.putc(char(MessageID % 256)); |
rcele_85 | 0:e7957e1745cb | 380 | } |
rcele_85 | 0:e7957e1745cb | 381 | void GSM_MQTT::publishREC(unsigned int MessageID) |
rcele_85 | 0:e7957e1745cb | 382 | { |
rcele_85 | 0:e7957e1745cb | 383 | Serial800.putc(char(PUBREC * 16)); |
rcele_85 | 0:e7957e1745cb | 384 | _sendLength(2); |
rcele_85 | 0:e7957e1745cb | 385 | Serial800.putc(char(MessageID / 256)); |
rcele_85 | 0:e7957e1745cb | 386 | Serial800.putc(char(MessageID % 256)); |
rcele_85 | 0:e7957e1745cb | 387 | } |
rcele_85 | 0:e7957e1745cb | 388 | void GSM_MQTT::publishREL(char DUP, unsigned int MessageID) |
rcele_85 | 0:e7957e1745cb | 389 | { |
rcele_85 | 0:e7957e1745cb | 390 | Serial800.putc(char(PUBREL * 16 + DUP * DUP_Mask + 1 * QoS_Scale)); |
rcele_85 | 0:e7957e1745cb | 391 | _sendLength(2); |
rcele_85 | 0:e7957e1745cb | 392 | Serial800.putc(char(MessageID / 256)); |
rcele_85 | 0:e7957e1745cb | 393 | Serial800.putc(char(MessageID % 256)); |
rcele_85 | 0:e7957e1745cb | 394 | } |
rcele_85 | 0:e7957e1745cb | 395 | |
rcele_85 | 0:e7957e1745cb | 396 | void GSM_MQTT::publishCOMP(unsigned int MessageID) |
rcele_85 | 0:e7957e1745cb | 397 | { |
rcele_85 | 0:e7957e1745cb | 398 | Serial800.putc(char(PUBCOMP * 16)); |
rcele_85 | 0:e7957e1745cb | 399 | _sendLength(2); |
rcele_85 | 0:e7957e1745cb | 400 | Serial800.putc(char(MessageID / 256)); |
rcele_85 | 0:e7957e1745cb | 401 | Serial800.putc(char(MessageID % 256)); |
rcele_85 | 0:e7957e1745cb | 402 | } |
rcele_85 | 0:e7957e1745cb | 403 | void GSM_MQTT::subscribe(char *SubTopic, char DUP, unsigned int MessageID, char SubQoS) |
rcele_85 | 0:e7957e1745cb | 404 | { |
rcele_85 | 0:e7957e1745cb | 405 | Serial800.putc(char(SUBSCRIBE * 16 + DUP * DUP_Mask + 1 * QoS_Scale)); |
rcele_85 | 0:e7957e1745cb | 406 | int localLength = 2 + (2 + strlen(SubTopic)) + 1; |
rcele_85 | 0:e7957e1745cb | 407 | _sendLength(localLength); |
rcele_85 | 0:e7957e1745cb | 408 | Serial800.putc(char(MessageID / 256)); |
rcele_85 | 0:e7957e1745cb | 409 | Serial800.putc(char(MessageID % 256)); |
rcele_85 | 0:e7957e1745cb | 410 | _sendUTFString(SubTopic); |
rcele_85 | 0:e7957e1745cb | 411 | Serial800.putc(SubQoS); |
rcele_85 | 0:e7957e1745cb | 412 | |
rcele_85 | 0:e7957e1745cb | 413 | } |
rcele_85 | 0:e7957e1745cb | 414 | void GSM_MQTT::unsubscribe( char *SubTopic, char DUP, unsigned int MessageID) |
rcele_85 | 0:e7957e1745cb | 415 | { |
rcele_85 | 0:e7957e1745cb | 416 | Serial800.putc(char(UNSUBSCRIBE * 16 + DUP * DUP_Mask + 1 * QoS_Scale)); |
rcele_85 | 0:e7957e1745cb | 417 | int localLength = (2 + strlen(SubTopic)) + 2; |
rcele_85 | 0:e7957e1745cb | 418 | _sendLength(localLength); |
rcele_85 | 0:e7957e1745cb | 419 | |
rcele_85 | 0:e7957e1745cb | 420 | Serial800.putc(char(MessageID / 256)); |
rcele_85 | 0:e7957e1745cb | 421 | Serial800.putc(char(MessageID % 256)); |
rcele_85 | 0:e7957e1745cb | 422 | |
rcele_85 | 0:e7957e1745cb | 423 | _sendUTFString(SubTopic); |
rcele_85 | 0:e7957e1745cb | 424 | } |
rcele_85 | 0:e7957e1745cb | 425 | void GSM_MQTT::disconnect(void) |
rcele_85 | 0:e7957e1745cb | 426 | { |
rcele_85 | 0:e7957e1745cb | 427 | Serial800.putc(char(DISCONNECT * 16)); |
rcele_85 | 0:e7957e1745cb | 428 | _sendLength(0); |
rcele_85 | 0:e7957e1745cb | 429 | pingFlag = false; |
rcele_85 | 0:e7957e1745cb | 430 | } |
rcele_85 | 0:e7957e1745cb | 431 | //Messages |
rcele_85 | 0:e7957e1745cb | 432 | const char CONNECTMessage[] = "Client request to connect to Server\r\n"; |
rcele_85 | 0:e7957e1745cb | 433 | const char CONNACKMessage[] = "Connect Acknowledgment\r\n"; |
rcele_85 | 0:e7957e1745cb | 434 | const char PUBLISHMessage[] = "Publish message\r\n"; |
rcele_85 | 0:e7957e1745cb | 435 | const char PUBACKMessage[] = "Publish Acknowledgment\r\n"; |
rcele_85 | 0:e7957e1745cb | 436 | const char PUBRECMessage[] = "Publish Received (assured delivery part 1)\r\n"; |
rcele_85 | 0:e7957e1745cb | 437 | const char PUBRELMessage[] = "Publish Release (assured delivery part 2)\r\n"; |
rcele_85 | 0:e7957e1745cb | 438 | const char PUBCOMPMessage[] = "Publish Complete (assured delivery part 3)\r\n"; |
rcele_85 | 0:e7957e1745cb | 439 | const char SUBSCRIBEMessage[] = "Client Subscribe request\r\n"; |
rcele_85 | 0:e7957e1745cb | 440 | const char SUBACKMessage[] = "Subscribe Acknowledgment\r\n"; |
rcele_85 | 0:e7957e1745cb | 441 | const char UNSUBSCRIBEMessage[] = "Client Unsubscribe request\r\n"; |
rcele_85 | 0:e7957e1745cb | 442 | const char UNSUBACKMessage[] = "Unsubscribe Acknowledgment\r\n"; |
rcele_85 | 0:e7957e1745cb | 443 | const char PINGREQMessage[] = "PING Request\r\n"; |
rcele_85 | 0:e7957e1745cb | 444 | const char PINGRESPMessage[] = "PING Response\r\n"; |
rcele_85 | 0:e7957e1745cb | 445 | const char DISCONNECTMessage[] = "Client is Disconnecting\r\n"; |
rcele_85 | 0:e7957e1745cb | 446 | |
rcele_85 | 0:e7957e1745cb | 447 | void GSM_MQTT::printMessageType(uint8_t Message) |
rcele_85 | 0:e7957e1745cb | 448 | { |
rcele_85 | 0:e7957e1745cb | 449 | switch (Message) |
rcele_85 | 0:e7957e1745cb | 450 | { |
rcele_85 | 0:e7957e1745cb | 451 | case CONNECT: |
rcele_85 | 0:e7957e1745cb | 452 | { |
rcele_85 | 0:e7957e1745cb | 453 | SerialDBG.printf("%s",CONNECTMessage); |
rcele_85 | 0:e7957e1745cb | 454 | break; |
rcele_85 | 0:e7957e1745cb | 455 | } |
rcele_85 | 0:e7957e1745cb | 456 | case CONNACK: |
rcele_85 | 0:e7957e1745cb | 457 | { |
rcele_85 | 0:e7957e1745cb | 458 | SerialDBG.printf("%s",CONNACKMessage); |
rcele_85 | 0:e7957e1745cb | 459 | break; |
rcele_85 | 0:e7957e1745cb | 460 | } |
rcele_85 | 0:e7957e1745cb | 461 | case PUBLISH: |
rcele_85 | 0:e7957e1745cb | 462 | { |
rcele_85 | 0:e7957e1745cb | 463 | SerialDBG.printf("%s",PUBLISHMessage); |
rcele_85 | 0:e7957e1745cb | 464 | break; |
rcele_85 | 0:e7957e1745cb | 465 | } |
rcele_85 | 0:e7957e1745cb | 466 | case PUBACK: |
rcele_85 | 0:e7957e1745cb | 467 | { |
rcele_85 | 0:e7957e1745cb | 468 | SerialDBG.printf("%s",PUBACKMessage); |
rcele_85 | 0:e7957e1745cb | 469 | break; |
rcele_85 | 0:e7957e1745cb | 470 | } |
rcele_85 | 0:e7957e1745cb | 471 | case PUBREC: |
rcele_85 | 0:e7957e1745cb | 472 | { |
rcele_85 | 0:e7957e1745cb | 473 | SerialDBG.printf("%s",PUBRECMessage); |
rcele_85 | 0:e7957e1745cb | 474 | break; |
rcele_85 | 0:e7957e1745cb | 475 | } |
rcele_85 | 0:e7957e1745cb | 476 | case PUBREL: |
rcele_85 | 0:e7957e1745cb | 477 | { |
rcele_85 | 0:e7957e1745cb | 478 | SerialDBG.printf("%s",PUBRELMessage); |
rcele_85 | 0:e7957e1745cb | 479 | break; |
rcele_85 | 0:e7957e1745cb | 480 | } |
rcele_85 | 0:e7957e1745cb | 481 | case PUBCOMP: |
rcele_85 | 0:e7957e1745cb | 482 | { |
rcele_85 | 0:e7957e1745cb | 483 | SerialDBG.printf("%s",PUBCOMPMessage); |
rcele_85 | 0:e7957e1745cb | 484 | break; |
rcele_85 | 0:e7957e1745cb | 485 | } |
rcele_85 | 0:e7957e1745cb | 486 | case SUBSCRIBE: |
rcele_85 | 0:e7957e1745cb | 487 | { |
rcele_85 | 0:e7957e1745cb | 488 | SerialDBG.printf("%s",SUBSCRIBEMessage); |
rcele_85 | 0:e7957e1745cb | 489 | break; |
rcele_85 | 0:e7957e1745cb | 490 | } |
rcele_85 | 0:e7957e1745cb | 491 | case SUBACK: |
rcele_85 | 0:e7957e1745cb | 492 | { |
rcele_85 | 0:e7957e1745cb | 493 | SerialDBG.printf("%s",SUBACKMessage); |
rcele_85 | 0:e7957e1745cb | 494 | break; |
rcele_85 | 0:e7957e1745cb | 495 | } |
rcele_85 | 0:e7957e1745cb | 496 | case UNSUBSCRIBE: |
rcele_85 | 0:e7957e1745cb | 497 | { |
rcele_85 | 0:e7957e1745cb | 498 | SerialDBG.printf("%s",UNSUBSCRIBEMessage); |
rcele_85 | 0:e7957e1745cb | 499 | break; |
rcele_85 | 0:e7957e1745cb | 500 | } |
rcele_85 | 0:e7957e1745cb | 501 | case UNSUBACK: |
rcele_85 | 0:e7957e1745cb | 502 | { |
rcele_85 | 0:e7957e1745cb | 503 | SerialDBG.printf("%s",UNSUBACKMessage); |
rcele_85 | 0:e7957e1745cb | 504 | break; |
rcele_85 | 0:e7957e1745cb | 505 | } |
rcele_85 | 0:e7957e1745cb | 506 | case PINGREQ: |
rcele_85 | 0:e7957e1745cb | 507 | { |
rcele_85 | 0:e7957e1745cb | 508 | SerialDBG.printf("%s",PINGREQMessage); |
rcele_85 | 0:e7957e1745cb | 509 | break; |
rcele_85 | 0:e7957e1745cb | 510 | } |
rcele_85 | 0:e7957e1745cb | 511 | case PINGRESP: |
rcele_85 | 0:e7957e1745cb | 512 | { |
rcele_85 | 0:e7957e1745cb | 513 | SerialDBG.printf("%s",PINGRESPMessage); |
rcele_85 | 0:e7957e1745cb | 514 | break; |
rcele_85 | 0:e7957e1745cb | 515 | } |
rcele_85 | 0:e7957e1745cb | 516 | case DISCONNECT: |
rcele_85 | 0:e7957e1745cb | 517 | { |
rcele_85 | 0:e7957e1745cb | 518 | SerialDBG.printf("%s",DISCONNECTMessage); |
rcele_85 | 0:e7957e1745cb | 519 | break; |
rcele_85 | 0:e7957e1745cb | 520 | } |
rcele_85 | 0:e7957e1745cb | 521 | } |
rcele_85 | 0:e7957e1745cb | 522 | } |
rcele_85 | 0:e7957e1745cb | 523 | |
rcele_85 | 0:e7957e1745cb | 524 | //Connect Ack |
rcele_85 | 0:e7957e1745cb | 525 | const char ConnectAck0[] = "Connection Accepted\r\n"; |
rcele_85 | 0:e7957e1745cb | 526 | const char ConnectAck1[] = "Connection Refused: unacceptable protocol version\r\n"; |
rcele_85 | 0:e7957e1745cb | 527 | const char ConnectAck2[] = "Connection Refused: identifier rejected\r\n"; |
rcele_85 | 0:e7957e1745cb | 528 | const char ConnectAck3[] = "Connection Refused: server unavailable\r\n"; |
rcele_85 | 0:e7957e1745cb | 529 | const char ConnectAck4[] = "Connection Refused: bad user name or password\r\n"; |
rcele_85 | 0:e7957e1745cb | 530 | const char ConnectAck5[] = "Connection Refused: not authorized\r\n"; |
rcele_85 | 0:e7957e1745cb | 531 | void GSM_MQTT::printConnectAck(uint8_t Ack) |
rcele_85 | 0:e7957e1745cb | 532 | { |
rcele_85 | 0:e7957e1745cb | 533 | switch (Ack) |
rcele_85 | 0:e7957e1745cb | 534 | { |
rcele_85 | 0:e7957e1745cb | 535 | case 0: |
rcele_85 | 0:e7957e1745cb | 536 | { |
rcele_85 | 0:e7957e1745cb | 537 | SerialDBG.printf("%s",ConnectAck0); |
rcele_85 | 0:e7957e1745cb | 538 | break; |
rcele_85 | 0:e7957e1745cb | 539 | } |
rcele_85 | 0:e7957e1745cb | 540 | case 1: |
rcele_85 | 0:e7957e1745cb | 541 | { |
rcele_85 | 0:e7957e1745cb | 542 | SerialDBG.printf("%s",ConnectAck1); |
rcele_85 | 0:e7957e1745cb | 543 | break; |
rcele_85 | 0:e7957e1745cb | 544 | } |
rcele_85 | 0:e7957e1745cb | 545 | case 2: |
rcele_85 | 0:e7957e1745cb | 546 | { |
rcele_85 | 0:e7957e1745cb | 547 | SerialDBG.printf("%s",ConnectAck2); |
rcele_85 | 0:e7957e1745cb | 548 | break; |
rcele_85 | 0:e7957e1745cb | 549 | } |
rcele_85 | 0:e7957e1745cb | 550 | case 3: |
rcele_85 | 0:e7957e1745cb | 551 | { |
rcele_85 | 0:e7957e1745cb | 552 | SerialDBG.printf("%s",ConnectAck3); |
rcele_85 | 0:e7957e1745cb | 553 | break; |
rcele_85 | 0:e7957e1745cb | 554 | } |
rcele_85 | 0:e7957e1745cb | 555 | case 4: |
rcele_85 | 0:e7957e1745cb | 556 | { |
rcele_85 | 0:e7957e1745cb | 557 | SerialDBG.printf("%s",ConnectAck4); |
rcele_85 | 0:e7957e1745cb | 558 | break; |
rcele_85 | 0:e7957e1745cb | 559 | } |
rcele_85 | 0:e7957e1745cb | 560 | case 5: |
rcele_85 | 0:e7957e1745cb | 561 | { |
rcele_85 | 0:e7957e1745cb | 562 | SerialDBG.printf("%s",ConnectAck5); |
rcele_85 | 0:e7957e1745cb | 563 | break; |
rcele_85 | 0:e7957e1745cb | 564 | } |
rcele_85 | 0:e7957e1745cb | 565 | } |
rcele_85 | 0:e7957e1745cb | 566 | } |
rcele_85 | 0:e7957e1745cb | 567 | unsigned int GSM_MQTT::_generateMessageID(void) |
rcele_85 | 0:e7957e1745cb | 568 | { |
rcele_85 | 0:e7957e1745cb | 569 | if (_LastMessaseID < 65535) |
rcele_85 | 0:e7957e1745cb | 570 | { |
rcele_85 | 0:e7957e1745cb | 571 | return ++_LastMessaseID; |
rcele_85 | 0:e7957e1745cb | 572 | } |
rcele_85 | 0:e7957e1745cb | 573 | else |
rcele_85 | 0:e7957e1745cb | 574 | { |
rcele_85 | 0:e7957e1745cb | 575 | _LastMessaseID = 0; |
rcele_85 | 0:e7957e1745cb | 576 | return _LastMessaseID; |
rcele_85 | 0:e7957e1745cb | 577 | } |
rcele_85 | 0:e7957e1745cb | 578 | } |
rcele_85 | 0:e7957e1745cb | 579 | void GSM_MQTT::processing(void) |
rcele_85 | 0:e7957e1745cb | 580 | { |
rcele_85 | 0:e7957e1745cb | 581 | serialEvent(); |
rcele_85 | 0:e7957e1745cb | 582 | if (TCP_Flag == false) |
rcele_85 | 0:e7957e1745cb | 583 | { |
rcele_85 | 0:e7957e1745cb | 584 | MQTT_Flag = false; |
rcele_85 | 0:e7957e1745cb | 585 | _tcpInit(); |
rcele_85 | 0:e7957e1745cb | 586 | } |
rcele_85 | 0:e7957e1745cb | 587 | _ping(); |
rcele_85 | 0:e7957e1745cb | 588 | } |
rcele_85 | 0:e7957e1745cb | 589 | bool GSM_MQTT::available(void) |
rcele_85 | 0:e7957e1745cb | 590 | { |
rcele_85 | 0:e7957e1745cb | 591 | return MQTT_Flag; |
rcele_85 | 0:e7957e1745cb | 592 | } |
rcele_85 | 0:e7957e1745cb | 593 | void serialEvent() |
rcele_85 | 0:e7957e1745cb | 594 | { |
rcele_85 | 0:e7957e1745cb | 595 | //SerialDBG.printf("in serevent\r\n"); |
rcele_85 | 0:e7957e1745cb | 596 | while (Serial800_available()) |
rcele_85 | 0:e7957e1745cb | 597 | { |
rcele_85 | 0:e7957e1745cb | 598 | char inChar = (char)Serial800_read(); |
rcele_85 | 0:e7957e1745cb | 599 | if (MQTT.TCP_Flag == false) |
rcele_85 | 0:e7957e1745cb | 600 | { |
rcele_85 | 0:e7957e1745cb | 601 | if (MQTT.index < 200) |
rcele_85 | 0:e7957e1745cb | 602 | { |
rcele_85 | 0:e7957e1745cb | 603 | MQTT.inputString[MQTT.index++] = inChar; |
rcele_85 | 0:e7957e1745cb | 604 | } |
rcele_85 | 0:e7957e1745cb | 605 | if (inChar == '\n') |
rcele_85 | 0:e7957e1745cb | 606 | { |
rcele_85 | 0:e7957e1745cb | 607 | MQTT.inputString[MQTT.index] = 0; |
rcele_85 | 0:e7957e1745cb | 608 | stringComplete = true; |
rcele_85 | 0:e7957e1745cb | 609 | SerialDBG.printf("%s",MQTT.inputString); |
rcele_85 | 0:e7957e1745cb | 610 | if (strstr(MQTT.inputString, MQTT.reply) != NULL) |
rcele_85 | 0:e7957e1745cb | 611 | { |
rcele_85 | 0:e7957e1745cb | 612 | MQTT.GSM_ReplyFlag = 1; |
rcele_85 | 0:e7957e1745cb | 613 | if (strstr(MQTT.inputString, " INITIAL") != 0) |
rcele_85 | 0:e7957e1745cb | 614 | { |
rcele_85 | 0:e7957e1745cb | 615 | MQTT.GSM_ReplyFlag = 2; // |
rcele_85 | 0:e7957e1745cb | 616 | } |
rcele_85 | 0:e7957e1745cb | 617 | else if (strstr(MQTT.inputString, " START") != 0) |
rcele_85 | 0:e7957e1745cb | 618 | { |
rcele_85 | 0:e7957e1745cb | 619 | MQTT.GSM_ReplyFlag = 3; // |
rcele_85 | 0:e7957e1745cb | 620 | } |
rcele_85 | 0:e7957e1745cb | 621 | else if (strstr(MQTT.inputString, "IP CONFIG") != 0) |
rcele_85 | 0:e7957e1745cb | 622 | { |
rcele_85 | 0:e7957e1745cb | 623 | wait(0.0000010); |
rcele_85 | 0:e7957e1745cb | 624 | MQTT.GSM_ReplyFlag = 4; |
rcele_85 | 0:e7957e1745cb | 625 | } |
rcele_85 | 0:e7957e1745cb | 626 | else if (strstr(MQTT.inputString, " GPRSACT") != 0) |
rcele_85 | 0:e7957e1745cb | 627 | { |
rcele_85 | 0:e7957e1745cb | 628 | MQTT.GSM_ReplyFlag = 4; // |
rcele_85 | 0:e7957e1745cb | 629 | } |
rcele_85 | 0:e7957e1745cb | 630 | else if ((strstr(MQTT.inputString, " STATUS") != 0) || (strstr(MQTT.inputString, "TCP CLOSED") != 0)) |
rcele_85 | 0:e7957e1745cb | 631 | { |
rcele_85 | 0:e7957e1745cb | 632 | MQTT.GSM_ReplyFlag = 5; // |
rcele_85 | 0:e7957e1745cb | 633 | } |
rcele_85 | 0:e7957e1745cb | 634 | else if (strstr(MQTT.inputString, " TCP CONNECTING") != 0) |
rcele_85 | 0:e7957e1745cb | 635 | { |
rcele_85 | 0:e7957e1745cb | 636 | MQTT.GSM_ReplyFlag = 6; // |
rcele_85 | 0:e7957e1745cb | 637 | } |
rcele_85 | 0:e7957e1745cb | 638 | else if ((strstr(MQTT.inputString, " CONNECT OK") != 0) || (strstr(MQTT.inputString, "CONNECT FAIL") != NULL) || (strstr(MQTT.inputString, "PDP DEACT") != 0)) |
rcele_85 | 0:e7957e1745cb | 639 | { |
rcele_85 | 0:e7957e1745cb | 640 | MQTT.GSM_ReplyFlag = 7; |
rcele_85 | 0:e7957e1745cb | 641 | } |
rcele_85 | 0:e7957e1745cb | 642 | } |
rcele_85 | 0:e7957e1745cb | 643 | else if (strstr(MQTT.inputString, "OK") != NULL) |
rcele_85 | 0:e7957e1745cb | 644 | { |
rcele_85 | 0:e7957e1745cb | 645 | GSM_Response = 1; |
rcele_85 | 0:e7957e1745cb | 646 | } |
rcele_85 | 0:e7957e1745cb | 647 | else if (strstr(MQTT.inputString, "ERROR") != NULL) |
rcele_85 | 0:e7957e1745cb | 648 | { |
rcele_85 | 0:e7957e1745cb | 649 | GSM_Response = 2; |
rcele_85 | 0:e7957e1745cb | 650 | } |
rcele_85 | 0:e7957e1745cb | 651 | else if (strstr(MQTT.inputString, ".") != NULL) |
rcele_85 | 0:e7957e1745cb | 652 | { |
rcele_85 | 0:e7957e1745cb | 653 | GSM_Response = 3; |
rcele_85 | 0:e7957e1745cb | 654 | } |
rcele_85 | 0:e7957e1745cb | 655 | else if (strstr(MQTT.inputString, "CONNECT FAIL") != NULL) |
rcele_85 | 0:e7957e1745cb | 656 | { |
rcele_85 | 0:e7957e1745cb | 657 | GSM_Response = 5; |
rcele_85 | 0:e7957e1745cb | 658 | } |
rcele_85 | 0:e7957e1745cb | 659 | else if (strstr(MQTT.inputString, "CONNECT") != NULL) |
rcele_85 | 0:e7957e1745cb | 660 | { |
rcele_85 | 0:e7957e1745cb | 661 | GSM_Response = 4; |
rcele_85 | 0:e7957e1745cb | 662 | MQTT.TCP_Flag = true; |
rcele_85 | 0:e7957e1745cb | 663 | SerialDBG.printf("MQTT.TCP_Flag = True\r\n"); |
rcele_85 | 0:e7957e1745cb | 664 | //SerialDBG.printf("going to auto connect\r\n"); |
rcele_85 | 0:e7957e1745cb | 665 | MQTT.AutoConnect(); |
rcele_85 | 0:e7957e1745cb | 666 | //SerialDBG.printf("out of auto connect\r\n"); |
rcele_85 | 0:e7957e1745cb | 667 | MQTT.pingFlag = true; |
rcele_85 | 0:e7957e1745cb | 668 | MQTT.tcpATerrorcount = 0; |
rcele_85 | 0:e7957e1745cb | 669 | } |
rcele_85 | 0:e7957e1745cb | 670 | else if (strstr(MQTT.inputString, "CLOSED") != NULL) |
rcele_85 | 0:e7957e1745cb | 671 | { |
rcele_85 | 0:e7957e1745cb | 672 | GSM_Response = 4; |
rcele_85 | 0:e7957e1745cb | 673 | MQTT.TCP_Flag = false; |
rcele_85 | 0:e7957e1745cb | 674 | MQTT.MQTT_Flag = false; |
rcele_85 | 0:e7957e1745cb | 675 | } |
rcele_85 | 0:e7957e1745cb | 676 | MQTT.index = 0; |
rcele_85 | 0:e7957e1745cb | 677 | MQTT.inputString[0] = 0; |
rcele_85 | 0:e7957e1745cb | 678 | } |
rcele_85 | 0:e7957e1745cb | 679 | } |
rcele_85 | 0:e7957e1745cb | 680 | else |
rcele_85 | 0:e7957e1745cb | 681 | { |
rcele_85 | 0:e7957e1745cb | 682 | uint8_t ReceivedMessageType = (inChar / 16) & 0x0F; |
rcele_85 | 0:e7957e1745cb | 683 | uint8_t DUP = (inChar & DUP_Mask) / DUP_Mask; |
rcele_85 | 0:e7957e1745cb | 684 | uint8_t QoS = (inChar & QoS_Mask) / QoS_Scale; |
rcele_85 | 0:e7957e1745cb | 685 | uint8_t RETAIN = (inChar & RETAIN_Mask); |
rcele_85 | 0:e7957e1745cb | 686 | if ((ReceivedMessageType >= CONNECT) && (ReceivedMessageType <= DISCONNECT)) |
rcele_85 | 0:e7957e1745cb | 687 | { |
rcele_85 | 0:e7957e1745cb | 688 | bool NextLengthByte = true; |
rcele_85 | 0:e7957e1745cb | 689 | MQTT.length = 0; |
rcele_85 | 0:e7957e1745cb | 690 | MQTT.lengthLocal = 0; |
rcele_85 | 0:e7957e1745cb | 691 | uint32_t multiplier=1; |
rcele_85 | 0:e7957e1745cb | 692 | wait(0.002); |
rcele_85 | 0:e7957e1745cb | 693 | char Cchar = inChar; |
rcele_85 | 0:e7957e1745cb | 694 | while ( (NextLengthByte == true) && (MQTT.TCP_Flag == true)) |
rcele_85 | 0:e7957e1745cb | 695 | { |
rcele_85 | 0:e7957e1745cb | 696 | if (Serial800_available()>0) |
rcele_85 | 0:e7957e1745cb | 697 | { |
rcele_85 | 0:e7957e1745cb | 698 | inChar = (char)Serial800_read(); |
rcele_85 | 0:e7957e1745cb | 699 | SerialDBG.printf("%d\r\n",inChar); |
rcele_85 | 0:e7957e1745cb | 700 | if ((((Cchar & 0xFF) == 'C') && ((inChar & 0xFF) == 'L') && (MQTT.length == 0)) || (((Cchar & 0xFF) == '+') && ((inChar & 0xFF) == 'P') && (MQTT.length == 0))) |
rcele_85 | 0:e7957e1745cb | 701 | { |
rcele_85 | 0:e7957e1745cb | 702 | MQTT.index = 0; |
rcele_85 | 0:e7957e1745cb | 703 | MQTT.inputString[MQTT.index++] = Cchar; |
rcele_85 | 0:e7957e1745cb | 704 | MQTT.inputString[MQTT.index++] = inChar; |
rcele_85 | 0:e7957e1745cb | 705 | MQTT.TCP_Flag = false; |
rcele_85 | 0:e7957e1745cb | 706 | MQTT.MQTT_Flag = false; |
rcele_85 | 0:e7957e1745cb | 707 | MQTT.pingFlag = false; |
rcele_85 | 0:e7957e1745cb | 708 | SerialDBG.printf("Disconnecting\r\n"); |
rcele_85 | 0:e7957e1745cb | 709 | } |
rcele_85 | 0:e7957e1745cb | 710 | else |
rcele_85 | 0:e7957e1745cb | 711 | { |
rcele_85 | 0:e7957e1745cb | 712 | if ((inChar & 128) == 128) |
rcele_85 | 0:e7957e1745cb | 713 | { |
rcele_85 | 0:e7957e1745cb | 714 | MQTT.length += (inChar & 127) * multiplier; |
rcele_85 | 0:e7957e1745cb | 715 | multiplier *= 128; |
rcele_85 | 0:e7957e1745cb | 716 | SerialDBG.printf("More\r\n"); |
rcele_85 | 0:e7957e1745cb | 717 | } |
rcele_85 | 0:e7957e1745cb | 718 | else |
rcele_85 | 0:e7957e1745cb | 719 | { |
rcele_85 | 0:e7957e1745cb | 720 | NextLengthByte = false; |
rcele_85 | 0:e7957e1745cb | 721 | MQTT.length += (inChar & 127) * multiplier; |
rcele_85 | 0:e7957e1745cb | 722 | multiplier *= 128; |
rcele_85 | 0:e7957e1745cb | 723 | } |
rcele_85 | 0:e7957e1745cb | 724 | } |
rcele_85 | 0:e7957e1745cb | 725 | } |
rcele_85 | 0:e7957e1745cb | 726 | } |
rcele_85 | 0:e7957e1745cb | 727 | MQTT.lengthLocal = MQTT.length; |
rcele_85 | 0:e7957e1745cb | 728 | SerialDBG.printf("%d\r\n",MQTT.length); |
rcele_85 | 0:e7957e1745cb | 729 | if (MQTT.TCP_Flag == true) |
rcele_85 | 0:e7957e1745cb | 730 | { |
rcele_85 | 0:e7957e1745cb | 731 | MQTT.printMessageType(ReceivedMessageType); |
rcele_85 | 0:e7957e1745cb | 732 | MQTT.index = 0L; |
rcele_85 | 0:e7957e1745cb | 733 | uint32_t a = 0; |
rcele_85 | 0:e7957e1745cb | 734 | while ((MQTT.length-- > 0) && (Serial800_available()>0)) |
rcele_85 | 0:e7957e1745cb | 735 | { |
rcele_85 | 0:e7957e1745cb | 736 | MQTT.inputString[uint32_t(MQTT.index++)] = (char)Serial800_read(); |
rcele_85 | 0:e7957e1745cb | 737 | |
rcele_85 | 0:e7957e1745cb | 738 | wait(0.001); |
rcele_85 | 0:e7957e1745cb | 739 | |
rcele_85 | 0:e7957e1745cb | 740 | } |
rcele_85 | 0:e7957e1745cb | 741 | SerialDBG.printf("\r\n"); |
rcele_85 | 0:e7957e1745cb | 742 | if (ReceivedMessageType == CONNACK) |
rcele_85 | 0:e7957e1745cb | 743 | { |
rcele_85 | 0:e7957e1745cb | 744 | MQTT.ConnectionAcknowledgement = MQTT.inputString[0] * 256 + MQTT.inputString[1]; |
rcele_85 | 0:e7957e1745cb | 745 | if (MQTT.ConnectionAcknowledgement == 0) |
rcele_85 | 0:e7957e1745cb | 746 | { |
rcele_85 | 0:e7957e1745cb | 747 | MQTT.MQTT_Flag = true; |
rcele_85 | 0:e7957e1745cb | 748 | MQTT.OnConnect(); |
rcele_85 | 0:e7957e1745cb | 749 | |
rcele_85 | 0:e7957e1745cb | 750 | } |
rcele_85 | 0:e7957e1745cb | 751 | |
rcele_85 | 0:e7957e1745cb | 752 | MQTT.printConnectAck(MQTT.ConnectionAcknowledgement); |
rcele_85 | 0:e7957e1745cb | 753 | // MQTT.OnConnect(); |
rcele_85 | 0:e7957e1745cb | 754 | } |
rcele_85 | 0:e7957e1745cb | 755 | else if (ReceivedMessageType == PUBLISH) |
rcele_85 | 0:e7957e1745cb | 756 | { |
rcele_85 | 0:e7957e1745cb | 757 | uint32_t TopicLength = (MQTT.inputString[0]) * 256 + (MQTT.inputString[1]); |
rcele_85 | 0:e7957e1745cb | 758 | SerialDBG.printf("Topic : '"); |
rcele_85 | 0:e7957e1745cb | 759 | MQTT.PublishIndex = 0; |
rcele_85 | 0:e7957e1745cb | 760 | for (uint32_t iter = 2; iter < TopicLength + 2; iter++) |
rcele_85 | 0:e7957e1745cb | 761 | { |
rcele_85 | 0:e7957e1745cb | 762 | SerialDBG.putc(MQTT.inputString[iter]); |
rcele_85 | 0:e7957e1745cb | 763 | MQTT.Topic[MQTT.PublishIndex++] = MQTT.inputString[iter]; |
rcele_85 | 0:e7957e1745cb | 764 | } |
rcele_85 | 0:e7957e1745cb | 765 | MQTT.Topic[MQTT.PublishIndex] = 0; |
rcele_85 | 0:e7957e1745cb | 766 | SerialDBG.printf("' Message :'"); |
rcele_85 | 0:e7957e1745cb | 767 | MQTT.TopicLength = MQTT.PublishIndex; |
rcele_85 | 0:e7957e1745cb | 768 | |
rcele_85 | 0:e7957e1745cb | 769 | MQTT.PublishIndex = 0; |
rcele_85 | 0:e7957e1745cb | 770 | uint32_t MessageSTART = TopicLength + 2UL; |
rcele_85 | 0:e7957e1745cb | 771 | int MessageID = 0; |
rcele_85 | 0:e7957e1745cb | 772 | if (QoS != 0) |
rcele_85 | 0:e7957e1745cb | 773 | { |
rcele_85 | 0:e7957e1745cb | 774 | MessageSTART += 2; |
rcele_85 | 0:e7957e1745cb | 775 | MessageID = MQTT.inputString[TopicLength + 2UL] * 256 + MQTT.inputString[TopicLength + 3UL]; |
rcele_85 | 0:e7957e1745cb | 776 | } |
rcele_85 | 0:e7957e1745cb | 777 | for (uint32_t iter = (MessageSTART); iter < (MQTT.lengthLocal); iter++) |
rcele_85 | 0:e7957e1745cb | 778 | { |
rcele_85 | 0:e7957e1745cb | 779 | SerialDBG.putc(MQTT.inputString[iter]); |
rcele_85 | 0:e7957e1745cb | 780 | MQTT.Message[MQTT.PublishIndex++] = MQTT.inputString[iter]; |
rcele_85 | 0:e7957e1745cb | 781 | } |
rcele_85 | 0:e7957e1745cb | 782 | MQTT.Message[MQTT.PublishIndex] = 0; |
rcele_85 | 0:e7957e1745cb | 783 | SerialDBG.printf("'\r\n"); |
rcele_85 | 0:e7957e1745cb | 784 | MQTT.MessageLength = MQTT.PublishIndex; |
rcele_85 | 0:e7957e1745cb | 785 | if (QoS == 1) |
rcele_85 | 0:e7957e1745cb | 786 | { |
rcele_85 | 0:e7957e1745cb | 787 | MQTT.publishACK(MessageID); |
rcele_85 | 0:e7957e1745cb | 788 | } |
rcele_85 | 0:e7957e1745cb | 789 | else if (QoS == 2) |
rcele_85 | 0:e7957e1745cb | 790 | { |
rcele_85 | 0:e7957e1745cb | 791 | MQTT.publishREC(MessageID); |
rcele_85 | 0:e7957e1745cb | 792 | } |
rcele_85 | 0:e7957e1745cb | 793 | MQTT.OnMessage(MQTT.Topic, MQTT.TopicLength, MQTT.Message, MQTT.MessageLength); |
rcele_85 | 0:e7957e1745cb | 794 | MQTT.MessageFlag = true; |
rcele_85 | 0:e7957e1745cb | 795 | } |
rcele_85 | 0:e7957e1745cb | 796 | else if (ReceivedMessageType == PUBREC) |
rcele_85 | 0:e7957e1745cb | 797 | { |
rcele_85 | 0:e7957e1745cb | 798 | SerialDBG.printf("Message ID :"); |
rcele_85 | 0:e7957e1745cb | 799 | MQTT.publishREL(0, MQTT.inputString[0] * 256 + MQTT.inputString[1]) ; |
rcele_85 | 0:e7957e1745cb | 800 | SerialDBG.printf("%d",MQTT.inputString[0] * 256 + MQTT.inputString[1]) ; |
rcele_85 | 0:e7957e1745cb | 801 | |
rcele_85 | 0:e7957e1745cb | 802 | } |
rcele_85 | 0:e7957e1745cb | 803 | else if (ReceivedMessageType == PUBREL) |
rcele_85 | 0:e7957e1745cb | 804 | { |
rcele_85 | 0:e7957e1745cb | 805 | SerialDBG.printf("Message ID :"); |
rcele_85 | 0:e7957e1745cb | 806 | MQTT.publishCOMP(MQTT.inputString[0] * 256 + MQTT.inputString[1]) ; |
rcele_85 | 0:e7957e1745cb | 807 | SerialDBG.printf("%d\r\n",MQTT.inputString[0] * 256 + MQTT.inputString[1]) ; |
rcele_85 | 0:e7957e1745cb | 808 | |
rcele_85 | 0:e7957e1745cb | 809 | } |
rcele_85 | 0:e7957e1745cb | 810 | else if ((ReceivedMessageType == PUBACK) || (ReceivedMessageType == PUBCOMP) || (ReceivedMessageType == SUBACK) || (ReceivedMessageType == UNSUBACK)) |
rcele_85 | 0:e7957e1745cb | 811 | { |
rcele_85 | 0:e7957e1745cb | 812 | SerialDBG.printf("Message ID :"); |
rcele_85 | 0:e7957e1745cb | 813 | SerialDBG.printf("%d\r\n",MQTT.inputString[0] * 256 + MQTT.inputString[1]) ; |
rcele_85 | 0:e7957e1745cb | 814 | } |
rcele_85 | 0:e7957e1745cb | 815 | else if (ReceivedMessageType == PINGREQ) |
rcele_85 | 0:e7957e1745cb | 816 | { |
rcele_85 | 0:e7957e1745cb | 817 | MQTT.TCP_Flag = false; |
rcele_85 | 0:e7957e1745cb | 818 | MQTT.pingFlag = false; |
rcele_85 | 0:e7957e1745cb | 819 | SerialDBG.printf("Disconnecting\r\n"); |
rcele_85 | 0:e7957e1745cb | 820 | MQTT.sendATreply("AT+CIPSHUT\r\n", ".", 4000) ; |
rcele_85 | 0:e7957e1745cb | 821 | MQTT.modemStatus = 0; |
rcele_85 | 0:e7957e1745cb | 822 | } |
rcele_85 | 0:e7957e1745cb | 823 | } |
rcele_85 | 0:e7957e1745cb | 824 | } |
rcele_85 | 0:e7957e1745cb | 825 | else if ((inChar == 13) || (inChar == 10)) |
rcele_85 | 0:e7957e1745cb | 826 | { |
rcele_85 | 0:e7957e1745cb | 827 | } |
rcele_85 | 0:e7957e1745cb | 828 | else |
rcele_85 | 0:e7957e1745cb | 829 | { |
rcele_85 | 0:e7957e1745cb | 830 | SerialDBG.printf("Received :Unknown Message Type :"); |
rcele_85 | 0:e7957e1745cb | 831 | SerialDBG.printf("%d",inChar); |
rcele_85 | 0:e7957e1745cb | 832 | } |
rcele_85 | 0:e7957e1745cb | 833 | } |
rcele_85 | 0:e7957e1745cb | 834 | } |
rcele_85 | 0:e7957e1745cb | 835 | } |