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@31:4b1587034318, 2016-09-08 (annotated)
- Committer:
- davidjhoward
- Date:
- Thu Sep 08 21:15:11 2016 +0000
- Revision:
- 31:4b1587034318
- Parent:
- 27:38205cebc3da
- Child:
- 45:3b9e1923cb15
file receiving capabilities in CloudDataHandler
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 | 27:38205cebc3da | 6 | bool CloudFileReceiver( std::string *recv_string, mDot *dot ) |
| davidjhoward | 27:38205cebc3da | 7 | { |
| davidjhoward | 27:38205cebc3da | 8 | MbedJSONValue from_json; |
| davidjhoward | 27:38205cebc3da | 9 | bool status; |
| davidjhoward | 31:4b1587034318 | 10 | |
| davidjhoward | 27:38205cebc3da | 11 | parse( from_json, recv_string->c_str() ); |
| davidjhoward | 27:38205cebc3da | 12 | |
| davidjhoward | 27:38205cebc3da | 13 | int sequence = from_json["seq"].get<int>(); |
| davidjhoward | 27:38205cebc3da | 14 | logInfo("Received command: %s", recv_string->c_str()); |
| davidjhoward | 31:4b1587034318 | 15 | // sequence of -1 means string sent in 1 chunk. |
| davidjhoward | 27:38205cebc3da | 16 | if( sequence == -1 ) { |
| davidjhoward | 27:38205cebc3da | 17 | |
| davidjhoward | 27:38205cebc3da | 18 | FILENAME_STRING filename; |
| davidjhoward | 27:38205cebc3da | 19 | |
| davidjhoward | 27:38205cebc3da | 20 | int mType = from_json["pay"]["mtype"].get<int>(); |
| davidjhoward | 27:38205cebc3da | 21 | logInfo("mtype=%d", mType); |
| davidjhoward | 27:38205cebc3da | 22 | |
| davidjhoward | 27:38205cebc3da | 23 | memset( filename, '\0', sizeof(FILENAME_STRING) ); |
| davidjhoward | 27:38205cebc3da | 24 | |
| davidjhoward | 27:38205cebc3da | 25 | switch( mType ) { |
| davidjhoward | 27:38205cebc3da | 26 | case SETPOINT_CONTROL_MTYPE: |
| davidjhoward | 31:4b1587034318 | 27 | { |
| 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 | 31:4b1587034318 | 38 | case INPUT_CONFIG_MTYPE: |
| davidjhoward | 31:4b1587034318 | 39 | { |
| davidjhoward | 31:4b1587034318 | 40 | logInfo("PROCESSING INPUT CONFIG FILE"); |
| davidjhoward | 31:4b1587034318 | 41 | snprintf( filename, sizeof(FILENAME_STRING), "input_%s%s", |
| davidjhoward | 31:4b1587034318 | 42 | from_json["pay"]["input"]["id"].get<std::string>().c_str(), |
| davidjhoward | 31:4b1587034318 | 43 | ".json" ); |
| davidjhoward | 31:4b1587034318 | 44 | logInfo("INPUT CONFIG FILENAME=%s", filename); |
| davidjhoward | 31:4b1587034318 | 45 | |
| davidjhoward | 31:4b1587034318 | 46 | logInfo("Sending Mail To ModbusMasterMailBox, filename=%s"); |
| davidjhoward | 31:4b1587034318 | 47 | Message_t *mail = ModbusMasterMailBox.alloc(); |
| davidjhoward | 31:4b1587034318 | 48 | mail->action = ACTION_READ_FILE; |
| davidjhoward | 31:4b1587034318 | 49 | strncpy( mail->controlFile, filename, (sizeof(mail->controlFile)-1)); |
| davidjhoward | 31:4b1587034318 | 50 | ModbusMasterMailBox.put(mail); |
| davidjhoward | 31:4b1587034318 | 51 | break; |
| davidjhoward | 31:4b1587034318 | 52 | } |
| davidjhoward | 27:38205cebc3da | 53 | default: |
| davidjhoward | 27:38205cebc3da | 54 | logInfo("DEFAULT"); |
| davidjhoward | 27:38205cebc3da | 55 | break; |
| davidjhoward | 27:38205cebc3da | 56 | } |
| davidjhoward | 27:38205cebc3da | 57 | |
| davidjhoward | 27:38205cebc3da | 58 | return false; |
| davidjhoward | 27:38205cebc3da | 59 | |
| davidjhoward | 27:38205cebc3da | 60 | } else if( sequence == 0 ) { |
| davidjhoward | 27:38205cebc3da | 61 | char data_buf[1024]; |
| davidjhoward | 27:38205cebc3da | 62 | // std::string file_string(1024, '\0'); |
| davidjhoward | 27:38205cebc3da | 63 | // std::string recv_payload(from_json["pay"].get<std::string>().c_str()); |
| davidjhoward | 27:38205cebc3da | 64 | // file_string.replace(0,recv_payload.length(), recv_payload.c_str()); |
| davidjhoward | 27:38205cebc3da | 65 | // logInfo("(%d)File String Length=%d, %s", __LINE__, file_string.length(), file_string.c_str() ); |
| davidjhoward | 27:38205cebc3da | 66 | |
| davidjhoward | 27:38205cebc3da | 67 | memset(data_buf,0,sizeof(data_buf)); |
| davidjhoward | 27:38205cebc3da | 68 | snprintf(data_buf, sizeof(data_buf), "%s", from_json["pay"].get<std::string>().c_str() ); |
| davidjhoward | 27:38205cebc3da | 69 | logInfo("(%d)Writing String Length=%d, %s", __LINE__, 1024, data_buf ); |
| davidjhoward | 27:38205cebc3da | 70 | |
| davidjhoward | 27:38205cebc3da | 71 | status = dot->saveUserFile("scratch.json", (void *)data_buf, 1024); |
| davidjhoward | 27:38205cebc3da | 72 | if( status != true ) { |
| davidjhoward | 27:38205cebc3da | 73 | logInfo("(%d)save file failed, status=%d", __LINE__, status); |
| davidjhoward | 27:38205cebc3da | 74 | return false; |
| davidjhoward | 27:38205cebc3da | 75 | } |
| davidjhoward | 27:38205cebc3da | 76 | logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(data_buf)); |
| davidjhoward | 27:38205cebc3da | 77 | } else if( sequence == -2 ) { |
| davidjhoward | 27:38205cebc3da | 78 | |
| davidjhoward | 27:38205cebc3da | 79 | logInfo("(%d)READING BACK scratch.json FILE FOR LAST PACKET", __LINE__); |
| davidjhoward | 27:38205cebc3da | 80 | |
| davidjhoward | 27:38205cebc3da | 81 | char scratch_buf[1024]; |
| davidjhoward | 27:38205cebc3da | 82 | char data_buf[1024]; |
| davidjhoward | 27:38205cebc3da | 83 | |
| davidjhoward | 27:38205cebc3da | 84 | // read the file back |
| davidjhoward | 27:38205cebc3da | 85 | status = dot->readUserFile("scratch.json", (void *)scratch_buf, 1024); |
| davidjhoward | 27:38205cebc3da | 86 | if( status != true ) { |
| davidjhoward | 27:38205cebc3da | 87 | logInfo("(%d)read file failed, status=%d", __LINE__, status); |
| davidjhoward | 27:38205cebc3da | 88 | return false; |
| davidjhoward | 27:38205cebc3da | 89 | } |
| davidjhoward | 27:38205cebc3da | 90 | |
| davidjhoward | 27:38205cebc3da | 91 | snprintf(data_buf, sizeof(data_buf), "%s%s", scratch_buf, from_json["pay"].get<std::string>().c_str() ); |
| davidjhoward | 27:38205cebc3da | 92 | logInfo("(%d)Writing String Length=%d, %s", __LINE__, 1024, data_buf ); |
| davidjhoward | 27:38205cebc3da | 93 | |
| davidjhoward | 27:38205cebc3da | 94 | status = dot->saveUserFile("scratch.json", (void *)data_buf, 1024); |
| davidjhoward | 27:38205cebc3da | 95 | if( status != true ) { |
| davidjhoward | 27:38205cebc3da | 96 | logInfo("(%d)save file failed, status=%d", __LINE__, status); |
| davidjhoward | 27:38205cebc3da | 97 | return false; |
| davidjhoward | 27:38205cebc3da | 98 | } |
| davidjhoward | 27:38205cebc3da | 99 | logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(data_buf)); |
| davidjhoward | 27:38205cebc3da | 100 | } else { |
| davidjhoward | 27:38205cebc3da | 101 | |
| davidjhoward | 27:38205cebc3da | 102 | logInfo("(%d)READING BACK scratch.json FILE", __LINE__); |
| davidjhoward | 27:38205cebc3da | 103 | |
| davidjhoward | 27:38205cebc3da | 104 | char scratch_buf[1024]; |
| davidjhoward | 27:38205cebc3da | 105 | char data_buf[1024]; |
| davidjhoward | 27:38205cebc3da | 106 | |
| davidjhoward | 27:38205cebc3da | 107 | // read the file back |
| davidjhoward | 27:38205cebc3da | 108 | status = dot->readUserFile("scratch.json", (void *)scratch_buf, 1024); |
| davidjhoward | 27:38205cebc3da | 109 | if( status != true ) { |
| davidjhoward | 27:38205cebc3da | 110 | logInfo("(%d)read file failed, status=%d", __LINE__, status); |
| davidjhoward | 27:38205cebc3da | 111 | return false; |
| davidjhoward | 27:38205cebc3da | 112 | } |
| davidjhoward | 27:38205cebc3da | 113 | |
| davidjhoward | 27:38205cebc3da | 114 | snprintf(data_buf, sizeof(data_buf), "%s%s", scratch_buf, from_json["pay"].get<std::string>().c_str() ); |
| davidjhoward | 27:38205cebc3da | 115 | logInfo("(%d)Writing String Length=%d, %s", __LINE__, 1024, data_buf ); |
| davidjhoward | 27:38205cebc3da | 116 | |
| davidjhoward | 27:38205cebc3da | 117 | status = dot->saveUserFile("scratch.json", (void *)data_buf, 1024); |
| davidjhoward | 27:38205cebc3da | 118 | if( status != true ) { |
| davidjhoward | 27:38205cebc3da | 119 | logInfo("(%d)save file failed, status=%d", __LINE__, status); |
| davidjhoward | 27:38205cebc3da | 120 | return false; |
| davidjhoward | 27:38205cebc3da | 121 | } |
| davidjhoward | 27:38205cebc3da | 122 | logInfo("(%d)UPDATED scratch.json FILE, status:%d, strlen=%d", __LINE__, status, strlen(data_buf)); |
| davidjhoward | 27:38205cebc3da | 123 | } |
| davidjhoward | 27:38205cebc3da | 124 | |
| davidjhoward | 27:38205cebc3da | 125 | return true; |
| davidjhoward | 27:38205cebc3da | 126 | } |
