📄 reader.h
字号:
/**********************************************************************************
* Copyright (c) 2002 ZORAN Corporation, All Rights Reserved
* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
*
* File: $Workfile: reader.h $
*
* Description:
* ============
* The reader module provides a service of
* a) bringing the servo to a required PSN,
* b) starting the data transfer process
* c) monitoring incoming PSN continuity until reading is stopped by the client
*
* Monitoring consists of
* a) passing servo or STP error interrupts to the client,
* b) detecting non-contiguous PSN and
* c) detecting when a "end_psn" is reached.
*
* Log:
* ====
* $Revision: $
* Last Modified by $Author: $ at $Modtime: $
**********************************************************************************
* Updates:
**********************************************************************************
* $Log: $
*
*
*********************************************************************************/
#include "Config.h" /* Global Configuration - do not remove! */
#ifndef READER_H
#define READER_H
/*** Include Files ***************************************************************/
#include "Include\sysdefs.h"
#include "Drive\Zfe\zfe.h"
#include "Drive\Zfe\Shared\Dsp\servo.h"
/*** Defines *********************************************************************/
#define READER_UNDEFINED_PSN 0xffffffffUL
/*** Typedefs ********************************************************************/
/* The following are the error codes that the system can return via one of the READER calls
* or via the callback routine.
*/
typedef enum
{
/* The STP interrupt occur while the STP is not ready. May be never happens, indicates a HW problem */
READER_STP_NOT_READY_ER = 1,
/* The actual first PSN to MCU was after requested start PSN */
READER_MISSED_START_PSN_TO_MCU_ER,
/* The READER has tried to read the media and has not suceeded due to bad sectors or servo
* tracking/focus failures, and all retry attempts have failed.
*/
READER_MAX_RETRIES_ER,
/* The PSN discontinuity encountered during more then READER_DISCONTINUETY_THRESHOLD sectors */
READER_LOSS_OF_TRACKING_ER,
/* The PSN discontinuity encountered during READER_DISCONTINUETY_THRESHOLD sectors
* but afterwards the PSN returned to the previous sequence
*/
READER_UNEXPECTED_SECTORS_ER,
/* The PSN discontinuity encountered but afterwords the PSN returned to be continues but at a different location */
READER_SHOCK_ER,
/* The reader could not reach monitoring for a long time */
READER_MONITOR_TIMEOUT_ER,
/* A PSN beyond the end of the media is requested. Also returned when the system is tracking and a psn
* after the last PSN on the disk is read.
*/
READER_END_OF_DISC_ER
} READER_ERRORS_ET;
typedef enum
{
READER_START_READ_FAILED_EV = 0, /* read failed to start */
READER_START_READ_OK_EV, /* read succesfully started */
READER_READ_FAILED_EV, /* read failed after start */
READER_READ_COMPLETE_OK_EV, /* read reached the last required psn */
READER_TOC_ENTRY_EV, /* send TOC entry */
READER_CDTEXT_EV, /* send CDTEXT information */
#ifdef DVD_VR_SUPPORT
READER_GOTO_SECTOR_OK_EV,
READER_NBCA_REACHED_EV,
#endif
READER_INVALID_EV
} READER_EVENT_ET;
/* This enumerator indicates the PLM to Reader read request */
typedef enum
{
READER_DATA_AREA_REQ_E = 0x0,
READER_LEADIN_REQ_E = 0x1,
READER_FIRST_LEADIN_REQ_E = 0x3,
READER_GOTO_SECTOR_REQ_E = 0x4
} READER_REQUEST_ET;
#ifdef DRV_SAMPLER_MODE_SUPPORT
typedef enum
{
READER_SAMPLER_MODE_ENABLE_E,
READER_SAMPLER_MODE_ENABLE_DRC_LOCKED_E,
READER_SAMPLER_MODE_DISABLE_E,
READER_SAMPLER_MODE_START_STREAMING_E,
READER_SAMPLER_MODE_STOP_STREAMING_E
} READER_SAMPLER_MODE_REQ_ST;
#endif
#ifdef DRV_DVD_SHOCK_ERROR_HANDLING
typedef enum
{
READER_DVD_NO_ERROR_EVENT_E,
READER_DVD_SHOCK_ERROR_EVENT_E,
READER_DVD_ECC_ERROR_EVENT_E
} READER_DVD_SHOCK_ERROR_HANDLING_EVENT_ET;
typedef struct
{
BOOL servoLayer;
BOOL servoShockStrategyEnabled;
UINT8 shockErrorStage;
UINT16 noErrorCounter;
UINT16 eccErrorCounter;
UINT16 shockErrorCounter;
UINT32 shockGap;
} READER_DVD_SHOCK_ERROR_HANDLING_ST;
#endif
/* This structure holds disc data size parameters */
typedef struct
{
UINT32 firstSessionSize;
INT16 jumpOutOfLeadInTracks;
} READER_DATA_SIZE_ST;
typedef struct
{
UINT32 innerEdgePsn;
UINT32 outerEdgePsn;
UINT32 layer1InnerEdgePsn;
UINT32 layer1OuterEdgePsn;
} READER_DISC_EDGES_ST;
/* This structure handle the asymmetric RF offset problem in DVD */
#ifdef DRV_SET_RFOFFSET_AFTER_CALIBRATION
typedef struct
{
UINT16 digitalOffset;
UINT8 samplingInterval;
UINT8 samplingCounter;
UINT16 drcThreshold;
INT16 rfMax;
INT16 rfMin;
} READER_RF_OFFSET_FIX_DVD_ST;
#endif
/* CALLBACK: The callback is called with
* event - the type of event that occured (see below)
* param1 - more detailed information about the event
* param2 - more detailed information about the event.
*/
typedef void (* READER_CALLBACK_T)(READER_EVENT_ET event, UINT16 param1, UINT16 param2);
/*** Externs *********************************************************************/
/*** Public Functions *************************************************************/
ZFE_ERR_CODE READER_Boot(void);
ZFE_ERR_CODE READER_RegisterCb(READER_CALLBACK_T cb);
ZFE_ERR_CODE READER_Init(DRV_PHY_DISCTYPE_ET media_type);
void READER_SetDiscSize(UINT32 firstSessionSize);
void READER_Setup(DRV_PHY_DISCTYPE_ET media_type,
READER_DISC_EDGES_ST disc_edges_st);
ZFE_ERR_CODE READER_Start(UINT32 start_psn, UINT32 end_psn, READER_REQUEST_ET request);
void READER_SetNewEnd(UINT32 end_psn);
UINT32 READER_StartPsn(void);
UINT32 READER_CurrentPsn(void);
UINT32 READER_ErrorStartPsn(void);
ZFE_ERR_CODE READER_Disable(void);
ZFE_ERR_CODE READER_Stop(void);
BOOL READER_StpHandler(void);
ZFE_ERR_CODE READER_SetSpeed(SERVO_SPINDLE_SPEED_T speed);
SERVO_SPINDLE_SPEED_T READER_GetSpeed(void);
UINT16 READER_GetMinSpeed(DRV_PHY_DISCTYPE_ET media_type);
ZFE_ERR_CODE READER_ChangeSpeed(SERVO_TRACKS_T target_track);
ZFE_ERR_CODE READER_LaserOff(void);
ZFE_ERR_CODE READER_ServoDownloadCode(UINT16 section);
ZFE_ERR_CODE READER_ServoHomeAndRead(void);
#ifdef DVD_VR_SUPPORT
ZFE_ERR_CODE READER_ServoStartNbcaSearch(void);
ZFE_ERR_CODE READER_ServoStopNbcaSearch(INT32 tracks);
#endif
#ifdef DRV_DVD_SHOCK_ERROR_HANDLING
void READER_DvdShocksErrorHandling(READER_DVD_SHOCK_ERROR_HANDLING_EVENT_ET event);
#endif
#ifdef DRV_SAMPLER_MODE_SUPPORT
ZFE_ERR_CODE READER_SamplerModeRequest(READER_SAMPLER_MODE_REQ_ST req);
#endif
#ifndef SUBCODEQ_STREAMING_SUPPORT
ZFE_ERR_CODE READER_GetSubcodeQ(UINT8 aSubcodeQ[12]);
#endif
ZFE_ERR_CODE READER_SetDefectThreshold(UINT8 num_frames);
ZFE_ERR_CODE READER_ResetDefectLength(void);
ZFE_ERR_CODE READER_GetDefectLength(UINT8 * length);
#ifdef CPR_MAI_READING_ENABLED
ZFE_ERR_CODE READER_GetCprMaiData(UINT8 * cpr_mai);
#endif
ZFE_ERR_CODE READER_AdjustSpeed(DRV_BITRATE_TYPE_ET type);
#if (defined(_DEBUG) && defined(DEBUG_FE_TRACE))
void READER_PrintStatus(void);
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -