phantom_dbg.c

来自「QPSK Tuner details, for conexant chipset」· C语言 代码 · 共 233 行

C
233
字号
/* phantom_dbg.c */
/*+++ *******************************************************************\
*
*  Abstract:
*
*       Implementation file for the debug module.
*
*
*  Created: 5/24/2004
*
*  Author: Amarnath Puttur
*
*  Copyright and Disclaimer: 
*  
*     --------------------------------------------------------------- 
*     This software is provided "AS IS" without warranty of any kind, 
*     either expressed or implied, including but not limited to the 
*     implied warranties of noninfringement, merchantability and/or 
*     fitness for a particular purpose.
*     --------------------------------------------------------------- 
*   
*     Copyright (c) 2004 Conexant Systems, Inc. 
*     All rights reserved. 
*
\******************************************************************* ---*/

#include "phantom.h"

#if PHANTOM_INCLUDE_DEBUG

static PHANTOMERRNO  error_number = PHANTOM_NOERR; /* Error number last processed */
static char      *errfname = 0;            /* file name (or reg.map var.name) where err occurred,  */
static long      errline = 0;              /* line number where error was encountered */



/*******************************************************************************************************
 * PHANTOM_DBG_GetError() 
 * function to retrieve  string info concerning error no 
 *******************************************************************************************************/
static char* 
PHANTOM_DBG_GetError(PHANTOMERRNO error_number)                        /* error number */
{
    int  index;
    static PHANTOM_NIM_ERROR  nimerr[] =                      /* static list of errors (add to list as needed) */
    {
        {PHANTOM_NOERR,       "(No error)"},                /* No error encountered */
        {PHANTOM_BADPTR,      "Bad pointer"},               /* bad pointer passed to API function */
        {PHANTOM_INVALID_NIM, "Bad PHANTOM_NIM pointer"},           /* bad nim pointer passed to API */
        {PHANTOM_NIM_OPENED,  "PHANTOM_NIM already opened"},        /* bad nim pointer passed to API */
        {PHANTOM_SBIO_NULL,   "User SBIO functs are NULL"}, /* user-supplied SBRead or SBWrite funct is NULL */
        {PHANTOM_NIM_NULL,    "PHANTOM_NIM ptr is NULL"},           /* nim pointer passed is null */
        {PHANTOM_IO_READERR,  "I/O Err: read"},             /* error encountered at read demod */
        {PHANTOM_IO_WRITERR,  "I/O Err: write"},            /* error encountered at write demod */
        {PHANTOM_BAD_PARM,    "API: Bad parm passed"},      /* bad parameter passed by caller -- see fil/line to determine error */
        {PHANTOM_BAD_RTNVAL,  "API: Bad return value"},     /* hardware returned a n invalid result */
        {PHANTOM_PARM_RANGE,  "API: Parm bounds error"},    /* parm passed was out of valid range */
        {PHANTOM_LOCKIND_ERR, "API: Error reading lockind"},/* unable to read a lockind register */
        {PHANTOM_RANGE,       "Warn:Write Bounds Error"},   /* Register written with bounds error data */
        {PHANTOM_INIT_XTAL,   "Init: xtal bounds error"},   /* crystal freq is out-of-bounds */
        {PHANTOM_INIT_MPEG,   "Init: Default MPEG is NULL"},/* Mpeg (default settings) struct is NULL */
        {PHANTOM_DEMOD_ERR,   "Demod has invalid setting"}, /* demod register read has invalid setting */
        {PHANTOM_VITSETTING,  "Demod viterbi setting null"},/* demod viterbi search list is set to zero */
        {PHANTOM_NOTSUPPORT,  "Feature not supported"},     /* asked-for feature not supported by driver */
        {PHANTOM_BAD_DIV,     "API: Averted div by zero"},  /* trapped a div by zero err, results are undef */
        {PHANTOM_VITSET,      "Viterbi coderate settings"}, /* viterbi code rate settings are wrong/bad */
        {PHANTOM_CXTYPE,      "Demod: Unable to ID demod"}, /* unable to determine demod type (CxType) */
        {PHANTOM_LNB_MSGLEN,  "LNB message too short"},     /* unable to send a short LNB message */
        {PHANTOM_LNB_STALLED, "LNB message stalled"},       /* unable to send LNB message in time allocated */
        {PHANTOM_LNB_BUSY,    "LNB message BUSY"},          /* LNB message busy flag is not set (should be set -> 0x01 indicates NOT busy) */
        {PHANTOM_DISEQC_RXLEN,"Diseqc: Rx buffer too short"},/* passed-in rx buffer len was <= 0 */
        {PHANTOM_DISEQC_VERSION,"Diseqc: No Rx HW on demod"},/* demod does not contain this capability */
        {PHANTOM_DISEQC_TIMEOUT,"Diseqc: Rx Timeout"},      /*  demod took to long to rx diseqc message */
        {PHANTOM_DEMOD_UNSUPPORTED,"Demod: Not supported by driver"}, /* demod is not supported by the driver */
        {PHANTOM_FIRMWARE_DOWNLOAD_FAILED, "Firmware download failed"}, 
        {PHANTOM_FIRMWARE_DOWNLOAD_BAD_LENGTH, "Bad firmware image length"},
        {PHANTOM_FIRMWARE_DOWNLOAD_BAD_IMAGE,  "Bad firmware image pointer"},
        /* download errors */
        {DOWNLOAD_MAX_RETRIES_EXHAUSTED, "Maximum download retries exhausted"},
        /* -- Register, LLF, FIFO errors -- */
        /* Reg: map Processing errors */
        {PHANTOM_REG_MATCH_IDX_ERR,  "Register array in phantom_cmd.h is corrupt"},   /* Register array in phantom_cmd.h is corrupt */
        {PHANTOM_REG_MATCH_TRAN_ERR, "Raw data to external data translation error"},  /* Raw data (HW bit-field) to external data translation error */
        {PHANTOM_REG_MATCH_DTRAN_ERR,"External data to raw data translation error"},  /* External data to raw data (HW bit-field) translation error */
        /* Reg: verification errors */
        {PHANTOM_REG_VERIFY_IDX_ERR,  "Register map index(bit-field enums) are not contiguous"}, 
        {PHANTOM_REG_VERIFY_ADDR_ERR, "Reg map addr variable is inconsistent with expected range"},
        {PHANTOM_REG_VERIFY_REGRW_ERR,"Reg map access field (RO/WO/RW) contains invalid data"},
        {PHANTOM_REG_VERFY_REGDTP_ERR,"Reg data (BIT,BYTE,MULTI-BYTE...) type field is invalid"},
        {PHANTOM_REG_VERFY_DTLEN_ERR, "When field is bit, but len>1bit; When multi-byte, len<=8bits)"},
        /* Reg: hardware operation errors */
        {PHANTOM_REG_HDWR_RD_WR_ERR, "Hardware read,modify,write error during write op"},
        {PHANTOM_REG_HDWR_REG_RO_ERR,"Write attempted to read-only register"},
        {PHANTOM_REG_HDWR_REG_WO_ERR,"Read attempted to write-only register"},
        /* Register operation: high-level errors */
        {PHANTOM_REG_WRITE_ERR, "Register write failure"},  /* high-level error */
        {PHANTOM_REG_READ_ERR, "Register read failure"},  /* high-level error */
        /* DPR LLF: processing errors */
        {DPRPHANTOM_LLF_MATCH_OPCODE_ERR,"LLF opcode is invalid"},
        /* DPR LLF: verification errors */
        /* DPR LLF: operation (hardware) errors */
        {DPRPHANTOM_LLF_RETURN_POLL_ERR, "LLF poll retries exhausted with no token match"},
        /* LLF function failures */
        {PHANTOM_LLF_MPEG_CONFIG_ERR, "LLF MPEG config failed"},
        {PHANTOM_LLF_SET_VCO_FREQUENCY_ERR, "LLF Set VCO frequency failed"},
        {PHANTOM_LLF_LNB_CONFIG_ERR, "LLF LNB Config failed"},
        {PHANTOM_LLF_LNB_SEND_TONE_ERR, "LLF Send tone failed"},
        {PHANTOM_LLF_LNB_SEND_DISEQC_ERR, "LLF Send DiSEqC failed"},
        {PHANTOM_LLF_LNB_DC_LEVEL_ERR, "LLF Send DC Level failed"},
        {PHANTOM_LLF_LNB_DC_POLARITY_ERR, "LLF LNB DC Polarity failed"},
        {PHANTOM_LLF_SET_GPIO_DIRECTION_ERR, "LLF Set GPIO direction failed"},
        {PHANTOM_LLF_SET_GPIO_OUT_ERR, "LLF Set GPIO out failed"},
        {PHANTOM_LLF_GPIO_EN_ERR, "LLF GPIO Enable failed"},
        {PHANTOM_LLF_TRISTATE_CONFIG_ERR, "LLF Tristate config failed"},
        {PHANTOM_LLF_AGC_CONTROL_ERR, "LLF AGC control failed"},
        {PHANTOM_LLF_CLEAR_INTERRUPTS_ERR, "LLF Clear interrupts failed"},
        {PHANTOM_LLF_UPDATE_FIRMWARE_VERSION_ERR, "LLF Update Firmware Version failed"},
        {PHANTOM_LLF_DISABLE_RS_CORRECTION_ERR, "LLF Disable RS correction failed"},
        {PHANTOM_LLF_SLEEP_MODE_SETTING_ERR, "LLF Sleep mode setting failed"},
        {PHANTOM_LLF_GPIO_MODE_ERR, "LLF Set GPIO mode failed"},
        /* tuner errors */
        {PHANTOM_TUNER_INVALID_I2C_ADDRESS, "Wrong I2C Device address configuration: Must be either 0x14 or 0x54."},
        {PHANTOM_INVALID_TUNER_SELECTION, "Wrong tuner selection bit set in the demod handle."},
        {PHANTOM_EOERR,       "(end of err list)"}          /* timer specified at init is not valid */
    };

	/* find the error string, report it back to caller */
	for (index = 1 ; nimerr[index].error_number != PHANTOM_EOERR ; index++)
	{
		if (nimerr[index].error_number == error_number)
		{
			return(nimerr[index].errstr);
		}
	}

    return (nimerr[0].errstr);

}  /* PHANTOM_DBG_GetError() */


/*******************************************************************************************************
 * PHANTOM_DBG_Init() 
 * function to init the error module.
 *******************************************************************************************************/
void  
PHANTOM_DBG_Init(void)
{
    error_number = PHANTOM_NOERR;
    errfname = 0;
    errline  = 0;
}


/*******************************************************************************************************
 * PHANTOM_DBG_SetError() 
 * function to record error number, filename and linenumber.
 *******************************************************************************************************/
void       
PHANTOM_DBG_SetError(PHANTOMERRNO  error_num,  /* API error number */
             char      *filename,     /* filename (or useful info) (or 0) where error occurred */
             int       lineno)        /* line number where error occurred */
{
	/* usage:  It is important to place this error-recording function at or near */
	/* point of error, in order to track and find program and line of error      */
	/* see:  Macro -> PHANTOM_DBG_SET_ERROR() */

	/* record only the first error, not the last one encountered */
	if (error_number == PHANTOM_NOERR)
	{
		error_number = error_num;
		errfname     = filename;
		errline      = lineno;
	}
	return;
}  /* PHANTOM_DBG_SetError() */


/*******************************************************************************************************
 * PHANTOM_DBG_GetErrorMessage() 
 * function to return error info string to caller 
 *******************************************************************************************************/
char*  
PHANTOM_DBG_GetErrorMessage(PHANTOMERRNO error_num) /* error number associated with an internal error string (-1 gets last err) */
{
	/* If asked-for errno is -1, load last saved errno */
	if (error_num == PHANTOM_NEGONE)  
	{
		error_num = error_number;
	}

	return (PHANTOM_DBG_GetError (error_num));
}  /* PHANTOM_DBG_GetErrorMessage() */


/*******************************************************************************************************
 * PHANTOM_DBG_GetLastError() 
 * function to retrieve  PHANTOMERRNO of last encountered error
 *******************************************************************************************************/
int  
PHANTOM_DBG_GetLastError() 
{
	PHANTOMERRNO  error_num = error_number;

	/* save last errno, reset error, report last error */
	error_number = PHANTOM_NOERR;
	return ((int)error_num);

}  /* PHANTOM_DBG_GetLastError() */


/*******************************************************************************************************
 * PHANTOM_DBG_GetErrorFilename() (NOTE:  non-standard return value) 
 * function to return file name associated with last recorded error 
 *******************************************************************************************************/
char*
PHANTOM_DBG_GetErrorFilename()  
{
	return (errfname);
}  /* PHANTOM_DBG_GetErrorFilename() */


/*******************************************************************************************************
 * PHANTOM_DBG_GetErrorLineNumber() (NOTE:  non-standard return value) 
 * Function to return line-number associated with last recorded error 
 *******************************************************************************************************/
unsigned long 
PHANTOM_DBG_GetErrorLineNumber() 
{
	return (errline);
}  /* PHANTOM_DBG_GetErrorLineNumber() */


#endif /* PHANTOM_INCLUDE_DEBUG */

⌨️ 快捷键说明

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