diff --git a/MAC/APL/PIC/RSPDriver/src/BWWrite.cc b/MAC/APL/PIC/RSPDriver/src/BWWrite.cc index 2b9f14987210274dd0931e7d31c49abc4a3d1b31..739506c349742c77d93f1d81d5f97fd8c50f9979 100644 --- a/MAC/APL/PIC/RSPDriver/src/BWWrite.cc +++ b/MAC/APL/PIC/RSPDriver/src/BWWrite.cc @@ -58,12 +58,14 @@ void BWWrite::sendrequest() { uint8 global_blp = (getBoardId() * StationSettings::instance()->nrBlpsPerBoard()) + m_blp; +#if 0 // skip update if the BF weights if they have not been modified if (RTC::RegisterState::MODIFIED != Cache::getInstance().getBFState().get(global_blp * MEPHeader::N_PHASEPOL + m_regid)) { setContinue(true); return; } +#endif // reset m_offset and m_remaining for each register if (0 == getCurrentIndex()) { @@ -209,15 +211,24 @@ GCFEvent::TResult BWWrite::handleack(GCFEvent& event, GCFPortInterface& /*port*/ EPAWriteackEvent ack(event); + uint8 global_blp = (getBoardId() * StationSettings::instance()->nrBlpsPerBoard()) + m_blp; + if (!ack.hdr.isValidAck(m_hdr)) { + Cache::getInstance().getBFState().modified(global_blp * MEPHeader::N_PHASEPOL + m_regid); + LOG_ERROR("BWWrite::handleack: invalid ack"); return GCFEvent::NOT_HANDLED; - } - if ((BF_N_FRAGMENTS - 1) == getCurrentIndex()) { - uint8 global_blp = (getBoardId() * StationSettings::instance()->nrBlpsPerBoard()) + m_blp; - Cache::getInstance().getBFState().confirmed(global_blp * MEPHeader::N_PHASEPOL + m_regid); + } else { + + // only mark confirmed when the last fragment has been received OK + if ((BF_N_FRAGMENTS - 1) == getCurrentIndex()) { + Cache::getInstance().getBFState().confirmed(global_blp * MEPHeader::N_PHASEPOL + m_regid); + } else { + Cache::getInstance().getBFState().applied(global_blp * MEPHeader::N_PHASEPOL + m_regid); + } + } return GCFEvent::HANDLED;