예제 #1
0
//-----------------------------------------------------------------------------
MBOOL ResMgrDrvImp::SetMode(RES_MGR_DRV_MODE_STRUCT* pMode)
{
    MBOOL Result = MTRUE;
    RES_MGR_DRV_MODE_STRUCT     CurrMode;
    CAM_PIPE_MGR_LOCK_STRUCT    CamPipeMgrLock;
    CAM_PIPE_MGR_UNLOCK_STRUCT  CamPipeMgrUnlock;
    CAM_PIPE_MGR_DISABLE_STRUCT CamPipeMgrDisable;
    //
    if(mUser <= 0)
    {
        LOG_ERR("No user");
        Result = MFALSE;
        goto EXIT;
    }
    //
    if(mFdCamPipeMgr < 0)
    {
        LOG_ERR("CamPipeMgr kernel is not opened");
        Result = MFALSE;
        goto EXIT;
    }
    //
    LOG_MSG("ScenSw(%d),ScenHw(%d),Dev(%d)",
            pMode->ScenSw,
            pMode->ScenHw,
            pMode->Dev);
    //
    GetMode(&CurrMode);
    //
    if( CurrMode.ScenSw == (pMode->ScenSw) &&
        CurrMode.ScenHw == (pMode->ScenHw) &&
        CurrMode.Dev == (pMode->Dev))
    {
        LOG_MSG("OK:Same");
        goto EXIT;
    }
    //
    if(Result)
    {
        if(ioctl(mFdCamPipeMgr, CAM_PIPE_MGR_SET_MODE, (CAM_PIPE_MGR_MODE_STRUCT*)pMode) == 0)
        {
            LOG_MSG("OK");
        }
        else
        {
            LOG_ERR("SET_MODE fail(%d):%s",errno,strerror(errno));
            Result = MFALSE;
        }
    }
    //
    if(Result)
    {
        BWC BwcIns;
        //
        if(CurrMode.ScenSw == (pMode->ScenSw))
        {
            LOG_MSG("Same SW(%d/%d)",CurrMode.ScenSw,pMode->ScenSw);
            goto EXIT;
        }
        //
        if(pMode->Dev == RES_MGR_DRV_DEV_VT)
        {
            if(pMode->ScenSw == RES_MGR_DRV_SCEN_SW_NONE)
            {
                BwcIns.Profile_Change(BWCPT_VIDEO_TELEPHONY,false);
            }
            else
            {
                BwcIns.Profile_Change(BWCPT_VIDEO_TELEPHONY,true);
                mBwcParams.profileType = BWCPT_VIDEO_TELEPHONY;
            }
        }
        else
        {
            switch(CurrMode.ScenSw)
            {
                case RES_MGR_DRV_SCEN_SW_CAM_PRV:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_PREVIEW,false);
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_VIDEO_PRV:
                case RES_MGR_DRV_SCEN_SW_VIDEO_REC:
                case RES_MGR_DRV_SCEN_SW_VIDEO_VSS:
                {
                    BwcIns.Profile_Change(BWCPT_VIDEO_RECORD_CAMERA,false);
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_CAM_CAP:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_CAPTURE,false);
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_ZSD:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_ZSD,false);
                    break;
                }
                default:
                {
                    //do nothing.
                }
            }
            //
            switch(pMode->ScenSw)
            {
                case RES_MGR_DRV_SCEN_SW_NONE:
                case RES_MGR_DRV_SCEN_SW_CAM_IDLE:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_PREVIEW,false);
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_CAM_PRV:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_PREVIEW,true);
                    mBwcParams.profileType = BWCPT_CAMERA_PREVIEW;
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_VIDEO_PRV:
                case RES_MGR_DRV_SCEN_SW_VIDEO_REC:
                case RES_MGR_DRV_SCEN_SW_VIDEO_VSS:
                {
                    BwcIns.Profile_Change(BWCPT_VIDEO_RECORD_CAMERA,true);
                    mBwcParams.profileType = BWCPT_VIDEO_RECORD_CAMERA;
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_CAM_CAP:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_CAPTURE,true);
                    mBwcParams.profileType = BWCPT_CAMERA_CAPTURE;
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_ZSD:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_ZSD,true);
                    mBwcParams.profileType = BWCPT_CAMERA_ZSD;
                    break;
                }
                default:
                {
                    //do nothing.
                }
            }
            //
            switch(pMode->ScenSw)
            {
                case RES_MGR_DRV_SCEN_SW_NONE:
                {
                    CloseHdmi(MFALSE);
                    break;
                }
                default:
                {
                    CloseHdmi(MTRUE);
                    break;
                }
            }

        }
    }
    //
    EXIT:
    //LOG_MSG("Result(%d)",Result);
    return Result;

}
//-----------------------------------------------------------------------------
MBOOL ResMgrDrvImp::SetMode(RES_MGR_DRV_MODE_STRUCT* pMode)
{
    MBOOL Result = MTRUE, IsCdpConcurLocked = MFALSE, IsCdpLinkLocked = MFALSE;;
    RES_MGR_DRV_MODE_STRUCT     CurrMode;
    CAM_PIPE_MGR_LOCK_STRUCT    CamPipeMgrLock;
    CAM_PIPE_MGR_UNLOCK_STRUCT  CamPipeMgrUnlock;
    CAM_PIPE_MGR_DISABLE_STRUCT CamPipeMgrDisable;
    //
    if(mUser <= 0)
    {
        LOG_ERR("No user");
        Result = MFALSE;
        goto EXIT;
    }
    //
    if(mFdCamPipeMgr < 0)
    {
        LOG_ERR("CamPipeMgr kernel is not opened");
        Result = MFALSE;
        goto EXIT;
    }
    //
    LOG_MSG("ScenSw(%d),ScenHw(%d),Dev(%d)",
            pMode->ScenSw,
            pMode->ScenHw,
            pMode->Dev);
    //
    GetMode(&CurrMode);
    //
    if( CurrMode.ScenSw == (pMode->ScenSw) &&
        CurrMode.ScenHw == (pMode->ScenHw) &&
        CurrMode.Dev == (pMode->Dev))
    {
        LOG_MSG("OK:Same");
        goto EXIT;
    }
    //
    switch(CurrMode.ScenSw)
    {
        case RES_MGR_DRV_SCEN_SW_NONE:
        {
            IsCdpLinkLocked = MTRUE;
            break;
        }
        default:
        {
            //do nothing.
        }
    }
    //
    if(IsCdpLinkLocked)
    {
        CamPipeMgrLock.PipeMask = CAM_PIPE_MGR_PIPE_MASK_CDP_LINK;
        CamPipeMgrLock.Timeout = RES_MGR_DRV_WAIT_CDP_LINK_TIMEOUT;
        if(ioctl(mFdCamPipeMgr, CAM_PIPE_MGR_LOCK, &CamPipeMgrLock) == 0)
        {
            CamPipeMgrDisable.PipeMask = CAM_PIPE_MGR_PIPE_MASK_CDP_LINK;
            if(ioctl(mFdCamPipeMgr, CAM_PIPE_MGR_DISABLE_PIPE, &CamPipeMgrDisable) == 0)
            {
                CamPipeMgrUnlock.PipeMask = CAM_PIPE_MGR_PIPE_MASK_CDP_LINK;
                if(ioctl(mFdCamPipeMgr, CAM_PIPE_MGR_UNLOCK, &CamPipeMgrUnlock) == 0)
                {
                    LOG_MSG("CDP_LINK:LOCK->DISABLE->UNLOCK OK");
                }
                else
                {
                    LOG_ERR("CDP_LINK:LOCK->DISABLE->UNLOCK fail");
                    Result = MFALSE;
                }
            }
            else
            {
                LOG_ERR("CDP_LINK:LOCK->DISABLE fail");
                Result = MFALSE;
            }
        }
        else
        {
            LOG_ERR("CDP_LINK:LOCK fail");
            Result = MFALSE;
        }
    }

    //
    #if 0
    switch(CurrMode.ScenSw)
    {
        case RES_MGR_DRV_SCEN_SW_CAM_PRV:
        case RES_MGR_DRV_SCEN_SW_VIDEO_PRV:
        {
            if(CurrMode.ScenHw == RES_MGR_DRV_SCEN_HW_VSS)
            {
                IsCdpConcurLocked = MTRUE;
            }
            break;
        }
        case RES_MGR_DRV_SCEN_SW_ZSD:
        {
            if(CurrMode.ScenHw == RES_MGR_DRV_SCEN_HW_ZSD)
            {
                IsCdpConcurLocked = MTRUE;
            }
            break;
        }
        default:
        {
            //do nothing.
        }
    }
    //
    if(IsCdpConcurLocked)
    {
        CamPipeMgrLock.PipeMask = CAM_PIPE_MGR_PIPE_MASK_CDP_CONCUR;
        CamPipeMgrLock.Timeout = RES_MGR_DRV_WAIT_CDP_CONCUR_TIMEOUT;
        if(ioctl(mFdCamPipeMgr, CAM_PIPE_MGR_LOCK, &CamPipeMgrLock) == 0)
        {
            CamPipeMgrDisable.PipeMask = CAM_PIPE_MGR_PIPE_MASK_CDP_CONCUR;
            if(ioctl(mFdCamPipeMgr, CAM_PIPE_MGR_DISABLE_PIPE, &CamPipeMgrDisable) == 0)
            {
                CamPipeMgrUnlock.PipeMask = CAM_PIPE_MGR_PIPE_MASK_CDP_CONCUR;
                if(ioctl(mFdCamPipeMgr, CAM_PIPE_MGR_UNLOCK, &CamPipeMgrUnlock) == 0)
                {
                    LOG_MSG("CDP_CONCUR:LOCK->DISABLE->UNLOCK OK");
                }
                else
                {
                    LOG_ERR("CDP_CONCUR:LOCK->DISABLE->UNLOCK fail");
                    Result = MFALSE;
                }
            }
            else
            {
                LOG_ERR("CDP_CONCUR:LOCK->DISABLE fail");
                Result = MFALSE;
            }
        }
        else
        {
            LOG_ERR("CDP_CONCUR:LOCK fail");
            Result = MFALSE;
        }
    }
    #endif
    //
    if(Result)
    {
        if(ioctl(mFdCamPipeMgr, CAM_PIPE_MGR_SET_MODE, (CAM_PIPE_MGR_MODE_STRUCT*)pMode) == 0)
        {
            LOG_MSG("OK");
        }
        else
        {
            LOG_ERR("SET_MODE fail");
            Result = MFALSE;
        }
    }
    //
    if(Result)
    {
        BWC BwcIns;
        //
        if(CurrMode.ScenSw == (pMode->ScenSw))
        {
            LOG_MSG("Same SW(%d/%d)",CurrMode.ScenSw,pMode->ScenSw);
            goto EXIT;
        }
        //
        if(pMode->Dev == RES_MGR_DRV_DEV_VT)
        {
            if(pMode->ScenSw == RES_MGR_DRV_SCEN_SW_NONE)
            {
                BwcIns.Profile_Change(BWCPT_VIDEO_TELEPHONY,false);
            }
            else
            {
                BwcIns.Profile_Change(BWCPT_VIDEO_TELEPHONY,true);
            }
        }
        else
        {
            switch(CurrMode.ScenSw)
            {
                case RES_MGR_DRV_SCEN_SW_CAM_PRV:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_PREVIEW,false);
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_VIDEO_PRV:
                case RES_MGR_DRV_SCEN_SW_VIDEO_REC:
                case RES_MGR_DRV_SCEN_SW_VIDEO_VSS:
                {
                    BwcIns.Profile_Change(BWCPT_VIDEO_RECORD_CAMERA,false);
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_CAM_CAP:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_CAPTURE,false);
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_ZSD:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_ZSD,false);
                    break;
                }
                default:
                {
                    //do nothing.
                }
            }
            //
            switch(pMode->ScenSw)
            {
                case RES_MGR_DRV_SCEN_SW_NONE:
                case RES_MGR_DRV_SCEN_SW_CAM_IDLE:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_PREVIEW,false);
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_CAM_PRV:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_PREVIEW,true);
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_VIDEO_PRV:
                case RES_MGR_DRV_SCEN_SW_VIDEO_REC:
                case RES_MGR_DRV_SCEN_SW_VIDEO_VSS:
                {
                    BwcIns.Profile_Change(BWCPT_VIDEO_RECORD_CAMERA,true);
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_CAM_CAP:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_CAPTURE,true);
                    break;
                }
                case RES_MGR_DRV_SCEN_SW_ZSD:
                {
                    BwcIns.Profile_Change(BWCPT_CAMERA_ZSD,true);
                    break;
                }
                default:
                {
                    //do nothing.
                }
            }
            //
            switch(pMode->ScenSw)
            {
                case RES_MGR_DRV_SCEN_SW_NONE:
                {
                    CloseHdmi(MFALSE);
                    break;
                }
                default:
                {
                    CloseHdmi(MTRUE);
                    break;
                }
            }

        }
    }
    //
    EXIT:
    //LOG_MSG("Result(%d)",Result);
    return Result;

}