AT Parser and bufferedSerial based SPWF library

Dependencies:   ATParser

Dependents:   X_NUCLEO_IDW01M1v2

Fork of SPWF01SA by ST Expansion SW Team

Revision:
19:df8d7f70a740
Parent:
18:fd46c2ca8eb7
Child:
20:01031cd39e73
--- a/SPWFSA01.cpp	Fri Sep 16 11:31:36 2016 +0000
+++ b/SPWFSA01.cpp	Wed Sep 21 10:22:40 2016 +0000
@@ -283,6 +283,7 @@
     return false;
 }
 
+/*
 int32_t SPWFSA01::recv(int id, void *data, uint32_t amount)
 {
     uint32_t recv_amount;
@@ -325,6 +326,31 @@
     }    
     return recv_amount;
 }
+*/
+
+int32_t SPWFSA01::recv(int id, void *data, uint32_t amount)
+{
+    uint32_t recv_amount=0;
+    
+    while(!recv_amount) {
+      if(!(_parser.send("AT+S.SOCKQ=%d", id)  //send a query (will be required for secure sockets)
+        && _parser.recv(" DATALEN: %u", &recv_amount)
+        && _parser.recv("OK"))) {
+                return -2;
+            }
+    }
+    if(recv_amount > amount)
+        recv_amount = amount;
+        
+    _parser.flush();
+    if(!(_parser.send("AT+S.SOCKR=%d,%d", id, recv_amount)
+        && (_parser.read((char*)data, recv_amount) >0)
+        && _parser.recv("OK"))) {
+                    return -2;
+                }
+    
+    return recv_amount;
+}
 
 bool SPWFSA01::close(int id)
 {