📄 test.c
字号:
if (pModes->gMode) {
firstMode = MODE_11G;
}
else if (pModes->bMode) {
firstMode = MODE_11B;
}
}
break;
case MODE_11G:
case MODE_11O:
if(!pModes->gMode) {
if (pModes->bMode) {
firstMode = MODE_11B;
}
else if (pModes->aMode) {
firstMode = MODE_11A;
}
}
break;
case MODE_11B:
if(!pModes->bMode) {
if(pModes->aMode) {
firstMode = MODE_11A;
}
else if (pModes->gMode) {
firstMode = MODE_11G;
}
}
break;
default:
uiPrintf("FATAL ERROR: Illegal mode inside getFirstMode()\n");
exit(1);
}
return(firstMode);
}
A_UINT32 getNextMode (SUPPORTED_MODES *pModes)
{
A_UINT32 nextMode = configSetup.mode;
switch(configSetup.mode) {
case MODE_11A:
if (pModes->gMode) {
nextMode = MODE_11G;
}
else if (pModes->bMode) {
nextMode = MODE_11B;
}
break;
case MODE_11G:
if((swDeviceID & 0xff) >= 0x13) {
nextMode = MODE_11O;
}
else if (pModes->bMode) {
nextMode = MODE_11B;
}
else if (pModes->aMode) {
nextMode = MODE_11A;
}
break;
case MODE_11O:
if (pModes->bMode) {
nextMode = MODE_11B;
}
else if (pModes->aMode) {
nextMode = MODE_11A;
}
break;
case MODE_11B:
if(pModes->aMode) {
nextMode = MODE_11A;
}
else if (pModes->gMode) {
nextMode = MODE_11G;
}
break;
default:
uiPrintf("FATAL ERROR: Illegal mode inside getNextMode()\n");
exit(1);
}
return(nextMode);
}
A_BOOL supportMultiModes(SUPPORTED_MODES *pModes)
{
A_BOOL multiModes = FALSE;
if((pModes->aMode && pModes->bMode) ||
(pModes->aMode && pModes->gMode) ||
(pModes->gMode && pModes->bMode)) {
multiModes = TRUE;
}
return(multiModes);
}
void printDeviceInfo
(
A_UINT32 devNum
)
{
SUB_DEV_INFO devStruct;
art_getDeviceInfo(devNum, &devStruct);
subSystemID = devStruct.subSystemID;
macRev = devStruct.macRev;
bbRev = devStruct.bbRevID;
analogProdRev = devStruct.aRevID & 0xf;
//only want to print this info if it has not already been done so by library
//or its the AP
if(printLocalInfo) {
uiPrintf(" =============================================\n");
uiPrintf(" ");
switch(devStruct.subSystemID) {
case ATHEROS_CB21: uiPrintf("| AR5001a_cb |\n"); break;
case ATHEROS_CB22: uiPrintf("| AR5001x_cb |\n"); break;
case ATHEROS_MB22: uiPrintf("| AR5001x_mb |\n"); break;
case ATHEROS_MB23: uiPrintf("| AR5001a_mb |\n"); break;
case ATHEROS_AP21: uiPrintf("| AR5001ap_ap |\n"); break;
case ATHEROS_CB21G: uiPrintf("| AR5001g_cb |\n"); break;
case ATHEROS_CB22G: uiPrintf("| AR5001xp_cb |\n"); break;
case ATHEROS_MB21G: uiPrintf("| AR5001g_mb |\n"); break;
case ATHEROS_MB22G: uiPrintf("| AR5001xp_mb |\n"); break;
case ATHEROS_MB31G_DESTUFF : uiPrintf("| AR5002g_mb31g (de-stuffed) |\n"); break;
case ATHEROS_MB32AG : uiPrintf("| AR5002x_mb32ag |\n"); break;
case ATHEROS_MB22G_DESTUFF : uiPrintf("| AR5001g_mb22g (de-stuffed) |\n"); break;
case ATHEROS_MB22AG_SINGLE : uiPrintf("| AR5001x_mb22ag (single-sided) |\n"); break;
case ATHEROS_MB23_JAPAN : uiPrintf("| AR5001x_mb23j |\n"); break;
case ATHEROS_CB31G_DESTUFF : uiPrintf("| AR5002g_cb31g (de-stuffed) |\n"); break;
case ATHEROS_CB32AG : uiPrintf("| AR5002x_cb32ag |\n"); break;
case ATHEROS_CB22G_DESTUFF : uiPrintf("| AR5001g_cb22g (de-stuffed) |\n"); break;
// case ATHEROS_CB22AG_SINGLE : uiPrintf("AR5001x_cb22ag (single-sided) "); break;
case ATHEROS_AP30 : uiPrintf("| AR5002a_ap30 |\n"); break;
case ATHEROS_AP30_040 : uiPrintf("| AR5002a_ap30 (040) |\n"); break;
default: uiPrintf(" UNKNOWN BOARD\n"); break;
}
uiPrintf(" =============================================\n");
uiPrintf(devStruct.libRevStr);
uiPrintf("Devices detected:\n");
uiPrintf(" PCI deviceID : 0x%04lx\t", devStruct.hwDevID);
uiPrintf("Sub systemID : 0x%04lx\n", devStruct.subSystemID);
uiPrintf(" MAC revisionID: 0x%02lx \t", devStruct.macRev & 0xff);
uiPrintf("BB revisionID: 0x%02lx\n", devStruct.bbRevID & 0xff);
uiPrintf(" RF productID : 0x%01lx \t", devStruct.aRevID & 0xf);
uiPrintf("RF revisionID: 0x%01lx\n\n", (devStruct.aRevID >> 4) & 0xf);
if(devStruct.defaultConfig) {
uiPrintf("Using defaults from %s\n\n", devStruct.regFilename);
}
else {
uiPrintf("Using the values from configuration file %s\n\n", devStruct.regFilename);
}
}
}
A_BOOL setupMode(void)
{
switch (configSetup.mode) {
case MODE_11A:
configSetup.channel = configSetup.channel5;
configSetup.rxGain = configSetup.rxGain5;
break;
case MODE_11G:
case MODE_11O:
configSetup.channel = configSetup.channel2_4;
configSetup.rxGain = configSetup.rxGain2_4;
break;
case MODE_11B:
configSetup.channel = configSetup.channel2_4;
configSetup.rxGain = configSetup.rxGain2_4;
break;
default:
uiPrintf("Error: setupMode - mode not set correctly\n");
return(FALSE);
}
printMode();
return(TRUE);
}
A_BOOL printMode (void)
{
char *modeStr[] = {"11a", "11g", "11b", "OFDM@2.4"};
uiPrintf("Operating in %s at channel %1.3fGHz\n", modeStr[configSetup.mode], (float)configSetup.channel/1000);
return (TRUE);
}
A_BOOL initTest
(
A_UINT32 devNum
)
{
A_UINT8 temp;
A_UINT16 wlanNum = 0;
A_UINT16 ii;
//don't need this one any more
// art_resetDevice(devNum, txStation, bssID, configSetup.channel, configSetup.turbo);
if ((hwDeviceID == 0xff12) || (hwDeviceID >= 0xff13)) {
art_changeField(devNum, "mc_eeprom_size_ovr", 3); //force eeprom size to 16K
art_resetDevice(devNum, txStation, bssID, configSetup.channel, configSetup.turbo);
}
if(art_mdkErrNo) {
return FALSE;
}
printDeviceInfo(devNum);
uiPrintf("Base Addr: 0x%08lX Interrupt: %d\n", art_cfgRead(devNum, PCI_BAR_0_REGISTER),
(art_cfgRead(devNum, PCI_INTERRUPT_LINE) & 0xff));
//read the ethernet address if ap21 or ap30/ap31
if((configSetup.remote) && ((swDeviceID == 0x0011) || (swDeviceID == 0xa014) || (swDeviceID == 0xa016))) {
for (ii = 0; ii < 2; ii++) {
art_GetMacAddr(devNum, 0, ii, (A_UCHAR *)macAddr.octets);
wlanNum = ii;
if ((macAddr.octets[0] != 0xFF) || (macAddr.octets[1] != 0xFF) || (macAddr.octets[2] != 0xFF) ||
(macAddr.octets[3] != 0xFF) || (macAddr.octets[4] != 0xFF) || (macAddr.octets[5] != 0xFF) ) {
uiPrintf("Ethernet %d MAC ADDR: 0x%02X%02X_%02X%02X_%02X%02X\n", wlanNum, macAddr.octets[0], macAddr.octets[1], macAddr.octets[2],
macAddr.octets[3], macAddr.octets[4], macAddr.octets[5]);
}
}
for (ii = 0; ii < 2; ii++) {
art_GetMacAddr(devNum, 1, ii, (A_UCHAR *)macAddr.octets);
wlanNum = ii;
if ((macAddr.octets[0] != 0xFF) || (macAddr.octets[1] != 0xFF) || (macAddr.octets[2] != 0xFF) ||
(macAddr.octets[3] != 0xFF) || (macAddr.octets[4] != 0xFF) || (macAddr.octets[5] != 0xFF) ) {
uiPrintf("Wireless %d MAC ADDR: 0x%02X%02X_%02X%02X_%02X%02X\n", wlanNum, macAddr.octets[0], macAddr.octets[1], macAddr.octets[2],
macAddr.octets[3], macAddr.octets[4], macAddr.octets[5]);
}
}
}
else {
if(configSetup.remote) { //PB22
*(A_UINT16 *)&macAddr.octets[0] = (A_UINT16)art_eepromRead(devNum, 0x1d);
*(A_UINT16 *)&macAddr.octets[2] = (A_UINT16)art_eepromRead(devNum, 0x1e);
*(A_UINT16 *)&macAddr.octets[4] = (A_UINT16)art_eepromRead(devNum, 0x1f);
// uiPrintf("EEPROM Stored MAC ADDR: 0x%04X_%04X_%04X\n", art_eepromRead(devNum, 0x1f), art_eepromRead(devNum, 0x1e),
// art_eepromRead(devNum, 0x1d));
} else {
art_GetMacAddr(devNum, 1, 0, (A_UCHAR *)macAddr.octets);
}
uiPrintf("Wireless MAC ADDR: 0x%02X%02X_%02X%02X_%02X%02X\n", macAddr.octets[5], macAddr.octets[4], macAddr.octets[3],
macAddr.octets[2], macAddr.octets[1], macAddr.octets[0]);
//reverse the mac address so can use for test if needed
if(configSetup.cmdLineTestMask & MAC_ADDR_MASK) {
temp = macAddr.octets[0];
macAddr.octets[0] = macAddr.octets[5];
macAddr.octets[5] = temp;
temp = macAddr.octets[1];
macAddr.octets[1] = macAddr.octets[4];
macAddr.octets[4] = temp;
temp = macAddr.octets[2];
macAddr.octets[2] = macAddr.octets[3];
macAddr.octets[3] = temp;
}
}
if(!art_testLib(devNum, 1000)) {
uiPrintf("Unable to receive interrupt, check hardware and software installation and rerun\n");
return(FALSE);
}
return(TRUE);
}
#ifndef __ATH_DJGPPDOS__
A_BOOL setEepFile
(
A_UINT32 devNum
)
{
A_UINT16 searchSubsystemID;
A_UINT32 i;
//load the eep file, first do a reset device, needed load config values
art_resetDevice(devNum, txStation, bssID, configSetup.channel, configSetup.turbo);
//get the subsystemID that will use for the table lookup
if(!configSetup.cmdLineSubsystemID) {
if((hwDeviceID == 0xff12) || (hwDeviceID >= 0xff13)) {
searchSubsystemID = (A_UINT16)configSetup.blankEepID;
}
else if(swDeviceID == 0x0011) {
//hardcode this for spirit for now
searchSubsystemID = 0xa021;
}
else {
//read the subsystemID from the eeprom
searchSubsystemID = (A_UINT16)art_eepromRead(devNum, 0x0007);
}
}
else {
//commandline subsystemID overrides everything, including eeprom
searchSubsystemID = (A_UINT16)configSetup.cmdLineSubsystemID;
}
//lookup the subsystemID in the table
for(i = 0; i < configSetup.cfgTable.sizeCfgTable; i++) {
if(searchSubsystemID == configSetup.cfgTable.pCfgTableElements[i].subsystemID) {
configSetup.cfgTable.pCurrentElement = &(configSetup.cfgTable.pCfgTableElements[i]);
break;
}
}
if(i == configSetup.cfgTable.sizeCfgTable) {
uiPrintf("ERROR: unable to find an EEP file for device.\n");
uiPrintf("Make sure an entry for this device exists in config table in artsetup\n");
uiPrintf("and that device has correct subsystem ID \n");
uiPrintf("or one has been specified in the BLANK_EEP_ID flag in artsetup\n");
return FALSE;
}
uiPrintf("Loading values for devNum [%d] from eep file %s\n\n", devNum, configSetup.cfgTable.pCurrentElement->eepFilename);
// art_setResetParams(devNum, configSetup.cfgTable.pCurrentElement->eepFilename, (A_BOOL)configSetup.eepromLoad,
// (A_BOOL)configSetup.eepromHeaderLoad, (A_UCHAR)configSetup.mode, configSetup.use_init);
// art_resetDevice(devNum, txStation, bssID, configSetup.channel, configSetup.turbo);
return(processEepFile(devNum, configSetup.cfgTable.pCurrentElement->eepFilename, &configSetup.eepFileVersion));
}
#endif //__ATH_DJGPPDOS__
/*
* Parse the command line arguments
* Currently one argument is supported. The format is
* \AP=<ip_adddr> (only for AP)
*/
A_BOOL parseCmdLine(A_INT32 argc, A_CHAR *argv[])
{
A_UINT32 i;
A_CHAR buffer[256];
// if (argc > 4)
// {
// uiPrintf("ParseCmdLine: Only 3 command line arguments are supported \n");
// return FALSE;
// }
// Client cards has no arguments.
if (argc == 1) return TRUE;
for( i = argc; i > 1; i--) {
if (strncmp(argv[i-1],"\\id=",4) == 0)
{
// strncpy(configSetup.cmdLineDutCardType, &(argv[i-1][6]), 112);
if(!sscanf(&argv[i-1][4], "%x", &configSetup.cmdLineSubsystemID)) {
uiPrintf("Unable to get subsystem ID from \\id\n");
return 0;
}
}
#ifndef __ATH_DJGPPDOS__
else if (strncmp(argv[i-1],"\\prog",5) == 0)
{
progProm = 1;
}
else if (strncmp(argv[i-1],"\\remote=",8) == 0)
{
configSetup.remote = 1;
configSetup.primaryAP = 1;
strncpy(configSetup.machName, &(argv[i-1][8]), 256);
}
#endif
else if (strncmp(argv[i-1],"\\instance=",10) == 0)
{
configSetup.instance = atoi(&(argv[i-1][10]));
configSetup.userInstanceOverride = 1;
}
else if (strncmp(argv[i - 1], "\\txtest", 7) == 0)
{
configSetup.cmdLineTest = TRUE;
configSetup.cmdLineTestMask = configSetup.cmdLineTestMask | TX_TEST_MASK;
}
else if (strncmp(argv[i - 1], "\\rxtest", 7) == 0)
{
configSetup.cmdLineTest = TRUE;
configSetup.cmdLineTestMask = configSetup.cmdLineTestMask | RX_TEST_MASK;
}
else if (strncmp(argv[i - 1], "\\golden", 7) == 0)
{
configSetup.cmdLineTest = TRUE;
configSetup.cmdLineTestMask = configSetup.cmdLineTestMask | GOLDEN_TEST_MASK;
}
else if (strncmp(argv[i - 1], "\\tptestup", 9) == 0)
{
configSetup.cmdLineTest = TRUE;
configSetup.cmdLineTestMask = configSetup.cmdLineTestMask | TP_TEST_UP_MASK;
}
else if (strncmp(argv[i - 1], "\\tptestdown", 11) == 0)
{
configSetup.cmdLineTest = TRUE;
configSetup.cmdLineTestMask = configSetup.cmdLineTestMask | TP_TEST_DOWN_MASK;
}
else if (strncmp(argv[i - 1], "\\macaddr", 7) == 0)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -