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 27 15:36:37 2016 +0000
Revision:
134:f90154ff33ec
Parent:
116:7337ed514891
Child:
138:27c39d0e4e81
Add clould commands for setpoint control and manual control

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davidjhoward 27:38205cebc3da 1 #include "CloudFileReceiver.h"
davidjhoward 116:7337ed514891 2 #include "CloudDataHandler.h"
davidjhoward 27:38205cebc3da 3 #include "MTSLog.h"
davidjhoward 27:38205cebc3da 4 #include "MbedJSONValue.h"
davidjhoward 31:4b1587034318 5 #include "global.h"
davidjhoward 27:38205cebc3da 6
davidjhoward 49:0456ee2271be 7 char CloudFileReceiverWriteBuf[1024];
davidjhoward 49:0456ee2271be 8 char CloudFileReceiverReadBuf[1024];
davidjhoward 27:38205cebc3da 9
davidjhoward 49:0456ee2271be 10 bool StoreReceivedFile( mDot *dot, MbedJSONValue &from_json )
davidjhoward 49:0456ee2271be 11 {
davidjhoward 99:55317f374a94 12 FILENAME_STRING filename;
davidjhoward 27:38205cebc3da 13
davidjhoward 99:55317f374a94 14 memset( filename, '\0', sizeof(FILENAME_STRING) );
davidjhoward 27:38205cebc3da 15
davidjhoward 99:55317f374a94 16 int mType = from_json["pay"]["mtype"].get<int>();
davidjhoward 99:55317f374a94 17 logInfo("mtype=%d", mType);
davidjhoward 99:55317f374a94 18 switch( mType ) {
davidjhoward 99:55317f374a94 19 case SETPOINT_CONTROL_MTYPE: {
davidjhoward 99:55317f374a94 20 logInfo("PROCESSING SETPONT CONTROL FILE");
davidjhoward 134:f90154ff33ec 21 snprintf( filename, sizeof(FILENAME_STRING), "control_sp_%s.json",
davidjhoward 134:f90154ff33ec 22 from_json["pay"]["spcontrol"]["id"].get<std::string>().c_str() );
davidjhoward 99:55317f374a94 23 logInfo("SETPONT CONTROL FILENAME=%s", filename);
davidjhoward 134:f90154ff33ec 24
davidjhoward 134:f90154ff33ec 25 memset( CloudFileReceiverWriteBuf, '\0', 1024 );
davidjhoward 134:f90154ff33ec 26 snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf),
davidjhoward 134:f90154ff33ec 27 "{ "
davidjhoward 134:f90154ff33ec 28 "\"id\": \"%s\", "
davidjhoward 134:f90154ff33ec 29 "\"priority\": \"%s\","
davidjhoward 134:f90154ff33ec 30 "\"input\": \"%s\", "
davidjhoward 134:f90154ff33ec 31 "\"output\": \"%s\", "
davidjhoward 134:f90154ff33ec 32 "\"setpoint\": \"%s\","
davidjhoward 134:f90154ff33ec 33 "\"prodfact\": \"%s\","
davidjhoward 134:f90154ff33ec 34 "\"actingDir\": \"%s\", "
davidjhoward 134:f90154ff33ec 35 "\"halert\": \"%s\","
davidjhoward 134:f90154ff33ec 36 "\"lalert\": \"%s\", "
davidjhoward 134:f90154ff33ec 37 "\"hfs\": \"%s\","
davidjhoward 134:f90154ff33ec 38 "\"lfs\": \"%s\", "
davidjhoward 134:f90154ff33ec 39 "\"tol\": \"%s\" }",
davidjhoward 134:f90154ff33ec 40 from_json["pay"]["spcontrol"]["id"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 41 from_json["pay"]["spcontrol"]["priority"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 42 from_json["pay"]["spcontrol"]["input"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 43 from_json["pay"]["spcontrol"]["output"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 44 from_json["pay"]["spcontrol"]["setpoint"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 45 from_json["pay"]["spcontrol"]["prodfact"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 46 from_json["pay"]["spcontrol"]["actingDir"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 47 from_json["pay"]["spcontrol"]["halert"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 48 from_json["pay"]["spcontrol"]["lalert"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 49 from_json["pay"]["spcontrol"]["hfs"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 50 from_json["pay"]["spcontrol"]["lfs"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 51 from_json["pay"]["spcontrol"]["tol"].get<std::string>().c_str()
davidjhoward 134:f90154ff33ec 52 );
davidjhoward 134:f90154ff33ec 53
davidjhoward 134:f90154ff33ec 54 logInfo("saving string%s", CloudFileReceiverWriteBuf);
davidjhoward 134:f90154ff33ec 55 bool status = GLOBAL_mdot->saveUserFile(filename, (void *)CloudFileReceiverWriteBuf, 1024);
davidjhoward 134:f90154ff33ec 56 if( status != true ) {
davidjhoward 134:f90154ff33ec 57 logError("(%d)save file failed, status=%d", __LINE__, status);
davidjhoward 134:f90154ff33ec 58 }
davidjhoward 134:f90154ff33ec 59
davidjhoward 134:f90154ff33ec 60 // send a message to the configuration handler to create the control
davidjhoward 134:f90154ff33ec 61 Message_t *msg = MailBox.alloc();
davidjhoward 134:f90154ff33ec 62 memset(msg, 0, sizeof(Message_t));
davidjhoward 134:f90154ff33ec 63 msg->action = ACTION_CREATE;
davidjhoward 134:f90154ff33ec 64 msg->control = CONTROL_SETPOINT;
davidjhoward 134:f90154ff33ec 65 strncpy(msg->controlFile, filename, sizeof(msg->controlFile)-1);
davidjhoward 134:f90154ff33ec 66
davidjhoward 134:f90154ff33ec 67 printf("%s: Sending a create request for control %s type = %u\r\n", __func__, msg->controlFile, msg->control);
davidjhoward 134:f90154ff33ec 68
davidjhoward 134:f90154ff33ec 69 MailBox.put(msg);
davidjhoward 134:f90154ff33ec 70 break;
davidjhoward 134:f90154ff33ec 71 }
davidjhoward 134:f90154ff33ec 72 case MAN_CONTROL_MTYPE: {
davidjhoward 134:f90154ff33ec 73 logInfo("PROCESSING MANUAL CONTROL FILE");
davidjhoward 134:f90154ff33ec 74 snprintf( filename, sizeof(FILENAME_STRING), "control_mn_%s.json",
davidjhoward 134:f90154ff33ec 75 from_json["pay"]["mncontrol"]["id"].get<std::string>().c_str() );
davidjhoward 134:f90154ff33ec 76 logInfo("MANUAL CONTROL FILENAME=%s", filename);
davidjhoward 134:f90154ff33ec 77
davidjhoward 134:f90154ff33ec 78 memset( CloudFileReceiverWriteBuf, '\0', 1024 );
davidjhoward 134:f90154ff33ec 79 snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf),
davidjhoward 134:f90154ff33ec 80 "{ "
davidjhoward 134:f90154ff33ec 81 "\"id\": \"%s\", "
davidjhoward 134:f90154ff33ec 82 "\"output\": \"%s\", "
davidjhoward 134:f90154ff33ec 83 "\"type\": \"%s\", "
davidjhoward 134:f90154ff33ec 84 "\"priority\": \"%s\", "
davidjhoward 134:f90154ff33ec 85 "\"duration\": \"%s\", "
davidjhoward 134:f90154ff33ec 86 "\"setpoint\": \"%s\", "
davidjhoward 134:f90154ff33ec 87 "\"state\": \"%s\", "
davidjhoward 134:f90154ff33ec 88 "\"percent\": \"%s\" }",
davidjhoward 134:f90154ff33ec 89 from_json["pay"]["mncontrol"]["id"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 90 from_json["pay"]["mncontrol"]["output"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 91 from_json["pay"]["mncontrol"]["type"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 92 from_json["pay"]["mncontrol"]["priority"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 93 from_json["pay"]["mncontrol"]["duration"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 94 from_json["pay"]["mncontrol"]["setpoint"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 95 from_json["pay"]["mncontrol"]["state"].get<std::string>().c_str(),
davidjhoward 134:f90154ff33ec 96 from_json["pay"]["mncontrol"]["percent"].get<std::string>().c_str()
davidjhoward 134:f90154ff33ec 97 );
davidjhoward 134:f90154ff33ec 98
davidjhoward 134:f90154ff33ec 99 logInfo("saving string%s", CloudFileReceiverWriteBuf);
davidjhoward 134:f90154ff33ec 100 bool status = GLOBAL_mdot->saveUserFile(filename, (void *)CloudFileReceiverWriteBuf, 1024);
davidjhoward 134:f90154ff33ec 101 if( status != true ) {
davidjhoward 134:f90154ff33ec 102 logError("(%d)save file failed, status=%d", __LINE__, status);
davidjhoward 134:f90154ff33ec 103 }
davidjhoward 134:f90154ff33ec 104
davidjhoward 134:f90154ff33ec 105 // send a message to the configuration handler to create the control
davidjhoward 134:f90154ff33ec 106 Message_t *msg = MailBox.alloc();
davidjhoward 134:f90154ff33ec 107 memset(msg, 0, sizeof(Message_t));
davidjhoward 134:f90154ff33ec 108 msg->action = ACTION_CREATE;
davidjhoward 134:f90154ff33ec 109 msg->control = CONTROL_MANUAL;
davidjhoward 134:f90154ff33ec 110 strncpy(msg->controlFile, filename, sizeof(msg->controlFile)-1);
davidjhoward 134:f90154ff33ec 111
davidjhoward 134:f90154ff33ec 112 printf("%s: Sending a create manual for control %s type = %u\r\n", __func__, msg->controlFile, msg->control);
davidjhoward 134:f90154ff33ec 113
davidjhoward 134:f90154ff33ec 114 MailBox.put(msg);
davidjhoward 99:55317f374a94 115 break;
davidjhoward 99:55317f374a94 116 }
davidjhoward 99:55317f374a94 117 case TIMER_CONTROL_MTYPE:
davidjhoward 99:55317f374a94 118 break;
davidjhoward 99:55317f374a94 119 case INPUT_CONFIG_MTYPE: {
davidjhoward 99:55317f374a94 120 logInfo("id=%s", from_json["pay"]["input"]["id"].get<std::string>().c_str() );
davidjhoward 99:55317f374a94 121 snprintf( filename, sizeof(FILENAME_STRING), "input_%s%s",
davidjhoward 99:55317f374a94 122 from_json["pay"]["input"]["id"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 123 ".jsn" );
davidjhoward 99:55317f374a94 124 logInfo("INPUT CONFIG FILENAME=%s", filename);
davidjhoward 31:4b1587034318 125
davidjhoward 99:55317f374a94 126 memset( CloudFileReceiverWriteBuf, '\0', 1024 );
davidjhoward 99:55317f374a94 127 snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf),
davidjhoward 99:55317f374a94 128 "{ "
davidjhoward 99:55317f374a94 129 "\"id\":\"%s\", "
davidjhoward 99:55317f374a94 130 "\"name\":\"%s\", "
davidjhoward 99:55317f374a94 131 "\"units\":\"%s\", "
davidjhoward 99:55317f374a94 132 "\"min\":\"%s\", "
davidjhoward 99:55317f374a94 133 "\"max\":\"%s\", "
davidjhoward 99:55317f374a94 134 "\"node\":\"%s\", "
davidjhoward 99:55317f374a94 135 "\"reg\":\"%s\", "
davidjhoward 99:55317f374a94 136 "\"rtype\":\"%s\", "
davidjhoward 99:55317f374a94 137 "\"type\":\"%s\", "
davidjhoward 99:55317f374a94 138 "\"size\":\"%s\", "
davidjhoward 99:55317f374a94 139 "\"order\":\"%s\", "
davidjhoward 99:55317f374a94 140 "\"fmt\":\"%s\", "
davidjhoward 99:55317f374a94 141 "\"rfreq\":\"%s\" } ",
davidjhoward 99:55317f374a94 142 from_json["pay"]["input"]["id"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 143 from_json["pay"]["input"]["name"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 144 from_json["pay"]["input"]["units"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 145 from_json["pay"]["input"]["min"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 146 from_json["pay"]["input"]["max"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 147 from_json["pay"]["input"]["node"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 148 from_json["pay"]["input"]["reg"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 149 from_json["pay"]["input"]["rtype"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 150 from_json["pay"]["input"]["type"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 151 from_json["pay"]["input"]["size"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 152 from_json["pay"]["input"]["order"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 153 from_json["pay"]["input"]["fmt"].get<std::string>().c_str(),
davidjhoward 99:55317f374a94 154 from_json["pay"]["input"]["rfreq"].get<std::string>().c_str()
davidjhoward 99:55317f374a94 155 );
davidjhoward 45:3b9e1923cb15 156
davidjhoward 99:55317f374a94 157 logInfo("saving string%s", CloudFileReceiverWriteBuf);
davidjhoward 99:55317f374a94 158 bool status = GLOBAL_mdot->saveUserFile(filename, (void *)CloudFileReceiverWriteBuf, 1024);
davidjhoward 99:55317f374a94 159 if( status != true ) {
davidjhoward 99:55317f374a94 160 logError("(%d)save file failed, status=%d", __LINE__, status);
davidjhoward 99:55317f374a94 161 }
davidjhoward 45:3b9e1923cb15 162
davidjhoward 99:55317f374a94 163 logInfo("Sending Mail To ModbusMasterMailBox, filename=%s", filename);
davidjhoward 99:55317f374a94 164 Message_t *mail = ModbusMasterMailBox.alloc();
davidjhoward 99:55317f374a94 165 mail->action = ACTION_READ_FILE;
davidjhoward 99:55317f374a94 166 strncpy( mail->controlFile, filename, (sizeof(mail->controlFile)-1));
davidjhoward 99:55317f374a94 167 ModbusMasterMailBox.put(mail);
davidjhoward 99:55317f374a94 168 break;
davidjhoward 27:38205cebc3da 169 }
davidjhoward 99:55317f374a94 170 default:
davidjhoward 99:55317f374a94 171 logInfo("DEFAULT");
davidjhoward 99:55317f374a94 172 break;
davidjhoward 99:55317f374a94 173 }
davidjhoward 99:55317f374a94 174 return true;
davidjhoward 49:0456ee2271be 175 }
davidjhoward 27:38205cebc3da 176
davidjhoward 49:0456ee2271be 177 bool CloudFileReceiver( std::string *recv_string, mDot *dot )
davidjhoward 49:0456ee2271be 178 {
davidjhoward 49:0456ee2271be 179 MbedJSONValue from_json;
davidjhoward 49:0456ee2271be 180 bool status;
davidjhoward 49:0456ee2271be 181 parse( from_json, recv_string->c_str() );
davidjhoward 49:0456ee2271be 182 int sequence = from_json["seq"].get<int>();
davidjhoward 49:0456ee2271be 183
davidjhoward 49:0456ee2271be 184 // sequence of -1 means string sent in 1 chunk.
davidjhoward 49:0456ee2271be 185 if( sequence == -1 ) {
davidjhoward 49:0456ee2271be 186
davidjhoward 49:0456ee2271be 187 return StoreReceivedFile( dot, from_json );
davidjhoward 27:38205cebc3da 188
davidjhoward 27:38205cebc3da 189 } else if( sequence == 0 ) {
davidjhoward 27:38205cebc3da 190
davidjhoward 49:0456ee2271be 191 memset(CloudFileReceiverWriteBuf,0,sizeof(CloudFileReceiverWriteBuf));
davidjhoward 49:0456ee2271be 192 snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf), "%s%s", "{\"seq\":-1, \"pay\":",from_json["pay"].get<std::string>().c_str() );
davidjhoward 49:0456ee2271be 193 logInfo("(%d)Writing String Length=%d, %s", __LINE__, 1024, CloudFileReceiverWriteBuf );
davidjhoward 27:38205cebc3da 194
davidjhoward 49:0456ee2271be 195 status = dot->saveUserFile("scratch.json", (void *)CloudFileReceiverWriteBuf, 1024);
davidjhoward 27:38205cebc3da 196 if( status != true ) {
davidjhoward 49:0456ee2271be 197 logError("(%d)save file failed, status=%d", __LINE__, status);
davidjhoward 27:38205cebc3da 198 return false;
davidjhoward 27:38205cebc3da 199 }
davidjhoward 49:0456ee2271be 200 logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(CloudFileReceiverWriteBuf));
davidjhoward 49:0456ee2271be 201
davidjhoward 27:38205cebc3da 202 } else if( sequence == -2 ) {
davidjhoward 27:38205cebc3da 203
davidjhoward 49:0456ee2271be 204 MbedJSONValue final_json;
davidjhoward 49:0456ee2271be 205
davidjhoward 27:38205cebc3da 206 logInfo("(%d)READING BACK scratch.json FILE FOR LAST PACKET", __LINE__);
davidjhoward 27:38205cebc3da 207
davidjhoward 27:38205cebc3da 208 // read the file back
davidjhoward 49:0456ee2271be 209 status = dot->readUserFile("scratch.json", (void *)CloudFileReceiverReadBuf, 1024);
davidjhoward 27:38205cebc3da 210 if( status != true ) {
davidjhoward 49:0456ee2271be 211 logError("(%d)read file failed, status=%d", __LINE__, status);
davidjhoward 27:38205cebc3da 212 return false;
davidjhoward 27:38205cebc3da 213 }
davidjhoward 27:38205cebc3da 214
davidjhoward 49:0456ee2271be 215 snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf), "%s%s%s", CloudFileReceiverReadBuf, from_json["pay"].get<std::string>().c_str(), "}" );
davidjhoward 49:0456ee2271be 216 logInfo("(%d)Final String Length=%d, %s", __LINE__, strlen(CloudFileReceiverWriteBuf), CloudFileReceiverWriteBuf );
davidjhoward 27:38205cebc3da 217
davidjhoward 49:0456ee2271be 218 parse( final_json, CloudFileReceiverWriteBuf );
davidjhoward 49:0456ee2271be 219
davidjhoward 99:55317f374a94 220 int sequence = final_json["seq"].get<int>();
davidjhoward 99:55317f374a94 221 int mType = final_json["pay"]["mtype"].get<int>();
davidjhoward 99:55317f374a94 222 std::string input = final_json["pay"]["input"]["id"].get<std::string>().c_str();
davidjhoward 99:55317f374a94 223
davidjhoward 99:55317f374a94 224 printf("MESSAGE TYPE=%d, input=%s\r\n",mType, input.c_str());
davidjhoward 99:55317f374a94 225
davidjhoward 49:0456ee2271be 226 status = StoreReceivedFile( dot, final_json );
davidjhoward 27:38205cebc3da 227 if( status != true ) {
davidjhoward 49:0456ee2271be 228 logError("(%d)save file failed, status=%d", __LINE__, status);
davidjhoward 27:38205cebc3da 229 }
davidjhoward 49:0456ee2271be 230
davidjhoward 49:0456ee2271be 231 status = dot->deleteUserFile("scratch.json");
davidjhoward 49:0456ee2271be 232 if( status != true ) {
davidjhoward 49:0456ee2271be 233 logError("(%d)delete file failed, status=%d", __LINE__, status);
davidjhoward 49:0456ee2271be 234 }
davidjhoward 49:0456ee2271be 235
davidjhoward 49:0456ee2271be 236 logInfo("(%d)DELETED scratch.json FILE, status:%d", __LINE__, status );
davidjhoward 49:0456ee2271be 237
davidjhoward 27:38205cebc3da 238 } else {
davidjhoward 27:38205cebc3da 239
davidjhoward 27:38205cebc3da 240 logInfo("(%d)READING BACK scratch.json FILE", __LINE__);
davidjhoward 27:38205cebc3da 241
davidjhoward 27:38205cebc3da 242 // read the file back
davidjhoward 49:0456ee2271be 243 status = dot->readUserFile("scratch.json", (void *)CloudFileReceiverReadBuf, 1024);
davidjhoward 27:38205cebc3da 244 if( status != true ) {
davidjhoward 49:0456ee2271be 245 logError("(%d)read file failed, status=%d", __LINE__, status);
davidjhoward 27:38205cebc3da 246 return false;
davidjhoward 27:38205cebc3da 247 }
davidjhoward 27:38205cebc3da 248
davidjhoward 49:0456ee2271be 249 snprintf(CloudFileReceiverWriteBuf, sizeof(CloudFileReceiverWriteBuf), "%s%s", CloudFileReceiverReadBuf, from_json["pay"].get<std::string>().c_str() );
davidjhoward 49:0456ee2271be 250 logInfo("(%d)Writing String Length=%d, %s", __LINE__, strlen(CloudFileReceiverWriteBuf), CloudFileReceiverWriteBuf );
davidjhoward 27:38205cebc3da 251
davidjhoward 49:0456ee2271be 252 status = dot->saveUserFile("scratch.json", (void *)CloudFileReceiverWriteBuf, 1024);
davidjhoward 27:38205cebc3da 253 if( status != true ) {
davidjhoward 49:0456ee2271be 254 logError("(%d)save file failed, status=%d", __LINE__, status);
davidjhoward 27:38205cebc3da 255 return false;
davidjhoward 27:38205cebc3da 256 }
davidjhoward 49:0456ee2271be 257 logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(CloudFileReceiverWriteBuf));
davidjhoward 49:0456ee2271be 258
davidjhoward 27:38205cebc3da 259 }
davidjhoward 27:38205cebc3da 260
davidjhoward 27:38205cebc3da 261 return true;
davidjhoward 27:38205cebc3da 262 }