1713 lines
46 KiB
C++
1713 lines
46 KiB
C++
//***************************************************************************
|
||
//
|
||
// FileName:
|
||
// $Workfile: zivabrd.cpp $
|
||
//
|
||
// Author:
|
||
// TOSHIBA [PCS](PSY) Seiichi Nakamura
|
||
// Copyright (c) 1997 TOSHIBA CORPORATION
|
||
//
|
||
// Description:
|
||
//
|
||
//***************************************************************************
|
||
// $Header: /DVD Drivers/ZiVA.WDM/zivabrd.cpp 66 98/10/15 12:20p Yagi $
|
||
// $Modtime: 98/10/13 12:02p $
|
||
// $Nokeywords:$
|
||
//***************************************************************************
|
||
|
||
#include "includes.h"
|
||
#include "ioif.h"
|
||
#include "zivachip.h"
|
||
#include "adv.h"
|
||
#include "mixhal.h"
|
||
// by oka
|
||
#include "userdata.h"
|
||
#include "zivabrd.h"
|
||
#include "timeout.h"
|
||
#include "dramcfg.h"
|
||
|
||
//***************************************************************************
|
||
// IMBoardListItem Help Class
|
||
//***************************************************************************
|
||
CList::CList( void ): pTopItem( NULL ), pCurrentItem( NULL )
|
||
{
|
||
};
|
||
|
||
void CList::Init( void )
|
||
{
|
||
pTopItem = NULL;
|
||
pCurrentItem = NULL;
|
||
};
|
||
|
||
BOOL CList::SearchItem( IMBoardListItem *pItem )
|
||
{
|
||
IMBoardListItem *pCurrent;
|
||
|
||
if( pTopItem == NULL )
|
||
return FALSE;
|
||
|
||
pCurrent = pTopItem;
|
||
while( pCurrent != NULL )
|
||
{
|
||
if( pCurrent == pItem )
|
||
return TRUE;
|
||
pCurrent = pCurrent->GetNext();
|
||
}
|
||
return FALSE;
|
||
};
|
||
|
||
IMBoardListItem *CList::SearchBottomItem( void )
|
||
{
|
||
IMBoardListItem *pCurrent;
|
||
|
||
if( pTopItem == NULL )
|
||
return NULL;
|
||
|
||
pCurrent = pTopItem;
|
||
while( pCurrent->GetNext() != NULL )
|
||
pCurrent = pCurrent->GetNext();
|
||
|
||
return pCurrent;
|
||
};
|
||
|
||
BOOL CList::AddItem( IMBoardListItem *pItem )
|
||
{
|
||
IMBoardListItem *pBottom;
|
||
|
||
if( SearchItem( pItem ) == TRUE )
|
||
return FALSE;
|
||
|
||
pItem->SetNext( NULL );
|
||
|
||
if( pTopItem == NULL )
|
||
{
|
||
pTopItem = pCurrentItem = pItem;
|
||
return TRUE;
|
||
};
|
||
|
||
pBottom = SearchBottomItem();
|
||
|
||
ASSERT( pBottom != NULL );
|
||
|
||
pBottom->SetNext( pItem );
|
||
|
||
return TRUE;
|
||
};
|
||
|
||
BOOL CList::DeleteItem( IMBoardListItem *pItem )
|
||
{
|
||
IMBoardListItem *pCurrent;
|
||
|
||
if( SearchItem( pItem ) == FALSE )
|
||
return FALSE;
|
||
|
||
if( pTopItem == pItem )
|
||
{
|
||
pTopItem = pTopItem->GetNext();
|
||
pItem->SetNext( NULL );
|
||
return TRUE;
|
||
};
|
||
|
||
pCurrent = pTopItem;
|
||
while( pCurrent->GetNext() != pItem )
|
||
pCurrent = pCurrent->GetNext();
|
||
|
||
pCurrent->SetNext( pItem->GetNext() );
|
||
pItem->SetNext( NULL );
|
||
|
||
return TRUE;
|
||
};
|
||
|
||
BOOL CList::SetCurrentToTop( void )
|
||
{
|
||
pCurrentItem = pTopItem;
|
||
return TRUE;
|
||
};
|
||
|
||
IMBoardListItem *CList::GetNext( void )
|
||
{
|
||
IMBoardListItem *pItem;
|
||
pItem = pCurrentItem;
|
||
if( pCurrentItem != NULL )
|
||
pCurrentItem = pCurrentItem->GetNext();
|
||
|
||
return pItem;
|
||
};
|
||
|
||
|
||
//***************************************************************************
|
||
// ZiVA Board Class
|
||
//***************************************************************************
|
||
|
||
//---------------------------------------------------------------------------
|
||
// CMPEGBoardHAL Constructor
|
||
//---------------------------------------------------------------------------
|
||
CMPEGBoardHAL::CMPEGBoardHAL()
|
||
{
|
||
m_pKernelObj = NULL; // KernelService Object
|
||
#ifdef POWERCHECK_BY_FLAG
|
||
m_PowerState = POWERSTATE_OFF;
|
||
#endif
|
||
|
||
m_DMABufferLinearAddr = 0; // DMA buffer addr
|
||
m_DMABufferPhysicalAddr = 0; // DMA buffer addr
|
||
|
||
m_EventIntMask = 0;
|
||
// by oka
|
||
m_ZivaPbtIntMask = 0;
|
||
for(DWORD i=0;i<24;i++)
|
||
m_MaskReference[i]=0;
|
||
m_PowerOnTime = 0;
|
||
m_NeedPowerOnDelay = FALSE;
|
||
|
||
m_WrapperType = WrapperType_VxD; // default WrapperType
|
||
};
|
||
|
||
//---------------------------------------------------------------------------
|
||
// CMPEGBoardHAL Destructor
|
||
//---------------------------------------------------------------------------
|
||
CMPEGBoardHAL::~CMPEGBoardHAL()
|
||
{
|
||
|
||
};
|
||
|
||
//---------------------------------------------------------------------------
|
||
// CMPEGBoardHAL Init
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::Init( WRAPPERTYPE wraptype )
|
||
{
|
||
m_pKernelObj = NULL; // KernelService Object
|
||
m_DMABufferLinearAddr = 0; // DMA buffer addr
|
||
m_DMABufferPhysicalAddr = 0; // DMA buffer addr
|
||
m_EventIntMask = 0;
|
||
|
||
m_WrapperType = wraptype;
|
||
|
||
// by oka
|
||
m_ZivaPbtIntMask = 0;
|
||
for(DWORD i=0;i<24;i++)
|
||
m_MaskReference[i]=0;
|
||
m_PowerOnTime = 0;
|
||
m_NeedPowerOnDelay = FALSE;
|
||
|
||
// by oka
|
||
m_CCRingBufferStart = 0xFFFFFFFF;
|
||
m_CCDataPoint = m_CCDataNumber = m_CCRingBufferNumber = 0;
|
||
m_CCsend_point = m_CCpending = m_CCnumber = 0;
|
||
|
||
m_SendDataEventList.Init();
|
||
m_StartVOBUEventList.Init();
|
||
m_EndVOBEventList.Init();
|
||
m_VUnderFlowEventList.Init();
|
||
m_AUnderFlowEventList.Init();
|
||
m_SPUnderFlowEventList.Init();
|
||
m_VOverFlowEventList.Init();
|
||
m_AOverFlowEventList.Init();
|
||
m_SPOverFlowEventList.Init();
|
||
|
||
m_VideoProp.Init(); // Video Property Set
|
||
m_AudioProp.Init(); // Audio Property Set
|
||
m_SubpicProp.Init(); // Subpic Property Set
|
||
|
||
return HAL_SUCCESS;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IWrapperHAL SetKernelService
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::SetKernelService( IKernelService *pKernelService )
|
||
{
|
||
ASSERT( m_pKernelObj == NULL );
|
||
|
||
m_pKernelObj = pKernelService;
|
||
ioif.Init( m_pKernelObj );
|
||
ziva.Init( m_pKernelObj, &ioif );
|
||
adv7175a.Init( m_pKernelObj, &ioif );
|
||
adv7170.Init( m_pKernelObj, &ioif );
|
||
m_Stream.Init( &ziva , m_pKernelObj , &ioif , this );
|
||
|
||
// LUKE BUG!!!!!!
|
||
{
|
||
BYTE Data;
|
||
|
||
m_pKernelObj->GetPCIConfigData( 0x44, &Data );
|
||
Data = (BYTE)( Data & 0xfb ); // reset bit 2(CLKON)
|
||
m_pKernelObj->SetPCIConfigData( 0x44, Data );
|
||
};
|
||
|
||
// Check sub device ID and select ADV device
|
||
{
|
||
WORD SubDevID;
|
||
m_pKernelObj->GetPCIConfigData( 0x2E, &SubDevID );
|
||
if( SubDevID==0x0001 ) // SantaClara2
|
||
{
|
||
adv = &adv7175a;
|
||
}
|
||
else
|
||
{
|
||
adv = &adv7170;
|
||
}
|
||
}
|
||
|
||
return HAL_SUCCESS;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IWrapperHAL SetSinkWrapper
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::SetSinkWrapper( IMPEGBoardEvent *pMPEGBoardEvent )
|
||
{
|
||
ASSERT( m_pKernelObj != NULL );
|
||
ASSERT( pMPEGBoardEvent != NULL );
|
||
|
||
BOOL rc = FALSE;
|
||
|
||
CAutoHwInt hwintLock( m_pKernelObj );
|
||
|
||
switch( pMPEGBoardEvent->GetEventType() )
|
||
{
|
||
case WrapperEvent_StartVOBU:
|
||
rc = m_StartVOBUEventList.AddItem( pMPEGBoardEvent );
|
||
m_EventIntMask |= ( ZIVA_INT_GOPV | ZIVA_INT_NV );
|
||
break;
|
||
case WrapperEvent_EndVOB:
|
||
rc = m_EndVOBEventList.AddItem( pMPEGBoardEvent );
|
||
m_ZivaPbtIntMask |= PBT_INT_END_VOB; // by oka for PBT_INT_SRC
|
||
m_EventIntMask |= ZIVA_INT_AOR;
|
||
break;
|
||
case WrapperEvent_VUnderFlow:
|
||
rc = m_VUnderFlowEventList.AddItem( pMPEGBoardEvent );
|
||
m_EventIntMask |= ZIVA_INT_UND;
|
||
break;
|
||
case WrapperEvent_AUnderFlow:
|
||
rc = m_AUnderFlowEventList.AddItem( pMPEGBoardEvent );
|
||
m_EventIntMask |= ZIVA_INT_UND;
|
||
break;
|
||
case WrapperEvent_SPUnderFlow:
|
||
rc = m_SPUnderFlowEventList.AddItem( pMPEGBoardEvent );
|
||
m_EventIntMask |= ZIVA_INT_UND;
|
||
break;
|
||
case WrapperEvent_VOverFlow:
|
||
rc = m_VOverFlowEventList.AddItem( pMPEGBoardEvent );
|
||
m_EventIntMask |= ZIVA_INT_BUFF;
|
||
break;
|
||
case WrapperEvent_AOverFlow:
|
||
rc = m_AOverFlowEventList.AddItem( pMPEGBoardEvent );
|
||
m_EventIntMask |= ZIVA_INT_BUFF;
|
||
break;
|
||
case WrapperEvent_SPOverFlow:
|
||
rc = m_SPOverFlowEventList.AddItem( pMPEGBoardEvent );
|
||
m_EventIntMask |= ZIVA_INT_BUFF;
|
||
break;
|
||
// by oka
|
||
case WrapperEvent_ButtonActivate:
|
||
rc = m_ButtonActivteEventList.AddItem( pMPEGBoardEvent );
|
||
m_EventIntMask |= ZIVA_INT_HLI ;
|
||
break;
|
||
case WrapperEvent_NextPicture:
|
||
rc = m_NextPictureEventList.AddItem( pMPEGBoardEvent );
|
||
m_EventIntMask |= ZIVA_INT_PICD ;
|
||
break;
|
||
case WrapperEvent_UserData:
|
||
rc = m_UserDataEventList.AddItem( pMPEGBoardEvent );
|
||
//m_EventIntMask |= ZIVA_INT_USR | ZIVA_INT_VSYNC;
|
||
// by oka
|
||
if (!SetEventIntMask( ZIVA_INT_USR ))
|
||
{
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
}
|
||
break;
|
||
// end
|
||
case WrapperEvent_VSync:
|
||
rc = m_VSyncEventList.AddItem( pMPEGBoardEvent );
|
||
if (!SetEventIntMask( ZIVA_INT_VSYNC ))
|
||
{
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
}
|
||
// ziva.INT_MASK = GetEventIntMask();
|
||
break;
|
||
default:
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
};
|
||
|
||
if( rc == FALSE )
|
||
{
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
};
|
||
return HAL_SUCCESS;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IWrapperHAL UnsetSinkWrapper
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::UnsetSinkWrapper( IMPEGBoardEvent *pMPEGBoardEvent )
|
||
{
|
||
ASSERT( m_pKernelObj != NULL );
|
||
ASSERT( pMPEGBoardEvent != NULL );
|
||
|
||
BOOL rc = FALSE;
|
||
CAutoHwInt hwintLock( m_pKernelObj );
|
||
|
||
switch( pMPEGBoardEvent->GetEventType() )
|
||
{
|
||
case WrapperEvent_StartVOBU:
|
||
rc = m_StartVOBUEventList.DeleteItem( pMPEGBoardEvent );
|
||
m_EventIntMask &= ~( ZIVA_INT_GOPV | ZIVA_INT_NV );
|
||
break;
|
||
case WrapperEvent_EndVOB:
|
||
rc = m_EndVOBEventList.DeleteItem( pMPEGBoardEvent );
|
||
m_EventIntMask &= ~ZIVA_INT_AOR;
|
||
m_ZivaPbtIntMask &= ~PBT_INT_END_VOB; // by oka for PBT_INT_SRC
|
||
break;
|
||
case WrapperEvent_VUnderFlow:
|
||
rc = m_VUnderFlowEventList.DeleteItem( pMPEGBoardEvent );
|
||
m_EventIntMask &= ~ZIVA_INT_UND;
|
||
break;
|
||
case WrapperEvent_AUnderFlow:
|
||
rc = m_AUnderFlowEventList.DeleteItem( pMPEGBoardEvent );
|
||
m_EventIntMask &= ~ZIVA_INT_UND;
|
||
break;
|
||
case WrapperEvent_SPUnderFlow:
|
||
rc = m_SPUnderFlowEventList.DeleteItem( pMPEGBoardEvent );
|
||
m_EventIntMask &= ~ZIVA_INT_UND;
|
||
break;
|
||
case WrapperEvent_VOverFlow:
|
||
rc = m_VOverFlowEventList.DeleteItem( pMPEGBoardEvent );
|
||
m_EventIntMask &= ~ZIVA_INT_BUFF;
|
||
break;
|
||
case WrapperEvent_AOverFlow:
|
||
rc = m_AOverFlowEventList.DeleteItem( pMPEGBoardEvent );
|
||
m_EventIntMask &= ~ZIVA_INT_BUFF;
|
||
break;
|
||
case WrapperEvent_SPOverFlow:
|
||
rc = m_SPOverFlowEventList.DeleteItem( pMPEGBoardEvent );
|
||
m_EventIntMask &= ~ZIVA_INT_BUFF;
|
||
break;
|
||
// by oka
|
||
case WrapperEvent_ButtonActivate:
|
||
rc = m_ButtonActivteEventList.DeleteItem( pMPEGBoardEvent );
|
||
m_EventIntMask &= ~ZIVA_INT_HLI ;
|
||
break;
|
||
case WrapperEvent_NextPicture:
|
||
rc = m_NextPictureEventList.DeleteItem( pMPEGBoardEvent );
|
||
m_EventIntMask &= ~ZIVA_INT_PICD ;
|
||
break;
|
||
case WrapperEvent_UserData:
|
||
rc = m_UserDataEventList.DeleteItem( pMPEGBoardEvent );
|
||
//m_EventIntMask &= ~(ZIVA_INT_USR | ZIVA_INT_VSYNC);
|
||
// by oka
|
||
if (!UnsetEventIntMask( ZIVA_INT_USR ))
|
||
{
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
}
|
||
break;
|
||
// end
|
||
case WrapperEvent_VSync:
|
||
rc = m_VSyncEventList.DeleteItem( pMPEGBoardEvent );
|
||
if (!UnsetEventIntMask( ZIVA_INT_VSYNC ))
|
||
{
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
}
|
||
break;
|
||
default:
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
};
|
||
|
||
if( rc == FALSE )
|
||
{
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
};
|
||
return HAL_SUCCESS;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IWrapperHAL HALHwInterrupt
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::HALHwInterrupt( void )
|
||
{
|
||
ASSERT( m_pKernelObj != NULL );
|
||
|
||
// POWERSTATE PowerState;
|
||
// GetPowerState( &PowerState );
|
||
|
||
// if( PowerState!=POWERSTATE_ON )
|
||
// return( HAL_IRQ_OTHER );
|
||
|
||
WORD wLukeIntFlag;
|
||
|
||
// get interrupt flag register from luke
|
||
wLukeIntFlag = ioif.luke2.IO_INTF;
|
||
|
||
if( wLukeIntFlag==0xFFFF ) // Yagi 97.09.24
|
||
return( HAL_IRQ_OTHER ); //
|
||
|
||
// Clear interrupt flag
|
||
ioif.luke2.IO_INTF = (WORD)(wLukeIntFlag & 0x039f);
|
||
|
||
|
||
// STCREFINT (STC Reference interrupt flag )
|
||
if( (wLukeIntFlag & 0x200 ) != 0 )
|
||
{
|
||
};
|
||
|
||
// MBAT ( Master Abort Occur interrupt flag ) this interrupt is ERROR!!!
|
||
if( (wLukeIntFlag & 0x100 ) != 0 )
|
||
{
|
||
BYTE Data;
|
||
|
||
// Config Data Master and Target Abort clear
|
||
m_pKernelObj->GetPCIConfigData( 0x07, &Data );
|
||
m_pKernelObj->SetPCIConfigData( 0x07, Data );
|
||
|
||
};
|
||
|
||
// STCINT( System timer interrupt flag )
|
||
if( (wLukeIntFlag & 0x80 ) != 0 )
|
||
{
|
||
};
|
||
|
||
// VS_INT( v-sync interrupt flag )
|
||
if( (wLukeIntFlag & 0x10 ) != 0 )
|
||
{
|
||
};
|
||
|
||
// VD_INT( video decoder interrut flag )
|
||
if( (wLukeIntFlag & 0x08 ) != 0 )
|
||
{
|
||
DWORD dwZiVAIntFlag;
|
||
|
||
dwZiVAIntFlag = ziva.INT_STATUS & ziva.INT_MASK;
|
||
|
||
CheckZiVAInterrupt( dwZiVAIntFlag );
|
||
|
||
// Clear ZiVA Interrupt
|
||
ziva.Host_Control = (ziva.Host_Control & 0xFFFFFFFC) | 0x82;
|
||
|
||
// Clear Ziva Interrupt Source
|
||
ziva.HLI_INT_SRC = 0;
|
||
ziva.BUFF_INT_SRC = 0;
|
||
ziva.UND_INT_SRC = 0;
|
||
ziva.AOR_INT_SRC = 0;
|
||
ziva.AEE_INT_SRC = 0;
|
||
ziva.ERR_INT_SRC = 0;
|
||
|
||
ziva.INT_STATUS = 0;
|
||
|
||
};
|
||
|
||
// MST_ABT( bus-master DMA software abort )
|
||
if( (wLukeIntFlag & 0x04 ) != 0 )
|
||
{
|
||
IHALBuffer *pFinishBuff;
|
||
|
||
DWORD Num, DmaNo ;
|
||
|
||
Num = m_Stream.m_DmaFifo.GetItemNum();
|
||
for( DWORD i = 0 ; i < Num ; i ++ )
|
||
{
|
||
m_Stream.m_DmaFifo.GetItem( &DmaNo );
|
||
pFinishBuff = m_Stream.DMAFinish( DmaNo );
|
||
if( pFinishBuff != NULL )
|
||
NotifyEvent( &m_SendDataEventList , (VOID *)pFinishBuff );
|
||
};
|
||
|
||
m_NaviCount = 0;
|
||
m_Stream.m_DmaFifo.Flush();
|
||
|
||
Num = m_Stream.m_HalFifo.GetItemNum();
|
||
for( i = 0 ; i < Num ; i ++ )
|
||
{
|
||
m_Stream.m_HalFifo.GetItem( &pFinishBuff );
|
||
if( pFinishBuff != NULL )
|
||
NotifyEvent( &m_SendDataEventList , (VOID *)pFinishBuff );
|
||
};
|
||
m_Stream.m_HalFifo.Flush();
|
||
|
||
SetMasterAbortEvent();
|
||
};
|
||
|
||
// check Data complete
|
||
if( (wLukeIntFlag & 0x03 ) != 0 )
|
||
{
|
||
BYTE Num = 0;
|
||
if( (wLukeIntFlag & 0x02 ) != 0 )Num ++;
|
||
if( (wLukeIntFlag & 0x01 ) != 0 )Num ++;
|
||
|
||
for( int i = 0 ; i < Num; i ++ )
|
||
{
|
||
DWORD DMANo;
|
||
if( m_Stream.m_DmaFifo.GetItemNum() != 0 )
|
||
{
|
||
m_Stream.m_DmaFifo.GetItem( &DMANo );
|
||
switch( DMANo )
|
||
{
|
||
case 0:
|
||
// MST_INT0( bus-master DMA complete interrupt flag )
|
||
if( (wLukeIntFlag & 0x01 ) != 0 )
|
||
{
|
||
IHALBuffer *pFinishBuff;
|
||
|
||
pFinishBuff = m_Stream.DMAFinish( 0 );
|
||
if( pFinishBuff != NULL )
|
||
NotifyEvent( &m_SendDataEventList , (VOID *)pFinishBuff );
|
||
}
|
||
else
|
||
{
|
||
DBG_PRINTF( ("status ERROR!!! LINE = %d\r\n", __LINE__ ));
|
||
DBG_BREAK();
|
||
};
|
||
break;
|
||
case 1:
|
||
// MST_INT1( bus-master DMA complete interrupt flag )
|
||
if( (wLukeIntFlag & 0x02 ) != 0 )
|
||
{
|
||
IHALBuffer *pFinishBuff;
|
||
|
||
pFinishBuff = m_Stream.DMAFinish( 1 );
|
||
if( pFinishBuff != NULL )
|
||
NotifyEvent( &m_SendDataEventList , (VOID *)pFinishBuff );
|
||
}
|
||
else
|
||
{
|
||
DBG_PRINTF( ("status ERROR!!! LINE = %d\r\n", __LINE__ ));
|
||
DBG_BREAK();
|
||
};
|
||
break;
|
||
default:
|
||
DBG_PRINTF( ("status ERROR!!! LINE = %d\r\n", __LINE__ ));
|
||
ASSERT( 0 == 1 );
|
||
};
|
||
};
|
||
};
|
||
|
||
m_Stream.DeFifo();
|
||
};
|
||
|
||
if( (wLukeIntFlag & 0x039f) != 0 )
|
||
return HAL_IRQ_MINE;
|
||
|
||
return HAL_IRQ_OTHER;
|
||
|
||
};
|
||
|
||
|
||
//---------------------------------------------------------------------------
|
||
// IWrapperHAL QueryDMABufferSize
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::QueryDMABufferSize( DWORD *Size, DWORD *BFlag )
|
||
{
|
||
*Size = 2048; // 2048 byte
|
||
*BFlag = 0;
|
||
return HAL_SUCCESS;
|
||
};
|
||
|
||
//---------------------------------------------------------------------------
|
||
// IWrapperHAL QueryDMABufferSize
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::SetDMABuffer( DWORD LinearAddr, DWORD physicalAddr )
|
||
{
|
||
m_DMABufferLinearAddr = LinearAddr;
|
||
m_DMABufferPhysicalAddr = physicalAddr;
|
||
|
||
return HAL_SUCCESS;
|
||
};
|
||
|
||
//---------------------------------------------------------------------------
|
||
// IWrapperHAL GetCapability 1998.03.27 H.Yagi
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::GetCapability( CAPSTYPE PropType, DWORD *pPropType )
|
||
{
|
||
ASSERT( m_pKernelObj != NULL );
|
||
|
||
HALRESULT ret;
|
||
WORD DeviceID, SubDevID, VenderID, SubVenID;
|
||
ret = HAL_SUCCESS;
|
||
|
||
m_pKernelObj->GetPCIConfigData( 0x00, &VenderID );
|
||
m_pKernelObj->GetPCIConfigData( 0x02, &DeviceID );
|
||
m_pKernelObj->GetPCIConfigData( 0x2C, &SubVenID );
|
||
m_pKernelObj->GetPCIConfigData( 0x2E, &SubDevID );
|
||
|
||
switch( PropType ){
|
||
case VideoProperty:
|
||
*pPropType = VideoProperty_TVSystem_BIT |
|
||
VideoProperty_AspectRatio_BIT |
|
||
VideoProperty_DisplayMode_BIT |
|
||
VideoProperty_Resolution_BIT |
|
||
VideoProperty_DigitalOut_BIT |
|
||
VideoProperty_DigitalPalette_BIT |
|
||
VideoProperty_APS_BIT |
|
||
VideoProperty_ClosedCaption_BIT |
|
||
// VideoProperty_OutputSource_BIT |
|
||
VideoProperty_CompositeOut_BIT |
|
||
VideoProperty_SVideoOut_BIT |
|
||
VideoProperty_SkipFieldControl_BIT |
|
||
VideoProperty_FilmCamera_BIT |
|
||
VideoProperty_SquarePixel_BIT;
|
||
if( VenderID==0x1179 && DeviceID==0x0407 ){ // SantaClara2 or SanJode
|
||
switch( SubDevID ){
|
||
case 0x0001: // SantaClara2
|
||
case 0x0003: // SanJose
|
||
*pPropType |= VideoProperty_OutputSource_BIT;
|
||
break;
|
||
}
|
||
}
|
||
ret = HAL_SUCCESS;
|
||
break;
|
||
|
||
case AudioProperty:
|
||
case SubpicProperty:
|
||
ret = HAL_NOT_IMPLEMENT;
|
||
break;
|
||
|
||
case DigitalVideoOut:
|
||
*pPropType = DigitalVideoOut_ZV_BIT |
|
||
DigitalVideoOut_LPB08_BIT |
|
||
DigitalVideoOut_LPB16_BIT |
|
||
DigitalVideoOut_VMI_BIT |
|
||
DigitalVideoOut_AMCbt_BIT |
|
||
DigitalVideoOut_AMC656_BIT |
|
||
DigitalVideoOut_DAV2_BIT |
|
||
DigitalVideoOut_CIRRUS_BIT ;
|
||
|
||
// Check SubDevID
|
||
switch( SubDevID ){
|
||
case 0x0001: // SantaClara2
|
||
case 0x0003: // SanJose
|
||
*pPropType = DigitalVideoOut_ZV_BIT;
|
||
break;
|
||
}
|
||
ret = HAL_SUCCESS;
|
||
break;
|
||
}
|
||
|
||
return ret;
|
||
};
|
||
|
||
|
||
//---------------------------------------------------------------------------
|
||
// IClassLibHAL GetMixHALStream
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::GetMixHALStream( IHALStreamControl **ppHALStreamControl )
|
||
{
|
||
ASSERT( m_pKernelObj != NULL );
|
||
|
||
*ppHALStreamControl = (IHALStreamControl *)&m_Stream;
|
||
|
||
return HAL_SUCCESS;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IClassLibHAL GetVideoHALStream
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::GetVideoHALStream( IHALStreamControl **ppHALStreamControl )
|
||
{
|
||
return HAL_NOT_IMPLEMENT;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IClassLibHAL GetAudioHALStream
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::GetAudioHALStream( IHALStreamControl **ppHALStreamControl )
|
||
{
|
||
return HAL_NOT_IMPLEMENT;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IClassLibHAL GetSubpicHALStream
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::GetSubpicHALStream( IHALStreamControl **ppHALStreamControl )
|
||
{
|
||
return HAL_NOT_IMPLEMENT;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IClassLibHAL SetSinkClassLib
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::SetSinkClassLib( IMPEGBoardEvent *pMPEGBoardEvent )
|
||
{
|
||
if( pMPEGBoardEvent->GetEventType() == ClassLibEvent_SendData )
|
||
{
|
||
if( m_SendDataEventList.AddItem( pMPEGBoardEvent ) == FALSE )
|
||
{
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
};
|
||
return HAL_SUCCESS;
|
||
}
|
||
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IClassLibHAL UnsetSinkClassLib
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::UnsetSinkClassLib( IMPEGBoardEvent *pMPEGBoardEvent )
|
||
{
|
||
if( pMPEGBoardEvent->GetEventType() == ClassLibEvent_SendData )
|
||
{
|
||
if( m_SendDataEventList.DeleteItem( pMPEGBoardEvent ) == FALSE )
|
||
{
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
};
|
||
return HAL_SUCCESS;
|
||
}
|
||
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IClassLibHAL SetPowerState
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::SetPowerState( POWERSTATE dwSwitch )
|
||
{
|
||
ASSERT( m_pKernelObj != NULL );
|
||
|
||
// CAutoHwInt hwintLock( m_pKernelObj );
|
||
|
||
// POWERSTATE PowerState;
|
||
// GetPowerState( &PowerState );
|
||
|
||
// DBG_PRINTF( ("HAL:SetPowerState: OldState = %d, NewState = %d\n", PowerState, dwSwitch));
|
||
|
||
/*
|
||
if( dwSwitch == PowerState )
|
||
return HAL_SUCCESS;
|
||
*/
|
||
|
||
if( dwSwitch == POWERSTATE_ON )
|
||
{
|
||
BYTE Data;
|
||
|
||
#ifndef _WDMDDK_
|
||
m_pKernelObj->DisableHwInt();
|
||
#endif
|
||
// reset bit 7(PWROFF) and set bit 2(CLKON)
|
||
m_pKernelObj->GetPCIConfigData( 0x44, &Data );
|
||
Data = (BYTE)( (Data & 0x7f) | 0x04 );
|
||
m_pKernelObj->SetPCIConfigData( 0x44, Data );
|
||
|
||
// 10 msec wait.
|
||
m_pKernelObj->Sleep( 10 );
|
||
|
||
// set bit 6(BOFFZ) and bit 5(SRESET)
|
||
m_pKernelObj->GetPCIConfigData( 0x44, &Data );
|
||
Data = (BYTE)( Data | 0x60 );
|
||
m_pKernelObj->SetPCIConfigData( 0x44, Data );
|
||
|
||
// 1 msec wait.
|
||
m_pKernelObj->Sleep( 1 );
|
||
|
||
// reset bit 5(SRESET)
|
||
m_pKernelObj->GetPCIConfigData( 0x44, &Data );
|
||
Data = (BYTE)( Data & 0xdf );
|
||
m_pKernelObj->SetPCIConfigData( 0x44, Data );
|
||
|
||
#ifndef _WDMDDK_
|
||
m_pKernelObj->EnableHwInt();
|
||
#endif
|
||
// Download ZiVA microcode
|
||
switch( m_VideoProp.m_TVSystem )
|
||
{
|
||
case TV_NTSC:
|
||
if( ziva.WriteMicrocode( 0 ) == FALSE )
|
||
{
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
};
|
||
break;
|
||
case TV_PALB: case TV_PALD: case TV_PALG:
|
||
case TV_PALH: case TV_PALI: case TV_PALM:
|
||
case TV_PALN:
|
||
if( ziva.WriteMicrocode( 1 ) == FALSE )
|
||
{
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
};
|
||
break;
|
||
default:
|
||
DBG_BREAK();
|
||
return HAL_ERROR;
|
||
};
|
||
|
||
// HOST_control reset ZiVA and translate Run mode.
|
||
ziva.Host_Control |= 0x00000022;
|
||
|
||
// HOST_OPTIONS set by WrapperType. 98.09.25 by H.Yagi
|
||
if( m_WrapperType == WrapperType_WDM ){
|
||
ziva.HOST_OPTIONS |= 0x010;
|
||
}
|
||
|
||
#ifdef POWERCHECK_BY_FLAG
|
||
m_PowerState = POWERSTATE_ON;
|
||
#endif
|
||
m_Stream.SetTransferMode( HALSTREAM_DVD_MODE );
|
||
|
||
// setup properties
|
||
SetVideoProperty_TVSystem( (void *)&m_VideoProp.m_TVSystem );
|
||
SetVideoProperty_AspectRatio( (void *)&m_VideoProp.m_AspectRatio );
|
||
SetVideoProperty_DisplayMode( (void *)&m_VideoProp.m_DisplayMode );
|
||
SetVideoProperty_Resolution( (void *)&m_VideoProp.m_Size );
|
||
SetVideoProperty_DigitalOut( (void *)&m_VideoProp.m_DigitalOut );
|
||
for( int i = 0; i < 3; i ++ )
|
||
{
|
||
Digital_Palette Pal;
|
||
Pal.Select = (VIDEOPALETTETYPE)i;
|
||
Pal.pPalette = m_VideoProp.m_DigitalPalette[i];
|
||
SetVideoProperty_DigitalPalette( (void *)&Pal );
|
||
};
|
||
|
||
SetVideoProperty_APS( (void *)&m_VideoProp.m_APS );
|
||
SetVideoProperty_ClosedCaption( (void *)&m_VideoProp.m_ClosedCaption );
|
||
SetVideoProperty_OutputSource( (void *)&m_VideoProp.m_OutputSource );
|
||
SetVideoProperty_CompositeOut( (void *)&m_VideoProp.m_CompositeOut );
|
||
SetVideoProperty_SVideoOut( (void *)&m_VideoProp.m_SVideoOut );
|
||
SetVideoProperty_SkipFieldControl( (void *)&m_VideoProp.m_SkipFieldControl );
|
||
|
||
SetAudioProperty_Type( (void *)&m_AudioProp.m_Type );
|
||
SetAudioProperty_Number( (void *)&m_AudioProp.m_StreamNo );
|
||
SetAudioProperty_Volume( (void *)&m_AudioProp.m_Volume );
|
||
SetAudioProperty_Sampling( (void *)&m_AudioProp.m_Sampling );
|
||
SetAudioProperty_Channel( (void *)&m_AudioProp.m_ChannelNo );
|
||
SetAudioProperty_Quant( (void *)&m_AudioProp.m_Quant );
|
||
SetAudioProperty_AudioOut( (void *)&m_AudioProp.m_OutType );
|
||
SetAudioProperty_Cgms( (void *)&m_AudioProp.m_Cgms );
|
||
SetAudioProperty_AnalogOut( (void *)&m_AudioProp.m_AnalogOut );
|
||
SetAudioProperty_DigitalOut( (void *)&m_AudioProp.m_DigitalOut );
|
||
SetAudioProperty_AC3DRangeLowBoost( (void *)&m_AudioProp.m_AC3DRangeLowBoost );
|
||
SetAudioProperty_AC3DRangeHighCut( (void *)&m_AudioProp.m_AC3DRangeHighCut );
|
||
SetAudioProperty_AC3OperateMode( (void *)&m_AudioProp.m_AC3OperateMode );
|
||
|
||
SetSubpicProperty_Number( (void *)&m_SubpicProp.m_StreamNo);
|
||
SetSubpicProperty_Palette( (void *)&m_SubpicProp.m_Palette );
|
||
SetSubpicProperty_Hilight( (void *)&m_SubpicProp.m_Hlight );
|
||
SetSubpicProperty_State( (void *)&m_SubpicProp.m_OutType );
|
||
|
||
// Audio Mute Off
|
||
// ioif.luke2.IO_CONT = ioif.luke2.IO_CONT & 0xffffffb8;
|
||
ioif.luke2.IO_CONT = ( (ioif.luke2.IO_CONT & 0xffffffb8)|0x40 ); // *Luke2Z spec is changed.
|
||
|
||
// power on delay
|
||
m_NeedPowerOnDelay = TRUE;
|
||
m_pKernelObj->GetTickCount( &m_PowerOnTime );
|
||
|
||
//by oka
|
||
m_CCstart = ziva.USER_DATA_BUFFER_START;
|
||
m_CCend = ziva.USER_DATA_BUFFER_END;
|
||
m_OSDStartAddr = ziva.OSD_BUFFER_START;
|
||
m_OSDEndAddr = ziva.OSD_BUFFER_END;
|
||
// end
|
||
|
||
return HAL_SUCCESS;
|
||
};
|
||
|
||
if( dwSwitch == POWERSTATE_OFF )
|
||
{
|
||
BYTE Data;
|
||
|
||
#ifndef _WDMDDK_
|
||
m_pKernelObj->DisableHwInt();
|
||
#endif
|
||
// Audio Mute
|
||
// ioif.luke2.IO_CONT = (ioif.luke2.IO_CONT & 0xffffff00) | 0x40;
|
||
ioif.luke2.IO_CONT = (ioif.luke2.IO_CONT & 0xffffff00); // *Luke2Z spec is changed.
|
||
|
||
// Check ZV Enable bit
|
||
m_pKernelObj->GetPCIConfigData( 0x44, &Data );
|
||
if( (Data & 0x01) != 0 )
|
||
{
|
||
Data = (BYTE)( Data & 0xfe );
|
||
m_pKernelObj->SetPCIConfigData( 0x44, Data );
|
||
};
|
||
|
||
// reset bit 6(BOFFZ)
|
||
m_pKernelObj->GetPCIConfigData( 0x44, &Data );
|
||
Data = (BYTE)( Data & 0xbf );
|
||
m_pKernelObj->SetPCIConfigData( 0x44, Data );
|
||
|
||
// reset bit 2(CLKON) and set bit 7(PWROFF)
|
||
m_pKernelObj->GetPCIConfigData( 0x44, &Data );
|
||
Data = (BYTE)( (Data & 0xfb) | 0x80 );
|
||
m_pKernelObj->SetPCIConfigData( 0x44, Data );
|
||
|
||
#ifdef POWERCHECK_BY_FLAG
|
||
m_PowerState = POWERSTATE_OFF;
|
||
#endif
|
||
|
||
#ifndef _WDMDDK_
|
||
m_pKernelObj->EnableHwInt();
|
||
#endif
|
||
|
||
return HAL_SUCCESS;
|
||
};
|
||
|
||
return HAL_INVALID_PARAM;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IClassLibHAL GetPowerState
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::GetPowerState( POWERSTATE *pSwitch )
|
||
{
|
||
ASSERT( m_pKernelObj != NULL );
|
||
|
||
#ifdef POWERCHECK_BY_FLAG
|
||
*pSwitch = m_PowerState;
|
||
return HAL_SUCCESS;
|
||
#else
|
||
BYTE Data;
|
||
|
||
m_pKernelObj->GetPCIConfigData( 0x44, &Data );
|
||
if( ( Data & 0x80 ) == 0 )
|
||
{
|
||
if( ( ziva.Host_Control & 0xc00000 ) == 0 )
|
||
*pSwitch = POWERSTATE_ON;
|
||
else
|
||
{
|
||
SetPowerState( POWERSTATE_OFF );
|
||
*pSwitch = POWERSTATE_OFF;
|
||
};
|
||
}
|
||
else
|
||
*pSwitch = POWERSTATE_OFF;
|
||
#endif
|
||
|
||
return HAL_SUCCESS;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IClassLibHAL SetSTC
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::SetSTC( DWORD STCValue )
|
||
{
|
||
POWERSTATE PowerState;
|
||
GetPowerState( &PowerState );
|
||
|
||
if( PowerState != POWERSTATE_ON )
|
||
return HAL_POWEROFF;
|
||
|
||
ziva.MRC_PIC_STC = STCValue;
|
||
|
||
return HAL_SUCCESS;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// IClassLibHAL GetSTC
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT CMPEGBoardHAL::GetSTC( DWORD *pSTCValue )
|
||
{
|
||
POWERSTATE PowerState;
|
||
GetPowerState( &PowerState );
|
||
|
||
if( PowerState != POWERSTATE_ON )
|
||
return HAL_POWEROFF;
|
||
|
||
*pSTCValue = ziva.MRC_PIC_STC;
|
||
|
||
return HAL_SUCCESS;
|
||
};
|
||
|
||
//---------------------------------------------------------------------------
|
||
// Send HAL Notify
|
||
//---------------------------------------------------------------------------
|
||
void CMPEGBoardHAL::NotifyEvent( CList *pList, VOID *Ret )
|
||
{
|
||
IMPEGBoardEvent *pEvent;
|
||
|
||
pList->SetCurrentToTop();
|
||
while( ( pEvent = (IMPEGBoardEvent *)pList->GetNext() ) != NULL )
|
||
pEvent->Advice( Ret );
|
||
};
|
||
|
||
|
||
//---------------------------------------------------------------------------
|
||
// Check ZIVA Interrupt(ZiVA Decoder To Host Interrupt Check )
|
||
//---------------------------------------------------------------------------
|
||
void CMPEGBoardHAL::CheckZiVAInterrupt( DWORD dwIntFlag )
|
||
{
|
||
|
||
// ERR: Bitstream data error has been deteced.
|
||
if( ( dwIntFlag & ZIVA_INT_ERR ) != 0 )
|
||
{
|
||
};
|
||
|
||
// PIC-V: Starting display of new picture.
|
||
if( ( dwIntFlag & ZIVA_INT_PICV ) != 0 )
|
||
{
|
||
// by oka
|
||
NotifyEvent( &m_NextPictureEventList, NULL );
|
||
};
|
||
|
||
// GOP-V: Starting display of first I-Picture after GOP startcode.
|
||
if( ( dwIntFlag & ZIVA_INT_GOPV ) != 0 )
|
||
{
|
||
for( DWORD i = 0 ; i < m_NaviCount; i ++ )
|
||
NotifyEvent( &m_StartVOBUEventList, NULL );
|
||
m_NaviCount = 0;
|
||
};
|
||
|
||
// SEQ-V: Starting display of first I-Pucture after sequence start-code.
|
||
if( ( dwIntFlag & ZIVA_INT_SEQV ) != 0 )
|
||
{
|
||
};
|
||
|
||
// END-V: Starting display of last picture before sequence-end startcode.
|
||
if( ( dwIntFlag & ZIVA_INT_ENDV ) != 0 )
|
||
{
|
||
};
|
||
|
||
// PIC-D: Completed picture decode.
|
||
if( ( dwIntFlag & ZIVA_INT_PICD ) != 0 )
|
||
{
|
||
};
|
||
|
||
// VSYNC: VSYNC pulse occurred.
|
||
if( ( dwIntFlag & ZIVA_INT_VSYNC ) != 0 )
|
||
{
|
||
// for VSyncEvent
|
||
NotifyEvent( &m_VSyncEventList, NULL );
|
||
|
||
// by oka
|
||
if( m_VideoProp.m_ClosedCaption == ClosedCaption_On ){
|
||
SendCCData();
|
||
}
|
||
|
||
/****** commented out by H.Yagi 98.05.13 **** start *****
|
||
DWORD Data;
|
||
switch( (DWORD)ziva.CURR_PIC_DISPLAYED )
|
||
{
|
||
case ADDR_PIC1_BUFFER_START:
|
||
Data = ziva.PIC1_TREF_PTYP_FLGS;
|
||
break;
|
||
case ADDR_PIC2_BUFFER_START:
|
||
Data = ziva.PIC2_TREF_PTYP_FLGS;
|
||
break;
|
||
case ADDR_PIC3_BUFFER_START:
|
||
Data = ziva.PIC3_TREF_PTYP_FLGS;
|
||
break;
|
||
default:
|
||
Data = 0;
|
||
};
|
||
|
||
static DWORD SkipCounter = 0;
|
||
static DWORD OldData = 0;
|
||
|
||
if( ( OldData & 0x40 ) == 0 && (Data & 0x40 ) != 0 )
|
||
SkipCounter = 5;
|
||
OldData = Data;
|
||
****** commented out by H.Yagi 98.05.13 **** end *****/
|
||
|
||
/*
|
||
// check Progressive and repeat_first
|
||
if( (Data & 0x50 ) == 0x50 )
|
||
{
|
||
if( ziva.VIDEO_FIELD == 0 ) // check Top field?
|
||
{
|
||
if( (Data & 0x20 ) == 0 && SkipCounter == 0 ) // check Top_Field_first = 1?
|
||
{
|
||
// Skip!!
|
||
SkipCounter = 5;
|
||
};
|
||
}
|
||
else // Bottom field.
|
||
{
|
||
if( (Data & 0x20 ) != 0 && SkipCounter == 0 ) // check Top_Field_first = 0?
|
||
{
|
||
// Skip!!
|
||
SkipCounter = 5;
|
||
};
|
||
};
|
||
};
|
||
*/
|
||
|
||
/****** commented out by H.Yagi 98.05.13 **** start *****
|
||
DWORD Flag;
|
||
ziva.ZiVAReadMemory( 0x210, &Flag );
|
||
|
||
// if( SkipCounter == 4 || SkipCounter ==3 || SkipCounter == 5 )
|
||
// if( Flag != 0 && SkipCounter == Flag )
|
||
if( Flag != 0 )
|
||
{
|
||
if( ( Flag & 0x01 ) != 0 && SkipCounter == 5 )
|
||
ioif.luke2.AVCONT |= 0x02;
|
||
if( ( Flag & 0x02 ) != 0 && SkipCounter == 4 )
|
||
ioif.luke2.AVCONT |= 0x02;
|
||
if( ( Flag & 0x04 ) != 0 && SkipCounter == 3 )
|
||
ioif.luke2.AVCONT |= 0x02;
|
||
if( ( Flag & 0x08 ) != 0 && SkipCounter == 2 )
|
||
ioif.luke2.AVCONT |= 0x02;
|
||
if( ( Flag & 0x10 ) != 0 && SkipCounter == 1 )
|
||
ioif.luke2.AVCONT |= 0x02;
|
||
};
|
||
|
||
if( SkipCounter > 0 )
|
||
SkipCounter --;
|
||
****** commented out by H.Yagi 98.05.13 **** end *****/
|
||
};
|
||
|
||
// AOR: VCD Mode: VCD sector address out of range in CDROM_MPEG mode
|
||
// PBT: DVD Mode: Delect VOBU_E_PTM
|
||
if( ( dwIntFlag & ZIVA_INT_AOR ) != 0 )
|
||
{
|
||
// by oka for END_VOB or NV_LBN
|
||
DWORD PbtInt = (m_ZivaPbtIntMask & ziva.PBT_INT_SRC);
|
||
// END_VOB
|
||
if ((PbtInt & PBT_INT_END_VOB) != 0)
|
||
{
|
||
ziva.INT_MASK &= (ULONG)(~ZIVA_INT_AOR);
|
||
NotifyEvent( &m_EndVOBEventList, NULL );
|
||
}
|
||
};
|
||
|
||
// UND: Input buffer underflow.
|
||
if( ( dwIntFlag & ZIVA_INT_UND ) != 0 )
|
||
{
|
||
DWORD UFlag = ziva.UND_INT_SRC;
|
||
|
||
// Check Video Underflow
|
||
if( (UFlag & 0x01) != 0 )
|
||
NotifyEvent( &m_VUnderFlowEventList , NULL );
|
||
|
||
// Check Audio Underflow
|
||
if( (UFlag & 0x02) != 0 )
|
||
NotifyEvent( &m_AUnderFlowEventList , NULL );
|
||
|
||
// Check SubPic Underflow
|
||
if( (UFlag & 0x04) != 0 )
|
||
NotifyEvent( &m_SPUnderFlowEventList , NULL );
|
||
};
|
||
|
||
// END-C: High-Priority command execution is complete.
|
||
if( ( dwIntFlag & ZIVA_INT_ENDC ) != 0 )
|
||
{
|
||
SetENDCEvent();
|
||
};
|
||
|
||
// RDY-S: Ready for data during CDROM_MPEG mode SlowMotion() or SingleStep() Commands.
|
||
if( ( dwIntFlag & ZIVA_INT_RDYS ) != 0 )
|
||
{
|
||
};
|
||
|
||
// SCN: A Scan() command has caused a transition to PAUSE()
|
||
if( ( dwIntFlag & ZIVA_INT_SCN ) != 0 )
|
||
{
|
||
};
|
||
|
||
// USR: User data is ready
|
||
if( ( dwIntFlag & ZIVA_INT_USR ) != 0 )
|
||
{
|
||
// by oka
|
||
SetUSRData();
|
||
};
|
||
|
||
// END-P: Entered PAUSE state.
|
||
if( ( dwIntFlag & ZIVA_INT_ENDP ) != 0 )
|
||
{
|
||
SetENDPEvent();
|
||
};
|
||
|
||
// END-D: a data transfer is complete, from either a Dump DumpData_VCD(),DumpData_DVD(),or ROMtoDRAM() command.
|
||
if( ( dwIntFlag & ZIVA_INT_ENDD ) != 0 )
|
||
{
|
||
};
|
||
|
||
// A/E/E: Deteced CD submode auto-pause, end of recoerd, or end of file.
|
||
if( ( dwIntFlag & ZIVA_INT_AEE ) != 0 )
|
||
{
|
||
};
|
||
|
||
// BUF-F: An input buffer is full or the video input buffer os fulling CDROM_MPEG mode SlowMotion() and SingleStep() commands.
|
||
if( ( dwIntFlag & ZIVA_INT_BUFF ) != 0 )
|
||
{
|
||
DWORD OFlag = ziva.BUFF_INT_SRC;
|
||
|
||
// Check Video OverFlow
|
||
if( (OFlag & 0x01) != 0 )
|
||
NotifyEvent( &m_VOverFlowEventList , NULL );
|
||
|
||
// Check Audio OverFlow
|
||
if( (OFlag & 0x02) != 0 )
|
||
NotifyEvent( &m_AOverFlowEventList , NULL );
|
||
|
||
// Check SubPic Underflow
|
||
if( (OFlag & 0x04) != 0 )
|
||
NotifyEvent( &m_SPOverFlowEventList , NULL );
|
||
};
|
||
|
||
// SEQ-E: A sequence_end_code startcode has been processed by the MPEG video decoder.
|
||
if( ( dwIntFlag & ZIVA_INT_SEQE ) != 0 )
|
||
{
|
||
};
|
||
|
||
// NV: an NV_PACK has benn received and parsed into DSI and PCI packets.
|
||
if( ( dwIntFlag & ZIVA_INT_NV ) != 0 )
|
||
{
|
||
m_NaviCount ++;
|
||
};
|
||
|
||
// HLI: a button activation highlight has just been displayed.
|
||
if( ( dwIntFlag & ZIVA_INT_HLI ) != 0 )
|
||
{
|
||
// by oka
|
||
DWORD Data;
|
||
Data = ziva.HLI_INT_SRC;
|
||
NotifyEvent( &m_ButtonActivteEventList, (PVOID)Data );
|
||
};
|
||
|
||
// RDY-D: The decoder is ready to receive data.
|
||
if( ( dwIntFlag & ZIVA_INT_RDYD ) != 0 )
|
||
{
|
||
SetRDYDEvent();
|
||
};
|
||
|
||
// Reserved.
|
||
if( ( dwIntFlag & ZIVA_INT_RESERV1 ) != 0 )
|
||
{
|
||
};
|
||
|
||
// AUD: A new audio frequency, sample size, or audio emphasis value was detected.
|
||
if( ( dwIntFlag & ZIVA_INT_AUD ) != 0 )
|
||
{
|
||
};
|
||
|
||
// INIT: Decoder microcode initialization is complete. Status Area is Valid. Decoder is ready to accept host commands.
|
||
if( ( dwIntFlag & ZIVA_INT_INIT ) != 0 )
|
||
{
|
||
};
|
||
|
||
};
|
||
|
||
|
||
//---------------------------------------------------------------------------
|
||
// WaitMasterAbort
|
||
//---------------------------------------------------------------------------
|
||
BOOL CMPEGBoardHAL::WaitMasterAbort( void )
|
||
{
|
||
// Wait Master Abort interrupt
|
||
CTimeOut TimeOut( 5000, 10, m_pKernelObj );
|
||
//#ifdef _WDMDDK_
|
||
// WORD wLukeIntFlag;
|
||
//#endif
|
||
while( TRUE )
|
||
{
|
||
if( IsMasterAbortOccurred() == TRUE )
|
||
break;
|
||
|
||
//#ifdef _WDMDDK_
|
||
// wLukeIntFlag = ioif.luke2.IO_INTF;
|
||
// if( (wLukeIntFlag & 0x04 ) != 0 )
|
||
// break;
|
||
//#endif
|
||
TimeOut.Sleep();
|
||
if( TimeOut.CheckTimeOut() == TRUE )
|
||
{
|
||
DBG_BREAK();
|
||
return FALSE;
|
||
};
|
||
};
|
||
return TRUE;
|
||
};
|
||
|
||
//---------------------------------------------------------------------------
|
||
// WaitWaitRDYD
|
||
//---------------------------------------------------------------------------
|
||
BOOL CMPEGBoardHAL::WaitRDYD( void )
|
||
{
|
||
// Wait RDY-D interrupt
|
||
CTimeOut TimeOut( 5000, 10, m_pKernelObj );
|
||
//#ifdef _WDMDDK_
|
||
// DWORD dwZiVAIntFlag;
|
||
//#endif
|
||
while( TRUE )
|
||
{
|
||
if( IsRDYDOccurred() == TRUE )
|
||
break;
|
||
|
||
//#ifdef _WDMDDK_
|
||
// dwZiVAIntFlag = ziva.INT_STATUS & ziva.INT_MASK;
|
||
// if( ( dwZiVAIntFlag & ZIVA_INT_RDYD ) != 0 )
|
||
// break;
|
||
//#endif
|
||
TimeOut.Sleep();
|
||
if( TimeOut.CheckTimeOut() == TRUE )
|
||
{
|
||
DBG_BREAK();
|
||
return FALSE;
|
||
};
|
||
};
|
||
return TRUE;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// WaitWaitENDP
|
||
//---------------------------------------------------------------------------
|
||
BOOL CMPEGBoardHAL::WaitENDP( void )
|
||
{
|
||
// Wait END-P interrupt
|
||
CTimeOut TimeOut( 5000, 10, m_pKernelObj );
|
||
//#ifdef _WDMDDK_
|
||
// DWORD dwZiVAIntFlag;
|
||
//#endif
|
||
while( TRUE )
|
||
{
|
||
if( IsENDPOccurred() == TRUE )
|
||
break;
|
||
|
||
//#ifdef _WDMDDK_
|
||
// dwZiVAIntFlag = ziva.INT_STATUS & ziva.INT_MASK;
|
||
// if( ( dwZiVAIntFlag & ZIVA_INT_ENDP ) != 0 )
|
||
// break;
|
||
//#endif
|
||
TimeOut.Sleep();
|
||
if( TimeOut.CheckTimeOut() == TRUE )
|
||
{
|
||
DBG_BREAK();
|
||
return FALSE;
|
||
};
|
||
};
|
||
return TRUE;
|
||
};
|
||
//---------------------------------------------------------------------------
|
||
// WaitWaitENDC
|
||
//---------------------------------------------------------------------------
|
||
BOOL CMPEGBoardHAL::WaitENDC( void )
|
||
{
|
||
// Wait END-C interrupt
|
||
CTimeOut TimeOut( 5000, 10, m_pKernelObj );
|
||
//#ifdef _WDMDDK_
|
||
// DWORD dwZiVAIntFlag;
|
||
//// DWORD StatusPointer,Status;
|
||
//#endif
|
||
while( TRUE )
|
||
{
|
||
if( IsENDCOccurred() == TRUE )
|
||
break;
|
||
|
||
//#ifdef _WDMDDK_
|
||
// dwZiVAIntFlag = ziva.INT_STATUS & ziva.INT_MASK;
|
||
// if( ( dwZiVAIntFlag & ZIVA_INT_ENDC ) != 0 )
|
||
// break;
|
||
//
|
||
///*
|
||
// StatusPointer = Status = 0;
|
||
// ziva.ZiVAReadMemory(ADDR_STATUS_ADDRESS, &StatusPointer);
|
||
// if( StatusPointer != 0 )
|
||
// {
|
||
// ziva.ZiVAReadMemory(StatusPointer, &Status);
|
||
// if( Status == 0x04 )
|
||
// return TRUE;
|
||
// };
|
||
//*/
|
||
//#endif
|
||
TimeOut.Sleep();
|
||
if( TimeOut.CheckTimeOut() == TRUE )
|
||
{
|
||
DBG_BREAK();
|
||
return FALSE;
|
||
};
|
||
};
|
||
return TRUE;
|
||
};
|
||
|
||
//---------------------------------------------------------------------------
|
||
//
|
||
//---------------------------------------------------------------------------
|
||
void CMPEGBoardHAL::ClearMasterAbortEvent( void ){ fMasterAbortFlag = FALSE; };
|
||
void CMPEGBoardHAL::SetMasterAbortEvent( void ){ fMasterAbortFlag = TRUE; };
|
||
BOOL CMPEGBoardHAL::IsMasterAbortOccurred( void ) { return fMasterAbortFlag; };
|
||
|
||
void CMPEGBoardHAL::ClearRDYDEvent( void ){ fRDYDFlag = FALSE; };
|
||
void CMPEGBoardHAL::SetRDYDEvent( void ){ fRDYDFlag = TRUE; };
|
||
BOOL CMPEGBoardHAL::IsRDYDOccurred( void ) { return fRDYDFlag; };
|
||
|
||
void CMPEGBoardHAL::ClearENDPEvent( void ){ fENDPFlag = FALSE; };
|
||
void CMPEGBoardHAL::SetENDPEvent( void ){ fENDPFlag = TRUE; };
|
||
BOOL CMPEGBoardHAL::IsENDPOccurred( void ) { return fENDPFlag; };
|
||
|
||
void CMPEGBoardHAL::ClearENDCEvent( void ){ fENDCFlag = FALSE; };
|
||
void CMPEGBoardHAL::SetENDCEvent( void ){ fENDCFlag = TRUE; };
|
||
BOOL CMPEGBoardHAL::IsENDCOccurred( void ) { return fENDCFlag; };
|
||
|
||
//---------------------------------------------------------------------------
|
||
// CMPEGBoardHAL::SetUSRData
|
||
// by oka Closed Caption
|
||
//---------------------------------------------------------------------------
|
||
inline void CMPEGBoardHAL::SetUSRData( void )
|
||
{
|
||
|
||
// USER_DATA_WRITE<54>̃A<CC83>h<EFBFBD><68><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD><6F>
|
||
|
||
DWORD read, write;
|
||
read = ziva.USER_DATA_READ;
|
||
write = ziva.USER_DATA_WRITE;
|
||
|
||
// check header
|
||
DWORD header,data_size;
|
||
// DWORD header_type;
|
||
ziva.ZiVAReadMemory(read, &header);
|
||
if (read == 0xFFFFFFFF)
|
||
{
|
||
// FIFO overflow
|
||
//RETAILMSG(ZONE_TRACE,(TEXT("FIFO overflow \r\n")));
|
||
ziva.USER_DATA_READ = write;
|
||
//DBG_BREAK();
|
||
return;
|
||
}
|
||
|
||
ASSERT((header & 0xFFFF0000) >> 16 == 0xFEED);
|
||
// header_type = (header & 0x0000F000) >> 12;
|
||
data_size = (header & 0x00000FFF);
|
||
|
||
// RETAILMSG(1,(TEXT("start=%08X end=%08X read=%X header=%08X header_type=%01d size=%04X \r\n"),
|
||
// start, end, read, header, header_type, data_size ));
|
||
|
||
m_UserData.Init();
|
||
|
||
DWORD data_tmp;
|
||
DWORD point;
|
||
point = read;
|
||
|
||
DWORD count;
|
||
for(count=0;count<data_size;count+=4)
|
||
{
|
||
// for ring buffer
|
||
if (point+4 >= m_CCend)
|
||
{
|
||
point = m_CCstart;
|
||
} else {
|
||
point += 4;
|
||
}
|
||
|
||
// Get user data
|
||
ziva.ZiVAReadMemory(point, &data_tmp);
|
||
|
||
if (!(m_UserData.Set(data_tmp)))
|
||
{
|
||
//RETAILMSG(ZONE_ERROR, (TEXT("CMPEGBoardHAL::SetUSRData UserData size too Big!!\r\n")));
|
||
DBG_BREAK();
|
||
break;
|
||
}
|
||
}
|
||
|
||
// check line21 indicator (first user data must be line21 data in DVD Book)
|
||
if(!((m_UserData.Get(0) == 0x43) && (m_UserData.Get(1) == 0x43)))
|
||
{
|
||
//Not Line21 data
|
||
//DBG_BREAK();
|
||
//RETAILMSG(ZONE_ERROR,(TEXT("Not Line21 Data \r\n")));
|
||
ziva.USER_DATA_READ = write;
|
||
return;
|
||
}
|
||
|
||
// check top_field_flag_of_gop
|
||
// GOP<4F>̓<EFBFBD><CC93>̃t<CC83>B<EFBFBD>[<5B><><EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>킵<EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>B
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD>𑗂<EFBFBD><F0919782>Ȃ<EFBFBD><C882>Ƃ<EFBFBD><C682>ׂĂ<D782><C482>\<5C><><EFBFBD><EFBFBD><EFBFBD>邱<EFBFBD>Ƃ<EFBFBD><C682>ł<EFBFBD><C582>Ȃ<EFBFBD><C882>B
|
||
// if((data[4] & 0x80) == 0)
|
||
// {
|
||
// // data size error
|
||
// DBG_BREAK();
|
||
// DEBUGMSG(ZONE_TRACE,(TEXT("Bottom field data!!\r\n")));
|
||
// ziva.USER_DATA_READ = write;
|
||
// return;
|
||
// } else {
|
||
// ziva.USER_DATA_READ = write;
|
||
// return;
|
||
// }
|
||
|
||
|
||
DWORD number_of_data;
|
||
number_of_data = m_UserData.Get(4) & 0x3F;
|
||
|
||
// user_data_start_code -> number_of_displayed_field_gop = 5byte
|
||
if ((number_of_data * 3) + 5 > data_size)
|
||
{
|
||
// data size error
|
||
DBG_BREAK();
|
||
//DEBUGMSG(ZONE_ERROR,(TEXT("line21 data size error \r\n")));
|
||
return;
|
||
}
|
||
|
||
// <20>L<EFBFBD><4C><EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40>ɓo<C993>^
|
||
count = 0;
|
||
point = m_CCDataPoint;
|
||
m_CCRingBufferNumber = 0;
|
||
while(count<number_of_data)
|
||
{
|
||
if(m_UserData.Get(5+count*3) != 0xFF)
|
||
{
|
||
// line21_switch off
|
||
count++;
|
||
} else {
|
||
// RETAILMSG(1,(TEXT("%c%c"),(data[count*3+6] & 0x7f),(data[count*3+7] & 0x7f)));
|
||
m_CCData[m_CCDataPoint] = (DWORD)(m_UserData.Get(count*3+6)<<8)
|
||
| m_UserData.Get(count*3+7);
|
||
m_CCRingBufferNumber++;
|
||
count++;
|
||
m_CCDataPoint++;
|
||
if (m_CCDataPoint >= CC_DATA_SIZE)
|
||
{ m_CCDataPoint = 0; }
|
||
}
|
||
}
|
||
m_CCRingBufferStart = point;
|
||
|
||
NotifyEvent( &m_UserDataEventList, &m_UserData );
|
||
|
||
// RETAILMSG(1,(TEXT("\r\n")));
|
||
// DEBUGMSG(ZONE_TRACE,(TEXT("line21 data size 0x%x ring start 0x%x num0x%x \r\n"),
|
||
// m_CCDataNumber,
|
||
// m_CCRingBufferStart,m_CCRingBufferNumber));
|
||
|
||
// USER_DATA_READ<41><44>USER_DATA_WRITE<54>̃A<CC83>h<EFBFBD><68><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>݁AZiVA<56>Ƀf<C983>[<5B>^<5E>̓]<5D><><EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD>
|
||
// <20>m<EFBFBD>点<EFBFBD><E782B9><EFBFBD>B
|
||
ziva.USER_DATA_READ = write;
|
||
return;
|
||
}
|
||
|
||
//---------------------------------------------------------------------------
|
||
// CMPEGBoardHAL::SendCCData
|
||
// m_CCDataNumber <09><><EFBFBD>ꂩ<EFBFBD>瑗<EFBFBD><E79197><EFBFBD>ׂ<EFBFBD><D782>f<EFBFBD>[<5B>^<5E>̃T<CC83>C<EFBFBD>Y
|
||
// by oka for Closed Caption
|
||
//---------------------------------------------------------------------------
|
||
inline void CMPEGBoardHAL::SendCCData( void )
|
||
{
|
||
// <20>Е<EFBFBD><D095>̃t<CC83>B<EFBFBD>[<5B><><EFBFBD>h<EFBFBD>ł̂ݏ<CC82><DD8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BEven<65>̂Ƃ<CC82><C682><EFBFBD>Odd<64>̃f<CC83>[<5B>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD><CC82><EFBFBD><EFBFBD>z
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƂłȂ<C582><C882>B<EFBFBD>H<EFBFBD>H<EFBFBD>H
|
||
if( ziva.VIDEO_FIELD == 0 ) // check Top field?
|
||
{
|
||
// RETAILMSG(1,(TEXT("top field\r\n")));
|
||
// return;
|
||
} else {
|
||
return;
|
||
}
|
||
|
||
// <20>^<5E>C<EFBFBD>~<7E><><EFBFBD>O<EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ă͐V<CD90>K<EFBFBD>f<EFBFBD>[<5B>^<5E>̓o<CC93>^<5E>̂<EFBFBD><CC82>Ƃɏ<C682><C98F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ق<EFBFBD><D982><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>B
|
||
if(m_CCnumber < m_CCDataNumber)
|
||
{
|
||
adv->SetClosedCaptionData( m_CCData[m_CCsend_point] );
|
||
m_CCsend_point++;
|
||
m_CCnumber++;
|
||
} else {
|
||
adv->SetClosedCaptionData( 0x00008080 );
|
||
}
|
||
// Ring<6E>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40>̐ݒ<CC90>
|
||
if (m_CCsend_point >= CC_DATA_SIZE)
|
||
m_CCsend_point = 0;
|
||
|
||
// <20><><EFBFBD>̃o<CC83>b<EFBFBD>t<EFBFBD>@<40>̊J<CC8A>n<EFBFBD>ʒu<CA92><75><EFBFBD>^<5E><><EFBFBD>炽
|
||
if (m_CCRingBufferStart != 0xFFFFFFFF)
|
||
{
|
||
//<2F>O<EFBFBD>̃f<CC83>[<5B>^<5E>̓]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ׂďI<C48F><49><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD>
|
||
if (m_CCnumber == m_CCDataNumber)
|
||
{
|
||
ASSERT(m_CCsend_point == m_CCRingBufferStart);
|
||
m_CCsend_point = m_CCRingBufferStart;
|
||
m_CCDataNumber = m_CCRingBufferNumber;
|
||
}
|
||
else // <20>f<EFBFBD>[<5B>^<5E>̓]<5D><><EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><C282>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>̏<EFBFBD><CC8F><EFBFBD>
|
||
{
|
||
m_CCpending = m_CCDataNumber - m_CCnumber;
|
||
|
||
// <20><><EFBFBD>ꂩ<EFBFBD>瑗<EFBFBD><E79197><EFBFBD>ׂ<EFBFBD><D782>f<EFBFBD>[<5B>^<5E>̐<EFBFBD>
|
||
m_CCDataNumber = m_CCpending + m_CCRingBufferNumber;
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>f<EFBFBD>[<5B>^<5E><><EFBFBD>R<EFBFBD>O<EFBFBD><EFBFBD><F092B482><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><C582>Ȃ<EFBFBD><C882>̂Ŏ̂Ă<CC82><C482>B
|
||
if (m_CCpending > 30)
|
||
{
|
||
//RETAILMSG(ZONE_ERROR,(TEXT("pendig data is too large \r\n")));
|
||
m_CCpending = 0;
|
||
m_CCDataNumber = m_CCRingBufferNumber;
|
||
m_CCsend_point = m_CCRingBufferStart;
|
||
}
|
||
}
|
||
// if (m_CCpending > 0)
|
||
// {
|
||
// RETAILMSG(ZONE_TRACE,(TEXT("send_p %02x num %02x RingStart %02x RingNumber %02x "),
|
||
// m_CCsend_point,m_CCnumber, m_CCRingBufferStart,m_CCRingBufferNumber));
|
||
//
|
||
// RETAILMSG(ZONE_TRACE,(TEXT("pend %02x CCDataNumber %04x \r\n"),
|
||
// m_CCpending,m_CCDataNumber));
|
||
// }
|
||
m_CCRingBufferStart = 0xFFFFFFFF;
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>[<5B>^<5E>̐<EFBFBD><CC90>̏<EFBFBD><CC8F><EFBFBD><EFBFBD><EFBFBD>
|
||
m_CCnumber = 0;
|
||
} else {
|
||
|
||
//<2F>]<5D><><EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><C282>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>f<EFBFBD>[<5B>^<5E><><EFBFBD>Ƃ<C682>
|
||
while((m_CCpending > 0) && (m_CCData[m_CCsend_point] == 0x00008080))
|
||
{
|
||
m_CCsend_point++;
|
||
m_CCpending--;
|
||
m_CCnumber++;
|
||
if (m_CCsend_point >= CC_DATA_SIZE)
|
||
{ m_CCsend_point = 0;}
|
||
}
|
||
}
|
||
|
||
// if(m_CCnumber > m_CCDataNumber)
|
||
// {
|
||
// RETAILMSG(1,(TEXT("m_CCnumber > m_CCDataNumber \r\n")));
|
||
// DBG_BREAK();
|
||
// }
|
||
ASSERT(m_CCnumber <= m_CCDataNumber);
|
||
|
||
return;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
// CMPEGBoardHAL::SetEventIntMask
|
||
// mask <09>g<EFBFBD>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>x<EFBFBD><78><EFBFBD>g<EFBFBD>r<EFBFBD>b<EFBFBD>g<EFBFBD>𗧂Ă<F097A782><C482>l
|
||
// by oka
|
||
//---------------------------------------------------------------------------
|
||
BOOL CMPEGBoardHAL::SetEventIntMask( DWORD mask )
|
||
{
|
||
// ZiVA use 0-23 bit
|
||
if ( (mask & 0xff000000) != 0)
|
||
return FALSE;
|
||
|
||
DWORD tmp_mask;
|
||
tmp_mask = mask;
|
||
for ( DWORD bit = 0; bit < 24 ; bit++ )
|
||
{
|
||
if( (tmp_mask & 0x00000001) != 0 )
|
||
{
|
||
m_MaskReference[bit]++;
|
||
}
|
||
tmp_mask = tmp_mask >> 1;
|
||
}
|
||
m_EventIntMask |= mask;
|
||
|
||
return TRUE;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
// CMPEGBoardHAL::UnsetEventIntMask
|
||
// mask <09>g<EFBFBD>p<EFBFBD>s<EFBFBD>ɂ<C282><C982><EFBFBD><EFBFBD>C<EFBFBD>x<EFBFBD><78><EFBFBD>g<EFBFBD>r<EFBFBD>b<EFBFBD>g<EFBFBD>𗧂Ă<F097A782><C482>l
|
||
// by oka
|
||
//---------------------------------------------------------------------------
|
||
BOOL CMPEGBoardHAL::UnsetEventIntMask( DWORD mask )
|
||
{
|
||
// ZiVA use 0-23 bit
|
||
if ( (mask & 0xff000000) != 0)
|
||
return FALSE;
|
||
|
||
DWORD tmp_mask = 0;
|
||
for ( DWORD bit = 0; bit < 24 ; bit++ )
|
||
{
|
||
if( (mask & 0x00000001) != 0 )
|
||
{
|
||
if ( m_MaskReference[bit] < 2 )
|
||
{
|
||
tmp_mask |= (0x1 << bit);
|
||
m_MaskReference[bit] = 0;
|
||
} else {
|
||
m_MaskReference[bit]--;
|
||
}
|
||
}
|
||
mask = (mask >> 1);
|
||
}
|
||
m_EventIntMask &= (DWORD)~(tmp_mask);
|
||
|
||
return TRUE;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
//
|
||
//---------------------------------------------------------------------------
|
||
//***************************************************************************
|
||
// End of Zivabrd.cpp
|
||
//***************************************************************************
|
||
|