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

📄 mac.c

📁 VC代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		MessagePopup ("getMacAddress()", errorString);
		failFlag = SET;
		return(failFlag);
	}

	//
	// Check for preexisting assignment
	//
	// File format is:
	// serialNumber	MACaddress productCode	dateStamp
	//
	while (feof(filePtr) == 0 ) {
		fgets (lineBuffer, LINE_BUFFER_LENGTH, filePtr);

		//
		// parse lineBuffer
		//
		itemsFormatted = sscanf (lineBuffer, "%s %s %s %s %[^\n]"
												,table.serialNumber
												,table.MACaddress1
												,table.MACaddress2
												,table.productCode
												,table.dateStamp);

		if(itemsFormatted == 5) { // looks like what we what
			//
			// compare table and user strings
			//
			if (strcmp (userString.serialNumber, table.serialNumber) == MATCH) {
				preExistFlag = SET;
				ASC2HEX(table.MACaddress1);
				writeImgFile1();
				ASC2HEX(table.MACaddress2);
				writeImgFile2();
				fclose (filePtr);	// won't need to write to .dat

				break;	//stop searching after we find one
			}
		}
	}

	//
	// If a pre-existing ethernet address DOESN'T exist, assign a new one
	// and append this new record to ethernet.dat
	//
	if (preExistFlag == CLEAR)
	{

		ASC2HEX(table.MACaddress2);	// should be last one in table search
		incrementMACaddress();
				//
		// Check last permissable address
		//
		if (MACaddress[0] == lastMACaddress[0] &&
			MACaddress[1] == lastMACaddress[1] &&
			MACaddress[2] == lastMACaddress[2] &&
			MACaddress[3] == lastMACaddress[3] &&
			MACaddress[4] == lastMACaddress[4] &&
			MACaddress[5] == lastMACaddress[5] &&
			MACaddress[6] == lastMACaddress[6] &&
			MACaddress[7] == lastMACaddress[7] &&
			MACaddress[8] == lastMACaddress[8] &&
			MACaddress[9] == lastMACaddress[9] &&
			MACaddress[10] == lastMACaddress[10] &&
			MACaddress[11] == lastMACaddress[11] )
		{
				//
				//exceeds last permissable address
				//
				sprintf(errorString,"%s\n%s"
						,"End of ethernet addresses has been reached"
						,"Please apply for more ethernet addresses");
				MessagePopup ("getMacAddress()", errorString);
	     		failFlag = SET;
	     		return(failFlag);

		}
			else if(MACaddress[0] != 0x0 ||
			MACaddress[1] != 0x0 ||
			MACaddress[2] != 0x6 ||
			MACaddress[3] != 0x0 ||
			MACaddress[4] != 0x1 ||
			MACaddress[5] != 0xD )
		{
			sprintf(errorString,"\n%s\n%s"
						,"Head of new MAC addresses has some wrong"
						,"Please Contact your ICT engineer");
				MessagePopup ("getMacAddress()", errorString);
	     		failFlag = SET;
	     		return(failFlag); 
		}

		else

		{
			writeImgFile1();// create image file

			MACaddress1[0]=MACaddress[0];
			MACaddress1[1]=MACaddress[1];
			MACaddress1[2]=MACaddress[2];
			MACaddress1[3]=MACaddress[3];
			MACaddress1[4]=MACaddress[4];
			MACaddress1[5]=MACaddress[5];
			MACaddress1[6]=MACaddress[6];
			MACaddress1[7]=MACaddress[7];
			MACaddress1[8]=MACaddress[8];
			MACaddress1[9]=MACaddress[9];
			MACaddress1[10]=MACaddress[10];
			MACaddress1[11]=MACaddress[11];



		}
		incrementMACaddress();
		if (MACaddress[0] == lastMACaddress[0] &&
			MACaddress[1] == lastMACaddress[1] &&
			MACaddress[2] == lastMACaddress[2] &&
			MACaddress[3] == lastMACaddress[3] &&
			MACaddress[4] == lastMACaddress[4] &&
			MACaddress[5] == lastMACaddress[5] &&
			MACaddress[6] == lastMACaddress[6] &&
			MACaddress[7] == lastMACaddress[7] &&
			MACaddress[8] == lastMACaddress[8] &&
			MACaddress[9] == lastMACaddress[9] &&
			MACaddress[10] == lastMACaddress[10] &&
			MACaddress[11] == lastMACaddress[11] )
				{
						//
						//exceeds last permissable address
						//
						sprintf(errorString,"%s\n%s"
								,"End of ethernet addresses has been reached"
								,"Please apply for more ethernet addresses");
						MessagePopup ("getMacAddress()", errorString);
			     		failFlag = SET;
			     		return(failFlag);

				}


				else

				{

					writeImgFile2();// create image file
					MACaddress2[0]=MACaddress[0];
					MACaddress2[1]=MACaddress[1];
					MACaddress2[2]=MACaddress[2];
					MACaddress2[3]=MACaddress[3];
					MACaddress2[4]=MACaddress[4];
					MACaddress2[5]=MACaddress[5];
					MACaddress2[6]=MACaddress[6];
					MACaddress2[7]=MACaddress[7];
					MACaddress2[8]=MACaddress[8];
					MACaddress2[9]=MACaddress[9];
					MACaddress2[10]=MACaddress[10];
					MACaddress2[11]=MACaddress[11];
				}
				fclose(filePtr);		// writeEthernetDatFile will reopen for write
				writeEthernetDatFile();	// append it to ethernet.dat

	}

	return(SUCCESS);
}

//
// Get a new or previously assigned MAC address based on the UUT's serial number
// This is a new routine using Celestica's SFDM where the serial number is sent to
// the system requesting a MAC Address, it is processed and returns a MAC Address
// to the variable MACaddress that will be used to generate the mac.img file.
// - Bill McManus 10/19/2001
//
/*int getMacAddressFromSFDM()
{
	int numMACAddresses;
	//
	// Get MAC Address
	//
	SPECTRUM_GetUserString("MacAddress",userString.MACaddress, 0, TWO_MAC_ADDRESS_LENGTH);
	numMACAddresses = sscanf (userString.MACaddress, "%s %s" ,table2.MACaddress1,table2.MACaddress2);
	SPECTRUM_SetUserString ("MacAddress1", table2.MACaddress1, 0);
	SPECTRUM_SetUserString ("MacAddress2", table2.MACaddress2, 0);


	if(numMACAddresses == 2) { // looks like what we what
		ASC2HEX(table2.MACaddress1);
		writeImgFile1();			// create image file 1
		ASC2HEX(table2.MACaddress2);
		writeImgFile2();			// create image file 2
	}
	//ASC2HEX(userString.MACaddress);
	//writeImgFile();			// create image file

	return(SUCCESS);
} //end getMacAddressFromSFDM
*/

int ASC2HEX(char *address)
{
	int i = 0;
	int nibble[MAC_ADDRESS_LENGTH] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
		etherByte[MAC_ADDRESS_LENGTH] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

	for (i=0;i < MAC_ADDRESS_LENGTH;i++) {
		if (address[i] == '0') nibble[i]=0x0;
		if (address[i] == '1') nibble[i]=0x1;
		if (address[i] == '2') nibble[i]=0x2;
		if (address[i] == '3') nibble[i]=0x3;
		if (address[i] == '4') nibble[i]=0x4;
		if (address[i] == '5') nibble[i]=0x5;
		if (address[i] == '6') nibble[i]=0x6;
		if (address[i] == '7') nibble[i]=0x7;
		if (address[i] == '8') nibble[i]=0x8;
		if (address[i] == '9') nibble[i]=0x9;
		if (address[i] == 'a') nibble[i]=0xA;
		if (address[i] == 'A') nibble[i]=0xA;
		if (address[i] == 'b') nibble[i]=0xB;
		if (address[i] == 'B') nibble[i]=0xB;
		if (address[i] == 'c') nibble[i]=0xC;
		if (address[i] == 'C') nibble[i]=0xC;
		if (address[i] == 'd') nibble[i]=0xD;
		if (address[i] == 'D') nibble[i]=0xD;
		if (address[i] == 'e') nibble[i]=0xE;
		if (address[i] == 'E') nibble[i]=0xE;
		if (address[i] == 'f') nibble[i]=0xF;
		if (address[i] == 'F') nibble[i]=0xF;

		MACaddress[i]=nibble[i];
	}

	if (preExistFlag == CLEAR) {  // if a MACaddress is new, then assign a new one
		for (i=MAC_ADDRESS_LENGTH-1;i>0;i--) {
			if (nibble[i] == 16) {
				nibble[i] = 0x0;
				nibble[i-1] = ((nibble[i-1]) + 1);
			}
		}
	}

	for (i=0;i<6;i++) {
		etherByte[i]=(((nibble[(2*i)+1])+(nibble[2*i]*16)));
	}

	return(SUCCESS);
}


//
// Increment MAC address
//
int incrementMACaddress()
{
	int i;

	MACaddress[11]=(MACaddress[11]+0x1);

	for (i=MAC_ADDRESS_LENGTH-1;i > 0;i--) {
		if (MACaddress[i] == 16) {
				MACaddress[i]=0x00;
				MACaddress[i-1] = ((MACaddress[i-1])+1);
		}
	}

	return(SUCCESS);
}


//
// Write serialNumber, MACaddress, and timeStamp to ethernet.dat file
//
int writeEthernetDatFile()
{
	FILE *filePtr;
	int i;
	char errorString[ERROR_STRING_LENGTH];

	if( (filePtr = fopen(macFilename, "a")) == (FILE *) NULL) {
		sprintf(errorString,"Couldn't open ethernet file:\n'%s'", macFilename);
		MessagePopup ("writeEthernetDatFile()", errorString);
		failFlag=SET;
		return(failFlag);
	}
	
	fprintf(filePtr, "%s ",userString.serialNumber);

	for (i=0;i < MAC_ADDRESS_LENGTH;i++)
		fprintf(filePtr,"%X",MACaddress1[i]);

	fprintf(filePtr," ");

	for (i=0;i < MAC_ADDRESS_LENGTH;i++)
		fprintf(filePtr,"%X",MACaddress2[i]);

	fprintf(filePtr," ");

	fprintf(filePtr, "%s ",userString.productCode);

	time(&now);
	fprintf(filePtr,ctime(&now));

	fclose(filePtr);

	return(SUCCESS);
}


//
// Write Image File
//
int writeImgFile1()
{
	FILE *fp;
	char nibble[] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
	char errorString[ERROR_STRING_LENGTH];


	if( (fp = fopen(imageFilename1, "wb")) == (FILE *) NULL) {
		sprintf(errorString,"Couldn't open image file '%s'", imageFilename1);
		MessagePopup ("writeImgFile()", errorString);
		failFlag=SET;
		return(failFlag);
	}

	nibble[2] = (MACaddress[0] << 4) + (MACaddress[1]);
	nibble[3] = (MACaddress[2] << 4) + (MACaddress[3]);
	nibble[4] = (MACaddress[4] << 4) + (MACaddress[5]);
	nibble[5] = (MACaddress[6] << 4) + (MACaddress[7]);
	nibble[6] = (MACaddress[8] << 4) + (MACaddress[9]);
	nibble[7] = (MACaddress[10] << 4) + (MACaddress[11]);

	fwrite(&nibble,sizeof(nibble),1,fp);

	fclose(fp);
	return(SUCCESS);
}

//
// Write Image File 2
//
int writeImgFile2()
{
	FILE *fp;
	char nibble[] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
	char errorString[ERROR_STRING_LENGTH];


	if( (fp = fopen(imageFilename2, "wb")) == (FILE *) NULL) {
		sprintf(errorString,"Couldn't open image file '%s'", imageFilename2);
		MessagePopup ("writeImgFile()", errorString);
		failFlag=SET;
		return(failFlag);
	}

	nibble[2] = (MACaddress[0] << 4) + (MACaddress[1]);
	nibble[3] = (MACaddress[2] << 4) + (MACaddress[3]);
	nibble[4] = (MACaddress[4] << 4) + (MACaddress[5]);
	nibble[5] = (MACaddress[6] << 4) + (MACaddress[7]);
	nibble[6] = (MACaddress[8] << 4) + (MACaddress[9]);
	nibble[7] = (MACaddress[10] << 4) + (MACaddress[11]);

	fwrite(&nibble,sizeof(nibble),1,fp);

	fclose(fp);
	return(SUCCESS);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -