@@ -56,7 +56,7 @@ void Programmer::connectCb(int ret)
5656 QObject::disconnect (&reader, SIGNAL (result (int )), this ,
5757 SLOT (connectCb (int )));
5858
59- memcpy (&fwVersion, buf.constData (), sizeof (fwVersion));
59+ memcpy (&fwVersion, buffer. buf .data (), sizeof (fwVersion));
6060
6161 if (ret < 0 )
6262 {
@@ -86,9 +86,9 @@ int Programmer::connect()
8686
8787 writeData.clear ();
8888 writeData.append (reinterpret_cast <const char *>(&cmd), sizeof (cmd));
89- buf.clear ();
89+ buffer. buf .clear ();
9090 reader.init (usbDevName, SERIAL_PORT_SPEED,
91- &buf , sizeof (fwVersion),
91+ &buffer , sizeof (fwVersion),
9292 reinterpret_cast <const uint8_t *>(writeData.constData ()),
9393 static_cast <uint32_t >(writeData.size ()), false , false );
9494 reader.start ();
@@ -152,7 +152,7 @@ void Programmer::readChipIdCb(int ret)
152152 QObject::disconnect (&reader, SIGNAL (result (int )), this ,
153153 SLOT (readChipIdCb (int )));
154154
155- memcpy (chipId_p, buf.constData (), sizeof (ChipId));
155+ memcpy (chipId_p, buffer. buf .data (), sizeof (ChipId));
156156
157157 emit readChipIdCompleted (ret);
158158}
@@ -171,9 +171,9 @@ void Programmer::readChipId(ChipId *chipId)
171171
172172 chipId_p = chipId;
173173
174- buf.clear ();
174+ buffer. buf .clear ();
175175 reader.init (usbDevName, SERIAL_PORT_SPEED,
176- &buf , sizeof (ChipId),
176+ &buffer , sizeof (ChipId),
177177 reinterpret_cast <const uint8_t *>(writeData.constData ()),
178178 static_cast <uint32_t >(writeData.size ()), false , false );
179179 reader.start ();
@@ -232,7 +232,7 @@ void Programmer::readProgressCb(unsigned int progress)
232232 emit readChipProgress (progress);
233233}
234234
235- void Programmer::readChip (QVector< uint8_t > *buf, uint32_t addr, uint32_t len,
235+ void Programmer::readChip (SyncBuffer *buf, uint32_t addr, uint32_t len,
236236 bool isReadLess)
237237{
238238 ReadCmd readCmd;
@@ -270,7 +270,7 @@ void Programmer::writeProgressCb(unsigned int progress)
270270 emit writeChipProgress (progress);
271271}
272272
273- void Programmer::writeChip (QVector< uint8_t > *buf, uint32_t addr, uint32_t len,
273+ void Programmer::writeChip (SyncBuffer *buf, uint32_t addr, uint32_t len,
274274 uint32_t pageSize)
275275{
276276 QObject::connect (&writer, SIGNAL (result (int )), this , SLOT (writeCb (int )));
@@ -402,15 +402,15 @@ int Programmer::firmwareImageRead()
402402 FIRMWARE_IMAGE_1;
403403 updateImageSize = firmwareImage[updateImage].size ;
404404 updateImageOffset = firmwareImage[updateImage].offset ;
405- buf .resize (updateImageSize);
405+ firmwareBuffer .resize (updateImageSize);
406406
407407 if (!file.seek (updateImageOffset))
408408 {
409409 qCritical () << " Failed to seek firmware image " << firmwareFileName;
410410 goto Error;
411411 }
412412
413- if ((ret = file.read ((char *)buf .data (), updateImageSize)) < 0 )
413+ if ((ret = file.read ((char *)firmwareBuffer .data (), updateImageSize)) < 0 )
414414 {
415415 qCritical () << " Failed to read firmware image " << firmwareFileName <<
416416 " , error:" << file.errorString ();
@@ -427,7 +427,7 @@ int Programmer::firmwareImageRead()
427427 return 0 ;
428428
429429Error:
430- buf .clear ();
430+ firmwareBuffer .clear ();
431431 emit firmwareUpdateCompleted (-1 );
432432 return -1 ;
433433}
@@ -436,6 +436,12 @@ void Programmer::firmwareUpdateProgressCb(unsigned int progress)
436436{
437437 emit firmwareUpdateProgress (progress * 100ULL /
438438 firmwareImage[updateImage].size );
439+
440+ std::copy (firmwareBuffer.begin () + progress, firmwareBuffer.begin () +
441+ progress + flashPageSize, buffer.buf .begin ());
442+ // Notify writer that new data is ready
443+ buffer.ready = true ;
444+ buffer.cv .notify_one ();
439445}
440446
441447void Programmer::firmwareUpdateCb (int ret)
@@ -446,7 +452,8 @@ void Programmer::firmwareUpdateCb(int ret)
446452 QObject::disconnect (&writer, SIGNAL (result (int )), this ,
447453 SLOT (firmwareUpdateCb (int )));
448454
449- buf.clear ();
455+ buffer.buf .clear ();
456+ firmwareBuffer.clear ();
450457
451458 emit firmwareUpdateCompleted (ret);
452459}
@@ -464,8 +471,13 @@ void Programmer::firmwareUpdateStart()
464471 QObject::connect (&writer, SIGNAL (progress (unsigned int )), this ,
465472 SLOT (firmwareUpdateProgressCb (unsigned int )));
466473
474+ buffer.buf .reserve (flashPageSize);
475+ buffer.buf .resize (flashPageSize);
476+ std::copy (firmwareBuffer.begin (), firmwareBuffer.begin () + flashPageSize,
477+ buffer.buf .begin ());
478+ buffer.ready = true ;
467479 writer.init (usbDevName, SERIAL_PORT_SPEED,
468- &buf ,
480+ &buffer ,
469481 firmwareImage[updateImage].address , firmwareImage[updateImage].size ,
470482 flashPageSize, 0 , 0 , 0 , CMD_FW_UPDATE_S, CMD_FW_UPDATE_D,
471483 CMD_FW_UPDATE_E);
@@ -478,7 +490,7 @@ void Programmer::getActiveImageCb(int ret)
478490 QObject::disconnect (&reader, SIGNAL (result (int )), this ,
479491 SLOT (getActiveImageCb (int )));
480492
481- activeImage = buf[ 0 ] ;
493+ activeImage = buffer. buf . at ( 0 ) ;
482494
483495 if (ret < 0 )
484496 {
@@ -516,8 +528,8 @@ void Programmer::firmwareUpdate(const QString &fileName)
516528 writeData.clear ();
517529 writeData.append (reinterpret_cast <const char *>(&cmd), sizeof (cmd));
518530
519- buf.clear ();
520- reader.init (usbDevName, SERIAL_PORT_SPEED, &buf ,
531+ buffer. buf .clear ();
532+ reader.init (usbDevName, SERIAL_PORT_SPEED, &buffer ,
521533 sizeof (activeImage),
522534 reinterpret_cast <const uint8_t *>(writeData.constData ()),
523535 static_cast <uint32_t >(writeData.size ()), false , false );
0 commit comments