Skip to content

Commit 54efdfa

Browse files
[preferences] improving string get and put
1 parent ba21c19 commit 54efdfa

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

UNOR4USBBridge/cmds_preferences.h

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,23 @@ void CAtHandler::add_cmds_preferences() {
168168
}
169169
break;
170170
case PreferenceType::PT_STR: {
171-
auto value = parser.args[2];
172-
error = String(pref.putString(key.c_str(), value.c_str())) + "\r\n";
171+
int value = atoi(parser.args[2].c_str());
172+
pref_buf = srv.inhibit_read(value);
173+
size_t offset = pref_buf.size();
174+
if(offset < value) {
175+
pref_buf.resize(value);
176+
do {
177+
offset += serial->read(pref_buf.data() + offset, value - offset);
178+
} while (offset < value);
179+
}
180+
181+
pref_buf.push_back('\0');
182+
183+
log_e("PUT STR key: \"%s\", value: \"%d\" pref_buf: \"%s\"",
184+
key.c_str(), value, pref_buf.data());
185+
186+
srv.continue_read();
187+
error = String(pref.putString(key.c_str(), (char*)pref_buf.data())) + "\r\n";
173188
}
174189
break;
175190
case PreferenceType::PT_BLOB: {
@@ -297,7 +312,17 @@ void CAtHandler::add_cmds_preferences() {
297312
break;
298313
case PreferenceType::PT_STR: {
299314
auto value = parser.args[2];
300-
error = String(pref.getString(key.c_str(), value.c_str())) + "\r\n";
315+
auto res = pref.getString(key.c_str(), value.c_str());
316+
// error = String(pref.getString(key.c_str(), value.c_str())) + "\r\n";
317+
318+
log_e("GET STR key: \"%s\", value: \"%s\" res: \"%s\" len: %d",
319+
key.c_str(), value.c_str(), res.c_str(), res.length());
320+
321+
srv.write_response_prompt();
322+
srv.write_str(String(res.length()).c_str());
323+
srv.write_str("|");
324+
srv.write_str(res.c_str());
325+
srv.write_line_end();
301326
}
302327
break;
303328
case PreferenceType::PT_BLOB: {
@@ -320,7 +345,7 @@ void CAtHandler::add_cmds_preferences() {
320345
}
321346

322347

323-
if (type != PreferenceType::PT_BLOB) {
348+
if (type != PreferenceType::PT_BLOB && type != PreferenceType::PT_STR) {
324349
srv.write_response_prompt();
325350
srv.write_str((const char *)(error.c_str()));
326351
srv.write_line_end();

0 commit comments

Comments
 (0)