blob: c81a6cc4ff1bf5815a1509ee31c8f26f1594ece0 [file] [log] [blame]
#include <Copyright.h>
/********************************************************************************
* testApi.c
*
* DESCRIPTION:
* API test functions
*
* DEPENDENCIES: Platform.
*
* FILE REVISION NUMBER:
*
*******************************************************************************/
#include "msSample.h"
GT_STATUS advVctTest(GT_QD_DEV *dev, GT_LPORT port);
GT_STATUS getAdvExtendedStatus(GT_QD_DEV *dev, GT_LPORT port);
void displayAdvVCTResult
(
GT_ADV_CABLE_STATUS *cableStatus,
int channel
)
{
int i;
switch(cableStatus->cableStatus[channel])
{
case GT_ADV_VCT_FAIL:
MSG_PRINT(("Advanced Cable Test Failed\n"));
break;
case GT_ADV_VCT_NORMAL:
MSG_PRINT(("Cable Test Passed. No problem found.\n"));
break;
case GT_ADV_VCT_IMP_GREATER_THAN_115:
MSG_PRINT(("Cable Test Passed. Impedance is greater than 115 Ohms.\n"));
MSG_PRINT(("Approximatly %i meters from the tested port.\n",cableStatus->u[channel].dist2fault));
break;
case GT_ADV_VCT_IMP_LESS_THAN_85:
MSG_PRINT(("Cable Test Passed. Impedance is less than 85 Ohms.\n"));
MSG_PRINT(("Approximatly %i meters from the tested port.\n",cableStatus->u[channel].dist2fault));
break;
case GT_ADV_VCT_OPEN:
MSG_PRINT(("Cable Test Passed. Open Cable.\n"));
MSG_PRINT(("Approximatly %i meters from the tested port.\n",cableStatus->u[channel].dist2fault));
break;
case GT_ADV_VCT_SHORT:
MSG_PRINT(("Cable Test Passed. Shorted Cable.\n"));
MSG_PRINT(("Approximatly %i meters from the tested port.\n",cableStatus->u[channel].dist2fault));
break;
case GT_ADV_VCT_CROSS_PAIR_SHORT:
MSG_PRINT(("Cable Test Passed.\n"));
for(i=0; i<GT_MDI_PAIR_NUM; i++)
{
if(cableStatus->u[channel].crossShort.channel[i] == GT_TRUE)
{
MSG_PRINT(("\tCross pair short with channel %i.\n",i));
MSG_PRINT(("\tApproximatly %i meters from the tested port.\n",
cableStatus->u[channel].crossShort.dist2fault[i]));
}
}
break;
default:
MSG_PRINT(("Unknown Test Result.\n"));
break;
}
}
/* Advanced VCT (TDR) */
GT_STATUS advVctTest(GT_QD_DEV *dev, GT_LPORT port)
{
GT_STATUS status;
int i, j;
GT_ADV_VCT_MODE mode;
GT_ADV_CABLE_STATUS advCableStatus;
GT_ADV_VCT_MOD mod[2] = {
GT_ADV_VCT_FIRST_PEAK,
GT_ADV_VCT_MAX_PEAK
};
char modeStr[2][32] = {
"(Adv VCT First PEAK)",
"(Adv VCT MAX PEAK)"
};
if (dev == 0)
{
MSG_PRINT(("GT driver is not initialized\n"));
return GT_FAIL;
}
for (j=0; j<2; j++)
{
mode.mode=mod[j];
mode.transChanSel=GT_ADV_VCT_TCS_NO_CROSSPAIR;
mode.sampleAvg = 0;
mode.peakDetHyst =0;
/*
* Start and get Cable Test Result
*/
status = GT_OK;
if((status = gvctGetAdvCableDiag(dev,port,
mode,&advCableStatus)) != GT_OK)
{
MSG_PRINT(("gvctGetAdvCableDiag return Failed\n"));
return status;
}
MSG_PRINT(("\nCable Test Result %s for Port %i\n", modeStr[j], (int)port));
for(i=0; i<GT_MDI_PAIR_NUM; i++)
{
MSG_PRINT(("MDI PAIR %i:\n",i));
displayAdvVCTResult(&advCableStatus, i);
}
}
return GT_OK;
}
/* Advanced DSP VCT */
GT_STATUS getAdvExtendedStatus(GT_QD_DEV *dev, GT_LPORT port)
{
GT_STATUS status;
GT_ADV_EXTENDED_STATUS extendedStatus;
int i;
char ch;
if (dev == 0)
{
MSG_PRINT(("GT driver is not initialized\n"));
return GT_FAIL;
}
/*
* Start getting Extended Information.
*/
if((status = gvctGetAdvExtendedStatus(dev,port, &extendedStatus)) != GT_OK)
{
MSG_PRINT(("gvctGetAdvExtendedStatus return Failed\n"));
return status;
}
if (!extendedStatus.isValid)
{
MSG_PRINT(("Not able to get Extended Status.\n"));
MSG_PRINT(("Please check if 1000B-T Link is established on Port %i.\n",(int)port));
return status;
}
/* Pair Polarity */
MSG_PRINT(("Pair Polarity:\n"));
for(i=0; i<GT_MDI_PAIR_NUM; i++)
{
MSG_PRINT(("MDI PAIR %i: %s\n",i,
(extendedStatus.pairPolarity[i] == GT_POSITIVE)?"Positive":"Negative"));
}
/* Pair Swap */
MSG_PRINT(("Pair Swap:\n"));
for(i=0; i<GT_MDI_PAIR_NUM; i++)
{
switch(extendedStatus.pairSwap[i])
{
case GT_CHANNEL_A:
ch = 'A';
break;
case GT_CHANNEL_B:
ch = 'B';
break;
case GT_CHANNEL_C:
ch = 'C';
break;
case GT_CHANNEL_D:
ch = 'D';
break;
default:
MSG_PRINT(("Error: reported unknown Pair Swap %i\n",extendedStatus.pairSwap[i]));
ch = 'U';
break;
}
MSG_PRINT(("MDI PAIR %i: Channel %c\n",i,ch));
}
/* Pair Polarity */
MSG_PRINT(("Pair Skew:\n"));
for(i=0; i<GT_MDI_PAIR_NUM; i++)
{
MSG_PRINT(("MDI PAIR %i: %ins\n",i,(int)extendedStatus.pairSkew[i]));
}
/* Pair Polarity */
MSG_PRINT(("Cable Len:\n"));
for(i=0; i<GT_MDI_PAIR_NUM; i++)
{
MSG_PRINT(("MDI PAIR %i: approximately %im\n",i,(int)extendedStatus.cableLen[i]));
}
return GT_OK;
}