@@ -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