⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 busacc.cpp

📁 PXA27x/ MainstionIII平台下SDIO驱动完整代码 Windows CE 6.0嵌入式操作系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        return fReturn;
    }
    else {
        SetLastError(ERROR_NOT_SUPPORTED);
        return FALSE;
    }
}
VOID SDBusAccess::SDFreeBusRequest__X(HBUS_REQUEST  hRequest)
{
    SDBusAccess * l_pSDBusAccess = g_pSDBusAccess;
    if (l_pSDBusAccess ) {
        BOOL fReturn= BusIoControl(l_pSDBusAccess->GetBusAccessHandle(),IOCTL_BUS_SD_FREE_BUS_REQUEST,
            &hRequest,sizeof(hRequest),
            NULL,0,
            NULL,NULL);
        if (!fReturn)
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("BusIo for SDFreeBusRequest__X: Failed GetLastError() = %d \n"),GetLastError()));            
    }
}
SD_API_STATUS SDBusAccess::SDCardInfoQuery__X( SD_DEVICE_HANDLE hHandle,
        SD_INFO_TYPE InfoType,PVOID pCardInfo,ULONG StructureSize)
{
    SD_API_STATUS apiStatus = SD_API_STATUS_SUCCESS ;
    SDBusAccess * l_pSDBusAccess = g_pSDBusAccess;
    if (l_pSDBusAccess ) {
        IO_SD_CARD_INFO_QUERY sdCardInfoQueryParam = {
            hHandle,InfoType
        };
        SetLastError(SD_API_STATUS_SUCCESS);
        BOOL fReturn= BusIoControl(l_pSDBusAccess->GetBusAccessHandle(),IOCTL_BUS_SD_CARD_INFO_QUERY,
            &sdCardInfoQueryParam,sizeof(sdCardInfoQueryParam),
            pCardInfo,StructureSize,
            NULL,NULL);
        apiStatus = GetLastError();
        if (!fReturn) { // We failed on BusIoControl
            if (SD_API_SUCCESS(apiStatus))
                apiStatus = SD_API_STATUS_NO_SUCH_DEVICE;
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("BusIo for SDCardInfoQuery__X: Failed GetLastError() = %d \n"),apiStatus));            
        }
        return apiStatus ;
    }
    else 
        return SD_API_STATUS_NO_SUCH_DEVICE ;
}

SD_API_STATUS SDBusAccess::SDReadWriteRegistersDirect__X(SD_DEVICE_HANDLE  hDevice,
    SD_IO_TRANSFER_TYPE ReadWrite, UCHAR  Function, DWORD Address, BOOLEAN  ReadAfterWrite, PUCHAR pBuffer, ULONG Length)
{
    SD_API_STATUS apiStatus = SD_API_STATUS_SUCCESS ;
    SDBusAccess * l_pSDBusAccess = g_pSDBusAccess;
    if (l_pSDBusAccess ) {
        IO_SD_READ_WRITE_REGISTERS_DIRECT sdReadWriteDirectParam = {
                hDevice, ReadWrite, Function, Address, ReadAfterWrite,pBuffer,Length
        };
        SetLastError(SD_API_STATUS_SUCCESS);
        BOOL fReturn= BusIoControl(l_pSDBusAccess->GetBusAccessHandle(),IOCTL_BUS_SD_READ_WRITE_REGISTERS_DIRECT,
            &sdReadWriteDirectParam,sizeof(sdReadWriteDirectParam),
            NULL,0,
            NULL,NULL);
        apiStatus = GetLastError();
        if (!fReturn) { // We failed on BusIoControl
            if (SD_API_SUCCESS(apiStatus))
                apiStatus = SD_API_STATUS_NO_SUCH_DEVICE;
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("BusIo for SDReadWriteRegistersDirect__X: Failed GetLastError() = %d \n"),apiStatus));            
        }
        return apiStatus ;
    }
    else 
        return SD_API_STATUS_NO_SUCH_DEVICE ;
    
}
SD_API_STATUS SDBusAccess::SDGetTuple__X(SD_DEVICE_HANDLE hDevice,
    UCHAR TupleCode, PUCHAR pBuffer,PULONG pBufferSize,BOOL CommonCIS)
{
    SD_API_STATUS apiStatus = SD_API_STATUS_SUCCESS ;
    SDBusAccess * l_pSDBusAccess = g_pSDBusAccess;
    if (l_pSDBusAccess ) {
        IO_BUS_SD_GET_TUPLE sdGetTupleParam = {
                hDevice, TupleCode, CommonCIS
        };
        SetLastError(SD_API_STATUS_SUCCESS);
        DWORD dwReturn = 0;
        BOOL fReturn= BusIoControl(l_pSDBusAccess->GetBusAccessHandle(),IOCTL_BUS_SD_GET_TUPLE,
            &sdGetTupleParam,sizeof(sdGetTupleParam),
            pBuffer,pBufferSize!=NULL?*pBufferSize:0,
            &dwReturn,NULL);
        apiStatus = GetLastError();
        if (!fReturn) { // We failed on BusIoControl
            if (SD_API_SUCCESS(apiStatus))
                apiStatus = SD_API_STATUS_NO_SUCH_DEVICE;
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("BusIo for SDReadWriteRegistersDirect__X: Failed GetLastError() = %d \n"),apiStatus));            
        }
        else if (pBufferSize) {
            *pBufferSize = dwReturn ;
        }
        return apiStatus ;
    }
    else 
        return SD_API_STATUS_NO_SUCH_DEVICE ;
    
}
SD_API_STATUS SDBusAccess::SDIOConnectInterrupt__X(SD_DEVICE_HANDLE   hDevice, 
                                      PSD_INTERRUPT_CALLBACK   pIsrFunction)
{

    SD_API_STATUS apiStatus = SD_API_STATUS_SUCCESS ;
    SDBusAccess * l_pSDBusAccess = g_pSDBusAccess;
    if (l_pSDBusAccess ) {
        IO_SD_IO_CONNECT_INTERRUPT sdIoConnectInterruptParam = {
                hDevice, {pIsrFunction  }
        };
        SetLastError(SD_API_STATUS_SUCCESS);
        BOOL fReturn= BusIoControl(l_pSDBusAccess->GetBusAccessHandle(),IOCTL_BUS_SD_IO_CONNECT_INTERRUPT,
            &sdIoConnectInterruptParam,sizeof(sdIoConnectInterruptParam),
            NULL,0,
            NULL,NULL);
        apiStatus = GetLastError();
        if (!fReturn) { // We failed on BusIoControl
            if (SD_API_SUCCESS(apiStatus))
                apiStatus = SD_API_STATUS_NO_SUCH_DEVICE;
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("BusIo for SDIOConnectInterrupt__X: Failed GetLastError() = %d \n"),apiStatus));            
        }
        return apiStatus ;
    }
    else 
        return SD_API_STATUS_NO_SUCH_DEVICE ;
    
}

VOID SDBusAccess::SDIODisconnectInterrupt__X(SD_DEVICE_HANDLE hDevice)
{
    SDBusAccess * l_pSDBusAccess = g_pSDBusAccess;
    if (l_pSDBusAccess ) {
        BOOL fReturn= BusIoControl(l_pSDBusAccess->GetBusAccessHandle(),IOCTL_BUS_SD_IO_DISCONNECT_INTERRUPT,
            &hDevice,sizeof(hDevice),
            NULL,0,
            NULL,NULL);
        if (!fReturn)
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("BusIo for SDIODisconnectInterrupt__X: Failed GetLastError() = %d \n"),GetLastError()));            
    }
}

SD_API_STATUS SDBusAccess::SDSetCardFeature__X(SD_DEVICE_HANDLE  hDevice,
    SD_SET_FEATURE_TYPE  CardFeature, PVOID pCardInfo, ULONG StructureSize)
{
    SD_API_STATUS apiStatus = SD_API_STATUS_SUCCESS ;
    SDBusAccess * l_pSDBusAccess = g_pSDBusAccess;
    if (l_pSDBusAccess ) {
        IO_SD_SET_CARD_FEATURE sdIoSetCardFeatureParam = {
                hDevice, CardFeature,pCardInfo,StructureSize
        };
        SetLastError(SD_API_STATUS_SUCCESS);
        BOOL fReturn= BusIoControl(l_pSDBusAccess->GetBusAccessHandle(),IOCTL_BUS_SD_SET_CARD_FEATURE,
            &sdIoSetCardFeatureParam,sizeof(sdIoSetCardFeatureParam),
            NULL,0,
            NULL,NULL);
        apiStatus = GetLastError();
        if (!fReturn) { // We failed on BusIoControl
            if (SD_API_SUCCESS(apiStatus))
                apiStatus = SD_API_STATUS_NO_SUCH_DEVICE;
            DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("BusIo for SDSetCardFeature__X: Failed GetLastError() = %d \n"),apiStatus));            
        }
        return apiStatus ;
    }
    else 
        return SD_API_STATUS_NO_SUCH_DEVICE ;
}

extern "C" 
SD_API_STATUS SDBusGetClientFunctions(PSDCARD_API_FUNCTIONS pClientFunctions)
{
    SDBusAccess * l_pSDBusAccess = g_pSDBusAccess;
    if (pClientFunctions && pClientFunctions->dwSize>= sizeof(SDCARD_API_FUNCTIONS) && l_pSDBusAccess ) { 
        *pClientFunctions = *(PSDCARD_API_FUNCTIONS)l_pSDBusAccess;
        pClientFunctions->dwSize = sizeof(SDCARD_API_FUNCTIONS);
        return SD_API_STATUS_SUCCESS;
    }
    else
        return SD_API_STATUS_INVALID_PARAMETER;
}

extern "C"
HANDLE  GetBusAccessHandle()
{
    SDBusAccess * l_pSDBusAccess = g_pSDBusAccess;
    if (l_pSDBusAccess ) {
        return l_pSDBusAccess->GetBusAccessHandle();
    }
    else 
        return NULL;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -