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

📄 servo.h

📁 车载电子影音系统dvd播放系统原程序代码
💻 H
字号:
/**************************************************************************

        (C)Copyright Cheertek Inc. 2002-2003,
           D300, all right reserved

        Product : WinDVD Firmware

        Date    : 1999.8.26
        Purpose : Provide all SERVO information
        Sources :

****************************************************************************/

#ifndef __SERVO_H__
#define __SERVO_H__
//MICKYATA
#ifdef __cplusplus
        extern  "C"     {
#endif

//LJY1.22, LJY1.11b, for sector control(CDDA) and OSD time display(CDDA & VCD)
#define SECTOR_512  512 //2048/4=512DW
#define SECTOR_588  588 //2352/4=588DW
#define SECTOR_581  581 //2324/4=581DW, LJY1.24a, for VCD/SVCD 
#define SECTOR_607  607 //(2352+4*19)/5=607DW, For non-CDG RISC code, "55805580" will be inserted per 128bytes.
#define SECTOR_784  784 //((24B data+8B subcode)*98)/4=784DW, RISC won't insert "55805580"
//LJY1.23, share same define for CDG & pure CDDA
#ifdef SUPPORT_CDDA_WITH_SUBCODE
#define SECTOR_CDDA     SECTOR_784
#else
#define SECTOR_CDDA     SECTOR_588 //55805580+2352B for pure CDDA
#endif
// Global Variables
extern BYTE    __bCurrentIF; // using ATAPI_IF 
extern BYTE    __bServoAutoCtrl;

//----------------------------------------------
//              SERVO definition
//----------------------------------------------
#define DISC_TYPE_NONE          0
#define DISC_TYPE_DVD           1
#define DISC_TYPE_DVD_ROM       (0x00|DISC_TYPE_DVD)
#define DISC_TYPE_DVD_RAM       (0x10|DISC_TYPE_DVD)
#define DISC_TYPE_DVD_R         (0x20|DISC_TYPE_DVD)
#define DISC_TYPE_DVD_RW        (0x30|DISC_TYPE_DVD)
#define DISC_TYPE_DVD_PLUS_RW   (0x90|DISC_TYPE_DVD)
#define DISC_TYPE_VCD           0x14    // 2
#define DISC_TYPE_CDI           0x0A    // 3
#define DISC_TYPE_CDDA          0x04
#define DISC_TYPE_UNKNOWN       0xff

#define SERVO_MODE_CDROM        0x08
#ifdef CDDA_WAITSERVO
#define SERVO_MODE_AUDIO        0x10
#else
#define SERVO_MODE_AUDIO        0x00
#endif

// *** MULTI_DISC; Compatible with multiple-disc
#define SERVO_HAVEDISC          0x01
#define SERVO_NODISC            0x00
#define SERVO_WAITSTABLE_TIMEOUT 0x02 //LJY1.05, it means servo cannot focus-on for power-on initial.
#define SERVO_USER_ABORT         0x03 //LJY1.05-2
#define SERVO_LOADDISC_FAILED	0x04 //LJY1.25, Support opentray when servo fails to close tray.
#define SERVO_COMMAND_FAIL      0xff

// Error Status
#define ERR_RESPONSE            0xff
#define ERR_NOFOUND             0
#define ERR_SERVO_READ          1
#define ERR_SERVO_JUMP          2
#define ERR_SERVO_TRAY          3
#define ERR_SERVO_SET           4
#define ERR_SERVO_INFO          5

#define SERVO_END_TIME          0x7fffffffL

// TCC037, for control threshold
#define	SERVO_THRESHOLD_DISABLE		0x01
#define	SERVO_THRESHOLD_ENABLE		0x02
#define	SERVO_THRESHOLD_VIDEO		0x03
#define	SERVO_THRESHOLD_AUDIO		0x04
/////////////////////////////////
//LJY1.25, Support opentray when servo fails to close tray.
#define TRAY_OPENED        0x00
#define TRAY_OPENING     0x04
#define TRAY_CLOSED       0x08
#define TRAY_CLOSING     0x0C

////////////////////////////////////////////
// TCC172, For returning error status of the atapi command
#define SERVO_ERROR_NONE    		0	// No Error
#define SERVO_ERROR_CMD     		1	// Command Error
#define SERVO_ERROR_NOTREADY		2	// Device not ready(2/xx/xx)
#define SERVO_ERROR_NODISC     		3	// No Disc in tray(2/3a/xx)
#define SERVO_ERROR_LOADDISC     	4	// Loading disc (2/4/xx)
#define SERVO_ERROR_AUTH	     	5	// Authentication Error
#define SERVO_ERROR_INCOMPAT     6		// Imcompatible disc type. Usually incorrect command
#define SERVO_ERROR_TIMEOUT     	7	// Timout Error. (atapi timeout)
#define SERVO_ERROR_READ     		8	// Read Command Error
#define SERVO_ERROR_DMA     		9	// DMA Error (DMA timeout w/o buffer full)
#define SERVO_ERROR_DEAD     		10	// Dead Error (DMA timeout+buffer full)
#define SERVO_ERROR_USERABORT		11	// Means the command isn't issued/finished by IR key abort
#define SERVO_ERROR_UNKNOWN			12	// Unknow Error Type

////////////////////////////////////////////
// TCC155, default a/v threshold
#define SERVO_DEFAULT_VIDEO_THRESHOLD   0xa000
//Kevin0.90, modify
//Currently, audio buffer size=8KDW and audio buffer underflow threshold=5KDW. The 1KHz-AC3 break noise may be due to the RISC performance issue for that RISC has to frequently deal with the input bitstream when audio buffer remainder is less than the  underflow threshold.
//=> Temp. sloution: use a small audio underflow threshold, say 1.25KDW.  The setting seems OK for other DVD tiltes (AC3/DTS/LPCM). Integrate into DVD_090.
//#define SERVO_DEFAULT_AUDIO_THRESHOLD       0x1400/4  

// Brian0.90, before this issue is cleared, use the original value.
#define SERVO_DEFAULT_AUDIO_THRESHOLD   0x1400  

////////////////////////////////////////////
// TCC170, power mode for atapi
// wyc.171-3, modify the parameter for SERVO_PowerMode
#define SERVO_POWER_STOP          0x0
#define SERVO_POWER_IDLE          0x20
#define SERVO_POWER_STANDBY       0x30
#define SERVO_POWER_SLEEP         0x50
#define SERVO_POWER_START         0x1
////////////////////////////////////////////
// wyc.170-2, add the define for CDDA audio de-emphasis
#define SERVO_CDDA_NONE             0
#define SERVO_CDDA_DEEMPHASIS       1
#define SERVO_CDDA_NON_DEEMPHASIS     2
////////////////////////////////////////////

//LJY0.95, wait stable mode
#define WAITSTABLE_SHOW_INFO            1
#define WAITSTABLE_NOT_SHOW_INFO        2
#define WAITSTABLE_SLEDGE                 3
#define SERVO_STATE_SLEDGE                4 //servo state of sledge-in is 4
#define WAITSTABLE_SLEDGE_SHOW_BAR      5 //LJY1.07, show loading status bar

//LJY2.37, port KCHong's code
#ifdef SUPPORT_PORTABLE_PROJECT
#define TOP_OPENED                     0
#define TOP_CLOSED                     1
#define TOP_OPENING                    2
#define TOP_CLOSING                    3
#define TOP_UNSTABLE                   4
#endif // #ifdef SUPPORT_PORTABLE_DVD_TOP_LOADING

//LJY1.10
#define AUDIO_DATA                          0x00
#define CONTINUOUS_DATA                0x01
#define INTERPOLATION_DISABLE       0x02 //bit1, for interpolation control
#define SUBCHANNEL_ENABLE           0x04  //bit2, for subcode control


// Structure Definition
// wyc.172r, define a new structure for scan title key usage and the purpose is to reduce one array.
typedef struct
{
 DWORD TitKey[2];  // Record the frame of the track start address
} SCAN_TITLE;

typedef struct
{
 BYTE Trk;  // Record the track number
 BYTE Ctl;  // Record the attribute of the track
 BYTE Min;  // Record the minute of the track start address
 BYTE Sec;  // Record the second of the track start address
 BYTE Frm;  // Record the frame of the track start address
} TRKINFO;

typedef struct
{
 BYTE bFirstTrack;  // Record the first track of the session
 BYTE bLastTrack;  // Record the last track of the session
 DWORD dwLeadOutPos;  // Record the leadout position of the session
} SESSIONINFO;

typedef struct {
    BYTE        bADRControl;
    BYTE        bTrackNum;
    BYTE        bPoint;
    BYTE        bRelMin;
    BYTE        bRelSec;
    BYTE        bRelFrame;
    BYTE        bReserved;
    BYTE        bAbsMin;
    BYTE        bAbsSec;
    BYTE        bAbsFrame;
} Q_CODE;

typedef struct tagCOPYINFO
{
    BYTE    bCPS_Type ;  // Store the Copy Protect Type of the dvd title
    BYTE    bRegionInfo ;  // Stores the Region Code Info of the dvd title
    BYTE    bCGMS ; // Store the Copy Generation Management System
} COPYINFO ;

#define SERVO_CGMS_NO_RESTRICTION   0
#define SERVO_CGMS_RESERVED         1
#define SERVO_CGMS_ONE_COPY         2
#define SERVO_CGMS_NO_COPY          3
#define SERVO_CGMS_NONE             4

BIT  SERVO_Reset(BYTE bShowBar); //LJY1.07, pass parameter for status bar display
BIT SERVO_Init(void);       // initial servo status when change title

BIT SERVO_OpenTray( void );
BIT SERVO_CloseTray( void );
BYTE SERVO_CheckTrayStatus(void); //LJY1.25 
//BYTE CDROM_GetDiscStatus( void );
BYTE SERVO_GetDiscStatus(PBYTE pStatus);
//BYTE CDROM_ReadTOC( BYTE );
BIT SERVO_ReadTOC( BYTE );
BIT SERVO_Stop(void);
BIT SERVO_Pause(void);
BIT SERVO_Abort(void) ;
BIT SERVO_PowerMode (BYTE bMode) ;
// wyc.170
BYTE SERVO_AudioDeemphasis(WORD wPlayItem);
 
//BIT CDROM_GoTime( DWORD );
BIT SERVO_ReadSectors( DWORD dwStartPos, DWORD dwEndPos );
BIT     SERVO_SetSectors ( DWORD dwStartPos, DWORD dwEndPos );  // ** TCH0.27;
BOOL    SERVO_EnableRunning ( BIT bGo );    // ** DVD-TCH0.25;

//BIT CDROM_GetTime( DWORD *);
BIT SERVO_GetCurrentPos( PDWORD pCurrentPos );
//DWORD SERVO_JumpGroove(BYTE, DWORD);
DWORD SERVO_JumpGroove( BYTE bForward, DWORD dwCurrentPos );
BIT SERVO_GetDiscInfo( PBYTE pMinTrack, PBYTE pMaxTrack, PDWORD pMaxPos );
//BIT CDROM_GetTrkInfo( BYTE, BYTE *, DWORD *);
BIT SERVO_GetTrackInfo( BYTE bTrackNum, PBYTE pTrackCtl, PDWORD pStartPos );
BIT SERVO_GetTrackEnd (BYTE bTrackNum, PDWORD pLength); // ** TCH1.61a; 
BIT SERVO_GetDiscLength(PDWORD pLength);


BYTE SERVO_GetSpeed(void);
BYTE SERVO_GetStatus(void);
// wyc.160a-XQ, add return parameter in SERVO_ResetRecover
BYTE SERVO_ResetRecover (BYTE bNeedStable);
// wyc.171-2
BYTE SERVO_Seek (DWORD dwSeekLBA, BYTE  bWaitBusy);
BIT     SERVO_Monitor( void );                  // WWH_CD7
WORD    SERVO_GetDiscType(void);       // WWH_CD7

//For DVD
BIT SERVO_CheckDiscEnding(void);

BIT SERVO_ReadDiscKey(void);
BIT SERVO_SetTitleKey(BYTE bStore);     // Added by Chern Shyh-Chain, 08-30-2001
//BIT SERVO_ReadTitleKey(DWORD dwSectorNumber);
BIT SERVO_ReadTitleKey(DWORD dwSectorNumber, BYTE bStore);  // Replaced by Chern Shyh-Chain, 08-30-2001
BIT SERVO_ReadCopyInfo(void);
void SERVO_AdjustThreshold (BYTE bType, DWORD dwLevel) ;
BYTE SERVO_CheckTrayClosed ();


//LJY275b, servo debug info
#ifdef SUPPORT_CDIF
#define GET_FW_VERSION			0x00
#define READ_420_REG			0x40
#define WRITE_420_REG			0x41
#define READ_3721_REG			0x42
#define WRITE_3721_REG			0x43
#define DEBUG_PIPO				0x44
#define GET_PIPO				0x45
#define SERVO_CMD_OFFSET		0x80

BIT SERVO_GetServoDebugInfo (BYTE bItem, WORD wAddr, WORD wData);
#endif // SUPPORT_CDIF

// Micky2.81_host, support host I/F
#ifdef  INPUT_PATH_HOSTIF
void SERVO_CDROMRead(BYTE NOofSector);
void SERVO_Exit();
#endif
BIT    _CSS_SentDiscKey(void);  // LLY.103e-XQ and LLY.160a-1, in SER_ATA.C module

#ifdef __cplusplus
        }
#endif
#endif  // __SERVO_H__

⌨️ 快捷键说明

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