Erick / Mbed 2 deprecated ICE_BLE_TEST

Dependencies:   NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed

Fork of ICE by Erick

Committer:
davidjhoward
Date:
Tue Sep 13 19:25:13 2016 +0000
Revision:
49:0456ee2271be
Parent:
45:3b9e1923cb15
Child:
99:55317f374a94
Cloud Data Handler updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davidjhoward 27:38205cebc3da 1 #include "CloudFileReceiver.h"
davidjhoward 27:38205cebc3da 2 #include "MTSLog.h"
davidjhoward 27:38205cebc3da 3 #include "MbedJSONValue.h"
davidjhoward 31:4b1587034318 4 #include "global.h"
davidjhoward 27:38205cebc3da 5
davidjhoward 49:0456ee2271be 6 char CloudFileReceiverWriteBuf[1024];
davidjhoward 49:0456ee2271be 7 char CloudFileReceiverReadBuf[1024];
davidjhoward 27:38205cebc3da 8
davidjhoward 49:0456ee2271be 9 bool StoreReceivedFile( mDot *dot, MbedJSONValue &from_json )
davidjhoward 49:0456ee2271be 10 {
davidjhoward 27:38205cebc3da 11 FILENAME_STRING filename;
davidjhoward 27:38205cebc3da 12
davidjhoward 27:38205cebc3da 13 memset( filename, '\0', sizeof(FILENAME_STRING) );
davidjhoward 27:38205cebc3da 14
davidjhoward 49:0456ee2271be 15 int mType = from_json["pay"]["mtype"].get<int>();
davidjhoward 49:0456ee2271be 16 logInfo("mtype=%d", mType);
davidjhoward 27:38205cebc3da 17 switch( mType ) {
davidjhoward 45:3b9e1923cb15 18 case SETPOINT_CONTROL_MTYPE: {
davidjhoward 27:38205cebc3da 19 logInfo("PROCESSING SETPONT CONTROL FILE");
davidjhoward 31:4b1587034318 20 snprintf( filename, sizeof(FILENAME_STRING), "%s_%s%s",
davidjhoward 27:38205cebc3da 21 from_json["pay"]["spcontrol"]["id"].get<std::string>().c_str(),
davidjhoward 27:38205cebc3da 22 from_json["pay"]["spcontrol"]["input"].get<std::string>().c_str(),
davidjhoward 27:38205cebc3da 23 ".json" );
davidjhoward 27:38205cebc3da 24 logInfo("SETPONT CONTROL FILENAME=%s", filename);
davidjhoward 27:38205cebc3da 25 break;
davidjhoward 31:4b1587034318 26 }
davidjhoward 27:38205cebc3da 27 case TIMER_CONTROL_MTYPE:
davidjhoward 27:38205cebc3da 28 break;
davidjhoward 45:3b9e1923cb15 29 case INPUT_CONFIG_MTYPE: {
davidjhoward 49:0456ee2271be 30 logInfo("id=%s", from_json["pay"]["input"]["id"].get<std::string>().c_str() );
davidjhoward 31:4b1587034318 31 snprintf( filename, sizeof(FILENAME_STRING), "input_%s%s",
davidjhoward 31:4b1587034318 32 from_json["pay"]["input"]["id"].get<std::string>().c_str(),
davidjhoward 45:3b9e1923cb15 33 ".jsn" );
davidjhoward 31:4b1587034318 34 logInfo("INPUT CONFIG FILENAME=%s", filename);
davidjhoward 31:4b1587034318 35
davidjhoward 49:0456ee2271be 36 memset( CloudFileReceiverWriteBuf, '\0', 1024 );
davidjhoward 49:0456ee2271be 37 snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf),
davidjhoward 45:3b9e1923cb15 38 "{ "
davidjhoward 45:3b9e1923cb15 39 "\"id\":\"%s\", "
davidjhoward 45:3b9e1923cb15 40 "\"name\":\"%s\", "
davidjhoward 45:3b9e1923cb15 41 "\"units\":\"%s\", "
davidjhoward 45:3b9e1923cb15 42 "\"min\":\"%s\", "
davidjhoward 45:3b9e1923cb15 43 "\"max\":\"%s\", "
davidjhoward 45:3b9e1923cb15 44 "\"node\":\"%s\", "
davidjhoward 45:3b9e1923cb15 45 "\"reg\":\"%s\", "
davidjhoward 45:3b9e1923cb15 46 "\"rtype\":\"%s\", "
davidjhoward 45:3b9e1923cb15 47 "\"type\":\"%s\", "
davidjhoward 45:3b9e1923cb15 48 "\"size\":\"%s\", "
davidjhoward 49:0456ee2271be 49 "\"order\":\"%s\", "
davidjhoward 49:0456ee2271be 50 "\"fmt\":\"%s\", "
davidjhoward 49:0456ee2271be 51 "\"rfreq\":\"%s\" } ",
davidjhoward 45:3b9e1923cb15 52 from_json["pay"]["input"]["id"].get<std::string>().c_str(),
davidjhoward 45:3b9e1923cb15 53 from_json["pay"]["input"]["name"].get<std::string>().c_str(),
davidjhoward 45:3b9e1923cb15 54 from_json["pay"]["input"]["units"].get<std::string>().c_str(),
davidjhoward 45:3b9e1923cb15 55 from_json["pay"]["input"]["min"].get<std::string>().c_str(),
davidjhoward 45:3b9e1923cb15 56 from_json["pay"]["input"]["max"].get<std::string>().c_str(),
davidjhoward 45:3b9e1923cb15 57 from_json["pay"]["input"]["node"].get<std::string>().c_str(),
davidjhoward 45:3b9e1923cb15 58 from_json["pay"]["input"]["reg"].get<std::string>().c_str(),
davidjhoward 45:3b9e1923cb15 59 from_json["pay"]["input"]["rtype"].get<std::string>().c_str(),
davidjhoward 45:3b9e1923cb15 60 from_json["pay"]["input"]["type"].get<std::string>().c_str(),
davidjhoward 45:3b9e1923cb15 61 from_json["pay"]["input"]["size"].get<std::string>().c_str(),
davidjhoward 49:0456ee2271be 62 from_json["pay"]["input"]["order"].get<std::string>().c_str(),
davidjhoward 49:0456ee2271be 63 from_json["pay"]["input"]["fmt"].get<std::string>().c_str(),
davidjhoward 49:0456ee2271be 64 from_json["pay"]["input"]["rfreq"].get<std::string>().c_str()
davidjhoward 45:3b9e1923cb15 65 );
davidjhoward 45:3b9e1923cb15 66
davidjhoward 49:0456ee2271be 67 logInfo("saving string%s", CloudFileReceiverWriteBuf);
davidjhoward 49:0456ee2271be 68 bool status = GLOBAL_mdot->saveUserFile(filename, (void *)CloudFileReceiverWriteBuf, 1024);
davidjhoward 45:3b9e1923cb15 69 if( status != true ) {
davidjhoward 49:0456ee2271be 70 logError("(%d)save file failed, status=%d", __LINE__, status);
davidjhoward 45:3b9e1923cb15 71 }
davidjhoward 45:3b9e1923cb15 72
davidjhoward 45:3b9e1923cb15 73 logInfo("Sending Mail To ModbusMasterMailBox, filename=%s", filename);
davidjhoward 31:4b1587034318 74 Message_t *mail = ModbusMasterMailBox.alloc();
davidjhoward 31:4b1587034318 75 mail->action = ACTION_READ_FILE;
davidjhoward 31:4b1587034318 76 strncpy( mail->controlFile, filename, (sizeof(mail->controlFile)-1));
davidjhoward 31:4b1587034318 77 ModbusMasterMailBox.put(mail);
davidjhoward 31:4b1587034318 78 break;
davidjhoward 31:4b1587034318 79 }
davidjhoward 27:38205cebc3da 80 default:
davidjhoward 27:38205cebc3da 81 logInfo("DEFAULT");
davidjhoward 27:38205cebc3da 82 break;
davidjhoward 27:38205cebc3da 83 }
davidjhoward 49:0456ee2271be 84 return true;
davidjhoward 49:0456ee2271be 85 }
davidjhoward 27:38205cebc3da 86
davidjhoward 49:0456ee2271be 87 bool CloudFileReceiver( std::string *recv_string, mDot *dot )
davidjhoward 49:0456ee2271be 88 {
davidjhoward 49:0456ee2271be 89 MbedJSONValue from_json;
davidjhoward 49:0456ee2271be 90 bool status;
davidjhoward 49:0456ee2271be 91 parse( from_json, recv_string->c_str() );
davidjhoward 49:0456ee2271be 92 int sequence = from_json["seq"].get<int>();
davidjhoward 49:0456ee2271be 93
davidjhoward 49:0456ee2271be 94 // sequence of -1 means string sent in 1 chunk.
davidjhoward 49:0456ee2271be 95 if( sequence == -1 ) {
davidjhoward 49:0456ee2271be 96
davidjhoward 49:0456ee2271be 97 return StoreReceivedFile( dot, from_json );
davidjhoward 27:38205cebc3da 98
davidjhoward 27:38205cebc3da 99 } else if( sequence == 0 ) {
davidjhoward 27:38205cebc3da 100
davidjhoward 49:0456ee2271be 101 memset(CloudFileReceiverWriteBuf,0,sizeof(CloudFileReceiverWriteBuf));
davidjhoward 49:0456ee2271be 102 snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf), "%s%s", "{\"seq\":-1, \"pay\":",from_json["pay"].get<std::string>().c_str() );
davidjhoward 49:0456ee2271be 103 logInfo("(%d)Writing String Length=%d, %s", __LINE__, 1024, CloudFileReceiverWriteBuf );
davidjhoward 27:38205cebc3da 104
davidjhoward 49:0456ee2271be 105 status = dot->saveUserFile("scratch.json", (void *)CloudFileReceiverWriteBuf, 1024);
davidjhoward 27:38205cebc3da 106 if( status != true ) {
davidjhoward 49:0456ee2271be 107 logError("(%d)save file failed, status=%d", __LINE__, status);
davidjhoward 27:38205cebc3da 108 return false;
davidjhoward 27:38205cebc3da 109 }
davidjhoward 49:0456ee2271be 110 logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(CloudFileReceiverWriteBuf));
davidjhoward 49:0456ee2271be 111
davidjhoward 27:38205cebc3da 112 } else if( sequence == -2 ) {
davidjhoward 27:38205cebc3da 113
davidjhoward 49:0456ee2271be 114 MbedJSONValue final_json;
davidjhoward 49:0456ee2271be 115
davidjhoward 27:38205cebc3da 116 logInfo("(%d)READING BACK scratch.json FILE FOR LAST PACKET", __LINE__);
davidjhoward 27:38205cebc3da 117
davidjhoward 27:38205cebc3da 118 // read the file back
davidjhoward 49:0456ee2271be 119 status = dot->readUserFile("scratch.json", (void *)CloudFileReceiverReadBuf, 1024);
davidjhoward 27:38205cebc3da 120 if( status != true ) {
davidjhoward 49:0456ee2271be 121 logError("(%d)read file failed, status=%d", __LINE__, status);
davidjhoward 27:38205cebc3da 122 return false;
davidjhoward 27:38205cebc3da 123 }
davidjhoward 27:38205cebc3da 124
davidjhoward 49:0456ee2271be 125 snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf), "%s%s%s", CloudFileReceiverReadBuf, from_json["pay"].get<std::string>().c_str(), "}" );
davidjhoward 49:0456ee2271be 126 logInfo("(%d)Final String Length=%d, %s", __LINE__, strlen(CloudFileReceiverWriteBuf), CloudFileReceiverWriteBuf );
davidjhoward 27:38205cebc3da 127
davidjhoward 49:0456ee2271be 128 parse( final_json, CloudFileReceiverWriteBuf );
davidjhoward 49:0456ee2271be 129
davidjhoward 49:0456ee2271be 130 status = StoreReceivedFile( dot, final_json );
davidjhoward 27:38205cebc3da 131 if( status != true ) {
davidjhoward 49:0456ee2271be 132 logError("(%d)save file failed, status=%d", __LINE__, status);
davidjhoward 27:38205cebc3da 133 }
davidjhoward 49:0456ee2271be 134
davidjhoward 49:0456ee2271be 135 status = dot->deleteUserFile("scratch.json");
davidjhoward 49:0456ee2271be 136 if( status != true ) {
davidjhoward 49:0456ee2271be 137 logError("(%d)delete file failed, status=%d", __LINE__, status);
davidjhoward 49:0456ee2271be 138 }
davidjhoward 49:0456ee2271be 139
davidjhoward 49:0456ee2271be 140 logInfo("(%d)DELETED scratch.json FILE, status:%d", __LINE__, status );
davidjhoward 49:0456ee2271be 141
davidjhoward 27:38205cebc3da 142 } else {
davidjhoward 27:38205cebc3da 143
davidjhoward 27:38205cebc3da 144 logInfo("(%d)READING BACK scratch.json FILE", __LINE__);
davidjhoward 27:38205cebc3da 145
davidjhoward 27:38205cebc3da 146 // read the file back
davidjhoward 49:0456ee2271be 147 status = dot->readUserFile("scratch.json", (void *)CloudFileReceiverReadBuf, 1024);
davidjhoward 27:38205cebc3da 148 if( status != true ) {
davidjhoward 49:0456ee2271be 149 logError("(%d)read file failed, status=%d", __LINE__, status);
davidjhoward 27:38205cebc3da 150 return false;
davidjhoward 27:38205cebc3da 151 }
davidjhoward 27:38205cebc3da 152
davidjhoward 49:0456ee2271be 153 snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf), "%s%s", CloudFileReceiverReadBuf, from_json["pay"].get<std::string>().c_str() );
davidjhoward 49:0456ee2271be 154 logInfo("(%d)Writing String Length=%d, %s", __LINE__, strlen(CloudFileReceiverWriteBuf), CloudFileReceiverWriteBuf );
davidjhoward 27:38205cebc3da 155
davidjhoward 49:0456ee2271be 156 status = dot->saveUserFile("scratch.json", (void *)CloudFileReceiverWriteBuf, 1024);
davidjhoward 27:38205cebc3da 157 if( status != true ) {
davidjhoward 49:0456ee2271be 158 logError("(%d)save file failed, status=%d", __LINE__, status);
davidjhoward 27:38205cebc3da 159 return false;
davidjhoward 27:38205cebc3da 160 }
davidjhoward 49:0456ee2271be 161 logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(CloudFileReceiverWriteBuf));
davidjhoward 49:0456ee2271be 162
davidjhoward 27:38205cebc3da 163 }
davidjhoward 27:38205cebc3da 164
davidjhoward 27:38205cebc3da 165 return true;
davidjhoward 27:38205cebc3da 166 }