Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: NaturalTinyShell_ice libmDot-12Sept mbed-rtos mbed
Fork of ICE by
src/CloudDataHandler/CloudFileReceiver.cpp@45:3b9e1923cb15, 2016-09-12 (annotated)
- Committer:
- davidjhoward
- Date:
- Mon Sep 12 22:19:27 2016 +0000
- Revision:
- 45:3b9e1923cb15
- Parent:
- 31:4b1587034318
- Child:
- 49:0456ee2271be
Cloud File Handling
Who changed what in which revision?
| User | Revision | Line number | New 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 | 45:3b9e1923cb15 | 6 | char CloudFileReceiverDataBuf[1024]; |
| davidjhoward | 45:3b9e1923cb15 | 7 | |
| davidjhoward | 27:38205cebc3da | 8 | bool CloudFileReceiver( std::string *recv_string, mDot *dot ) |
| davidjhoward | 27:38205cebc3da | 9 | { |
| davidjhoward | 27:38205cebc3da | 10 | MbedJSONValue from_json; |
| davidjhoward | 27:38205cebc3da | 11 | bool status; |
| davidjhoward | 45:3b9e1923cb15 | 12 | |
| davidjhoward | 27:38205cebc3da | 13 | parse( from_json, recv_string->c_str() ); |
| davidjhoward | 27:38205cebc3da | 14 | |
| davidjhoward | 27:38205cebc3da | 15 | int sequence = from_json["seq"].get<int>(); |
| davidjhoward | 45:3b9e1923cb15 | 16 | // printf("Received command: %s\r\n", recv_string->c_str()); |
| davidjhoward | 31:4b1587034318 | 17 | // sequence of -1 means string sent in 1 chunk. |
| davidjhoward | 27:38205cebc3da | 18 | if( sequence == -1 ) { |
| davidjhoward | 27:38205cebc3da | 19 | FILENAME_STRING filename; |
| davidjhoward | 27:38205cebc3da | 20 | |
| davidjhoward | 27:38205cebc3da | 21 | int mType = from_json["pay"]["mtype"].get<int>(); |
| davidjhoward | 45:3b9e1923cb15 | 22 | logInfo("mtype=%d\r\n", mType); |
| davidjhoward | 27:38205cebc3da | 23 | |
| davidjhoward | 27:38205cebc3da | 24 | memset( filename, '\0', sizeof(FILENAME_STRING) ); |
| davidjhoward | 27:38205cebc3da | 25 | |
| davidjhoward | 27:38205cebc3da | 26 | switch( mType ) { |
| davidjhoward | 45:3b9e1923cb15 | 27 | case SETPOINT_CONTROL_MTYPE: { |
| davidjhoward | 27:38205cebc3da | 28 | logInfo("PROCESSING SETPONT CONTROL FILE"); |
| davidjhoward | 31:4b1587034318 | 29 | snprintf( filename, sizeof(FILENAME_STRING), "%s_%s%s", |
| davidjhoward | 27:38205cebc3da | 30 | from_json["pay"]["spcontrol"]["id"].get<std::string>().c_str(), |
| davidjhoward | 27:38205cebc3da | 31 | from_json["pay"]["spcontrol"]["input"].get<std::string>().c_str(), |
| davidjhoward | 27:38205cebc3da | 32 | ".json" ); |
| davidjhoward | 27:38205cebc3da | 33 | logInfo("SETPONT CONTROL FILENAME=%s", filename); |
| davidjhoward | 27:38205cebc3da | 34 | break; |
| davidjhoward | 31:4b1587034318 | 35 | } |
| davidjhoward | 27:38205cebc3da | 36 | case TIMER_CONTROL_MTYPE: |
| davidjhoward | 27:38205cebc3da | 37 | break; |
| davidjhoward | 45:3b9e1923cb15 | 38 | case INPUT_CONFIG_MTYPE: { |
| davidjhoward | 31:4b1587034318 | 39 | snprintf( filename, sizeof(FILENAME_STRING), "input_%s%s", |
| davidjhoward | 31:4b1587034318 | 40 | from_json["pay"]["input"]["id"].get<std::string>().c_str(), |
| davidjhoward | 45:3b9e1923cb15 | 41 | ".jsn" ); |
| davidjhoward | 31:4b1587034318 | 42 | logInfo("INPUT CONFIG FILENAME=%s", filename); |
| davidjhoward | 31:4b1587034318 | 43 | |
| davidjhoward | 45:3b9e1923cb15 | 44 | memset( CloudFileReceiverDataBuf, '\0', 1024 ); |
| davidjhoward | 45:3b9e1923cb15 | 45 | snprintf(CloudFileReceiverDataBuf, sizeof(CloudFileReceiverDataBuf), |
| davidjhoward | 45:3b9e1923cb15 | 46 | "{ " |
| davidjhoward | 45:3b9e1923cb15 | 47 | "\"id\":\"%s\", " |
| davidjhoward | 45:3b9e1923cb15 | 48 | "\"name\":\"%s\", " |
| davidjhoward | 45:3b9e1923cb15 | 49 | "\"units\":\"%s\", " |
| davidjhoward | 45:3b9e1923cb15 | 50 | "\"min\":\"%s\", " |
| davidjhoward | 45:3b9e1923cb15 | 51 | "\"max\":\"%s\", " |
| davidjhoward | 45:3b9e1923cb15 | 52 | "\"node\":\"%s\", " |
| davidjhoward | 45:3b9e1923cb15 | 53 | "\"reg\":\"%s\", " |
| davidjhoward | 45:3b9e1923cb15 | 54 | "\"rtype\":\"%s\", " |
| davidjhoward | 45:3b9e1923cb15 | 55 | "\"type\":\"%s\", " |
| davidjhoward | 45:3b9e1923cb15 | 56 | "\"size\":\"%s\", " |
| davidjhoward | 45:3b9e1923cb15 | 57 | "\"order\":\"%s\" } ", |
| davidjhoward | 45:3b9e1923cb15 | 58 | from_json["pay"]["input"]["id"].get<std::string>().c_str(), |
| davidjhoward | 45:3b9e1923cb15 | 59 | from_json["pay"]["input"]["name"].get<std::string>().c_str(), |
| davidjhoward | 45:3b9e1923cb15 | 60 | from_json["pay"]["input"]["units"].get<std::string>().c_str(), |
| davidjhoward | 45:3b9e1923cb15 | 61 | from_json["pay"]["input"]["min"].get<std::string>().c_str(), |
| davidjhoward | 45:3b9e1923cb15 | 62 | from_json["pay"]["input"]["max"].get<std::string>().c_str(), |
| davidjhoward | 45:3b9e1923cb15 | 63 | from_json["pay"]["input"]["node"].get<std::string>().c_str(), |
| davidjhoward | 45:3b9e1923cb15 | 64 | from_json["pay"]["input"]["reg"].get<std::string>().c_str(), |
| davidjhoward | 45:3b9e1923cb15 | 65 | from_json["pay"]["input"]["rtype"].get<std::string>().c_str(), |
| davidjhoward | 45:3b9e1923cb15 | 66 | from_json["pay"]["input"]["type"].get<std::string>().c_str(), |
| davidjhoward | 45:3b9e1923cb15 | 67 | from_json["pay"]["input"]["size"].get<std::string>().c_str(), |
| davidjhoward | 45:3b9e1923cb15 | 68 | from_json["pay"]["input"]["order"].get<std::string>().c_str() |
| davidjhoward | 45:3b9e1923cb15 | 69 | ); |
| davidjhoward | 45:3b9e1923cb15 | 70 | |
| davidjhoward | 45:3b9e1923cb15 | 71 | logInfo("saving string%s", CloudFileReceiverDataBuf); |
| davidjhoward | 45:3b9e1923cb15 | 72 | bool status = GLOBAL_mdot->saveUserFile(filename, (void *)CloudFileReceiverDataBuf, 1024); |
| davidjhoward | 45:3b9e1923cb15 | 73 | if( status != true ) { |
| davidjhoward | 45:3b9e1923cb15 | 74 | logInfo("(%d)save file failed, status=%d", __LINE__, status); |
| davidjhoward | 45:3b9e1923cb15 | 75 | } |
| davidjhoward | 45:3b9e1923cb15 | 76 | |
| davidjhoward | 45:3b9e1923cb15 | 77 | logInfo("Sending Mail To ModbusMasterMailBox, filename=%s", filename); |
| davidjhoward | 31:4b1587034318 | 78 | Message_t *mail = ModbusMasterMailBox.alloc(); |
| davidjhoward | 31:4b1587034318 | 79 | mail->action = ACTION_READ_FILE; |
| davidjhoward | 31:4b1587034318 | 80 | strncpy( mail->controlFile, filename, (sizeof(mail->controlFile)-1)); |
| davidjhoward | 31:4b1587034318 | 81 | ModbusMasterMailBox.put(mail); |
| davidjhoward | 31:4b1587034318 | 82 | break; |
| davidjhoward | 31:4b1587034318 | 83 | } |
| davidjhoward | 27:38205cebc3da | 84 | default: |
| davidjhoward | 27:38205cebc3da | 85 | logInfo("DEFAULT"); |
| davidjhoward | 27:38205cebc3da | 86 | break; |
| davidjhoward | 27:38205cebc3da | 87 | } |
| davidjhoward | 27:38205cebc3da | 88 | |
| davidjhoward | 27:38205cebc3da | 89 | return false; |
| davidjhoward | 27:38205cebc3da | 90 | |
| davidjhoward | 27:38205cebc3da | 91 | } else if( sequence == 0 ) { |
| davidjhoward | 27:38205cebc3da | 92 | char data_buf[1024]; |
| davidjhoward | 27:38205cebc3da | 93 | // std::string file_string(1024, '\0'); |
| davidjhoward | 27:38205cebc3da | 94 | // std::string recv_payload(from_json["pay"].get<std::string>().c_str()); |
| davidjhoward | 27:38205cebc3da | 95 | // file_string.replace(0,recv_payload.length(), recv_payload.c_str()); |
| davidjhoward | 27:38205cebc3da | 96 | // logInfo("(%d)File String Length=%d, %s", __LINE__, file_string.length(), file_string.c_str() ); |
| davidjhoward | 27:38205cebc3da | 97 | |
| davidjhoward | 27:38205cebc3da | 98 | memset(data_buf,0,sizeof(data_buf)); |
| davidjhoward | 27:38205cebc3da | 99 | snprintf(data_buf, sizeof(data_buf), "%s", from_json["pay"].get<std::string>().c_str() ); |
| davidjhoward | 27:38205cebc3da | 100 | logInfo("(%d)Writing String Length=%d, %s", __LINE__, 1024, data_buf ); |
| davidjhoward | 27:38205cebc3da | 101 | |
| davidjhoward | 27:38205cebc3da | 102 | status = dot->saveUserFile("scratch.json", (void *)data_buf, 1024); |
| davidjhoward | 27:38205cebc3da | 103 | if( status != true ) { |
| davidjhoward | 27:38205cebc3da | 104 | logInfo("(%d)save file failed, status=%d", __LINE__, status); |
| davidjhoward | 27:38205cebc3da | 105 | return false; |
| davidjhoward | 27:38205cebc3da | 106 | } |
| davidjhoward | 27:38205cebc3da | 107 | logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(data_buf)); |
| davidjhoward | 27:38205cebc3da | 108 | } else if( sequence == -2 ) { |
| davidjhoward | 27:38205cebc3da | 109 | |
| davidjhoward | 27:38205cebc3da | 110 | logInfo("(%d)READING BACK scratch.json FILE FOR LAST PACKET", __LINE__); |
| davidjhoward | 27:38205cebc3da | 111 | |
| davidjhoward | 27:38205cebc3da | 112 | char scratch_buf[1024]; |
| davidjhoward | 27:38205cebc3da | 113 | char data_buf[1024]; |
| davidjhoward | 27:38205cebc3da | 114 | |
| davidjhoward | 27:38205cebc3da | 115 | // read the file back |
| davidjhoward | 27:38205cebc3da | 116 | status = dot->readUserFile("scratch.json", (void *)scratch_buf, 1024); |
| davidjhoward | 27:38205cebc3da | 117 | if( status != true ) { |
| davidjhoward | 27:38205cebc3da | 118 | logInfo("(%d)read file failed, status=%d", __LINE__, status); |
| davidjhoward | 27:38205cebc3da | 119 | return false; |
| davidjhoward | 27:38205cebc3da | 120 | } |
| davidjhoward | 27:38205cebc3da | 121 | |
| davidjhoward | 27:38205cebc3da | 122 | snprintf(data_buf, sizeof(data_buf), "%s%s", scratch_buf, from_json["pay"].get<std::string>().c_str() ); |
| davidjhoward | 27:38205cebc3da | 123 | logInfo("(%d)Writing String Length=%d, %s", __LINE__, 1024, data_buf ); |
| davidjhoward | 27:38205cebc3da | 124 | |
| davidjhoward | 27:38205cebc3da | 125 | status = dot->saveUserFile("scratch.json", (void *)data_buf, 1024); |
| davidjhoward | 27:38205cebc3da | 126 | if( status != true ) { |
| davidjhoward | 27:38205cebc3da | 127 | logInfo("(%d)save file failed, status=%d", __LINE__, status); |
| davidjhoward | 27:38205cebc3da | 128 | return false; |
| davidjhoward | 27:38205cebc3da | 129 | } |
| davidjhoward | 27:38205cebc3da | 130 | logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(data_buf)); |
| davidjhoward | 27:38205cebc3da | 131 | } else { |
| davidjhoward | 27:38205cebc3da | 132 | |
| davidjhoward | 27:38205cebc3da | 133 | logInfo("(%d)READING BACK scratch.json FILE", __LINE__); |
| davidjhoward | 27:38205cebc3da | 134 | |
| davidjhoward | 27:38205cebc3da | 135 | char scratch_buf[1024]; |
| davidjhoward | 27:38205cebc3da | 136 | char data_buf[1024]; |
| davidjhoward | 27:38205cebc3da | 137 | |
| davidjhoward | 27:38205cebc3da | 138 | // read the file back |
| davidjhoward | 27:38205cebc3da | 139 | status = dot->readUserFile("scratch.json", (void *)scratch_buf, 1024); |
| davidjhoward | 27:38205cebc3da | 140 | if( status != true ) { |
| davidjhoward | 27:38205cebc3da | 141 | logInfo("(%d)read file failed, status=%d", __LINE__, status); |
| davidjhoward | 27:38205cebc3da | 142 | return false; |
| davidjhoward | 27:38205cebc3da | 143 | } |
| davidjhoward | 27:38205cebc3da | 144 | |
| davidjhoward | 27:38205cebc3da | 145 | snprintf(data_buf, sizeof(data_buf), "%s%s", scratch_buf, from_json["pay"].get<std::string>().c_str() ); |
| davidjhoward | 27:38205cebc3da | 146 | logInfo("(%d)Writing String Length=%d, %s", __LINE__, 1024, data_buf ); |
| davidjhoward | 27:38205cebc3da | 147 | |
| davidjhoward | 27:38205cebc3da | 148 | status = dot->saveUserFile("scratch.json", (void *)data_buf, 1024); |
| davidjhoward | 27:38205cebc3da | 149 | if( status != true ) { |
| davidjhoward | 27:38205cebc3da | 150 | logInfo("(%d)save file failed, status=%d", __LINE__, status); |
| davidjhoward | 27:38205cebc3da | 151 | return false; |
| davidjhoward | 27:38205cebc3da | 152 | } |
| davidjhoward | 27:38205cebc3da | 153 | logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(data_buf)); |
| davidjhoward | 27:38205cebc3da | 154 | } |
| davidjhoward | 27:38205cebc3da | 155 | |
| davidjhoward | 27:38205cebc3da | 156 | return true; |
| davidjhoward | 27:38205cebc3da | 157 | } |
