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 + -
显示快捷键?