void ESP8266::readResponse(unsigned long timeout, void(*handler)(uint8_t serialResponseStatus)) { switch (state) { case STATE_IDLE: case STATE_CONNECTED: case STATE_SENDING_DATA: case STATE_RESETING: state = STATE_RECIVING_DATA; serialResponseTimestamp = currentTimestamp; serialResponseTimeout = timeout; serialResponseHandler = handler; strcpy(buffer, ""); bufferCursor = 0; //DBG("started listening\r\n"); break; case STATE_RECIVING_DATA: if ((currentTimestamp - serialResponseTimestamp) > serialResponseTimeout || currentTimestamp < serialResponseTimestamp || (bufferFind(responseTrueKeywords) || bufferFind(responseFalseKeywords) || bufferCursor == (SERIAL_RX_BUFFER_SIZE - 1))) { state = STATE_DATA_RECIVED; if (bufferFind(responseTrueKeywords) || bufferCursor == (SERIAL_RX_BUFFER_SIZE - 1)) { //DBG(F("serial true \r\n")); handler(SERIAL_RESPONSE_TRUE); } else if (bufferFind(responseFalseKeywords)) { //DBG(F("serial false \r\n")); handler(SERIAL_RESPONSE_FALSE); } else { //DBG(F("serial timeout \r\n")); handler(SERIAL_RESPONSE_TIMEOUT); } } else { while (_wifiSerial.available() > 0) { if (bufferCursor < (SERIAL_RX_BUFFER_SIZE-1)){ buffer[bufferCursor] = _wifiSerial.read(); bufferCursor++; } else { DBG(F("ESP8266 lib buffer overflow \r\n")); //empty the wifiSerial buffer' serialFlush(); break; } } buffer[bufferCursor] = '\0'; } break; } lastActivityTimestamp = currentTimestamp; //DBG(state); }
char * ESP8266::sendATCommand(char cmd[], char keyword[], unsigned long timeout) { _wifiSerial.flush(); _wifiSerial.print(cmd); unsigned long start; start = millis(); bufferCursor = 0; setResponseTrueKeywords(keyword); while (millis() - start < timeout) { if (_wifiSerial.available() > 0) { buffer[bufferCursor] = _wifiSerial.read(); bufferCursor++; } buffer[bufferCursor] = '\0'; if (bufferFind(responseTrueKeywords)) { break; } } return buffer; }
void ESP8266::readResponse(unsigned long timeout) { //switch (state) { //case STATE_IDLE: //case STATE_CONNECTED: //case STATE_SENDING_DATA: //case STATE_RESETING: // state = STATE_RECIVING_DATA; // serialResponseTimestamp = currentTimestamp; // serialResponseTimeout = timeout; // serialResponseHandler = handler; // strcpy(buffer, ""); // bufferCursor = 0; // //DBG("started listening\r\n"); // break; //case STATE_RECIVING_DATA: if ((currentTimestamp - serialResponseTimestamp) > serialResponseTimeout || currentTimestamp < serialResponseTimestamp || (bufferFind(responseTrueKeywords) || bufferFind(responseFalseKeywords) || bufferCursor == (SERIAL_RX_BUFFER_SIZE - 1))) { //state = STATE_DATA_RECIVED; if (bufferFind(responseTrueKeywords) || bufferCursor == (SERIAL_RX_BUFFER_SIZE - 1)) { //DBG(F("serial true \r\n")); callSerialResponseMethod(SERIAL_RESPONSE_TRUE); } else if (bufferFind(responseFalseKeywords)) { //DBG(F("serial false \r\n")); callSerialResponseMethod(SERIAL_RESPONSE_FALSE); } else { //DBG(F("serial timeout \r\n")); callSerialResponseMethod(SERIAL_RESPONSE_TIMEOUT); } } else { /*Serial.println("readResponse"); if(m_puart->available() > 0) { char a = m_puart->read(); }*/ /*String data; char a; while(m_puart->available() > 0) { a = m_puart->read(); Serial.println(a); if(a == '\0') continue; data += a; }*/ while (m_puart->available() > 0) { //Serial.println("available"); if (bufferCursor < (SERIAL_RX_BUFFER_SIZE-1)){ buffer[bufferCursor] =m_puart->read(); Serial.print( buffer[bufferCursor]); bufferCursor++; } else { //DBG(F("ESP8266 lib buffer overflow \r\n")); //empty the wifiSerial buffer' rx_empty(); break; } } buffer[bufferCursor] = '\0'; //bufferCursor = 0; } /*break; }*/ //lastActivityTimestamp = currentTimestamp; ////DBG(state); }