⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 atheros ar5001 5002 driver
💻 C
📖 第 1 页 / 共 5 页
字号:
			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 + -