/**
  * @brief  Tx Transfer completed callbacks.
  * @param  hi2s: I2S handle
  * @retval None
  */
void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s)
{
  if(hi2s->Instance == I2S3)
  {
    /* Call the user function which will manage directly transfer complete */  
    BSP_AUDIO_OUT_TransferComplete_CallBack();       
  }
}
/**
  * @brief Tx Transfer completed callbacks
  * @param hi2s: I2S handle
  * @retval None
  */
void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s)
{
    if(hi2s->Instance == I2SOUT)
    {
        /* Configuration change depending on sending dummy data or audio data on bus I2S */
        if (SendDummyData != ENABLE)
        {
            /* Call the user function which will manage directly transfer complete */
            BSP_AUDIO_OUT_TransferComplete_CallBack();
        }
        else
        {
            /* No action */
        }
    }

}
/**
  * @brief Tx Transfer completed callbacks
  * @param hi2s: I2S handle
  * @retval None
  */
void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s)
{
  /* Manage the remaining file size and new address offset: This function 
     should be coded by user (its prototype is already declared in stm324xg_eval_audio.h) */  
  BSP_AUDIO_OUT_TransferComplete_CallBack();       
}
/**
  * @brief  Tx Transfer completed callbacks.
  * @param  hsai: SAI handle
  * @retval None
  */
void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai)
{
  /* Manage the remaining file size and new address offset: This function 
     should be coded by user (its prototype is already declared in stm32746g_discovery_audio.h) */
  BSP_AUDIO_OUT_TransferComplete_CallBack();
}