AT Parser and bufferedSerial based SPWF library

Dependencies:   ATParser

Dependents:   X_NUCLEO_IDW01M1v2

Fork of SPWF01SA by ST Expansion SW Team

Files at this revision

API Documentation at this revision

Comitter:
mapellil
Date:
Mon Jan 02 14:46:40 2017 +0000
Parent:
24:419285201dba
Child:
26:70852d26853e
Commit message:
Added TLS secure socket API

Changed in this revision

SPWFSA01.cpp Show annotated file Show diff for this revision Revisions of this file
SPWFSA01.h Show annotated file Show diff for this revision Revisions of this file
--- a/SPWFSA01.cpp	Tue Nov 22 14:36:25 2016 +0000
+++ b/SPWFSA01.cpp	Mon Jan 02 14:46:40 2017 +0000
@@ -250,13 +250,13 @@
     Timer timer;
     timer.start();
     socket_closed = 0; 
-       
+         
     if(!_parser.send("AT+S.SOCKON=%s,%d,%s,ind", addr, port, type))
         {
             debug_if(dbg_on, "SPWF> error opening socket\r\n");
             return false;
         }
-        
+
     while(1)
         {
             if( _parser.recv(" ID: %d", id)
@@ -272,7 +272,6 @@
             //TODO: deal with errors like "ERROR: Failed to resolve name"
             //TODO: deal with errors like "ERROR: Data mode not available"
         }
-
     return true;
 }
 
@@ -393,3 +392,102 @@
 {
     return _serial.writeable();
 }
+
+int32_t SPWFSA01::settime(time_t ctTime)
+{
+    _parser.flush();
+    //May take a second try if device is busy or error is returned
+    for (unsigned i = 0; i < 2; i++) {
+        if (_parser.send("AT+S.SETTIME=%d", ctTime)  
+            && _parser.recv("OK")) { 
+            return true;
+        }
+        else
+        {
+            debug_if(dbg_on, "SPWF> ERROR!!!!\r\n");
+            return false;
+        }
+    }    
+    return false;   
+}
+
+int32_t SPWFSA01::setTLScertificate(char * cert, unsigned int size, CertType_t type)
+{   
+    _parser.flush();
+    const char * cert_type="ca";
+    switch (type) {
+        case RAM_CA_ROOT_CERT:
+            printf ("RAM_CA_ROOT_CERT\n\r");
+           cert_type="ca";
+        break;        
+        case RAM_CLIENT_CERT:
+           cert_type="cert";        
+        break;        
+        case RAM_CLIENT_PRIV_KEY:
+           cert_type="key";                
+        break;        
+        case FLASH_CA_ROOT_CERT:
+           cert_type="f_ca";        
+        break;        
+        case FLASH_CLIENT_CERT:
+           cert_type="f_cert";                
+        break;        
+        case FLASH_CLIENT_PRIV_KEY:
+           cert_type="f_key";                        
+        break;
+        default:       
+        printf ("Error Unknown certificate type\n\r");
+        return false;
+    }
+    
+    //May take a second try if device is busy or error is returned
+    for (unsigned i = 0; i < 2; i++) {
+        if (_parser.send("AT+S.TLSCERT=%s,%d\r%s", cert_type, size, cert)  
+            && _parser.recv("OK")) { 
+//            printf ("SET CERT cert_type %s, cert: %s\n\r", cert_type, cert);            
+            return true;
+        }
+        else
+        {
+            printf ("SET CERT ERROR cert_type %s, cert: %s\n\r", cert_type, cert);
+            debug_if(dbg_on, "SPWF> ERROR!!!!\r\n");
+            return false;
+        }
+    }    
+    return false;   
+     
+}
+
+int32_t SPWFSA01::setTLSSRVdomain(char * domain, CertType_t type) 
+{
+    if (type == FLASH_DOMAIN)
+    {
+        if (_parser.send("AT+S.TLSDOMAIN=f_domain,%s", domain)) { 
+//            printf ("domain set %s\n\r", domain);
+            return true;
+        } else {
+            printf ("ERROR domain not set \n\r");
+            return false;
+        }
+        
+    } else { 
+        return false;
+    }    
+}
+
+int32_t SPWFSA01::cleanTLScertificate(CertType_t type) 
+{
+    if (type == ALL)
+    {
+        if (_parser.send("AT+S.TLSCERT2=all")) { 
+            return true;
+        } else {
+            printf ("ERROR cleaned \n\r");
+            return false;
+        }
+        
+    } else { 
+        return false;
+    }
+    
+}
\ No newline at end of file
--- a/SPWFSA01.h	Tue Nov 22 14:36:25 2016 +0000
+++ b/SPWFSA01.h	Mon Jan 02 14:46:40 2017 +0000
@@ -19,6 +19,18 @@
  
 #include "ATParser.h"
  
+ enum CertType_t {
+     RAM_CA_ROOT_CERT   =0,  // store CA root certicate in RAM
+     RAM_CLIENT_CERT,
+     RAM_CLIENT_PRIV_KEY,
+     FLASH_CA_ROOT_CERT,     // store CA root certicate in FLASH
+     FLASH_CLIENT_CERT,
+     FLASH_CLIENT_PRIV_KEY,
+     RAM_DOMAIN,             // store secure server domain name in RAM
+     FLASH_DOMAIN,           // store secure server domain name in RAM
+     ALL                     // clear all the CERT and DOMAIN from flash
+};
+ 
 /** SPWFSA01Interface class.
     This is an interface to a SPWFSA01 module.
  */
@@ -142,6 +154,13 @@
     */
     bool writeable();
  
+    int settime(time_t ctTime);
+ 
+    int32_t setTLScertificate(char * cert, unsigned int size, CertType_t type);
+    int32_t setTLSSRVdomain(char * cert, CertType_t type);    
+    int32_t cleanTLScertificate(CertType_t type);   
+    
+ 
 private:
     BufferedSerial _serial;
     ATParser _parser;