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

📄 datapath.c

📁 IT projecotr reference design.
💻 C
📖 第 1 页 / 共 4 页
字号:
    int08 retval;
    
    if( mbSend( datapathMbxID, DPMSG_IMAGEPOSITION, 1500, (uint32)value, FALSE, (uint32)(&retval) ) != MBM_PASS )
    {
        dbmsg_ftrace( DBM_DPATH, "mb send failed\r\n", retval );
        return FAIL;
    }
    return retval;
}

/****************************************************************************/
/* User control to set rear projection and switch execution context         */
/****************************************************************************/

int08 datapath_UserSetRearProjection( uint08 enable )
{
    int08 retval;
    
    if( mbSend( datapathMbxID, DPMSG_REARPROJECTION, 1500, (uint32)enable, FALSE, (uint32)(&retval) ) != MBM_PASS )
    {
        dbmsg_ftrace( DBM_DPATH, "mb send failed\r\n", retval );
        return FAIL;
    }
    return retval;
}

/****************************************************************************/
/* User control to set ceiling projection and switch execution context      */
/****************************************************************************/

int08 datapath_UserSetCeilingProjection( uint08 enable )
{
    int08 retval;
    
    if( mbSend( datapathMbxID, DPMSG_CEILINGPROJECTION, 1500, (uint32)enable, FALSE, (uint32)(&retval) ) != MBM_PASS )
    {
        dbmsg_ftrace( DBM_DPATH, "mb send failed\r\n", retval );
        return FAIL;
    }
    return retval;
}

/****************************************************************************/
/* User control to set keystone and switch execution context                */
/****************************************************************************/

int08 datapath_UserSetKeystoneAnglePitch( int16 pitch )
{
    int08 retval;
    
    if( mbSend( datapathMbxID, DPMSG_KEYSTONEPITCH, 1500, (uint32)pitch, FALSE, (uint32)(&retval) ) != MBM_PASS )
    {
        dbmsg_ftrace( DBM_DPATH, "mb send failed\r\n", retval );
        return FAIL;
    }
    return retval;
}

/****************************************************************************/
/* User control to run splash capture and switch execution context          */
/****************************************************************************/

int08 datapath_UserScreenCapture( void )
{
    int08 retval;
    
    if( mbSend( datapathMbxID, DPMSG_SPLASHCAPTURE, -1, 0, FALSE, (uint32)(&retval) ) != MBM_PASS )
    {
        dbmsg_ftrace( DBM_DPATH, "mb send failed\r\n", retval );
        return FAIL;
    }
    return retval;
}

/***************************************************************************/
/* User control to read and apply color defaults from flash                */
/***************************************************************************/

void datapath_UserRestoreColorDefaults( BOOL resetAll )
{
    mbSend( datapathMbxID, DPMSG_RESTORECOLORDEFAULTS, -1, (uint32)resetAll, FALSE, 0 );
}

/***************************************************************************/
/* User control to read and apply color defaults from flash                */
/***************************************************************************/

void datapath_UserRestoreDisplayDefaults( void )
{
    mbSend( datapathMbxID, DPMSG_RESTOREDISPLAYDEFAULTS, -1, 0, FALSE, 0 );
}


/****************************************************************************/
/* Returns what is currently displayed on the DMD for the OSD               */
/****************************************************************************/

DP_CONNECTOR datapath_GetActiveDisplay( void )
{
    if( blankScreenEnabled )
    {
        return BLANKSCREEN;  /* does not currently distinguish blank sfg from blank splash */
    }
    
    if( sourceDesc.sourceActive )
    {
        return sourceDesc.connector;
    }

    if( datapathState == SPLASH_AT_STARTUP )
    {
        return SPLASH;
    }
    
    if( datapathState == TPG_DISPLAYED )
    {
        return TESTPATTERN;
    }

       /* if in any other state, not displaying an external source, and not */
       /* displaying splash or tpg we are displaying SFG                    */
    return NOSOURCE;
}

/****************************************************************************/
/* Datapath task - handles external messages and services state machine     */
/****************************************************************************/

void datapath_Task( void )
{
    int08 cc;

    while( 1 )
    {
                    /* datapath_Callback() will interpret received messages */
        cc = mbRecv( datapathMbxID, datapathTaskPollPeriod, datapath_Callback );

        if( cc == MBM_NOMSG )      /* timeout -- used to poll state machine */
        {
            datapath_Callback( DPMSG_NONE, 0, 0 );
        }
        else if( cc != PASS )
        {
            dbmsg_ftrace( DBM_ALWAYS, "ccode %d receiving Datapath message\r\n", cc );
        }
    }
}

/****************************************************************************/
/* Datapath message callback                                                */
/****************************************************************************/

static void datapath_Callback( uint16 msgID, uint32 parm, uint32 parm2 )
{
    switch( msgID )
    {
    case DPMSG_INIT:
        datapath_StartDisplay();
        datapathReady = TRUE;
        break;
    
    case DPMSG_GETREADY:
        *((uint32*)parm) = datapathReady;
        break;
        
    case DPMSG_GOTOSTATE:
        datapath_StopCurrentOperation();
        datapath_GotoState( parm );
        break;
    
    case DPMSG_SETCONNECTOR:
        datapath_StopCurrentOperation();
        if( parm < LAST_CONNECTOR )
        {
            sourceDesc.connector = (DP_CONNECTOR) parm;
        }
        else if( parm == NEXT_CONNECTOR )
        {
            datapath_CycleConnector( TRUE );
        }
        source_DisplaySFG( &sourceDesc );
        dispfmt_ConfigureForSource( FALSE );
        datapath_GotoState( BEGIN_SCAN );
        break;
    
    case DPMSG_SETTPG:
        datapath_SetTestPattern( parm );
        break;
  
    case DPMSG_BLANKCOLOR:
        source_SetUserSFGColor( &sourceDesc, parm );
        break;
        
    case DPMSG_OVERSCAN:
        *((int08*)parm2) = dispfmt_SetOverscan( (uint08)parm );
        break;
        
    case DPMSG_MAGNIFY:
        *((int08*)parm2) = dispfmt_SetMagnify( (int16)parm );
        break;

    case DPMSG_PAN:
        *((int08*)parm2) = dispfmt_SetPan( (int16)parm );
        break;        

    case DPMSG_SCAN:
        *((int08*)parm2) = dispfmt_SetScan( (int16)parm );
        break;        

    case DPMSG_IMAGESIZE:
        *((int08*)parm2) = dispfmt_SetImageSize( (uint08)(parm>>16), (int16)(parm & 0xFFFF) );
        break;     

    case DPMSG_ASPECTRATIO:
        *((int08*)parm2) = dispfmt_SetAspectRatio( (uint08)parm );
        break;        

    case DPMSG_IMAGEPOSITION:
        *((int08*)parm2) = dispfmt_SetImagePosition( (int16)parm );
        break;        

    case DPMSG_REARPROJECTION:
        *((int08*)parm2) = dispfmt_SetRearProjection( (uint08)parm );
        break;        

    case DPMSG_CEILINGPROJECTION:
        *((int08*)parm2) = dispfmt_SetCeilingProjection( (uint08)parm );
        break;        

    case DPMSG_KEYSTONEPITCH:
        *((int08*)parm2) = dispfmt_SetKeystoneAnglePitch( (int16)parm );
        break;
        
    case DPMSG_SPLASHCAPTURE:
        *((int08*)parm2) = pictcont_ScreenCapture();
        break;
        
    case DPMSG_RESTORECOLORDEFAULTS:
        pictcont_RestoreColorDefaults( (BOOL)parm );
        break;
        
    case DPMSG_RESTOREDISPLAYDEFAULTS:
        dispfmt_RestoreDefaults();
        break;
  
    case DPMSG_STATE_FLUSHED:
        if( parm != flushIndex )
        {
            return;
        }
        datapath_StateMachineProc( msgID );
        break;

    case DPMSG_STATE_SYNCSDETECTED:
    case DPMSG_STATE_LOCKED:
    case DPMSG_STATE_REACQUIRE:
    case DPMSG_STATE_LOSTLOCK:
    case DPMSG_STATE_TOGGLEBLANK:
    case DPMSG_STATE_SUSPENDSCAN:
    case DPMSG_STATE_RESUMESCAN:
    case DPMSG_STATE_RESYNC:
        datapath_StateMachineProc( msgID );
        break;

    case DPMSG_NONE:                   /* timeout handling used for polling */
                               /* call the polling function for each device */
        switch( sourceDesc.connector )
        {
        case DVI:
            msgID = dvicontrol_Poll( datapathState );
            break;
            
        case VGA:
            msgID = adccontrol_Poll( datapathState );
            break;
        
        case COMPOSITE:
        case SVIDEO:
        case COMPONENT:
            msgID = deccontrol_Poll( datapathState );
            break;
        
        default:
            msgID = DPMSG_NONE;
            break;
        }
                    /* process messages returned from the polling functions */
                    /* note: DPMSG_NONE still checks each state for timeout */
        datapath_StateMachineProc( msgID );
        break;
    
    default:
        datapath_StateMachineProc( msgID );
        break;
    }
}

/****************************************************************************/
/* Datapath state machine message/polling processor                         */
/****************************************************************************/

static void datapath_StateMachineProc( uint08 msgID )
{
    switch( datapathState )
    {
    case SPLASH_AT_STARTUP:
                             /* After time has elapsed, start source search */
        if( datapath_TimeElapsedInState() >= gpConfiguration->Datapath.SplashAtStartupTimeout )
        {
            source_DisplaySFG( &sourceDesc );
            dispfmt_ConfigureForSource( FALSE );
            
            datapath_GotoState( BEGIN_SCAN );
        }
        break;
        
    case SUSPENDED:
        switch( msgID )
        {
        case DPMSG_STATE_TOGGLEBLANK:
            if( !blankScreenEnabled )
            {
                blankScreenEnabled = TRUE;
            }
            else
            {
                blankScreenEnabled = FALSE;
                      /* leave SFG/splash displayed for search -- no action */
                datapath_GotoState( BEGIN_SCAN );  /* restart source search */
            }
            break;
 
        case DPMSG_STATE_RESUMESCAN:
            if( !blankScreenEnabled )
            {
                datapath_GotoState( BEGIN_SCAN );
            }
            break;
        }
        break;
    
    case TPG_DISPLAYED:
        /* an external state change request is the only way to exit suspended state */
        switch( msgID )
        {
        case DPMSG_STATE_TOGGLEBLANK:
            if( !blankScreenEnabled )
            {
                blankScreenEnabled = TRUE;
          
                datapath_StoreSourceDesc();
                source_DisplaySFG( &sourceDesc );
                dispfmt_ConfigureForSource( FALSE );
            }
            else
            {
                              /* remove SFG/splash, display external source */
                DISP_SetChannelSource( SRC_PRIMARY, DISP_EXTERNAL_SOURCE );
                blankScreenEnabled = FALSE;
                
                    /* don't change state, just restore settings for source */
                sourceDesc.activeDisplay = DP_TESTPATTERN;
                datapath_RetrieveSourceDesc();
                dispfmt_ConfigureForSource( FALSE );
            }
            break;
        }
        
        break;

    case BEGIN_SCAN:
        switch( msgID )
        {
        case DPMSG_STATE_FLUSHED:
            datapath_GotoState( LOOK_FOR_SYNCS );
            break;
        

⌨️ 快捷键说明

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