Skip to content

Commit a8efc80

Browse files
authored
Merge pull request #420 from vampirebyte/fix-diagnostics-big-file-upload
Fix DiagnosticsService upload filesystem files bigger than chunk size
2 parents 6259fe3 + 9e96596 commit a8efc80

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/MicroOcpp/Model/Diagnostics/DiagnosticsService.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,14 +269,17 @@ void DiagnosticsService::setDiagnosticsReader(std::function<size_t(char *buf, si
269269
}
270270
diagPostambleLen = 0;
271271
diagPostambleTransferred = 0;
272+
diagFilesBackTransferred = 0;
272273

273274
auto& model = context.getModel();
274275

276+
auto cpVendor = makeString(getMemoryTag());
275277
auto cpModel = makeString(getMemoryTag());
276278
auto fwVersion = makeString(getMemoryTag());
277279

278280
if (auto bootService = model.getBootService()) {
279281
if (auto cpCreds = bootService->getChargePointCredentials()) {
282+
cpVendor = (*cpCreds)["chargePointVendor"] | "Vendor";
280283
cpModel = (*cpCreds)["chargePointModel"] | "Charger";
281284
fwVersion = (*cpCreds)["firmwareVersion"] | "";
282285
}
@@ -288,7 +291,8 @@ void DiagnosticsService::setDiagnosticsReader(std::function<size_t(char *buf, si
288291
int ret;
289292

290293
ret = snprintf(diagPreamble, diagPreambleSize,
291-
"### %s Hardware Diagnostics%s%s\n%s\n",
294+
"### %s %s - Hardware Diagnostics%s%s\n%s\n",
295+
cpVendor.c_str(),
292296
cpModel.c_str(),
293297
fwVersion.empty() ? "" : " - v. ", fwVersion.c_str(),
294298
jsonDate);
@@ -418,6 +422,8 @@ void DiagnosticsService::setDiagnosticsReader(std::function<size_t(char *buf, si
418422
if (ret < 0 || (size_t)ret >= sizeof(fpath)) {
419423
MO_DBG_ERR("fn error: %i", ret);
420424
diagFileList.pop_back();
425+
// next file starts from offset 0
426+
diagFilesBackTransferred = 0;
421427
continue;
422428
}
423429

@@ -429,6 +435,7 @@ void DiagnosticsService::setDiagnosticsReader(std::function<size_t(char *buf, si
429435
if (writeLen < 0 || (size_t)writeLen >= sizeof(fileHeading)) {
430436
MO_DBG_ERR("fn error: %i", ret);
431437
diagFileList.pop_back();
438+
diagFilesBackTransferred = 0;
432439
continue;
433440
}
434441
if (writeLen + written > size || //heading doesn't fit anymore, return with a bit unused buffer space and print heading the next time
@@ -444,14 +451,19 @@ void DiagnosticsService::setDiagnosticsReader(std::function<size_t(char *buf, si
444451

445452
file->seek(diagFilesBackTransferred);
446453
size_t writeLen = file->read((char*)buf + written, size - written);
447-
454+
// advance per-file offset
455+
diagFilesBackTransferred += writeLen;
448456
if (writeLen < size - written) {
457+
// EOF for this file; move to next and reset offset
458+
MO_DBG_DEBUG("upload diag chunk %zu (done)", diagFilesBackTransferred);
449459
diagFileList.pop_back();
460+
diagFilesBackTransferred = 0;
450461
}
451462
written += writeLen;
452463
} else {
453464
MO_DBG_ERR("could not open file: %s", fpath);
454465
diagFileList.pop_back();
466+
diagFilesBackTransferred = 0;
455467
}
456468
}
457469

@@ -470,6 +482,7 @@ void DiagnosticsService::setDiagnosticsReader(std::function<size_t(char *buf, si
470482
MO_FREE(diagPreamble);
471483
MO_FREE(diagPostamble);
472484
diagFileList.clear();
485+
diagFilesBackTransferred = 0; //reset offset for future uploads
473486

474487
if (onClose) {
475488
onClose();

0 commit comments

Comments
 (0)