Init

Fork of ESP8266Interface by ESP8266

Revision:
30:c035696b9397
Parent:
29:939372104145
Child:
32:cf071dc33972
--- a/ESP8266/ESP8266.cpp	Tue Apr 28 20:17:51 2015 +0000
+++ b/ESP8266/ESP8266.cpp	Wed Apr 29 22:43:03 2015 +0000
@@ -39,7 +39,8 @@
 #define INFO(x, ...)
 #endif
 
-#define MAX_TRY_JOIN 3
+#define ESP_MAX_TRY_JOIN 3
+#define ESP_MAXID 4 // the largest possible ID Value (max num of sockets possible)
 
 extern Serial pc;
 
@@ -97,6 +98,52 @@
     return true;
 }
 
+bool ESP8266::start(bool type,char* ip, int port, int id)
+{
+    // Error Check
+    if(id > ESP_MAXID) {
+        ERR("startUDPMulti: max id is: %d, id given is %d",ESP_MAXID,id);
+        return false;
+    }
+    // Single Connection Mode
+    if(id < 0) {
+        DBG("Start Single Connection Mode");
+        char portstr[5];
+        char idstr[2];
+        bool check [3] = {0};
+        sprintf(idstr,"%d",id);
+        sprintf(portstr, "%d", port);
+        switch(type) {
+            case ESP_UDP_TYPE : //UDP
+                check[0] = sendCommand(( "AT+CIPSTART=" + (string) idstr + ",\"UDP\",\"" + (string) ip + "\"," + (string) portstr ).c_str(), "OK", NULL, 10000);
+                break;
+            case ESP_TCP_TYPE : //TCP
+                check[0] = sendCommand(( "AT+CIPSTART=" + (string) idstr + ",\"TCP\",\"" + (string) ip + "\"," + (string) portstr ).c_str(), "OK", NULL, 10000);
+                break;
+            default:
+                ERR("Default hit for starting connection, this shouldnt be possible!!");
+                break;
+        }
+        check[1] = sendCommand("AT+CIPMODE=1", "OK", NULL, 1000);// go into transparent mode
+        check[2] = sendCommand("AT+CIPSEND", ">", NULL, 1000);// go into transparent mode
+        // check that all commands were sucessful
+        if(check[0] && check[1] && check[2]) {
+            pc.printf("Data Mode\r\n");
+            state.cmdMode = false;
+            return true;
+        } else {
+            DBG("\r\nstartUDPTransparent Failed for ip:%s, port:%d\r\n",ip,port);
+            return false;
+        }
+    }
+    // Multi Connection Mode
+    else {
+        //TODO: impliment Multi Connection Mode
+        ERR("Not currently Supported!");
+        return false;
+    }
+}
+
 bool ESP8266::startUDP(char* ip, int port)
 {
     char portstr[5];
@@ -105,7 +152,7 @@
 
     sendCommand("AT+CIPMODE=1", "OK", NULL, 1000);// go into transparent mode
     sendCommand("AT+CIPSEND", ">", NULL, 1000);// go into transparent mode
-    printf("Data Mode\r\n");
+    pc.printf("Data Mode\r\n");
     state.cmdMode = false;
 
     return true;
@@ -184,6 +231,7 @@
         return true;
     } else {
         // dns needed, not currently available
+        ERR("gethostbyname(): DNS Not currently available, only use IP Addresses!");
         return false;
     }
 }