blob: f49c02d833ead5d8497af694c42aed5b8f6e3375 [file] [log] [blame]
/** \file vp_debug.c
* vp_debug.c
*
* This file contains the implementation of VP_DEBUG MACRO.
*
* Copyright (c) 2011, Microsemi
*
* $Revision: 1.1.2.1.14.1.8.3 $
* $LastChangedDate: 2011-11-07 13:39:50 -0600 (Mon, 07 Nov 2011) $
*/
#include "vp_api_cfg.h"
#include "vp_api.h"
#include "vp_debug.h"
#if defined (VP_CC_VCP2_SERIES) || defined (VP_CC_MELT_SERIES)
#include "hbi_common.h"
#endif
uint32 vpDebugSelectMask = VP_OPTION_DEFAULT_DEBUG_SELECT;
/**
* VpRegisterDump()
* This function is used to dump the content of all device registers.
*
* Preconditions:
* Device context should be created.
*
* Postconditions:
* Debug output of "all" registers.
*/
VpStatusType
VpRegisterDump(
VpDevCtxType *pDevCtx)
{
VpStatusType status;
VP_API_ENTER(VpDevCtxType, pDevCtx, "RegisterDump");
/* Basic argument checking */
if (pDevCtx == VP_NULL) {
status = VP_STATUS_INVALID_ARG;
} else {
status = VP_CALL_DEV_FUNC(RegisterDump, (pDevCtx));
}
VP_API_EXIT(VpDevCtxType, pDevCtx, "RegisterDump", status);
return status;
} /* VpRegisterDump() */
/**
* VpObjectDump()
* This function is used to dump the contents of a Device Context and Device
* Object (if pDevCtx != VP_NULL) and/or the contents of a Line Context and Line
* Object (if pLineCtx != VP_NULL). Either pDevCtx or pLineCtx must be VP_NULL,
* but not both.
*
* Preconditions:
* VP_CC_DEBUG_SELECT must include VP_DBG_ERROR for this function to be
* compiled in.
*
* Postconditions:
* Debug output of "all" registers.
*/
VpStatusType
VpObjectDump(
VpLineCtxType *pLineCtx,
VpDevCtxType *pDevCtx)
{
VpStatusType status = VP_STATUS_FUNC_NOT_SUPPORTED;
#if (VP_CC_DEBUG_SELECT & (VP_DBG_API_FUNC | VP_DBG_INFO))
bool singleLine = (pLineCtx != VP_NULL);
#endif
#if (VP_CC_DEBUG_SELECT & VP_DBG_API_FUNC)
if (singleLine) {
VP_API_ENTER(VpLineCtxType, pLineCtx, "ObjectDump");
} else {
VP_API_ENTER(VpDevCtxType, pDevCtx, "ObjectDump");
}
#endif
/* Basic argument checking */
if (
((pDevCtx == VP_NULL) && (pLineCtx == VP_NULL)) ||
((pDevCtx != VP_NULL) && (pLineCtx != VP_NULL))
) {
status = VP_STATUS_INVALID_ARG;
} else {
#if (VP_CC_DEBUG_SELECT & VP_DBG_INFO)
VpSysDebugPrintf("\npDevCtx = %lu\n", (unsigned long)pDevCtx);
VpSysDebugPrintf("pLineCtx = %lu\n", (unsigned long)pLineCtx);
/* Contexts are device-independent, so code for displaying them is
included here. */
if (singleLine) {
VpSysDebugPrintf("\nDumping Line Context:\n");
VpSysDebugPrintf("\tpLineCtx->pDevCtx = %lu\n", (unsigned long)(pLineCtx->pDevCtx));
VpSysDebugPrintf("\tpLineCtx->pLineObj = %lu\n", (unsigned long)(pLineCtx->pLineObj));
pDevCtx = pLineCtx->pDevCtx;
status = VP_CALL_DEV_FUNC(ObjectDump, (pLineCtx, VP_NULL));
} else {
int line;
VpSysDebugPrintf("\nDumping Device Context:\n");
VpSysDebugPrintf("\tpDevCtx->deviceType = %d\n", (int)(pDevCtx->deviceType));
VpSysDebugPrintf("\tpDevCtx->pDevObj = %lu\n", (unsigned long)(pDevCtx->pDevObj));
VpSysDebugPrintf("\tpDevCtx->pLineCtx[%d] = {", VP_MAX_LINES_PER_DEVICE);
for (line = 0; line < VP_MAX_LINES_PER_DEVICE; line++) {
VpSysDebugPrintf(" %lu", (unsigned long)(pDevCtx->pLineCtx[line]));
}
VpSysDebugPrintf(" }\n");
status = VP_CALL_DEV_FUNC(ObjectDump, (VP_NULL, pDevCtx));
}
#endif /* (VP_CC_DEBUG_SELECT & VP_DBG_INFO) */
}
#if (VP_CC_DEBUG_SELECT & VP_DBG_API_FUNC)
if (singleLine) {
VP_API_EXIT(VpLineCtxType, pLineCtx, "ObjectDump", status);
} else {
VP_API_EXIT(VpDevCtxType, pDevCtx, "ObjectDump", status);
}
#endif
return status;
} /* VpObjectDump() */
#ifdef VP_DEBUG
static bool
DeviceDebugEnabled(
uint32 debugSelectMask,
char *msgTypeStr,
VpDeviceIdType deviceId)
{
if (!debugSelectMask)
return FALSE;
/* Display the message type and device ID. */
VpSysDebugPrintf(msgTypeStr);
VP_PRINT_DEVICE_ID(deviceId);
VpSysDebugPrintf(": ");
return TRUE;
}
static bool
LineDebugEnabled(
uint32 debugSelectMask,
char *msgTypeStr,
VpLineIdType lineId)
{
if (!debugSelectMask)
return FALSE;
/* Display the message type and line ID. */
VpSysDebugPrintf(msgTypeStr);
VP_PRINT_LINE_ID((lineId));
VpSysDebugPrintf(": ");
return TRUE;
}
/* This function is a "fallback" for the case where an object was expected, but
VP_NULL was passed. */
static bool
NULLDebugEnabled(
uint32 msgType,
char *errorMsg,
char *msgTypeStr)
{
if (msgType & vpDebugSelectMask) {
VpSysDebugPrintf(color_fg(red) "%s", errorMsg);
}
return VpDebugEnabled_None(msgType, msgTypeStr, VP_NULL);
}
#if defined (VP_CC_VCP2_SERIES)
bool
VpDebugEnabled_VpVcp2DeviceObjectType(
uint32 msgType,
char *msgTypeStr,
VpVcp2DeviceObjectType *pDevObj)
{
uint32 debugSelectMask;
VpDeviceIdType deviceId;
if (pDevObj == VP_NULL) {
return NULLDebugEnabled(msgType, "(pDevObj == VP_NULL) ", msgTypeStr);
}
debugSelectMask = pDevObj->debugSelectMask;
deviceId = pDevObj->deviceId;
VP_ASSERT(pDevObj != VP_NULL);
return DeviceDebugEnabled(msgType & debugSelectMask, msgTypeStr, deviceId);
}
bool
VpDebugEnabled_VpVcp2LineObjectType(
uint32 msgType,
char *msgTypeStr,
VpVcp2LineObjectType *pLineObj)
{
uint32 debugSelectMask;
VpLineIdType lineId;
if (pLineObj == VP_NULL) {
return NULLDebugEnabled(msgType, "(pLineObj == VP_NULL) ", msgTypeStr);
}
debugSelectMask = pLineObj->debugSelectMask;
lineId = pLineObj->lineId;
VP_ASSERT(pLineObj != VP_NULL);
return LineDebugEnabled(msgType & debugSelectMask, msgTypeStr, lineId);
}
#endif /* VP_CC_VCP2_SERIES*/
#if defined (VP_CC_MELT_SERIES)
bool
VpDebugEnabled_VpMeltDeviceObjectType(
uint32 msgType,
char *msgTypeStr,
VpMeltDeviceObjectType *pDevObj)
{
uint32 debugSelectMask;
VpDeviceIdType deviceId;
if (pDevObj == VP_NULL) {
return NULLDebugEnabled(msgType, "(pDevObj == VP_NULL) ", msgTypeStr);
}
debugSelectMask = pDevObj->debugSelectMask;
deviceId = pDevObj->deviceId;
VP_ASSERT(pDevObj != VP_NULL);
return DeviceDebugEnabled(msgType & debugSelectMask, msgTypeStr, deviceId);
}
bool
VpDebugEnabled_VpMeltLineObjectType(
uint32 msgType,
char *msgTypeStr,
VpMeltLineObjectType *pLineObj)
{
uint32 debugSelectMask;
VpLineIdType lineId;
if (pLineObj == VP_NULL) {
return NULLDebugEnabled(msgType, "(pLineObj == VP_NULL) ", msgTypeStr);
}
debugSelectMask = pLineObj->debugSelectMask;
lineId = pLineObj->lineId;
VP_ASSERT(pLineObj != VP_NULL);
return LineDebugEnabled(msgType & debugSelectMask, msgTypeStr, lineId);
}
#endif /* VP_CC_MELT_SERIES */
#ifdef VP_CC_890_SERIES
bool
VpDebugEnabled_Vp890DeviceObjectType(
uint32 msgType,
char *msgTypeStr,
Vp890DeviceObjectType *pDevObj)
{
uint32 debugSelectMask;
VpDeviceIdType deviceId;
if (pDevObj == VP_NULL) {
return NULLDebugEnabled(msgType, "(pDevObj == VP_NULL) ", msgTypeStr);
}
debugSelectMask = pDevObj->debugSelectMask;
deviceId = pDevObj->deviceId;
VP_ASSERT(pDevObj != VP_NULL);
return DeviceDebugEnabled(msgType & debugSelectMask, msgTypeStr, deviceId);
}
bool
VpDebugEnabled_Vp890LineObjectType(
uint32 msgType,
char *msgTypeStr,
Vp890LineObjectType *pLineObj)
{
uint32 debugSelectMask;
VpLineIdType lineId;
if (pLineObj == VP_NULL) {
return NULLDebugEnabled(msgType, "(pLineObj == VP_NULL) ", msgTypeStr);
}
debugSelectMask = pLineObj->debugSelectMask;
lineId = pLineObj->lineId;
VP_ASSERT(pLineObj != VP_NULL);
return LineDebugEnabled(msgType & debugSelectMask, msgTypeStr, lineId);
}
#endif /* VP_CC_890_SERIES */
#ifdef VP_CC_880_SERIES
bool
VpDebugEnabled_Vp880DeviceObjectType(
uint32 msgType,
char *msgTypeStr,
Vp880DeviceObjectType *pDevObj)
{
uint32 debugSelectMask;
VpDeviceIdType deviceId;
if (pDevObj == VP_NULL) {
return NULLDebugEnabled(msgType, "(pDevObj == VP_NULL) ", msgTypeStr);
}
debugSelectMask = pDevObj->debugSelectMask;
deviceId = pDevObj->deviceId;
VP_ASSERT(pDevObj != VP_NULL);
return DeviceDebugEnabled(msgType & debugSelectMask, msgTypeStr, deviceId);
}
bool
VpDebugEnabled_Vp880LineObjectType(
uint32 msgType,
char *msgTypeStr,
Vp880LineObjectType *pLineObj)
{
uint32 debugSelectMask;
VpLineIdType lineId;
if (pLineObj == VP_NULL) {
return NULLDebugEnabled(msgType, "(pLineObj == VP_NULL) ", msgTypeStr);
}
debugSelectMask = pLineObj->debugSelectMask;
lineId = pLineObj->lineId;
VP_ASSERT(pLineObj != VP_NULL);
return LineDebugEnabled(msgType & debugSelectMask, msgTypeStr, lineId);
}
#endif /* VP_CC_880_SERIES */
#ifdef VP_CC_580_SERIES
bool
VpDebugEnabled_Vp580DeviceObjectType(
uint32 msgType,
char *msgTypeStr,
Vp580DeviceObjectType *pDevObj)
{
uint32 debugSelectMask;
VpDeviceIdType deviceId;
if (pDevObj == VP_NULL) {
return NULLDebugEnabled(msgType, "(pDevObj == VP_NULL) ", msgTypeStr);
}
debugSelectMask = pDevObj->debugSelectMask;
deviceId = pDevObj->deviceId;
VP_ASSERT(pDevObj != VP_NULL);
return DeviceDebugEnabled(msgType & debugSelectMask, msgTypeStr, deviceId);
}
bool
VpDebugEnabled_Vp580LineObjectType(
uint32 msgType,
char *msgTypeStr,
Vp580LineObjectType *pLineObj)
{
uint32 debugSelectMask;
VpLineIdType lineId;
if (pLineObj == VP_NULL) {
return NULLDebugEnabled(msgType, "(pLineObj == VP_NULL) ", msgTypeStr);
}
debugSelectMask = pLineObj->debugSelectMask;
lineId = pLineObj->lineId;
VP_ASSERT(pLineObj != VP_NULL);
return LineDebugEnabled(msgType & debugSelectMask, msgTypeStr, lineId);
}
#endif /* VP_CC_580_SERIES */
#ifdef VP_CC_792_SERIES
static bool
VpDebugEnabled_Vp792DeviceObjectType(
uint32 msgType,
char *msgTypeStr,
Vp792DeviceObjectType *pDevObj)
{
uint32 debugSelectMask;
VpDeviceIdType deviceId;
if (pDevObj == VP_NULL) {
return NULLDebugEnabled(msgType, "(pDevObj == VP_NULL) ", msgTypeStr);
}
debugSelectMask = pDevObj->options.debugSelect;
deviceId = pDevObj->deviceId;
VP_ASSERT(pDevObj != VP_NULL);
return DeviceDebugEnabled(msgType & debugSelectMask, msgTypeStr, deviceId);
}
static bool
VpDebugEnabled_Vp792LineObjectType(
uint32 msgType,
char *msgTypeStr,
Vp792LineObjectType *pLineObj)
{
uint32 debugSelectMask;
VpLineIdType lineId;
if (pLineObj == VP_NULL) {
return NULLDebugEnabled(msgType, "(pLineObj == VP_NULL) ", msgTypeStr);
}
debugSelectMask = pLineObj->options.debugSelect;
lineId = pLineObj->lineId;
VP_ASSERT(pLineObj != VP_NULL);
return LineDebugEnabled(msgType & debugSelectMask, msgTypeStr, lineId);
}
#endif /* VP_CC_792_SERIES */
bool
VpDebugEnabled_VpDeviceIdType(
uint32 msgType,
char *msgTypeStr,
VpDeviceIdType *pDeviceId)
{
VP_ASSERT(pDeviceId != VP_NULL);
return DeviceDebugEnabled(msgType & vpDebugSelectMask, msgTypeStr, *pDeviceId);
}
bool
VpDebugEnabled_VpLineIdType(
uint32 msgType,
char *msgTypeStr,
VpLineIdType *pLineId)
{
VP_ASSERT(pLineId != VP_NULL);
return LineDebugEnabled(msgType & vpDebugSelectMask, msgTypeStr, *pLineId);
}
/*
* This function returns TRUE if the specified message type is enabled for the specified device.
* As a side effect, it displays the message type and device ID.
*/
bool
VpDebugEnabled_VpDevCtxType(
uint32 msgType,
char *msgTypeStr,
VpDevCtxType *pDevCtx)
{
if (pDevCtx == VP_NULL) {
return NULLDebugEnabled(msgType, "(pDevCtx == VP_NULL) ", msgTypeStr);
}
switch (pDevCtx->deviceType) {
#ifdef VP_CC_VCP2_SERIES
case VP_DEV_VCP2_SERIES:
return VpDebugEnabled_VpVcp2DeviceObjectType(msgType, msgTypeStr, pDevCtx->pDevObj);
#endif
#ifdef VP_CC_MELT_SERIES
case VP_DEV_MELT_SERIES:
return VpDebugEnabled_VpMeltDeviceObjectType(msgType, msgTypeStr, pDevCtx->pDevObj);
#endif
#ifdef VP_CC_890_SERIES
case VP_DEV_890_SERIES:
return VpDebugEnabled_Vp890DeviceObjectType(msgType, msgTypeStr, pDevCtx->pDevObj);
#endif
#ifdef VP_CC_880_SERIES
case VP_DEV_880_SERIES:
return VpDebugEnabled_Vp880DeviceObjectType(msgType, msgTypeStr, pDevCtx->pDevObj);
#endif
#ifdef VP_CC_792_SERIES
case VP_DEV_792_SERIES:
return VpDebugEnabled_Vp792DeviceObjectType(msgType, msgTypeStr, pDevCtx->pDevObj);
#endif
default:
/* For other device types (for which we are still using VP_DOUT)
use the global debug select mask. */
return VpDebugEnabled_None(msgType, msgTypeStr, (void *)0);
}
}
/*
* This function returns TRUE if the specified message type is enabled for the specified line.
* As a side effect, it displays the message type and line ID.
*/
bool
VpDebugEnabled_VpLineCtxType(
uint32 msgType,
char *msgTypeStr,
VpLineCtxType *pLineCtx)
{
if (pLineCtx == VP_NULL) {
return NULLDebugEnabled(msgType, "(pLineCtx == VP_NULL) ", msgTypeStr);
}
if (pLineCtx->pDevCtx == VP_NULL) {
return NULLDebugEnabled(msgType, "(pLineCtx->pDevCtx == VP_NULL) ", msgTypeStr);
}
switch (pLineCtx->pDevCtx->deviceType) {
#ifdef VP_CC_VCP2_SERIES
case VP_DEV_VCP2_SERIES:
return VpDebugEnabled_VpVcp2LineObjectType(msgType, msgTypeStr, pLineCtx->pLineObj);
#endif
#ifdef VP_CC_MELT_SERIES
case VP_DEV_MELT_SERIES:
return VpDebugEnabled_VpMeltLineObjectType(msgType, msgTypeStr, pLineCtx->pLineObj);
#endif
#ifdef VP_CC_890_SERIES
case VP_DEV_890_SERIES:
return VpDebugEnabled_Vp890LineObjectType(msgType, msgTypeStr, pLineCtx->pLineObj);
#endif
#ifdef VP_CC_880_SERIES
case VP_DEV_880_SERIES:
return VpDebugEnabled_Vp880LineObjectType(msgType, msgTypeStr, pLineCtx->pLineObj);
#endif
#ifdef VP_CC_580_SERIES
case VP_DEV_580_SERIES:
return VpDebugEnabled_Vp580LineObjectType(msgType, msgTypeStr, pLineCtx->pLineObj);
#endif
#ifdef VP_CC_792_SERIES
case VP_DEV_792_SERIES:
return VpDebugEnabled_Vp792LineObjectType(msgType, msgTypeStr, pLineCtx->pLineObj);
#endif
default:
/* For other device types (for which we are still using VP_DOUT)
use the global debug select mask. */
return VpDebugEnabled_None(msgType, msgTypeStr, (void *)0);
}
}
bool
VpDebugEnabled_None(
uint32 msgType,
char *msgTypeStr,
void *nothing)
{
if (!(msgType & vpDebugSelectMask))
return FALSE;
VpSysDebugPrintf(msgTypeStr);
VpSysDebugPrintf(": ");
return TRUE;
}
#ifdef VP_DEBUG
static const char *
VpGetEnumString(
const char *strTable[],
int numStrings,
int value)
{
static char buf[7] = "0x0000"; /* not reentrant */
static const char hex[16] = "0123456789ABCD";
if ((value < 0) || (value >= numStrings) || (strTable[value] == VP_NULL)) {
/* Can't find a string for the requested value. */
buf[5] = hex[value & 0xF];
value >>= 4;
buf[4] = hex[value & 0xF];
value >>= 4;
buf[3] = hex[value & 0xF];
value >>= 4;
buf[2] = hex[value & 0xF];
return buf;
}
/* Found the requested string in the table. */
return strTable[value];
}
#endif /* VP_DEBUG */
#if (VP_CC_DEBUG_SELECT & (VP_DBG_API_FUNC | VP_DBG_EVENT))
const char *
VpGetString_VpStatusType(
VpStatusType status)
{
static const char *strTable[VP_STATUS_NUM_TYPES] = {
"SUCCESS",
"FAILURE",
"FUNC_NOT_SUPPORTED",
"INVALID_ARG",
"MAILBOX_BUSY",
"ERR_VTD_CODE",
"OPTION_NOT_SUPPORTED",
"ERR_VERIFY",
"DEVICE_BUSY",
"MAILBOX_EMPTY",
"ERR_MAILBOX_DATA",
"ERR_HBI",
"ERR_IMAGE",
"IN_CRTCL_SECTN",
"DEV_NOT_INITIALIZED",
"ERR_PROFILE",
"16",
"CUSTOM_TERM_NOT_CFG",
"DEDICATED_PINS",
"INVALID_LINE",
"LINE_NOT_CONFIG",
"INPUT_PARAM_OOR"
};
/* Make sure we update the above table when we update VpStatusType: */
VP_ASSERT(VP_STATUS_NUM_TYPES == 22);
return VpGetEnumString(strTable, VP_STATUS_NUM_TYPES, (int)status);
}
#endif /* (VP_CC_DEBUG_SELECT & (VP_DBG_API_FUNC | VP_DBG_EVENT)) */
#if (VP_CC_DEBUG_SELECT & VP_DBG_API_FUNC)
const char *
VpGetString_VpOptionIdType(
VpOptionIdType optionId)
{
static const char *strTable[VP_NUM_OPTION_IDS] = {
"VP_DEVICE_OPTION_ID_PULSE", /* only differs by prefix */
"CRITICAL_FLT",
"ZERO_CROSS",
"RAMP2STBY",
"PULSE_MODE",
"TIMESLOT",
"CODEC",
"PCM_HWY",
"LOOPBACK",
"LINE_STATE",
"EVENT_MASK",
VP_NULL,
"RING_CNTRL",
VP_NULL,
"DTMF_MODE",
"DEVICE_IO",
VP_NULL,
"PCM_TXRX_CNTRL",
"PULSE2",
"LINE_IO_CFG",
"DEV_IO_CFG",
"DTMF_SPEC",
"PARK_MODE",
"DCFEED_SLOPE",
"SWITCHER_CTRL",
"HOOK_DETECT_MODE",
VP_NULL,
VP_NULL,
VP_NULL,
VP_NULL,
VP_NULL,
VP_NULL,
VP_NULL,
VP_NULL,
VP_NULL,
VP_NULL,
"VP_OPTION_ID_PULSE", /* only differs by prefix */
"DEBUG_SELECT",
"ABS_GAIN",
"PCM_SIG_CTL",
"LINESTATE_CTL_MODE"
};
/* Make sure we update the above table when we update VpOptionIdType: */
VP_ASSERT(VP_NUM_OPTION_IDS == 0x29);
return VpGetEnumString(strTable, VP_NUM_OPTION_IDS, (int)optionId);
}
#endif /* (VP_CC_DEBUG_SELECT & VP_DBG_API_FUNC) */
#ifdef VP_DEBUG
const char *
VpGetString_VpProfileType(
VpProfileType profType)
{
static const char *strTable[VP_NUM_PROFILE_TYPES] = {
"DEVICE",
"AC",
"DC",
"RING",
"RINGCAD",
"TONE",
"METER",
"CID",
"TONECAD",
"FXO_CONFIG",
"CUSTOM_TERM",
"CAL"
};
/* Make sure we update the above table when we update VpProfileType: */
VP_ASSERT(VP_NUM_PROFILE_TYPES == 12);
return VpGetEnumString(strTable, VP_NUM_PROFILE_TYPES, (int)profType);
}
#endif /* VP_DEBUG */
#if (VP_CC_DEBUG_SELECT & VP_DBG_EVENT)
void VpDisplayEvent(
VpEventType *pEvent)
{
typedef struct {
VpEventCategoryType category;
uint16 id;
char *nameStr;
bool hasEventData;
bool hasParmHandle;
} VpEventInfo;
static const VpEventInfo eventInfoTable[] = {
{ VP_EVCAT_FAULT, VP_DEV_EVID_BAT_FLT, "BAT_FLT", TRUE, FALSE },
{ VP_EVCAT_FAULT, VP_DEV_EVID_CLK_FLT, "CLK_FLT", TRUE, FALSE },
{ VP_EVCAT_FAULT, VP_LINE_EVID_THERM_FLT, "THERM_FLT", TRUE, FALSE },
{ VP_EVCAT_FAULT, VP_LINE_EVID_DC_FLT, "DC_FLT", TRUE, FALSE },
{ VP_EVCAT_FAULT, VP_LINE_EVID_AC_FLT, "AC_FLT", TRUE, FALSE },
{ VP_EVCAT_FAULT, VP_LINE_EVID_SYNC_FLT, "SYNC_FLT", FALSE, FALSE },
{ VP_EVCAT_FAULT, VP_LINE_EVID_RES_LEAK_FLT, "RES_LEAK_FLT", TRUE, TRUE },
{ VP_EVCAT_FAULT, VP_LINE_EVID_SEAL_CUR_FLT, "SEAL_CURRENT_FLT", TRUE, FALSE },
{ VP_EVCAT_FAULT, VP_DEV_EVID_WDT_FLT, "WDT_FLT", FALSE, FALSE },
{ VP_EVCAT_FAULT, VP_DEV_EVID_EVQ_OFL_FLT, "EVQ_OFL_FLT", FALSE, FALSE },
{ VP_EVCAT_FAULT, VP_DEV_EVID_SYSTEM_FLT, "SYSTEM_FLT", TRUE, FALSE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_HOOK_OFF, "HOOK_OFF", FALSE, TRUE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_HOOK_ON, "HOOK_ON", FALSE, TRUE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_GKEY_DET, "GKEY_DET", FALSE, TRUE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_GKEY_REL, "GKEY_REL", FALSE, FALSE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_FLASH, "FLASH", FALSE, TRUE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_STARTPULSE, "STARTPULSE", FALSE, TRUE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_DTMF_DIG, "DTMF_DIG", TRUE, FALSE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_PULSE_DIG, "PULSE_DIG", TRUE, TRUE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_MTONE, "MTONE", FALSE, FALSE },
{ VP_EVCAT_SIGNALING, VP_DEV_EVID_TS_ROLLOVER, "TS_ROLLOVER", FALSE, FALSE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_US_TONE_DETECT, "US_TONE_DETECT", TRUE, TRUE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_DS_TONE_DETECT, "DS_TONE_DETECT", TRUE, TRUE },
{ VP_EVCAT_SIGNALING, VP_DEV_EVID_SEQUENCER, "SEQUENCER", TRUE, TRUE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_BREAK_MAX, "BREAK_MAX", TRUE, TRUE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_EXTD_FLASH, "EXTD_FLASH", FALSE, TRUE },
{ VP_EVCAT_SIGNALING, VP_LINE_EVID_HOOK_PREQUAL, "HOOK_PREQUAL", TRUE, TRUE },
{ VP_EVCAT_RESPONSE, VP_DEV_EVID_BOOT_CMP, "BOOT_CMP", TRUE, FALSE },
{ VP_EVCAT_RESPONSE, VP_LINE_EVID_LLCMD_TX_CMP, "LLCMD_TX_CMP", FALSE, FALSE },
{ VP_EVCAT_RESPONSE, VP_LINE_EVID_LLCMD_RX_CMP, "LLCMD_RX_CMP", FALSE, TRUE },
{ VP_EVCAT_RESPONSE, VP_DEV_EVID_DNSTR_MBOX, "DNSTR_MBOX", FALSE, FALSE },
{ VP_EVCAT_RESPONSE, VP_LINE_EVID_RD_OPTION, "RD_OPTION", TRUE, TRUE },
{ VP_EVCAT_RESPONSE, VP_LINE_EVID_RD_LOOP, "RD_LOOP", FALSE, TRUE },
{ VP_EVCAT_RESPONSE, VP_EVID_CAL_CMP, "CAL_CMP", FALSE, FALSE },
{ VP_EVCAT_RESPONSE, VP_EVID_CAL_BUSY, "CAL_BUSY", FALSE, FALSE },
{ VP_EVCAT_RESPONSE, VP_LINE_EVID_GAIN_CMP, "GAIN_CMP", FALSE, TRUE },
{ VP_EVCAT_RESPONSE, VP_DEV_EVID_DEV_INIT_CMP, "DEV_INIT_CMP", TRUE, FALSE },
{ VP_EVCAT_RESPONSE, VP_LINE_EVID_LINE_INIT_CMP, "LINE_INIT_CMP", FALSE, FALSE },
{ VP_EVCAT_RESPONSE, VP_DEV_EVID_IO_ACCESS_CMP, "IO_ACCESS_CMP", TRUE, FALSE },
{ VP_EVCAT_RESPONSE, VP_LINE_EVID_LINE_IO_RD_CMP, "LINE_IO_RD_CMP", FALSE, TRUE },
{ VP_EVCAT_RESPONSE, VP_LINE_EVID_LINE_IO_WR_CMP, "LINE_IO_WR_CMP", FALSE, TRUE },
{ VP_EVCAT_RESPONSE, VP_LINE_EVID_SLAC_INIT_CMP, "SLAC_INIT_CMP", TRUE, FALSE },
{ VP_EVCAT_TEST, VP_LINE_EVID_TEST_CMP, "TEST_CMP", FALSE, TRUE },
{ VP_EVCAT_TEST, VP_LINE_EVID_DTONE_DET, "DTONE_DET", TRUE, FALSE },
{ VP_EVCAT_TEST, VP_LINE_EVID_DTONE_LOSS, "DTONE_LOSS", TRUE, FALSE },
{ VP_EVCAT_TEST, VP_DEV_EVID_STEST_CMP, "STEST_CMP", TRUE, FALSE },
{ VP_EVCAT_TEST, VP_DEV_EVID_CHKSUM, "CHKSUM", FALSE, TRUE },
{ VP_EVCAT_PROCESS, VP_LINE_EVID_MTR_CMP, "MTR_CMP", FALSE, FALSE },
{ VP_EVCAT_PROCESS, VP_LINE_EVID_MTR_ABORT, "MTR_ABORT", TRUE, FALSE },
{ VP_EVCAT_PROCESS, VP_LINE_EVID_CID_DATA, "CID_DATA", TRUE, FALSE },
{ VP_EVCAT_PROCESS, VP_LINE_EVID_RING_CAD, "RING_CAD", TRUE, FALSE },
{ VP_EVCAT_PROCESS, VP_LINE_EVID_SIGNAL_CMP, "SIGNAL_CMP", TRUE, TRUE },
{ VP_EVCAT_PROCESS, VP_LINE_EVID_MTR_CAD, "MTR_CAD", TRUE, FALSE },
{ VP_EVCAT_PROCESS, VP_LINE_EVID_TONE_CAD, "TONE_CAD", FALSE, FALSE },
{ VP_EVCAT_PROCESS, VP_LINE_EVID_MTR_ROLLOVER, "MTR_ROLLOVER", TRUE, TRUE },
{ VP_EVCAT_FXO, VP_LINE_EVID_RING_ON, "RING_ON", FALSE, TRUE },
{ VP_EVCAT_FXO, VP_LINE_EVID_LIU, "LIU", FALSE, TRUE },
{ VP_EVCAT_FXO, VP_LINE_EVID_LNIU, "LNIU", FALSE, TRUE },
{ VP_EVCAT_FXO, VP_LINE_EVID_FEED_DIS, "FEED_DIS", FALSE, TRUE },
{ VP_EVCAT_FXO, VP_LINE_EVID_FEED_EN, "FEED_EN", FALSE, TRUE },
{ VP_EVCAT_FXO, VP_LINE_EVID_DISCONNECT, "DISCONNECT", FALSE, TRUE },
{ VP_EVCAT_FXO, VP_LINE_EVID_RECONNECT, "RECONNECT", FALSE, TRUE },
{ VP_EVCAT_FXO, VP_LINE_EVID_POLREV, "POLREV", TRUE, TRUE },
{ VP_EVCAT_FXO, VP_LINE_EVID_POH, "POH", TRUE, TRUE },
{ VP_EVCAT_FXO, VP_LINE_EVID_PNOH, "PNOH", TRUE, TRUE },
{ (VpEventCategoryType)0, 0, "", TRUE, TRUE }
};
const VpEventInfo *pEventInfo = eventInfoTable;
char eventDataStr[16] = "";
char parmHandleStr[16] = "";
char eventNameStr[32] = "";
bool lineSpecific = (pEvent->pLineCtx != VP_NULL);
if (pEvent->status != VP_STATUS_SUCCESS) {
VP_DOUT_(EVENT, VP_DBG_EVENT_COLOR, VpDevCtxType, pEvent->pDevCtx, ("status = %s", VpGetString_VpStatusType(pEvent->status)));
return;
}
/* Find the event in the table. */
while (
(pEventInfo->id != 0) &&
((pEventInfo->category != pEvent->eventCategory) || (pEventInfo->id != pEvent->eventId))
) {
pEventInfo++;
}
/* Build display strings. */
if (pEventInfo->id == 0) {
sprintf(eventNameStr, "cat=0x%4.4X id=0x%4.4X", pEvent->eventCategory, pEvent->eventId);
} else {
sprintf(eventNameStr, "id=%s", pEventInfo->nameStr);
}
if (pEventInfo->hasEventData) {
sprintf(eventDataStr, " data=0x%4.4X", pEvent->eventData);
}
if (pEventInfo->hasParmHandle) {
sprintf(parmHandleStr, " parm=0x%4.4X", pEvent->parmHandle);
}
#define PRINTF_VPEVENT \
("%s%s%s%s", eventNameStr, eventDataStr, parmHandleStr, (pEvent->hasResults ? " +results" : ""))
if (lineSpecific) {
VP_DOUT_(EVENT, VP_DBG_EVENT_COLOR, VpLineCtxType, pEvent->pLineCtx, PRINTF_VPEVENT);
} else {
VP_DOUT_(EVENT, VP_DBG_EVENT_COLOR, VpDevCtxType, pEvent->pDevCtx, PRINTF_VPEVENT);
}
}
void VpDisplayResults(
VpEventType *pEvent,
void *pResult)
{
char outbuf[800];
char *pOut = outbuf + sprintf(outbuf, "results={");
bool lineSpecific = (pEvent->pLineCtx != VP_NULL);
VpEventCategoryType cat = pEvent->eventCategory;
uint16 id = pEvent->eventId;
if (!pEvent->hasResults) {
return;
}
if (
((cat == VP_EVCAT_RESPONSE) && (id == VP_DEV_EVID_BOOT_CMP)) ||
((cat == VP_EVCAT_TEST) && (id == VP_DEV_EVID_CHKSUM))
) {
VpChkSumType *pChkSum = (VpChkSumType *)pResult;
pOut += sprintf(pOut, "loadChecksum=0x%8.8X ", (unsigned)pChkSum->loadChecksum);
pOut += sprintf(pOut, "vInfo={");
pOut += sprintf(pOut, "vtdRevCode=0x%4.4X ", pChkSum->vInfo.vtdRevCode);
pOut += sprintf(pOut, "swProductId=0x%2.2X ", pChkSum->vInfo.swProductId);
pOut += sprintf(pOut, "swVerMajor=0x%2.2X ", pChkSum->vInfo.swVerMajor);
pOut += sprintf(pOut, "swVerMinor=0x%2.2X}", pChkSum->vInfo.swVerMinor);
} else if ((cat == VP_EVCAT_TEST) && (id == VP_LINE_EVID_TEST_CMP)) {
/* To do */
pOut += sprintf(pOut, "(test result not displayed)");
} else if (cat == VP_EVCAT_RESPONSE) {
switch (pEvent->eventId) {
case VP_LINE_EVID_LLCMD_RX_CMP: {
uint8 *pData = (uint8 *)pResult;
uint16 bytes = pEvent->eventData;
while (bytes--) {
pOut += sprintf(pOut, " %2.2X", *(pData++));
}
break;
}
case VP_LINE_EVID_RD_OPTION:
/* To do */
pOut += sprintf(pOut, "(option value not displayed)");
break;
case VP_LINE_EVID_RD_LOOP: {
VpLoopCondResultsType *pLoopCond = (VpLoopCondResultsType *)pResult;
pOut += sprintf(pOut, "rloop=%d ", pLoopCond->rloop);
pOut += sprintf(pOut, "ilg=%d ", pLoopCond->ilg);
pOut += sprintf(pOut, "imt=%d ", pLoopCond->imt);
pOut += sprintf(pOut, "vbat1=%d ", pLoopCond->vbat1);
pOut += sprintf(pOut, "vsab=%d ", pLoopCond->vsab);
pOut += sprintf(pOut, "vbat2=%d ", pLoopCond->vbat2);
pOut += sprintf(pOut, "mspl=%d ", pLoopCond->mspl);
pOut += sprintf(pOut, "vbat3=%d ", pLoopCond->vbat3);
pOut += sprintf(pOut, "selectedBat=%d ", pLoopCond->selectedBat);
pOut += sprintf(pOut, "dcFeedReg=%d", pLoopCond->dcFeedReg);
break;
}
case VP_LINE_EVID_GAIN_CMP: {
VpRelGainResultsType *pRelGain = (VpRelGainResultsType *)pResult;
pOut += sprintf(pOut, "gResult=%d ", pRelGain->gResult);
pOut += sprintf(pOut, "gxValue=%4.4X ", pRelGain->gxValue);
pOut += sprintf(pOut, "grValue=%4.4X", pRelGain->grValue);
break;
}
case VP_DEV_EVID_IO_ACCESS_CMP:
/* We can't distinguish between VpDeviceIoAccessDataType and
VpDeviceIoAccessExtType here. */
pOut += sprintf(pOut, "(cannot display result)");
break;
case VP_LINE_EVID_LINE_IO_RD_CMP: {
VpLineIoAccessType *pLineIoAccess = (VpLineIoAccessType *)pResult;
pOut += sprintf(pOut, "direction=%d ", pLineIoAccess->direction);
pOut += sprintf(pOut, "ioBits={");
pOut += sprintf(pOut, "mask=%2.2X ", pLineIoAccess->ioBits.mask);
pOut += sprintf(pOut, "data=%2.2X}", pLineIoAccess->ioBits.data);
break;
}
case VP_LINE_EVID_QUERY_CMP: {
VpQueryResultsType *pQueryResults = (VpQueryResultsType *)pResult;
int i;
switch (pEvent->eventData) {
case VP_QUERY_ID_TEMPERATURE:
pOut += sprintf(pOut, "temp=%d", pQueryResults->temp);
break;
case VP_QUERY_ID_METER_COUNT:
pOut += sprintf(pOut, "meterCount=%u", pQueryResults->meterCount);
break;
case VP_QUERY_ID_LOOP_RES:
pOut += sprintf(pOut, "rloop=%u", pQueryResults->rloop);
break;
case VP_QUERY_ID_SEAL_CUR:
pOut += sprintf(pOut, "sealCur={");
pOut += sprintf(pOut, "sealApplyTime=%u ", pQueryResults->sealCur.sealApplyTime);
pOut += sprintf(pOut, "sealCycleTime=%u ", pQueryResults->sealCur.sealCycleTime);
pOut += sprintf(pOut, "maxCurrent=%u ", pQueryResults->sealCur.maxCurrent);
pOut += sprintf(pOut, "minCurrent=%u ", pQueryResults->sealCur.minCurrent);
pOut += sprintf(pOut, "sealMaskArray[]={");
for (i = 0; i < VP_SEAL_CURRENT_ARRAY_SIZE; i++) {
pOut += sprintf(pOut, "0x%4.4X ", pQueryResults->sealCur.sealMaskArray[i]);
}
pOut += sprintf(pOut, "} }");
break;
default:
/* Unknown Query ID. */
VP_ERROR(VpDevCtxType, pEvent->pDevCtx, ("Unknown query ID %d", pEvent->eventData));
return;
}
break;
}
default:
VP_ERROR(VpDevCtxType, pEvent->pDevCtx, ("Unknown event results type (eventId=0x%4.4X)", pEvent->eventId));
return;
}
}
sprintf(pOut, "}");
if (lineSpecific) {
VP_DOUT_(EVENT, VP_DBG_EVENT_COLOR, VpLineCtxType, pEvent->pLineCtx, ("%s", outbuf));
} else {
VP_DOUT_(EVENT, VP_DBG_EVENT_COLOR, VpDevCtxType, pEvent->pDevCtx, ("%s", outbuf));
}
}
#endif /* (VP_CC_DEBUG_SELECT & VP_DBG_EVENT) */
#if ((VP_CC_DEBUG_SELECT & VP_DBG_HAL) && (defined(VP_CC_VCP2_SERIES) || defined(VP_CC_MELT_SERIES) || \
defined(VP_CC_VCP_SERIES) || defined(VP_CC_792_SERIES)))
void
VpDisplayHbiAccess(
VpDeviceType deviceType,
VpDeviceIdType deviceId,
unsigned bufLen,
uint16 *buf)
{
VP_HAL(VpDeviceIdType, &deviceId, ("%u-word opaque HBI block {", bufLen));
while (bufLen > 0) {
uint16 cmd = *buf++;
unsigned dataLength = VpDisplayHbiCmd(deviceType, deviceId, cmd);
bufLen--;
if (dataLength > 0) {
if (dataLength > bufLen) {
VP_ERROR(VpDeviceIdType, &deviceId, ("Not enough data for HAL Access!"));
dataLength = bufLen;
}
VpDisplayHbiData(deviceId, dataLength, buf);
buf += dataLength;
bufLen -= dataLength;
}
}
VP_HAL(VpDeviceIdType, &deviceId, ("} end of block"));
}
#define HBI_WORDS_PER_LINE 8
#define HBI_WORD_FILLER "---- "
#define HBI_COMMAND_LINE_FILLER " = "
unsigned
VpDisplayHbiCmd(
VpDeviceType deviceType,
VpDeviceIdType deviceId,
uint16 cmd)
{
char output[128];
unsigned dataLength = 0;
switch (deviceType) {
#if (defined(VP_CC_VCP2_SERIES) || defined(VP_CC_MELT_SERIES) || defined(VP_CC_VCP_SERIES))
case VP_DEV_VCP_SERIES:
case VP_DEV_VCP2_SERIES:
case VP_DEV_MELT_SERIES:
if (cmd == 0xFFFF) {
sprintf(output, "%4.4X%s%s", (int)cmd, HBI_COMMAND_LINE_FILLER, "No Op");
} else if ((cmd & 0xFF00) == 0xFE00) {
sprintf(output, "%4.4X%s%s 0x%2.2X", (int)cmd, HBI_COMMAND_LINE_FILLER,
"Select Page", (int)(cmd & 0xFF));
} else if ((cmd & 0xFF00) == (0xFD00)) {
sprintf(output, "%4.4X%s%s 0x%2.2X", (int)cmd, HBI_COMMAND_LINE_FILLER,
"Config Interface", (int)(cmd & 0xFF));
} else if ((cmd & 0xFE00) == (0xFA00)) {
dataLength = (cmd & 0xFF) + 1;
sprintf(output, "%4.4X%s%s (%u word%s)", (int)cmd, HBI_COMMAND_LINE_FILLER,
"Continue Paged Access", dataLength, (dataLength > 1 ? "s" : ""));
} else if ((cmd & 0xFE00) == (0xF800)) {
dataLength = (cmd & 0xFF) + 1;
sprintf(output, "%4.4X%s%s (%u word%s)", (int)cmd, HBI_COMMAND_LINE_FILLER,
"Start Paged Access", dataLength, (dataLength > 1 ? "s" : ""));
} else {
unsigned offset = (cmd & 0x7F00) >> 8;
bool direct = ((cmd & 0x8000) != 0);
bool write = ((cmd & 0x0080) != 0);
dataLength = (cmd & 0x007F) + 1;
sprintf(output, "%4.4X%s%s Offset %s (%u word%s at offset 0x%2.2X)", (int)cmd,
HBI_COMMAND_LINE_FILLER, (direct ? "Direct" : "Paged"),
(write ? "Write" : "Read"), dataLength, (dataLength > 1 ? "s" : ""),
offset);
}
break;
#endif /* (defined(VP_CC_VCP2_SERIES) || defined(VP_CC_VCP_SERIES) || defined(VP_CC_MELT_SERIES)) */
#ifdef VP_CC_792_SERIES
case VP_DEV_792_SERIES:
if (cmd == 0xFFFF) {
sprintf(output, "%4.4X%s %s", (int)cmd, HBI_COMMAND_LINE_FILLER, "No Op");
} else if (cmd == 0xF701) {
dataLength = 2;
sprintf(output, "%4.4X%s %s", (int)cmd, HBI_COMMAND_LINE_FILLER, "Read Shared Interrupt Regs");
} else if ((cmd & 0xFF00) == (0xFD00)) {
sprintf(output, "%4.4X%s %s 0x%2.2X", (int)cmd, HBI_COMMAND_LINE_FILLER,
"Config Interface", (int)(cmd & 0xFF));
} else if ((cmd & 0xFF00) == 0xFE00) {
if ((cmd & 0x00FF) == 0x00FF) {
sprintf(output, "%4.4X%s %s", (int)cmd, HBI_COMMAND_LINE_FILLER,
"Code Load Page Broadcast");
} else if ((cmd & 0x008F) == 0x0080) {
unsigned slacId = (cmd & 0x0070) >> 4;
sprintf(output, "%4.4X%s(slac %u) %s", (int)cmd, HBI_COMMAND_LINE_FILLER, slacId,
"Select Code Load Page");
} else if ((cmd & 0x0080) == 0x0000) {
unsigned slacId = (cmd & 0x0070) >> 4;
unsigned page = cmd & 0x000F;
sprintf(output, "%4.4X%s(slac %u) %s %u", (int)cmd, HBI_COMMAND_LINE_FILLER, slacId,
"Select Page", page);
} else {
sprintf(output, "%4.4X%s%s", (int)cmd, HBI_COMMAND_LINE_FILLER,
"INVALID COMMAND WORD!");
}
} else if ((cmd & 0xFF00) == (0xFD00)) {
sprintf(output, "%4.4X%s %s 0x%2.2X", (int)cmd, HBI_COMMAND_LINE_FILLER,
"Config Interface", (int)(cmd & 0xFF));
} else if ((cmd & 0xFF00) == (0xFC00)) {
unsigned offset = (cmd & 0x00F0) >> 4;
dataLength = (cmd & 0x000F) + 1;
sprintf(output, "%4.4X%s %s (%u word%s at offset 0x%2.2X)", (int)cmd, HBI_COMMAND_LINE_FILLER,
"Direct Page Broadcast", dataLength, (dataLength > 1 ? "s" : ""), offset);
} else if ((cmd & 0xFE00) == (0xFA00)) {
dataLength = (cmd & 0xFF) + 1;
sprintf(output, "%4.4X%s %s (%u word%s)", (int)cmd, HBI_COMMAND_LINE_FILLER,
"Continue Mailbox Access", dataLength, (dataLength > 1 ? "s" : ""));
} else if ((cmd & 0xFE00) == (0xF800)) {
dataLength = (cmd & 0xFF) + 1;
sprintf(output, "%4.4X%s %s (%u word%s)", (int)cmd, HBI_COMMAND_LINE_FILLER,
"Start Mailbox Access", dataLength, (dataLength > 1 ? "s" : ""));
} else if (cmd & 0x8000) {
unsigned offset = (cmd & 0x7F00) >> 8;
bool write = (cmd & 0x0080);
unsigned slacId = (cmd & 0x0070) >> 4;
dataLength = (cmd & 0x000F) + 1;
sprintf(output, "%4.4X%s(slac %u) %s %s (%u word%s at offset 0x%2.2X)",
(int)cmd, HBI_COMMAND_LINE_FILLER, slacId,
"Direct Page", (write ? "Write" : "Read"), dataLength,
(dataLength > 1 ? "s" : ""), offset);
} else {
unsigned offset = (cmd & 0x7F00) >> 8;
bool write = ((cmd & 0x0080) != 0);
dataLength = (cmd & 0x007F) + 1;
sprintf(output, "%4.4X%s Paged %s (%u word%s at offset 0x%2.2X)", (int)cmd,
HBI_COMMAND_LINE_FILLER, (write ? "Write" : "Read"), dataLength,
(dataLength > 1 ? "s" : ""), offset);
}
break;
#endif /* VP_CC_792_SERIES */
default:
sprintf(output, "%4.4X (cmd)", (int)cmd);
}
VP_HAL(VpDeviceIdType, &deviceId, ("%s", output));
return dataLength;
}
void
VpDisplayHbiData(
VpDeviceIdType deviceId,
unsigned bufLen,
uint16 *buf)
{
char output[128] = " ";
char *pOut = &output[7];
unsigned disp = 0;
if (buf == VP_NULL) {
VP_HAL(VpDeviceIdType, &deviceId, (" (%u words of zeroes)", bufLen));
return;
}
while (bufLen--) {
pOut += sprintf(pOut, "%4.4X ", *buf++);
disp++;
if ((bufLen == 0) || ((disp % HBI_WORDS_PER_LINE) == 0)) {
VP_HAL(VpDeviceIdType, &deviceId, ("%s", output));
pOut = &output[7];
}
}
}
bool
VpHalHbiReadWrapper(
VpDeviceType deviceType,
VpDeviceIdType deviceId,
uint16 cmd,
uint8 numwords,
uint16p data)
{
bool status = VpHalHbiRead(deviceId, cmd, numwords, data);
VpDisplayHbiCmd(deviceType, deviceId, cmd);
VpDisplayHbiData(deviceId, numwords + 1, data);
return status;
}
#endif /* ((VP_CC_DEBUG_SELECT & VP_DBG_HAL) && (defined(VP_CC_VCP2_SERIES) || defined(VP_CC_MELT_SERIES) || defined(VP_CC_VCP_SERIES))) */
#if (VP_CC_DEBUG_SELECT & VP_DBG_SSL)
const char *
VpGetString_VpCriticalSecType(
VpCriticalSecType criticalSecType)
{
static const char *strTable[VP_NUM_CRITICAL_SEC_TYPES] = {
"VP_MPI_CRITICAL_SEC",
"VP_HBI_CRITICAL_SEC",
"VP_CODE_CRITICAL_SEC"
};
VP_ASSERT(VP_NUM_CRITICAL_SEC_TYPES == VP_CODE_CRITICAL_SEC + 1);
return VpGetEnumString(strTable, VP_NUM_CRITICAL_SEC_TYPES, (int)criticalSecType);
}
uint8
VpSysEnterCriticalWrapper(
VpDeviceIdType deviceId,
VpCriticalSecType criticalSecType)
{
uint8 depth = VpSysEnterCritical(deviceId, criticalSecType);
VP_SSL(VpDeviceIdType, &(deviceId), ("VpSysEnterCritical(%s) = %u", VpGetString_VpCriticalSecType(criticalSecType), (unsigned)depth));
return depth;
}
uint8
VpSysExitCriticalWrapper(
VpDeviceIdType deviceId,
VpCriticalSecType criticalSecType)
{
uint8 depth = VpSysExitCritical(deviceId, criticalSecType);
VP_SSL(VpDeviceIdType, &(deviceId), ("VpSysExitCritical(%s) = %u", VpGetString_VpCriticalSecType(criticalSecType), (unsigned)depth));
return depth;
}
#endif /* (VP_CC_DEBUG_SELECT & VP_DBG_SSL) */
#if defined (VP_CC_880_SERIES) || defined (VP_CC_890_SERIES)
#if (VP_CC_DEBUG_SELECT & VP_DBG_ERROR)
void
VpPrintTermType(
VpTermType termType)
{
#define VP_SUPPORT_TERM_SIZE (8)
uint8 termIndex;
VpTermType termSupported[VP_SUPPORT_TERM_SIZE] = {
VP_TERM_FXS_GENERIC, VP_TERM_FXS_ISOLATE, VP_TERM_FXS_SPLITTER,
VP_TERM_FXS_LOW_PWR, VP_TERM_FXS_SPLITTER_LP, VP_TERM_FXS_ISOLATE_LP,
VP_TERM_FXO_GENERIC, VP_TERM_FXO_DISC
};
char *termString[VP_SUPPORT_TERM_SIZE] = {
"VP_TERM_FXS_GENERIC", "VP_TERM_FXS_ISOLATE", "VP_TERM_FXS_SPLITTER",
"VP_TERM_FXS_LOW_PWR", "VP_TERM_FXS_SPLITTER_LP", "VP_TERM_FXS_ISOLATE_LP",
"VP_TERM_FXO_GENERIC", "VP_TERM_FXO_DISC"
};
for (termIndex = 0; termIndex < VP_SUPPORT_TERM_SIZE; termIndex++) {
if (termType == termSupported[termIndex]) {
VpSysDebugPrintf("\n\n\rpLineObj->termType = %d : %s",
termType, termString[termIndex]);
return;
}
}
VpSysDebugPrintf("\n\n\rpLineObj->termType = %d : UNKNOWN TERM TYPE",
termType);
}
void
VpPrintLineStateType(
VpLineStateType lineState,
char *strLineState)
{
#define VP_SUPPORT_STATE_SIZE (18)
uint8 stateIndex;
VpLineStateType lineStateArray[VP_SUPPORT_STATE_SIZE] = {
VP_LINE_STANDBY, VP_LINE_TIP_OPEN, VP_LINE_ACTIVE, VP_LINE_ACTIVE_POLREV,
VP_LINE_TALK, VP_LINE_TALK_POLREV, VP_LINE_OHT, VP_LINE_OHT_POLREV,
VP_LINE_DISCONNECT, VP_LINE_RINGING, VP_LINE_RINGING_POLREV,
VP_LINE_STANDBY_POLREV, VP_LINE_RING_OPEN, VP_LINE_FXO_OHT,
VP_LINE_FXO_LOOP_OPEN, VP_LINE_FXO_LOOP_CLOSE, VP_LINE_FXO_TALK,
VP_LINE_FXO_RING_GND
};
char *lineStateStr[VP_SUPPORT_STATE_SIZE] = {
"VP_LINE_STANDBY", "VP_LINE_TIP_OPEN", "VP_LINE_ACTIVE",
"VP_LINE_ACTIVE_POLREV", "VP_LINE_TALK", "VP_LINE_TALK_POLREV",
"VP_LINE_OHT", "VP_LINE_OHT_POLREV", "VP_LINE_DISCONNECT",
"VP_LINE_RINGING", "VP_LINE_RINGING_POLREV", "VP_LINE_STANDBY_POLREV",
"VP_LINE_RING_OPEN", "VP_LINE_FXO_OHT", "VP_LINE_FXO_LOOP_OPEN",
"VP_LINE_FXO_LOOP_CLOSE", "VP_LINE_FXO_TALK", "VP_LINE_FXO_RING_GND"
};
for (stateIndex = 0; stateIndex < VP_SUPPORT_STATE_SIZE; stateIndex++) {
if (lineState == lineStateArray[stateIndex]) {
VpSysDebugPrintf("\n\r%s = %d : %s",
strLineState, lineState, lineStateStr[stateIndex]);
return;
}
}
VpSysDebugPrintf("\n\r%s = %d : UNKNOWN LINE STATE",
strLineState, lineState);
}
void
VpPrintOptionRingControlType(
VpOptionRingControlType *ringCtrl)
{
VpPrintOptionZeroCrossType(ringCtrl->zeroCross);
VpSysDebugPrintf("\npLineObj->ringCtrl.ringExitDbncDur = %d", ringCtrl->ringExitDbncDur);
VpPrintLineStateType(ringCtrl->ringTripExitSt, "pLineObj->ringCtrl.ringTripExitSt");
}
void
VpPrintOptionZeroCrossType(
VpOptionZeroCrossType zeroCross)
{
switch(zeroCross) {
case VP_OPTION_ZC_M4B:
VpSysDebugPrintf("\npLineObj->ringCtrl.zeroCross = VP_OPTION_ZC_M4B");
break;
case VP_OPTION_ZC_B4M:
VpSysDebugPrintf("\npLineObj->ringCtrl.zeroCross = VP_OPTION_ZC_B4M");
break;
case VP_OPTION_ZC_NONE:
VpSysDebugPrintf("\npLineObj->ringCtrl.zeroCross = VP_OPTION_ZC_NONE");
break;
default:
VpSysDebugPrintf("\npLineObj->ringCtrl.zeroCross = UNKNOWN (%d)",
zeroCross);
}
}
void
VpPrintRelayControlType(
VpRelayControlType relayState)
{
switch(relayState) {
case VP_RELAY_NORMAL:
VpSysDebugPrintf("\npLineObj->relayState = VP_RELAY_NORMAL");
break;
case VP_RELAY_RESET:
VpSysDebugPrintf("\npLineObj->relayState = VP_RELAY_RESET");
break;
case VP_RELAY_BRIDGED_TEST:
VpSysDebugPrintf("\npLineObj->relayState = VP_RELAY_BRIDGED_TEST");
break;
default:
VpSysDebugPrintf("\npLineObj->relayState = UNKNOWN (%d)",
relayState);
}
}
void
VpPrintOptionCodecType(
VpOptionCodecType codec)
{
char *codecStr[] = {
"VP_OPTION_ALAW", "VP_OPTION_MLAW", "VP_OPTION_LINEAR",
"VP_OPTION_WIDEBAND"
};
if (codec <= 3) {
VpSysDebugPrintf("\npLineObj->codec = %s", codecStr[codec]);
} else {
VpSysDebugPrintf("\npLineObj->codec = UNKNOWN (%d)", codec);
}
}
void
VpPrintOptionPcmTxRxCntrlType(
VpOptionPcmTxRxCntrlType pcmTxRxCtrl)
{
char *pcmCtrlStr[] = {
"VP_OPTION_PCM_BOTH", "VP_OPTION_PCM_RX_ONLY", "VP_OPTION_PCM_TX_ONLY",
"VP_OPTION_PCM_ALWAYS_ON"
};
if (pcmTxRxCtrl <= 3) {
VpSysDebugPrintf("\npLineObj->pcmTxRxCtrl = %s", pcmCtrlStr[pcmTxRxCtrl]);
} else {
VpSysDebugPrintf("\npLineObj->pcmTxRxCtrl = UNKNOWN (%d)", pcmTxRxCtrl);
}
}
void
VpPrintCallerIdType(
VpCallerIdType *callerId)
{
uint8 msgIndex;
VpSysDebugPrintf("\n\npLineObj->callerId.status = 0x%08lX", callerId->status);
VpSysDebugPrintf("\npLineObj->callerId.dtmfStatus = 0x%04X", callerId->dtmfStatus);
VpSysDebugPrintf("\npLineObj->callerId.digitDet = 0x%04X", callerId->digitDet);
VpSysDebugPrintf("\npLineObj->callerId.cliTimer = %d", callerId->cliTimer);
VpSysDebugPrintf("\npLineObj->callerId.currentData = 0x%02X", callerId->currentData);
VpSysDebugPrintf("\npLineObj->callerId.cidCheckSum = 0x%04X", callerId->cidCheckSum);
VpSysDebugPrintf("\npLineObj->callerId.cliDebounceTime = %d", callerId->cliDebounceTime);
VpSysDebugPrintf("\npLineObj->callerId.pCliProfile = %p", callerId->pCliProfile);
VpSysDebugPrintf("\npLineObj->callerId.cliDetectTone1 = 0x%04X", callerId->cliDetectTone1);
VpSysDebugPrintf("\npLineObj->callerId.cliDetectTone2 = 0x%04X", callerId->cliDetectTone2);
VpSysDebugPrintf("\npLineObj->callerId.cliMPIndex = %d", callerId->cliMPIndex);
VpSysDebugPrintf("\npLineObj->callerId.cliMSIndex = %d", callerId->cliMSIndex);
VpSysDebugPrintf("\npLineObj->callerId.cliIndex = %d", callerId->cliIndex);
VpSysDebugPrintf("\npLineObj->callerId.primaryMsgLen = %d", callerId->primaryMsgLen);
VpSysDebugPrintf("\npLineObj->callerId.primaryBuffer =");
for (msgIndex = 0; msgIndex < VP_SIZEOF_CID_MSG_BUFFER; msgIndex++) {
if (!(msgIndex % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" 0x%02X", callerId->primaryBuffer[msgIndex]);
}
VpSysDebugPrintf("\npLineObj->callerId.secondaryMsgLen = %d", callerId->secondaryMsgLen);
VpSysDebugPrintf("\npLineObj->callerId.secondaryBuffer =");
for (msgIndex = 0; msgIndex < VP_SIZEOF_CID_MSG_BUFFER; msgIndex++) {
if (!(msgIndex % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" 0x%02X", callerId->secondaryBuffer[msgIndex]);
}
}
void
VpPrintVpCslacTimerStruct(
VpCslacTimerStruct *lineTimers)
{
if (lineTimers->type == VP_CSLAC_FXO_TIMER) {
#if (defined(VP_CC_880_SERIES) && defined(VP880_FXO_SUPPORT)) \
|| (defined(VP_CC_890_SERIES) && defined(VP890_FXO_SUPPORT))
VpSysDebugPrintf("\npLineObj->lineTimers.type = VP_CSLAC_FXO_TIMER");
VpSysDebugPrintf("\n\ttimers.fxoTimer.highToLowTime = %d",
lineTimers->timers.fxoTimer.highToLowTime);
VpSysDebugPrintf("\n\ttimers.fxoTimer.prevHighToLowTime = %d",
lineTimers->timers.fxoTimer.prevHighToLowTime);
VpSysDebugPrintf("\n\ttimers.fxoTimer.timeLastPolRev = %d",
lineTimers->timers.fxoTimer.timeLastPolRev);
VpSysDebugPrintf("\n\ttimers.fxoTimer.timePrevPolRev = %d",
lineTimers->timers.fxoTimer.timePrevPolRev);
VpSysDebugPrintf("\n\ttimers.fxoTimer.maxPeriod = %d",
lineTimers->timers.fxoTimer.maxPeriod);
VpSysDebugPrintf("\n\ttimers.fxoTimer.lastStateChange = %d",
lineTimers->timers.fxoTimer.lastStateChange);
VpSysDebugPrintf("\n\ttimers.fxoTimer.lastNotLiu = %d",
lineTimers->timers.fxoTimer.lastNotLiu);
VpSysDebugPrintf("\n\ttimers.fxoTimer.disconnectDebounce = %d",
lineTimers->timers.fxoTimer.disconnectDebounce);
VpSysDebugPrintf("\n\ttimers.fxoTimer.disconnectDuration = %d",
lineTimers->timers.fxoTimer.disconnectDuration);
VpSysDebugPrintf("\n\ttimers.fxoTimer.liuDebounce = %d",
lineTimers->timers.fxoTimer.liuDebounce);
VpSysDebugPrintf("\n\ttimers.fxoTimer.ringOffDebounce = %d",
lineTimers->timers.fxoTimer.ringOffDebounce);
VpSysDebugPrintf("\n\ttimers.fxoTimer.ringTimer = %d",
lineTimers->timers.fxoTimer.ringTimer);
VpSysDebugPrintf("\n\ttimers.fxoTimer.cidCorrectionTimer = %d",
lineTimers->timers.fxoTimer.cidCorrectionTimer);
VpSysDebugPrintf("\n\ttimers.fxoTimer.bCalTimer = %d",
lineTimers->timers.fxoTimer.bCalTimer);
VpSysDebugPrintf("\n\ttimers.fxoTimer.fxoDiscIO2Change = %d",
lineTimers->timers.fxoTimer.fxoDiscIO2Change);
VpSysDebugPrintf("\n\ttimers.fxoTimer.pllRecovery = %d",
lineTimers->timers.fxoTimer.pllRecovery);
VpSysDebugPrintf("\n\ttimers.fxoTimer.currentMonitorTimer = %d",
lineTimers->timers.fxoTimer.currentMonitorTimer);
VpSysDebugPrintf("\n\ttimers.fxoTimer.measureBFilterTimer = %d",
lineTimers->timers.fxoTimer.measureBFilterTimer);
VpSysDebugPrintf("\n\ttimers.fxoTimer.lowVoltageTimer = %d",
lineTimers->timers.fxoTimer.lowVoltageTimer);
VpSysDebugPrintf("\n\rpLineObj->cadence.noCount = %s",
((lineTimers->timers.fxoTimer.noCount == TRUE) ? "TRUE" : "FALSE"));
VpSysDebugPrintf("\n\rpLineObj->cadence.lastState = %s",
((lineTimers->timers.fxoTimer.lastState == TRUE) ? "TRUE" : "FALSE"));
#endif
} else {
uint8 timerIndex;
char *timerNames[VP_LINE_TIMER_LAST] = {
"VP_LINE_CID_DEBOUNCE", "VP_LINE_TIMER_CID_DTMF",
"VP_LINE_TIMER_FAULT", "VP_LINE_RING_EXIT_PROCESS",
"VP_LINE_HOOK_FREEZE", "VP_LINE_DISCONNECT_EXIT",
"VP_LINE_GND_START_TIMER", "VP_LINE_CAL_LINE_TIMER",
"VP_LINE_PING_TIMER", "VP_LINE_TRACKER_DISABLE",
"VP_LINE_GPIO_CLKOUT_TIMER", "VP_LINE_INTERNAL_TESTTERM_TIMER",
"VP_LINE_SPEEDUP_RECOVERY_TIMER"
};
VpSysDebugPrintf("\npLineObj->lineTimers.type = VP_CSLAC_FXS_TIMER");
VpSysDebugPrintf("\npLineObj->lineTimers.trackingTime = %d",
lineTimers->timers.trackingTime);
VpSysDebugPrintf("\npLineObj->lineTimers.timer =");
for (timerIndex = 0; timerIndex < VP_LINE_TIMER_LAST; timerIndex++) {
if (!(timerIndex % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" 0x%04X", lineTimers->timers.timer[timerIndex]);
if (lineTimers->timers.timer[timerIndex] & VP_ACTIVATE_TIMER) {
VpSysDebugPrintf(" - %s is Active\n\t", timerNames[timerIndex]);
}
}
}
}
void
VpPrintSeqDataType(
VpSeqDataType *cadence)
{
VpSysDebugPrintf("\n\npLineObj->cadence.pActiveCadence = %p", cadence->pActiveCadence);
VpSysDebugPrintf("\npLineObj->cadence.pCurrentPos = %p", cadence->pCurrentPos);
VpSysDebugPrintf("\npLineObj->cadence.status = 0x%04X", cadence->status);
VpSysDebugPrintf("\npLineObj->cadence.index = %d", cadence->index);
VpSysDebugPrintf("\npLineObj->cadence.length = %d", cadence->length);
{
uint8 branchDepth;
VpSysDebugPrintf("\npLineObj->cadence.count =");
for (branchDepth = 0; branchDepth < VP_CSLAC_MAX_BRANCH_DEPTH; branchDepth++) {
VpSysDebugPrintf(" 0x%02X", cadence->count[branchDepth]);
}
}
{
uint8 regDataIndex;
VpSysDebugPrintf("\npLineObj->cadence.regData =");
for (regDataIndex = 0; regDataIndex < VPCSLAC_MAX_GENERATOR_DATA; regDataIndex++) {
if (!(regDataIndex % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" 0x%02X", cadence->regData[regDataIndex]);
}
}
VpSysDebugPrintf("\npLineObj->cadence.timeRemain = %d", cadence->timeRemain);
VpSysDebugPrintf("\npLineObj->cadence.branchAt = %d", cadence->branchAt);
VpSysDebugPrintf("\npLineObj->cadence.meteringBurst = %d", cadence->meteringBurst);
VpSysDebugPrintf("\n\rpLineObj->cadence.meterPendingAbort = %s",
((cadence->meterPendingAbort == TRUE) ? "TRUE" : "FALSE"));
VpPrintLineStateType(cadence->meterAbortLineState, "pLineObj->cadence.meterAbortLineState");
VpSysDebugPrintf("\npLineObj->cadence.startFreq = 0x%04X", cadence->startFreq);
VpSysDebugPrintf("\npLineObj->cadence.stopFreq = 0x%04X", cadence->stopFreq);
VpSysDebugPrintf("\npLineObj->cadence.freqStep = 0x%04X", cadence->freqStep);
VpSysDebugPrintf("\n\rpLineObj->cadence.isFreqIncrease = %s",
((cadence->isFreqIncrease == TRUE) ? "TRUE" : "FALSE"));
VpSysDebugPrintf("\npLineObj->cadence.startLevel = 0x%04X", cadence->startLevel);
VpSysDebugPrintf("\npLineObj->cadence.stopLevel = 0x%04X", cadence->stopLevel);
VpSysDebugPrintf("\npLineObj->cadence.levelStep = 0x%04X", cadence->levelStep);
}
void
VpPrintCidSeqDataType(
VpCidSeqDataType *cidSeq)
{
VpSysDebugPrintf("\n\npLineObj->cidSeq.pActiveCadence = %p", cidSeq->pActiveCadence);
VpSysDebugPrintf("\npLineObj->cidSeq.pCurrentPos = %p", cidSeq->pCurrentPos);
VpSysDebugPrintf("\npLineObj->cidSeq.index = %d", cidSeq->index);
VpSysDebugPrintf("\npLineObj->cidSeq.timeRemain = %d", cidSeq->timeRemain);
}
void
VpPrintApiIntLineState(
VpApiIntLineStateType *lineState)
{
VpPrintLineStateType(lineState->currentState, "pLineObj->lineState.currentState");
VpPrintLineStateType(lineState->previous, "pLineObj->lineState.previous");
VpPrintLineStateType(lineState->usrCurrent, "pLineObj->lineState.usrCurrent");
VpSysDebugPrintf("\npLineObj->lineState.condition = 0x%04X", lineState->condition);
VpSysDebugPrintf("\npLineObj->lineState.calType = %d", lineState->calType);
}
void
VpPrintDigitGenDataType(
VpDigitGenerationDataType *digitGenStruct)
{
VpSysDebugPrintf("\n\rpLineObj->digitGenStruct.dtmfOnTime = %d",
digitGenStruct->dtmfOnTime);
VpSysDebugPrintf("\n\rpLineObj->digitGenStruct.dtmfOffTime = %d",
digitGenStruct->dtmfOffTime);
VpSysDebugPrintf("\n\rpLineObj->digitGenStruct.breakTime = %d",
digitGenStruct->breakTime);
VpSysDebugPrintf("\n\rpLineObj->digitGenStruct.makeTime = %d",
digitGenStruct->makeTime);
VpSysDebugPrintf("\n\rpLineObj->digitGenStruct.flashTime = %d",
digitGenStruct->flashTime);
VpSysDebugPrintf("\n\rpLineObj->digitGenStruct.dpInterDigitTime = %d",
digitGenStruct->dpInterDigitTime);
VpSysDebugPrintf("\n\rpLineObj->digitGenStruct.dtmfHighFreqLevel = %d %d",
digitGenStruct->dtmfHighFreqLevel[0], digitGenStruct->dtmfHighFreqLevel[1]);
VpSysDebugPrintf("\n\rpLineObj->digitGenStruct.dtmfLowFreqLevel = %d %d",
digitGenStruct->dtmfLowFreqLevel[0], digitGenStruct->dtmfLowFreqLevel[1]);
}
void
VpPrintDynamicInfoStruct(
VpDeviceDynamicInfoType *dynamicInfo)
{
VpSysDebugPrintf("\n\n\rpDevObj->dynamicInfo.lastChan = %d",
dynamicInfo->lastChan);
VpSysDebugPrintf("\n\rpDevObj->dynamicInfo.clkFault = %s",
((dynamicInfo->clkFault == TRUE) ? "TRUE" : "FALSE"));
VpSysDebugPrintf("\n\rpDevObj->dynamicInfo.bat1Fault = %s",
((dynamicInfo->bat1Fault == TRUE) ? "TRUE" : "FALSE"));
VpSysDebugPrintf("\n\rpDevObj->dynamicInfo.bat2Fault = %s",
((dynamicInfo->bat2Fault == TRUE) ? "TRUE" : "FALSE"));
VpSysDebugPrintf("\n\rpDevObj->dynamicInfo.bat3Fault = %s",
((dynamicInfo->bat3Fault == TRUE) ? "TRUE" : "FALSE"));
}
void
VpPrintStaticInfoStruct(
VpDeviceStaticInfoType *staticInfo)
{
VpSysDebugPrintf("\n\rpDevObj->staticInfo.rcnPcn = 0x%02X 0x%02X",
staticInfo->rcnPcn[0], staticInfo->rcnPcn[1]);
VpSysDebugPrintf("\n\rpDevObj->staticInfo.maxChannels = %d",
staticInfo->maxChannels);
}
/* Bit-wise values from VpDeviceStateType */
void
VpPrintStateInformation(
uint16 state)
{
VpSysDebugPrintf("\n\n\rpDevObj->state = 0x%04X", state);
}
void
VpPrintDeviceProfileStruct(
VpDeviceType deviceType,
void *devProfileData)
{
if (deviceType == VP_DEV_880_SERIES) {
#ifdef VP_CC_880_SERIES
VpSysDebugPrintf("\n\n\rpDevObj->devProfileData.profVersion = %d",
((Vp880DeviceProfileType *)devProfileData)->profVersion);
VpSysDebugPrintf("\n\rpDevObj->devProfileData.pcmClkRate = %d",
((Vp880DeviceProfileType *)devProfileData)->pcmClkRate);
VpSysDebugPrintf("\n\rpDevObj->devProfileData.tickRate = 0x%04X",
((Vp880DeviceProfileType *)devProfileData)->tickRate);
VpSysDebugPrintf("\n\rpDevObj->devProfileData.devCfg1 = 0x%02X",
((Vp880DeviceProfileType *)devProfileData)->devCfg1);
VpSysDebugPrintf("\n\rpDevObj->devProfileData.clockSlot = 0x%02X",
((Vp880DeviceProfileType *)devProfileData)->clockSlot);
#endif
} else if (deviceType == VP_DEV_890_SERIES) {
#ifdef VP_CC_890_SERIES
VpSysDebugPrintf("\n\n\rpDevObj->devProfileData.profVersion = %d",
((Vp890DeviceProfileType *)devProfileData)->profVersion);
VpSysDebugPrintf("\n\rpDevObj->devProfileData.pcmClkRate = %d",
((Vp890DeviceProfileType *)devProfileData)->pcmClkRate);
VpSysDebugPrintf("\n\rpDevObj->devProfileData.mClkMask = 0x%02X",
((Vp890DeviceProfileType *)devProfileData)->mClkMask);
VpSysDebugPrintf("\n\rpDevObj->devProfileData.tickRate = 0x%04X",
((Vp890DeviceProfileType *)devProfileData)->tickRate);
VpSysDebugPrintf("\n\rpDevObj->devProfileData.devCfg1 = 0x%02X",
((Vp890DeviceProfileType *)devProfileData)->devCfg1);
VpSysDebugPrintf("\n\rpDevObj->devProfileData.clockSlot = 0x%02X",
((Vp890DeviceProfileType *)devProfileData)->clockSlot);
#ifdef VP890_FXS_SUPPORT
VpSysDebugPrintf("\n\rpDevObj->devProfileData.swParams = 0x%02X 0x%02X 0x%02X",
((Vp890DeviceProfileType *)devProfileData)->swParams[0],
((Vp890DeviceProfileType *)devProfileData)->swParams[1],
((Vp890DeviceProfileType *)devProfileData)->swParams[2]);
VpSysDebugPrintf("\n\rpDevObj->devProfileData.timingParams = 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X",
((Vp890DeviceProfileType *)devProfileData)->timingParams[0],
((Vp890DeviceProfileType *)devProfileData)->timingParams[1],
((Vp890DeviceProfileType *)devProfileData)->timingParams[2],
((Vp890DeviceProfileType *)devProfileData)->timingParams[3],
((Vp890DeviceProfileType *)devProfileData)->timingParams[4],
((Vp890DeviceProfileType *)devProfileData)->timingParams[5]);
VpSysDebugPrintf("\n\rpDevObj->devProfileData.timingParamsFR = 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X",
((Vp890DeviceProfileType *)devProfileData)->timingParamsFR[0],
((Vp890DeviceProfileType *)devProfileData)->timingParamsFR[1],
((Vp890DeviceProfileType *)devProfileData)->timingParamsFR[2],
((Vp890DeviceProfileType *)devProfileData)->timingParamsFR[3],
((Vp890DeviceProfileType *)devProfileData)->timingParamsFR[4],
((Vp890DeviceProfileType *)devProfileData)->timingParamsFR[5]);
VpSysDebugPrintf("\n\rpDevObj->devProfileData.peakManagement = %s",
((((Vp890DeviceProfileType *)devProfileData)->peakManagement == TRUE) ? "TRUE" : "FALSE"));
VpSysDebugPrintf("\n\rpDevObj->devProfileData.lowVoltOverride = %s",
((((Vp890DeviceProfileType *)devProfileData)->lowVoltOverride == TRUE) ? "TRUE" : "FALSE"));
#endif /* VP890_FXS_SUPPORT */
#endif /* VP_CC_890_SERIES */
}
}
void
VpPrintEventMaskStruct(
bool isDeviceInfo,
bool isMask,
VpOptionEventMaskType *eventMask)
{
char objectString[30];
char lineOrDevString[30];
if (isMask) {
VpMemCpy(objectString, "EventsMask", sizeof("EventsMask"));
} else {
VpMemCpy(objectString, "Events", sizeof("Events"));
}
if (isDeviceInfo) {
VpMemCpy(lineOrDevString, "pDevObj->device", sizeof("pDevObj->device"));
} else {
VpMemCpy(lineOrDevString, "pLineObj->line", sizeof("pLineObj->line"));
}
VpSysDebugPrintf("\n\n\r%s%s.faults = 0x%04X", lineOrDevString, objectString,
eventMask->faults);
VpSysDebugPrintf("\n\r%s%s.signaling = 0x%04X", lineOrDevString, objectString,
eventMask->signaling);
VpSysDebugPrintf("\n\r%s%s.response = 0x%04X", lineOrDevString, objectString,
eventMask->response);
VpSysDebugPrintf("\n\r%s%s.test = 0x%04X", lineOrDevString, objectString,
eventMask->test);
VpSysDebugPrintf("\n\r%s%s.process = 0x%04X", lineOrDevString, objectString,
eventMask->process);
VpSysDebugPrintf("\n\r%s%s.fxo = 0x%04X", lineOrDevString, objectString,
eventMask->fxo);
VpSysDebugPrintf("\n\r%s%s.packet = 0x%04X", lineOrDevString, objectString,
eventMask->packet);
}
void
VpPrintCriticalFltStruct(
VpOptionCriticalFltType *criticalFault)
{
VpSysDebugPrintf("\n\n\rpDevObj->criticalFault.acFltDiscEn = %s",
((criticalFault->acFltDiscEn == TRUE) ? "TRUE" : "FALSE"));
VpSysDebugPrintf("\n\rpDevObj->criticalFault.dcFltDiscEn = %s",
((criticalFault->dcFltDiscEn == TRUE) ? "TRUE" : "FALSE"));
VpSysDebugPrintf("\n\rpDevObj->criticalFault.thermFltDiscEn = %s",
((criticalFault->thermFltDiscEn == TRUE) ? "TRUE" : "FALSE"));
}
void
VpPrintGetResultsOptionStruct(
VpGetResultsOptionsType *getResultsOption)
{
VpSysDebugPrintf("\n\n\rpDevObj->getResultsOption.chanId = %d",
getResultsOption->chanId);
VpSysDebugPrintf("\n\rpDevObj->getResultsOption.optionType = 0x%04X",
getResultsOption->optionType);
{
uint8 byteCount;
uint8 *pOptionData = (uint8 *)(&getResultsOption->optionData);
uint8 optionSize = sizeof(VpGetResultsOptionsDataType);
VpSysDebugPrintf("\n\rpDevObj->getResultsOption.optionData =");
for (byteCount = 0; byteCount < optionSize; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" 0x%02X", *pOptionData);
pOptionData++;
}
}
}
void
VpPrintRelGainResultsStruct(
VpRelGainResultsType *relGainResults)
{
VpSysDebugPrintf("\n\n\rpDevObj->relGainResults.gResult = %d",
relGainResults->gResult);
VpSysDebugPrintf("\n\rpDevObj->relGainResults.gxValue = 0x%04X",
relGainResults->gxValue);
VpSysDebugPrintf("\n\rpDevObj->relGainResults.grValue = 0x%04X",
relGainResults->grValue);
}
void
VpPrintDeviceProfileTable(
VpCSLACDeviceProfileTableType *devProfileTable)
{
uint8 byteCount;
VpSysDebugPrintf("\n\n\rpDevObj->devProfileTable.pDevProfileTable =");
for (byteCount = 0; byteCount < VP_CSLAC_DEV_PROF_TABLE_SIZE; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" %p", devProfileTable->pDevProfileTable[byteCount]);
}
VpSysDebugPrintf("\n\rpDevObj->devProfileTable.pAcProfileTable =");
for (byteCount = 0; byteCount < VP_CSLAC_AC_PROF_TABLE_SIZE; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" %p", devProfileTable->pAcProfileTable[byteCount]);
}
VpSysDebugPrintf("\n\rpDevObj->devProfileTable.pDcProfileTable =");
for (byteCount = 0; byteCount < VP_CSLAC_DC_PROF_TABLE_SIZE; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" %p", devProfileTable->pDcProfileTable[byteCount]);
}
VpSysDebugPrintf("\n\rpDevObj->devProfileTable.pRingingProfileTable =");
for (byteCount = 0; byteCount < VP_CSLAC_RINGING_PROF_TABLE_SIZE; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" %p", devProfileTable->pRingingProfileTable[byteCount]);
}
VpSysDebugPrintf("\n\rpDevObj->devProfileTable.pToneCadProfileTable =");
for (byteCount = 0; byteCount < VP_CSLAC_TONE_CADENCE_PROF_TABLE_SIZE; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" %p", devProfileTable->pToneCadProfileTable[byteCount]);
}
VpSysDebugPrintf("\n\rpDevObj->devProfileTable.pToneProfileTable =");
for (byteCount = 0; byteCount < VP_CSLAC_TONE_PROF_TABLE_SIZE; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" %p", devProfileTable->pToneProfileTable[byteCount]);
}
VpSysDebugPrintf("\n\rpDevObj->devProfileTable.pRingingCadProfileTable =");
for (byteCount = 0; byteCount < VP_CSLAC_RING_CADENCE_PROF_TABLE_SIZE; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" %p", devProfileTable->pRingingCadProfileTable[byteCount]);
}
VpSysDebugPrintf("\n\rpDevObj->devProfileTable.pMeteringProfileTable =");
for (byteCount = 0; byteCount < VP_CSLAC_METERING_PROF_TABLE_SIZE; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" %p", devProfileTable->pMeteringProfileTable[byteCount]);
}
VpSysDebugPrintf("\n\rpDevObj->devProfileTable.pCallerIdProfileTable =");
for (byteCount = 0; byteCount < VP_CSLAC_CALLERID_PROF_TABLE_SIZE; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" %p", devProfileTable->pCallerIdProfileTable[byteCount]);
}
VpSysDebugPrintf("\n\rpDevObj->devProfileTable.pFxoConfigProfileTable =");
for (byteCount = 0; byteCount < VP_CSLAC_FXO_CONFIG_PROF_TABLE_SIZE; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" %p", devProfileTable->pFxoConfigProfileTable[byteCount]);
}
VpSysDebugPrintf("\n\rpDevObj->devProfileTable.pCustomTermProfileTable =");
for (byteCount = 0; byteCount < VP_CSLAC_CUSTOM_TERM_PROF_TABLE_SIZE; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" %p", devProfileTable->pCustomTermProfileTable[byteCount]);
}
}
void
VpPrintProfileTableEntry(
VpCSLACProfileTableEntryType *profEntry)
{
VpSysDebugPrintf("\n\n\rpDevObj->profEntry.devProfEntry = 0x%04X",
profEntry->devProfEntry);
VpSysDebugPrintf("\n\rpDevObj->profEntry.acProfEntry = 0x%04X",
profEntry->acProfEntry);
VpSysDebugPrintf("\n\rpDevObj->profEntry.dcProfEntry = 0x%04X",
profEntry->dcProfEntry);
VpSysDebugPrintf("\n\rpDevObj->profEntry.ringingProfEntry = 0x%04X",
profEntry->ringingProfEntry);
VpSysDebugPrintf("\n\rpDevObj->profEntry.ringCadProfEntry = 0x%04X",
profEntry->ringCadProfEntry);
VpSysDebugPrintf("\n\rpDevObj->profEntry.toneProfEntry = 0x%04X",
profEntry->toneProfEntry);
VpSysDebugPrintf("\n\rpDevObj->profEntry.toneCadProfEntry = 0x%04X",
profEntry->toneCadProfEntry);
VpSysDebugPrintf("\n\rpDevObj->profEntry.meterProfEntry = 0x%04X",
profEntry->meterProfEntry);
VpSysDebugPrintf("\n\rpDevObj->profEntry.cidCadProfEntry = 0x%04X",
profEntry->cidCadProfEntry);
VpSysDebugPrintf("\n\rpDevObj->profEntry.fxoConfigProfEntry = 0x%04X",
profEntry->fxoConfigProfEntry);
VpSysDebugPrintf("\n\rpDevObj->profEntry.customTermProfEntry = 0x%04X",
profEntry->customTermProfEntry);
}
#if defined (VP890_FXS_SUPPORT) || defined (VP880_FXS_SUPPORT)
void
VpPrintPulseSpecs(
uint8 specNumber,
VpOptionPulseType *pulseSpecs)
{
char specString[2] = {'\0', '\0'};
if (specNumber == 1) {
specString[0] = '2';
}
VpSysDebugPrintf("\n\n\rpDevObj->pulseSpecs%s.breakMin = %d",
specString, pulseSpecs->breakMin);
VpSysDebugPrintf("\n\rpDevObj->pulseSpecs%s.breakMax = %d",
specString, pulseSpecs->breakMax);
VpSysDebugPrintf("\n\rpDevObj->pulseSpecs%s.makeMin = %d",
specString, pulseSpecs->makeMin);
VpSysDebugPrintf("\n\rpDevObj->pulseSpecs%s.makeMax = %d",
specString, pulseSpecs->makeMax);
VpSysDebugPrintf("\n\rpDevObj->pulseSpecs%s.interDigitMin = %d",
specString, pulseSpecs->interDigitMin);
VpSysDebugPrintf("\n\rpDevObj->pulseSpecs%s.flashMin = %d",
specString, pulseSpecs->flashMin);
VpSysDebugPrintf("\n\rpDevObj->pulseSpecs%s.flashMax = %d",
specString, pulseSpecs->flashMax);
#ifdef EXTENDED_FLASH_HOOK
VpSysDebugPrintf("\n\rpDevObj->pulseSpecs%s.onHookMin = %d",
specString, pulseSpecs->onHookMin);
#endif
}
void
VpPrintDPStateMachine(
uint8 stateMachineNum,
VpDialPulseDetectType *dpStruct)
{
char specString[2] = {'\0', '\0'};
char *dpState[4] = {
"VP_DP_DETECT_STATE_LOOP_OPEN",
"VP_DP_DETECT_STATE_LOOP_CLOSE",
"VP_DP_DETECT_STATE_IDLE",
"UNKNOWN"
};
uint8 stateIndex = (dpStruct->state < 3) ? dpStruct->state : 3;
if (stateMachineNum == 1) {
specString[0] = '2';
}
VpSysDebugPrintf("\n\n\rpLineObj->dpStruct%s.digits = %d",
specString, dpStruct->digits);
VpSysDebugPrintf("\n\rpLineObj->dpStruct%s.lo_time = %d",
specString, dpStruct->lo_time);
VpSysDebugPrintf("\n\rpLineObj->dpStruct%s.lc_time = %d",
specString, dpStruct->lc_time);
VpSysDebugPrintf("\n\rpLineObj->dpStruct%s.state = %d:%s",
specString, dpStruct->state, dpState[stateIndex]);
VpSysDebugPrintf("\n\rpLineObj->dpStruct%s.hookSt = %s",
specString, ((dpStruct->hookSt == TRUE) ? "TRUE" : "FALSE"));
VpSysDebugPrintf("\n\rpLineObj->dpStruct%s.signalingData = %d\n\r",
specString, dpStruct->signalingData);
}
#endif /* defined (VP890_FXS_SUPPORT) || defined (VP880_FXS_SUPPORT) */
void
VpPrintDeviceTimers(
uint16 devTimer[VP_DEV_TIMER_LAST])
{
uint8 byteCount;
char *timerNames[VP_DEV_TIMER_LAST] = {
"VP_DEV_TIMER_TESTLINE", "VP_DEV_TIMER_CLKFAIL", "VP_DEV_TIMER_ABSCAL",
"VP_DEV_TIMER_LP_CHANGE", "VP_DEV_TIMER_ABV_CAL", "VP_DEV_TIMER_ENTER_RINGING",
"VP_DEV_TIMER_EXIT_RINGING", "VP_DEV_TIMER_WB_MODE_CHANGE"
};
VpSysDebugPrintf("\n\rpDevObj->devTimer =");
for (byteCount = 0; byteCount < VP_DEV_TIMER_LAST; byteCount++) {
if (!(byteCount % 10)) {
VpSysDebugPrintf("\n\t");
}
VpSysDebugPrintf(" 0x%04X", devTimer[byteCount]);
if (devTimer[byteCount] & VP_ACTIVATE_TIMER) {
VpSysDebugPrintf(" - %s is Active\n\t", timerNames[byteCount]);
}
}
}
#endif /* VP_CC_DEBUG_SELECT & VP_DBG_ERROR */
#endif /* defined (VP_CC_880_SERIES) || defined (VP_CC_890_SERIES) */
#endif /* VP_DEBUG */