bool AiaLoadAlert()

in ports/Storage/src/aia_storage_config.c [389:451]


bool AiaLoadAlert( char* alertToken, size_t alertTokenLen,
                   AiaTimepointSeconds_t* scheduledTime,
                   AiaDurationMs_t* duration, uint8_t* alertType,
                   const uint8_t* allAlertsBuffer )
{
    if( !alertToken )
    {
        AiaLogError( "Null alertToken" );
        return false;
    }
    if( !scheduledTime )
    {
        AiaLogError( "Null scheduledTime" );
        return false;
    }
    if( !duration )
    {
        AiaLogError( "Null duration" );
        return false;
    }
    if( !alertType )
    {
        AiaLogError( "Null alertType" );
        return false;
    }
    if( !allAlertsBuffer )
    {
        AiaLogError( "Null allAlertsBuffer" );
        return false;
    }
    if( alertTokenLen != AIA_ALERT_TOKEN_CHARS )
    {
        AiaLogError( "Invalid alert token length" );
        return false;
    }

    size_t bytePosition = 0;
    *scheduledTime = 0;
    *duration = 0;
    *alertType = 0;

    memcpy( alertToken, allAlertsBuffer, alertTokenLen );
    bytePosition += alertTokenLen;

    for( size_t i = 0; i < sizeof( AiaTimepointSeconds_t );
         ++i, ++bytePosition )
    {
        *scheduledTime |= (unsigned)allAlertsBuffer[ bytePosition ]
                          << ( i * 8 );
    }

    for( size_t i = 0; i < sizeof( AiaDurationMs_t ); ++i, ++bytePosition )
    {
        *duration |= (unsigned)allAlertsBuffer[ bytePosition ] << ( i * 8 );
    }

    for( size_t i = 0; i < sizeof( uint8_t ); ++i, ++bytePosition )
    {
        *alertType |= (unsigned)allAlertsBuffer[ bytePosition ] << ( i * 8 );
    }

    return true;
}