in source/ota.c [701:759]
static OtaErr_t setImageStateWithReason( OtaImageState_t stateToSet,
uint32_t reasonToSet )
{
OtaErr_t err = OtaErrNone;
OtaImageState_t state = stateToSet;
uint32_t reason = reasonToSet;
OtaPalStatus_t palStatus;
/* Call the platform specific code to set the image state. */
palStatus = otaAgent.pOtaInterface->pal.setPlatformImageState( &( otaAgent.fileContext ), state );
/*
* If the platform image state couldn't be set correctly, force fail the update by setting the
* image state to "Rejected" unless it's already in "Aborted".
*/
if( ( OTA_PAL_MAIN_ERR( palStatus ) != OtaPalSuccess ) && ( state != OtaImageStateAborted ) )
{
/* Intentionally override state since we failed within this function. */
state = OtaImageStateRejected;
/*
* Capture the failure reason if not already set (and we're not already Aborted as checked above). Otherwise Keep
* the original reject reason code since it is possible for the PAL to fail to update the image state in some
* cases (e.g. a reset already caused the bundle rollback and we failed to rollback again).
*/
if( reason == 0U )
{
/* Intentionally override reason since we failed within this function. */
reason = palStatus;
}
}
/* Now update the image state and job status on service side. */
otaAgent.imageState = state;
if( strlen( ( const char * ) otaAgent.pActiveJobName ) > 0u )
{
err = updateJobStatusFromImageState( state, ( int32_t ) reason );
}
else
{
err = OtaErrNoActiveJob;
}
if( err != OtaErrNone )
{
LogWarn( ( "Failed to set image state with reason: "
"OtaErr_t=%s"
", OtaPalStatus_t=%s"
", state=%d"
", reason=%d",
OTA_Err_strerror( err ),
OTA_PalStatus_strerror( OTA_PAL_MAIN_ERR( palStatus ) ),
stateToSet,
reasonToSet ) );
}
return err;
}