PUBLIC BOOLEAN SDIO_Card_Pal_Close (SDIO_CARD_PAL_HANDLE handle)
{
    SDIO_CARD_PAL_IRQ_DECLARE;

    // 此模块只提供给Card_sdio.c这个协议使用,协议代码本身已经保证该handle的有效性,因此在这里不做特别严的检查
    SDIO_CARD_PAL_ASSERT (	/*assert verified*/
        (SDIO_CARD_PAL_MAGICNUM == handle->MagicNum)
        && (TRUE == handle->flag)
    );

    SDIO_CARD_PAL_DISABLE_IRQ;
    handle->flag = FALSE;
    SDIO_CARD_PAL_ENABLE_IRQ;

    SDHOST_UnRegister (handle->sdio_port);

#if defined (UCOS_BSD_EVENT)
    {
        INT8U err;
        OSFlagDel (handle->sdio_event, OS_DEL_ALWAYS, &err);
        handle->sdio_event = PNULL;
    }
#elif defined (CARD_SDIO_EVENT)
    SCI_DeleteEvent (handle->sdio_event);
    handle->sdio_event = PNULL;
#else
    s_CardEvent = 0;
#endif

    return TRUE;
}
status_t DSPI_RTOS_Deinit(dspi_rtos_handle_t *handle)
{
    OS_ERR err;
    DSPI_Deinit(handle->base);
    OSFlagDel(&handle->event, OS_OPT_DEL_ALWAYS, &err);
    OSSemDel(&handle->mutex, OS_OPT_DEL_ALWAYS, &err);

    return kStatus_Success;
}
void osDeleteEvent(OsEvent *event)
{
   OS_ERR err;

   //Make sure the operating system is running
   if(OSRunning == OS_STATE_OS_RUNNING)
   {
      //Properly dispose the event object
      OSFlagDel(event, OS_OPT_DEL_ALWAYS, &err);
   }
}
ADI_OSAL_STATUS adi_osal_EventGroupDestroy(ADI_OSAL_EVENT_HANDLE const hEventGroup)
{

    INT8U nErr;
    ADI_OSAL_STATUS eRetStatus;

#pragma diag(push)
#pragma diag(suppress:misra_rule_11_4 : "typecasting is necessary to convert the handle type into a native uCOS pointer")
    OS_FLAG_GRP* hEventNative = (OS_FLAG_GRP*) hEventGroup;
#pragma diag(pop)


#ifdef OSAL_DEBUG
    if (CALLED_FROM_AN_ISR)
    {
        return (ADI_OSAL_CALLER_ERROR);
    }

    if ((NULL == hEventGroup) || (ADI_OSAL_INVALID_EVENT_GROUP == ADI_OSAL_INVALID_EVENT_GROUP))
    {
        return(ADI_OSAL_BAD_HANDLE);
    }
#endif /* OSAL_DEBUG */

    OSFlagDel(hEventNative, 
              OS_DEL_NO_PEND, /* delete if no threads are pending */
              &nErr);
    switch(nErr)
    {
        case OS_ERR_NONE:
            eRetStatus = ADI_OSAL_SUCCESS;
            break;
        case OS_ERR_TASK_WAITING:
            eRetStatus = ADI_OSAL_THREAD_PENDING;
            break;
#ifdef OSAL_DEBUG
        case OS_ERR_DEL_ISR:
            eRetStatus = ADI_OSAL_CALLER_ERROR;
            break;
        case OS_ERR_FLAG_INVALID_PGRP:
        case OS_ERR_EVENT_TYPE:
            eRetStatus = ADI_OSAL_BAD_HANDLE;
            break;
        case OS_ERR_INVALID_OPT:
            eRetStatus = ADI_OSAL_FAILED;
            break;
#endif /* OSAL_DEBUG */
        default:
            eRetStatus = ADI_OSAL_FAILED;
            break;
    }

    return (eRetStatus);
}
/*FUNCTION**********************************************************************
 *
 * Function Name : OSA_EventDestroy
 * Description   : This function is used to destroy a event object. Return
 * kStatus_OSA_Success if the event object is destroyed successfully, otherwise
 * return kStatus_OSA_Error.
 *
 *END**************************************************************************/
osa_status_t OSA_EventDestroy(event_t *pEvent)
{
    OS_ERR err;

    OSFlagDel(&(pEvent->group), OS_OPT_DEL_ALWAYS, &err);

    if (OS_ERR_NONE == err)
    {
        return kStatus_OSA_Success;
    }
    else
    {
        return kStatus_OSA_Error;
    }
}
/*FUNCTION**********************************************************************
 *
 * Function Name : OSA_EventDestroy
 * Description   : This function is used to destroy a event object. Return
 * kStatus_OSA_Success if the event object is destroyed successfully, otherwise
 * return kStatus_OSA_Error.
 *
 *END**************************************************************************/
osa_status_t OSA_EventDestroy(event_t *pEvent)
{
    INT8U err;

    OSFlagDel(pEvent->pGroup, OS_DEL_ALWAYS, &err);

    if (OS_ERR_NONE == err)
    {
        pEvent->pGroup = (OS_FLAG_GRP*)0;
        return kStatus_OSA_Success;
    }
    else
    {
        return kStatus_OSA_Error;
    }
}