Erick / Mbed 2 deprecated ICE_BLE_TEST

Dependencies:   NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed

Fork of ICE by Erick

Revision:
246:ca91a441b4dc
Parent:
224:9ea8925c61e0
Child:
248:e156e33b8b38
--- a/src/CloudDataHandler/CloudFileReceiver.cpp	Thu Oct 20 17:59:18 2016 +0000
+++ b/src/CloudDataHandler/CloudFileReceiver.cpp	Thu Oct 20 22:20:52 2016 +0000
@@ -1,25 +1,27 @@
 #include "CloudFileReceiver.h"
 #include "CloudDataHandler.h"
 #include "MTSLog.h"
-#include "MbedJSONValue.h"
 #include "global.h"
+#include "cJSON.h"
+#include <algorithm>
 
 char CloudFileReceiverWriteBuf[MAX_FILE_SIZE];
 char CloudFileReceiverReadBuf[MAX_FILE_SIZE];
 
-bool StoreReceivedFile( mDot *dot, MbedJSONValue &from_json )
+bool StoreReceivedFile( mDot *dot, std::string &payload_string )
 {
     FILENAME_STRING filename;
 
     memset( filename, '\0', sizeof(FILENAME_STRING) );
-
-    int mType = from_json["pay"]["mtype"].get<int>();
-    logInfo("mtype=%d", mType);
+    
+    cJSON * payload = cJSON_Parse(payload_string.c_str());
+    int mType = cJSON_GetObjectItem(payload,"mtype")->valueint;
+    logInfo("%s:%d: mtype=%d", __func__,__LINE__,mType);
     switch( mType ) {
         case SETPOINT_CONTROL_MTYPE: {
+            cJSON * spcontrol = cJSON_GetObjectItem(payload,"spcontrol");
             logInfo("PROCESSING SETPONT CONTROL FILE");
-            snprintf( filename, sizeof(FILENAME_STRING), "control_sp_%s.json",
-                      from_json["pay"]["spcontrol"]["id"].get<std::string>().c_str() );
+            snprintf( filename, sizeof(FILENAME_STRING), "control_sp_%s.json", cJSON_GetObjectItem(spcontrol,"id")->valuestring );
             logInfo("SETPONT CONTROL FILENAME=%s", filename);
 
             memset( CloudFileReceiverWriteBuf, '\0', MAX_FILE_SIZE );
@@ -37,20 +39,21 @@
                      "\"hfs\":          \"%s\","
                      "\"lfs\":          \"%s\", "
                      "\"tol\":          \"%s\"  }",
-                     from_json["pay"]["spcontrol"]["id"].get<std::string>().c_str(),
-                     from_json["pay"]["spcontrol"]["priority"].get<std::string>().c_str(),
-                     from_json["pay"]["spcontrol"]["input"].get<std::string>().c_str(),
-                     from_json["pay"]["spcontrol"]["output"].get<std::string>().c_str(),
-                     from_json["pay"]["spcontrol"]["setpoint"].get<std::string>().c_str(),
-                     from_json["pay"]["spcontrol"]["prodfact"].get<std::string>().c_str(),
-                     from_json["pay"]["spcontrol"]["actingDir"].get<std::string>().c_str(),
-                     from_json["pay"]["spcontrol"]["halert"].get<std::string>().c_str(),
-                     from_json["pay"]["spcontrol"]["lalert"].get<std::string>().c_str(),
-                     from_json["pay"]["spcontrol"]["hfs"].get<std::string>().c_str(),
-                     from_json["pay"]["spcontrol"]["lfs"].get<std::string>().c_str(),
-                     from_json["pay"]["spcontrol"]["tol"].get<std::string>().c_str()
+                     cJSON_GetObjectItem(spcontrol,"id")->valuestring,
+                     cJSON_GetObjectItem(spcontrol,"priority")->valuestring,
+                     cJSON_GetObjectItem(spcontrol,"input")->valuestring,
+                     cJSON_GetObjectItem(spcontrol,"output")->valuestring,
+                     cJSON_GetObjectItem(spcontrol,"setpoint")->valuestring,
+                     cJSON_GetObjectItem(spcontrol,"productfact")->valuestring,
+                     cJSON_GetObjectItem(spcontrol,"actingDir")->valuestring,
+                     cJSON_GetObjectItem(spcontrol,"halert")->valuestring,
+                     cJSON_GetObjectItem(spcontrol,"lalert")->valuestring,
+                     cJSON_GetObjectItem(spcontrol,"hfs")->valuestring,
+                     cJSON_GetObjectItem(spcontrol,"lfs")->valuestring,
+                     cJSON_GetObjectItem(spcontrol,"tol")->valuestring
                     );
-
+            cJSON_Delete(spcontrol);
+            cJSON_Delete(payload);
             logInfo("saving string%s", CloudFileReceiverWriteBuf);
             bool status = GLOBAL_mdot->saveUserFile(filename, (void *)CloudFileReceiverWriteBuf, MAX_FILE_SIZE);
             if( status != true ) {
@@ -69,6 +72,7 @@
             MailBox.put(msg);
             break;
         }
+#ifdef 0
         case MANUAL_CONTROL_MTYPE: {
             logInfo("PROCESSING MANUAL CONTROL FILE");
             snprintf( filename, sizeof(FILENAME_STRING), "control_mn_%s.json",
@@ -413,6 +417,7 @@
             ModbusMasterMailBox.put(mail);
             break;
         }
+#endif
         default:
             logInfo("DEFAULT");
             break;
@@ -423,36 +428,52 @@
 bool CloudDataHandler_RcvFile = false;
 bool CloudFileReceiver( std::string *recv_string, mDot *dot )
 {
-
-    MbedJSONValue incomingJson;
+    bool status;
 
-    bool status;
-    parse( incomingJson, recv_string->c_str() );
-    int sequence = incomingJson["seq"].get<int>();
+    cJSON * root = cJSON_Parse(recv_string->c_str());
+    cJSON * payload = cJSON_GetObjectItem(root,"pay");
+    std::string payload_string = cJSON_Print(payload);
+    int sequence = cJSON_GetObjectItem(root,"seq")->valueint;
+    logInfo("%s:%d: sequence=%d",__func__,__LINE__, sequence);
+    cJSON_Delete(root);
+    cJSON_Delete(payload);
+    
+    
+    //remove the quotes added by the print function
+//    payload_string.erase( payload_string.begin() );
+//    payload_string.erase( payload_string.size() - 1 );
+    
+    payload_string = payload_string.substr(1, payload_string.size() - 2);
+//    payload_string.erase( std::remove(payload_string.begin(), payload_string.end(), 'a'), payload_string.end() );
+    std::replace( payload_string.begin(), payload_string.end(), '\\', ' ');
+    
+    printf("payload_string:%s\r\n", payload_string.c_str() );
 
     CloudDataHandler_RcvFile = false;
+    if( sequence == -1 ) {
 
-    // sequence of -1 means string sent in 1 chunk.
-    if( sequence == -1 ) {
-        return StoreReceivedFile( dot, incomingJson );
+        // sequence of -1 means string sent in 1 chunk.
+//        printf("%s:%d: payload=%s\r\n",__func__,__LINE__, payload_string.c_str() );
+        status = StoreReceivedFile( dot, payload_string );
+
     } else if( sequence == 0 ) {
 
         memset(CloudFileReceiverWriteBuf,0,sizeof(CloudFileReceiverWriteBuf));
-        snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf), "%s%s", "{\"seq\":-1, \"pay\":",incomingJson["pay"].get<std::string>().c_str() );
+        snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf), "%s%s", "{\"seq\":-1, \"pay\":", payload_string.c_str() );
+
         logInfo("(%d)Writing String Length=%d, %s", __LINE__, MAX_FILE_SIZE, CloudFileReceiverWriteBuf );
 
         status = dot->saveUserFile("scratch.json", (void *)CloudFileReceiverWriteBuf, MAX_FILE_SIZE);
         if( status != true ) {
             logError("(%d)save file failed, status=%d", __LINE__, status);
-            return false;
+        } else {
+            CloudDataHandler_RcvFile = true;
+            logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(CloudFileReceiverWriteBuf));
+            __heapstats((__heapprt)fprintf,stderr); 
         }
-        CloudDataHandler_RcvFile = true;
-        logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(CloudFileReceiverWriteBuf));
 
     } else if( sequence == -2 ) {
 
-        MbedJSONValue finalJson;
-
         logInfo("(%d)READING BACK scratch.json FILE FOR LAST PACKET", __LINE__);
 
         // read the file back
@@ -462,21 +483,13 @@
             return false;
         }
 
-        snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf), "%s%s%s", CloudFileReceiverReadBuf, incomingJson["pay"].get<std::string>().c_str(), "}" );
+        snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf), "%s%s%s", CloudFileReceiverReadBuf, payload_string.c_str(), "}" );
         logInfo("(%d)Final String Length=%d, %s", __LINE__, strlen(CloudFileReceiverWriteBuf), CloudFileReceiverWriteBuf );
 
-        std::string err;
-        parse( finalJson, CloudFileReceiverWriteBuf, CloudFileReceiverWriteBuf + strlen(CloudFileReceiverWriteBuf), &err );
+        std::string final_json = CloudFileReceiverWriteBuf;
         printf("finished parse\r\n" );
 
-        Thread::wait(1000);
-
-        int sequence = finalJson["seq"].get<int>();
-        int mType = finalJson["pay"]["mtype"].get<int>();
-
-        printf("MESSAGE TYPE=%d\r\n",mType);
-
-        status = StoreReceivedFile( dot, finalJson );
+        status = StoreReceivedFile( dot, final_json );
         if( status != true ) {
             logError("(%d)save file failed, status=%d", __LINE__, status);
         }
@@ -499,18 +512,17 @@
             return false;
         }
 
-        snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf), "%s%s", CloudFileReceiverReadBuf, incomingJson["pay"].get<std::string>().c_str() );
+        snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf), "%s%s", CloudFileReceiverReadBuf, payload_string.c_str() );
         logInfo("(%d)Writing String Length=%d, %s", __LINE__, strlen(CloudFileReceiverWriteBuf), CloudFileReceiverWriteBuf );
 
         status = dot->saveUserFile("scratch.json", (void *)CloudFileReceiverWriteBuf, MAX_FILE_SIZE);
         if( status != true ) {
             logError("(%d)save file failed, status=%d", __LINE__, status);
-            return false;
+        } else {
+            CloudDataHandler_RcvFile = true;
+            logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(CloudFileReceiverWriteBuf));
+            __heapstats((__heapprt)fprintf,stderr); 
         }
-        CloudDataHandler_RcvFile = true;
-        logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(CloudFileReceiverWriteBuf));
-
     }
-
     return true;
 }
\ No newline at end of file