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

📄 iic_mdd.cpp

📁 6410BSP3
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                return FALSE;
            }

            *pdwActualOut = sizeof(POWER_CAPABILITIES);
        }
        break;    
    case IOCTL_POWER_QUERY:
        break;
    case IOCTL_POWER_SET:
        break;
    case IOCTL_IIC_WRITE:
        if ( (dwLenIn < sizeof(IIC_IO_DESC)) || (NULL == pBufIn) ) {
            SetLastError (ERROR_INVALID_PARAMETER);
            RetVal = FALSE;
            DEBUGMSG (ZONE_ERROR, (TEXT(" Invalid parameter\r\n")));
            break;
        }        

        if(FAILED(CeOpenCallerBuffer(&pMarshalledInBuf, pBufIn, dwLenIn, ARG_I_PTR, TRUE)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeOpenCallerBuffer failed in IOCTL_IIC_WRITE for IN buf.\r\n")));
            return FALSE;
        }

        EnterCriticalSection(&(pInitContext->CritSec));
        if((HW_Write(pOpenContext, (PIIC_IO_DESC)pMarshalledInBuf))==NULL)
        {
            SetLastError(ERROR_TIMEOUT);
            RetVal = FALSE;                
        }
        LeaveCriticalSection(&(pInitContext->CritSec));    

        if(FAILED(CeCloseCallerBuffer(pMarshalledInBuf, pBufIn, dwLenIn, ARG_I_PTR)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeCloseCallerBuffer failed in IOCTL_IIC_WRITE for IN buf.\r\n")));
            return FALSE;
        }
        break;
        
    case IOCTL_IIC_READ:    
        if ( (dwLenIn < sizeof(IIC_IO_DESC)) || (NULL == pBufIn) || (dwLenOut < sizeof(IIC_IO_DESC)) || (NULL == pBufOut) ) {
            SetLastError (ERROR_INVALID_PARAMETER);
            RetVal = FALSE;
            DEBUGMSG (ZONE_ERROR, (TEXT(" Invalid parameter\r\n")));
            break;
        }            

        if(FAILED(CeOpenCallerBuffer(&pMarshalledInBuf, pBufIn, dwLenIn, ARG_I_PTR, TRUE)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeOpenCallerBuffer failed in IOCTL_IIC_READ for IN buf.\r\n")));
            return FALSE;
        }
        if(FAILED(CeOpenCallerBuffer(&pMarshalledOutBuf, pBufOut, dwLenOut, ARG_O_PTR, TRUE)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeOpenCallerBuffer failed in IOCTL_IIC_READ for OUT buf.\r\n")));
            return FALSE;
        }

        EnterCriticalSection(&(pInitContext->CritSec));    
        if(HW_Read(pOpenContext, (PIIC_IO_DESC)pMarshalledInBuf, (PIIC_IO_DESC)pMarshalledOutBuf))
        {
            // success
            *pdwActualOut = sizeof(IIC_IO_DESC);                        
        }
        else
        {
            SetLastError(ERROR_TIMEOUT);
            *pdwActualOut = 0;
            RetVal = FALSE;            
        }
        LeaveCriticalSection(&(pInitContext->CritSec));    
        
        if(FAILED(CeCloseCallerBuffer(pMarshalledInBuf, pBufIn, dwLenIn, ARG_I_PTR)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeCloseCallerBuffer failed in IOCTL_IIC_READ for IN buf.\r\n")));
            return FALSE;
        }
        if(FAILED(CeCloseCallerBuffer(pMarshalledOutBuf, pBufOut, dwLenOut, ARG_O_PTR)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeCloseCallerBuffer failed in IOCTL_IIC_READ for OUT buf.\r\n")));
            return FALSE;
        }

        break;
                
    case IOCTL_IIC_SET_CLOCK:    
        if ( (dwLenIn < sizeof(UINT32)) || (NULL == pBufIn) ) {
            SetLastError (ERROR_INVALID_PARAMETER);
            RetVal = FALSE;
            DEBUGMSG (ZONE_ERROR, (TEXT(" Invalid parameter\r\n")));
            break;
        }

        __try
        {
            EnterCriticalSection(&(pInitContext->CritSec));
            pOpenContext->PDDContextVal.Clock = *(UINT32*)pBufIn;
            HW_SetClock(pOpenContext);
            pOpenContext->DirtyBit = TRUE;
            LeaveCriticalSection(&(pInitContext->CritSec));
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
            RETAILMSG(1, (L"[IOCTL_IIC_SET_CLOCK] exception...\n"));
            return FALSE;
        }
        break;
        
    case IOCTL_IIC_GET_CLOCK:    
        if ( (dwLenOut < sizeof(UINT32)) || (NULL == pBufOut) ||
             (NULL == pdwActualOut) ) {
            SetLastError (ERROR_INVALID_PARAMETER);
            RetVal = FALSE;
            DEBUGMSG (ZONE_ERROR, (TEXT(" Invalid parameter\r\n")));
            break;
        }

        if(FAILED(CeOpenCallerBuffer(&pMarshalledInBuf, pBufIn, dwLenIn, ARG_IO_PTR, TRUE)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeOpenCallerBuffer failed in IOCTL_IIC_GET_CLOCK for IN buf.\r\n")));
            return FALSE;
        }

        *(UINT32*)pMarshalledInBuf = pOpenContext->PDDContextVal.Clock;
        // Return the size
        *pdwActualOut = sizeof(UINT32);        

        if(FAILED(CeCloseCallerBuffer(pMarshalledInBuf, pBufIn, dwLenIn, ARG_IO_PTR)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeCloseCallerBuffer failed in IOCTL_IIC_GET_CLOCK for IN buf.\r\n")));
            return FALSE;
        }
        break;
        
    case IOCTL_IIC_SET_MODE:
        if ( (dwLenIn < sizeof(UINT32)) || (NULL == pBufIn) ) {
            SetLastError (ERROR_INVALID_PARAMETER);
            RetVal = FALSE;
            DEBUGMSG (ZONE_ERROR, (TEXT(" Invalid parameter\r\n")));
            break;
        }    

        __try
        {
            pOpenContext->PDDContextVal.ModeSel = (IIC_MODE)*(UINT32*)pBufIn;
            pOpenContext->DirtyBit = TRUE;
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
            RETAILMSG(1, (L"[IOCTL_IIC_SET_MODE] exception...\n"));
            return FALSE;
        }
        break;
                
    case IOCTL_IIC_GET_MODE:        
        if ( (dwLenOut < sizeof(UINT32)) || (NULL == pBufOut) ||
             (NULL == pdwActualOut) ) {
            SetLastError (ERROR_INVALID_PARAMETER);
            RetVal = FALSE;
            DEBUGMSG (ZONE_ERROR, (TEXT(" Invalid parameter\r\n")));
            break;
        }

        if(FAILED(CeOpenCallerBuffer(&pMarshalledInBuf, pBufIn, dwLenIn, ARG_IO_PTR, TRUE)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeOpenCallerBuffer failed in IOCTL_IIC_GET_MODE for IN buf.\r\n")));
            return FALSE;
        }

        *(UINT32*)pMarshalledInBuf = pOpenContext->PDDContextVal.ModeSel;
        // Return the size
        *pdwActualOut = sizeof(UINT32);        

        if(FAILED(CeCloseCallerBuffer(pMarshalledInBuf, pBufIn, dwLenIn, ARG_IO_PTR)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeCloseCallerBuffer failed in IOCTL_IIC_GET_MODE for IN buf.\r\n")));
            return FALSE;
        }
        break;
        
    case IOCTL_IIC_SET_FILTER:        
        if ( (dwLenIn < sizeof(UINT32)) || (NULL == pBufIn) ) {
            SetLastError (ERROR_INVALID_PARAMETER);
            RetVal = FALSE;
            DEBUGMSG (ZONE_ERROR, (TEXT(" Invalid parameter\r\n")));
            break;
        }    

        __try
        {
            pOpenContext->PDDContextVal.FilterEnable = *(UINT32*)pBufIn;
            pOpenContext->DirtyBit = TRUE;
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
            RETAILMSG(1, (L"[IOCTL_IIC_SET_FILTER] exception...\n"));
            return FALSE;
        }
        break;
        
    case IOCTL_IIC_GET_FILTER:    
        if ( (dwLenOut < sizeof(UINT32)) || (NULL == pBufOut) ||
             (NULL == pdwActualOut) ) {
            SetLastError (ERROR_INVALID_PARAMETER);
            RetVal = FALSE;
            DEBUGMSG (ZONE_ERROR, (TEXT(" Invalid parameter\r\n")));
            break;
        }

        if(FAILED(CeOpenCallerBuffer(&pMarshalledInBuf, pBufIn, dwLenIn, ARG_IO_PTR, TRUE)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeOpenCallerBuffer failed in IOCTL_IIC_GET_FILTER for IN buf.\r\n")));
            return FALSE;
        }

        *(UINT32*)pMarshalledInBuf = pOpenContext->PDDContextVal.FilterEnable;
        // Return the size
        *pdwActualOut = sizeof(UINT32);        

        if(FAILED(CeCloseCallerBuffer(pMarshalledInBuf, pBufIn, dwLenIn, ARG_IO_PTR)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeCloseCallerBuffer failed in IOCTL_IIC_GET_FILTER for IN buf.\r\n")));
            return FALSE;
        }
        break;
        
    case IOCTL_IIC_SET_DELAY:        
        if ( (dwLenIn < sizeof(UINT32)) || (NULL == pBufIn) ) {
            SetLastError (ERROR_INVALID_PARAMETER);
            RetVal = FALSE;
            DEBUGMSG (ZONE_ERROR, (TEXT(" Invalid parameter\r\n")));
            break;
        }    

        __try
        {
            pOpenContext->PDDContextVal.Delay = (IIC_DELAY)*(UINT32*)pBufIn;
            pOpenContext->DirtyBit = TRUE;
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
            RETAILMSG(1, (L"[IOCTL_IIC_SET_DELAY] exception...\n"));
            return FALSE;
        }
        break;
                                                                
    case IOCTL_IIC_GET_DELAY:        
        if ( (dwLenOut < sizeof(UINT32)) || (NULL == pBufOut) ||
             (NULL == pdwActualOut) ) {
            SetLastError (ERROR_INVALID_PARAMETER);
            RetVal = FALSE;
            DEBUGMSG (ZONE_ERROR, (TEXT(" Invalid parameter\r\n")));
            break;
        }

        if(FAILED(CeOpenCallerBuffer(&pMarshalledInBuf, pBufIn, dwLenIn, ARG_IO_PTR, TRUE)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeOpenCallerBuffer failed in IOCTL_IIC_GET_DELAY for IN buf.\r\n")));
            return FALSE;
        }

        *(UINT32*)pMarshalledInBuf = pOpenContext->PDDContextVal.Delay;
        // Return the size
        *pdwActualOut = sizeof(UINT32);        

        if(FAILED(CeCloseCallerBuffer(pMarshalledInBuf, pBufIn, dwLenIn, ARG_IO_PTR)))
        {
            RETAILMSG(1, (TEXT("IIC_IOControl: CeCloseCallerBuffer failed in IOCTL_IIC_GET_DELAY for IN buf.\r\n")));
            return FALSE;
        }
        break;                            
    }
    
    DEBUGMSG (ZONE_FUNCTION|(RetVal == FALSE?ZONE_ERROR:0),
              (TEXT("-IIC_IOControl %s Ecode=%d (len=%d)\r\n"),
               (RetVal == TRUE) ? TEXT("Success") : TEXT("Error"),
               GetLastError(), (NULL == pdwActualOut) ? 0 : *pdwActualOut));

    return(RetVal);        
}

void IIC_PowerUp(
            PHW_INIT_INFO    pInitContext                        /* Context pointer returned from IIC_Init*/
)
{
    HW_PowerUp(pInitContext);
}

void IIC_PowerDown(
            PHW_INIT_INFO    pInitContext                        /* Context pointer returned from IIC_Init*/
)
{
    HW_PowerDown(pInitContext);
}

⌨️ 快捷键说明

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