?? meeprom.c
字號:
}
}
else if((pLibDev->p16kEepHeader->majorVersion >= 4) && (pLibDev->p16kEepHeader->eepMap == 1)) {
if(!initialize_datasets(devNum, pTempGen3CalData, pLibDev->pGen3RawData)) {
return (FALSE);
}
//read eeprom data into contiguous struct.
// need to pass up to ART for display
if(pLibDev->pGen3CalData == NULL) {
pLibDev->pGen3CalData = (EEPROM_FULL_DATA_STRUCT_GEN3 *)malloc(sizeof(EEPROM_FULL_DATA_STRUCT_GEN3));
if(NULL == pLibDev->pGen3CalData) {
mError(devNum, ENOMEM, "Device Number %d:Device Number %d:Unable to allocate memory for full gen3 eeprom struct\n", devNum);
return (FALSE);
}
}
//copy in the data
memset(pLibDev->pGen3CalData, 0, sizeof(EEPROM_FULL_DATA_STRUCT_GEN3));
copyGen3EepromStruct(pLibDev->pGen3CalData, pTempGen3CalData);
//#######TO DO would free pTempGen3CalData here
for(i = 0; i < 3; i++) {
if(pTempGen3CalData[i]) {
free(pTempGen3CalData[i]);
}
}
}
else if((pLibDev->p16kEepHeader->majorVersion >= 5) && (pLibDev->p16kEepHeader->eepMap == 2)) {
if(!initialize_datasets_gen5(devNum, pTempGen5CalData, pLibDev->pGen5RawData)) {
return (FALSE);
}
//read eeprom data into contiguous struct.
// need to pass up to ART for display
if(pLibDev->pGen5CalData == NULL) {
pLibDev->pGen5CalData = (EEPROM_FULL_DATA_STRUCT_GEN5 *)malloc(sizeof(EEPROM_FULL_DATA_STRUCT_GEN5));
if(NULL == pLibDev->pGen5CalData) {
mError(devNum, ENOMEM, "Device Number %d:Device Number %d:Unable to allocate memory for full gen5 eeprom struct\n", devNum);
return (FALSE);
}
}
//copy in the data
memset(pLibDev->pGen5CalData, 0, sizeof(EEPROM_FULL_DATA_STRUCT_GEN5));
copyGen5EepromStruct(pLibDev->pGen5CalData, pTempGen5CalData);
for(i = 0; i < 3; i++) {
if(pTempGen5CalData[i]) {
free(pTempGen5CalData[i]);
}
}
} // griffin eeprom read
//read the power per rate info for test channels
for(mode = 0; mode <= MAX_MODE; mode++) {
switch(mode) {
case MODE_11A:
offset = pOffsets->GROUP5_11A_TRGT_PWR;
if(pLibDev->p16kEepHeader->majorVersion >= 4) {
offset = pLibDev->p16kEepHeader->trgtPowerStartLocation;
}
numChannels = NUM_TEST_FREQUENCIES;
pPowerInfo = pLibDev->p16KTrgtPowerInfo->trgtPwr_11a;
pNumTrgtChannels = &(pLibDev->p16KTrgtPowerInfo->numTargetPwr_11a);
break;
case MODE_11G:
case MODE_11O:
offset = pOffsets->GROUP7_11G_TRGT_PWR;
if(pLibDev->p16kEepHeader->majorVersion >= 4) {
offset = (A_UINT16)(pLibDev->p16kEepHeader->trgtPowerStartLocation + 0x14);
}
numChannels = 3;
pPowerInfo = pLibDev->p16KTrgtPowerInfo->trgtPwr_11g;
pNumTrgtChannels = &(pLibDev->p16KTrgtPowerInfo->numTargetPwr_11g);
break;
case MODE_11B:
offset = pOffsets->GROUP6_11B_TRGT_PWR;
if(pLibDev->p16kEepHeader->majorVersion >= 4) {
offset = (A_UINT16)(pLibDev->p16kEepHeader->trgtPowerStartLocation + 0x10);
}
numChannels = 2;
pPowerInfo = pLibDev->p16KTrgtPowerInfo->trgtPwr_11b;
pNumTrgtChannels = &(pLibDev->p16KTrgtPowerInfo->numTargetPwr_11b);
break;
default:
mError(devNum, EIO, "Device Number %d:Device Number %d:Bad mode in readEepromIntoDataset, internal software error, should not get here\n", devNum);
return(FALSE);
} //end switch
*pNumTrgtChannels = 0;
for(i = 0; i < numChannels; i++) {
if(readTrgtPowers(devNum, (A_UINT16)(offset + pLibDev->eepromStartLoc), pPowerInfo, mode)) {
(*pNumTrgtChannels)++;
}
pPowerInfo++;
offset+=2;
}
}
//read the CTL edge power limits
i = 0;
offset = pOffsets->GROUP8_CTL_INFO;
if(pLibDev->p16kEepHeader->majorVersion >= 4) {
offset = (A_UINT16)(pLibDev->p16kEepHeader->trgtPowerStartLocation + 0x1a);
}
while ((pLibDev->p16kEepHeader->testGroups[i] != 0) && (i < pLibDev->p16kEepHeader->numCtl)) {
sizeCtl = readCtlInfo(devNum, (A_UINT16)(offset + pLibDev->eepromStartLoc), pRdEdgePwrInfo);
for(j = 0; j < NUM_16K_EDGES; j++ ) {
if ((pRdEdgePwrInfo[j].rdEdge==0) && (pRdEdgePwrInfo[j].twice_rdEdgePower==0))
{
pRdEdgePwrInfo[j].rdEdge = 0; // if not all rdedges were specified for this CTL
} else
{
if(((pLibDev->p16kEepHeader->testGroups[i] & 0x7) == 0) ||
((pLibDev->p16kEepHeader->testGroups[i] & 0x7) == 0x3) ){ //turbo mode
pRdEdgePwrInfo[j].rdEdge = fbin2freq(devNum, pRdEdgePwrInfo[j].rdEdge);
}
else {
pRdEdgePwrInfo[j].rdEdge = fbin2freq_2p4(devNum, pRdEdgePwrInfo[j].rdEdge);
}
}
}
i++;
offset = (A_UINT16)(offset + sizeCtl);
pRdEdgePwrInfo+=NUM_16K_EDGES;
}
return TRUE;
}
// only searches for integer values in integer lists. used for channel and pcdac lists
/*void iGetLowerUpperValues
(
A_UINT16 value, //value to search for
A_UINT16 *pList, //ptr to the list to search
A_UINT16 listSize, //number of entries in list
A_UINT16 *pLowerValue, //return the lower value
A_UINT16 *pUpperValue //return the upper value
)
{
A_UINT16 i;
A_UINT16 listEndValue = *(pList + listSize - 1);
A_UINT16 target = value ;
//see if value is lower than the first value in the list
//if so return first value
if (target <= (*pList)) {
*pLowerValue = *pList;
*pUpperValue = *pList;
return;
}
//see if value is greater than last value in list
//if so return last value
if (target >= listEndValue) {
*pLowerValue = listEndValue;
*pUpperValue = listEndValue;
return;
}
//look for value being near or between 2 values in list
for(i = 0; i < listSize; i++) {
//if value is close to the current value of the list
//then target is not between values, it is one of the values
if (pList[i] == target) {
*pLowerValue = pList[i];
*pUpperValue = pList[i];
return;
}
//look for value being between current value and next value
//if so return these 2 values
if (target < pList[i + 1]) {
*pLowerValue = pList[i];
*pUpperValue = pList[i + 1];
return;
}
}
} */
/**************************************************************************
* readHeaderInfo - Read eeprom header info
*
* RETURNS:
*/
void readHeaderInfo
(
A_UINT32 devNum,
MDK_EEP_HEADER_INFO *pHeaderInfo //ptr to header struct to fill
)
{
A_UINT32 tempValue;
A_UINT16 offset;
A_UINT16 i;
MODE_HEADER_INFO *pModeInfo;
LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
tempValue = eepromRead(devNum, (pOffsets->HDR_COUNTRY_CODE + pLibDev->eepromStartLoc));
pHeaderInfo->countryRegCode = (A_UINT16)(tempValue);
if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 2))
|| (pHeaderInfo->majorVersion >= 4)){
pHeaderInfo->countryRegCode = (A_UINT16)(pHeaderInfo->countryRegCode & 0xfff);
pHeaderInfo->countryCodeFlag = (A_UINT16)((tempValue >> 15) & 0x01);
if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 3))
|| (pHeaderInfo->majorVersion >= 4)){
pHeaderInfo->worldwideRoaming = (A_UINT16)((tempValue >> 14) & 0x01);
}
}
else {
pHeaderInfo->countryCodeFlag = 1;
}
tempValue = eepromRead(devNum, (pOffsets->HEADER_MAC_FEATURES + pLibDev->eepromStartLoc));
pHeaderInfo->keyCacheSize = (A_UINT16)((tempValue >> 12) & 0xf);// Added by Giri
pHeaderInfo->enableClip = (A_UINT16)((tempValue >> 9) & 0x1);// Added by Giri
pHeaderInfo->maxNumQCU = (A_UINT16)((tempValue >> 4) & 0x1f);// Added by Giri
pHeaderInfo->burstingDisable = (A_UINT16)((tempValue >> 3) & 0x1);// Added by Giri
pHeaderInfo->fastFrameDisable = (A_UINT16)((tempValue >> 2) & 0x1);// Added by Giri
pHeaderInfo->aesDisable = (A_UINT16)((tempValue >> 1) & 0x1);// Added by Giri
pHeaderInfo->compressionDisable = (A_UINT16)(tempValue & 0x1);// Added by Giri
if(((pHeaderInfo->majorVersion == 5) && (pHeaderInfo->minorVersion >= 3)) ||
(pHeaderInfo->majorVersion >= 6)){
tempValue = eepromRead(devNum, (pOffsets->HEADER_MAC_FEATURES + 1 + pLibDev->eepromStartLoc));
pHeaderInfo->enableFCCMid = (A_UINT16)((tempValue >> 6) & 0x1);
pHeaderInfo->enableJapanEvenU1 = (A_UINT16)((tempValue >> 7) & 0x1);
pHeaderInfo->enableJapenU2 = (A_UINT16)((tempValue >> 8) & 0x1);
pHeaderInfo->enableJapnMid = (A_UINT16)((tempValue >> 9) & 0x1);
pHeaderInfo->disableJapanOddU1 = (A_UINT16)((tempValue >> 10) & 0x1);
pHeaderInfo->enableJapanMode11aNew = (A_UINT16)((tempValue >> 11) & 0x1);
}
tempValue = eepromRead(devNum, (pOffsets->HDR_MODE_DEVICE_INFO + pLibDev->eepromStartLoc));
pHeaderInfo->info11a.turboDisable = (A_UINT16)((tempValue >> 15) & 0x01);// Added by Giri
pHeaderInfo->RFKill = (A_UINT16)((tempValue >> 14) & 0x01);
pHeaderInfo->deviceType = (A_UINT16)((tempValue >> 11) & 0x07);
pHeaderInfo->info11g.turboDisable = (A_UINT16)((tempValue >> 3) & 0x01); // Added by Giri
pHeaderInfo->Bmode = (A_UINT16)((tempValue >> 1) & 0x01);
pHeaderInfo->Amode = (A_UINT16)(tempValue & 0x01);
if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 1))
|| (pHeaderInfo->majorVersion >= 4)){
pHeaderInfo->info11a.turbo.max2wPower = (A_UINT16)((tempValue >> 4) & 0x3f);
pHeaderInfo->xtnd11a = (A_UINT16)((tempValue >> 3) & 0x01);
pHeaderInfo->Gmode = (A_UINT16)((tempValue >> 2) & 0x01);
tempValue = eepromRead(devNum, (pOffsets->HDR_ANTENNA_GAIN + pLibDev->eepromStartLoc));
pHeaderInfo->antennaGain5 = (A_UINT16)((tempValue >> 8) & 0xff);
pHeaderInfo->antennaGain2_4 = (A_UINT16)(tempValue & 0xff);
}
if(pHeaderInfo->majorVersion >= 4) {
tempValue = eepromRead(devNum, (pOffsets->HDR_ANTENNA_GAIN + 1 + pLibDev->eepromStartLoc));
pHeaderInfo->earStartLocation = (A_UINT16)(tempValue & 0xfff);
pHeaderInfo->eepMap = (A_UINT16)((tempValue >> 14) & 0x3);
pHeaderInfo->disableXR = ((A_UINT16)((tempValue >> 12) & 0x3)) ? TRUE : FALSE;
tempValue = eepromRead(devNum, (pOffsets->HDR_ANTENNA_GAIN + 2 + pLibDev->eepromStartLoc));
pHeaderInfo->trgtPowerStartLocation = (A_UINT16)(tempValue & 0xfff);
pHeaderInfo->enable32khz = (A_UINT16)((tempValue >> 15) & 0x1);
if(((pHeaderInfo->majorVersion == 4) && (pHeaderInfo->minorVersion >= 5)) ||
(pHeaderInfo->majorVersion >= 5)){
pHeaderInfo->oldEnable32khz = (A_UINT16)((tempValue >> 15) & 0x1);
pHeaderInfo->enable32khz = (A_UINT16)((tempValue >> 14) & 0x1);
}
}
if(((pHeaderInfo->majorVersion == 4) && (pHeaderInfo->minorVersion >= 4)) ||
(pHeaderInfo->majorVersion >= 5)){
tempValue = eepromRead(devNum, (pOffsets->HDR_ANTENNA_GAIN + 3 + pLibDev->eepromStartLoc));
pHeaderInfo->eepFileVersion = (A_UINT16)((tempValue >> 8) & 0xff);
pHeaderInfo->earFileVersion = (A_UINT16)(tempValue & 0xff);
tempValue = eepromRead(devNum, (pOffsets->HDR_ANTENNA_GAIN + 4 + pLibDev->eepromStartLoc));
pHeaderInfo->artBuildNumber = (A_UINT16)((tempValue >> 10) & 0x3f);
pHeaderInfo->earFileIdentifier = (A_UINT16)(tempValue & 0xff);
}
if(((pHeaderInfo->majorVersion == 4) && (pHeaderInfo->minorVersion >= 5)) ||
(pHeaderInfo->majorVersion >= 5)){
tempValue = eepromRead(devNum, (pOffsets->HDR_ANTENNA_GAIN + 5 + pLibDev->eepromStartLoc));
pHeaderInfo->maskRadio0 = (A_UINT16)(tempValue & 0x3);
pHeaderInfo->maskRadio1 = (A_UINT16)((tempValue >> 2) & 0x3);
if(pHeaderInfo->eepMap >= 2) {
pHeaderInfo->calStartLocation = (A_UINT16)((tempValue >> 4) & 0xfff);
}
}
offset = pOffsets->HDR_11A_COMMON;
tempValue = eepromRead(devNum, (offset + pLibDev->eepromStartLoc));
pHeaderInfo->info11a.switchSettling = (A_UINT16)((tempValue >> 8) & 0x7f);
pHeaderInfo->info11a.txrxAtten = (A_UINT16)((tempValue >> 2) & 0x3f);
pHeaderInfo->info11a.antennaControl[0] = (A_UINT16)((tempValue << 4) & 0x3f);
offset++;
tempValue = eepromRead(devNum, (offset + pLibDev->eepromStartLoc));
pHeaderInfo->info11a.antennaControl[0] = (A_UINT16)(((tempValue >> 12) & 0x0f) | pHeaderInfo->info11a.antennaControl[0]);
pHeaderInfo->info11a.antennaControl[1] = (A_UINT16)((tempValue >> 6) & 0x3f);
pHeaderInfo->info11a.antennaControl[2] = (A_UINT16)(tempValue & 0x3f);
offset++;
tempValue = eepromRead(devNum, (offset + pLibDev->eepromStartLoc));
pHeaderInfo->info11a.antennaControl[3] = (A_UINT16)((tempValue >> 10) & 0x3f);
pHeaderInfo->info11a.antennaControl[4] = (A_UINT16)((tempValue >> 4) & 0x3f);
pHeaderInfo->info11a.antennaControl[5] = (A_UINT16)((tempValue << 2) & 0x3f);
offset++;
tempValue = eepromRead(devNum, (offset + pLibDev->eepromStartLoc));
pHeaderInfo->info11a.antennaControl[5] = (A_UINT16)(((tempValue >> 14) & 0x03) | pHeaderInfo->info11a.antennaControl[5]);
pHeaderInfo->info11a.antennaControl[6] = (A_UINT16)((tempValue >> 8) & 0x3f);
pHeaderInfo->info11a.antennaControl[7] = (A_UINT16)((tempValue >> 2) & 0x3f);
pHeaderInfo->info11a.antennaControl[8] = (A_UINT16)((tempValue << 4) & 0x3f);
offset++;
tempValue = eepromRead(devNum, (offset + pLibDev->eepromStartLoc));
pHeaderInfo->info11a.antennaControl[8] = (A_UINT16)(((tempValue >> 12) & 0x0f) | pHeaderInfo->info11a.antennaControl[8]);
pHeaderInfo->info11a.antennaControl[9] = (A_UINT16)((tempValue >> 6) & 0x3f);
pHeaderInfo->info11a.antennaControl[10] = (A_UINT16)(tempValue & 0x3f);
offset++;
tempValue = eepromRead(devNum, (offset + pLibDev->eepromStartLoc));
pHeaderInfo->info11a.adcDesiredSize = (A_INT8)((tempValue >> 8) & 0xff);
pHeaderInfo->info11a.ob_4 = (A_UINT16)((tempValue >> 5) & 0x07);
pHeaderInfo->info11a.db_4 = (A_UINT16)((tempValue >> 2) & 0x07);
pHeaderInfo->info11a.ob_3 = (A_UINT16)((tempValue << 1) & 0x07);
offset++;
tempValue = eepromRead(devNum, (offset + pLibDev->eepromStartLoc));
pHeaderInfo->info11a.ob_3 = (A_UINT16)(((tempValue >> 15) & 0x01) | pHeaderInfo->info11a.ob_3);
pHeaderInfo->info11a.db_3 = (A_UINT16)((tempValue >> 12) & 0x07);
pHeaderInfo->info11a.ob_2 = (A_UINT16)((tempValue >> 9) & 0x07);
pHeaderInfo->info11a.db_2 = (A_UINT16)((tempValue >> 6) & 0x07);
pHeaderInfo->info11a.ob_1 = (A_UINT16)((tempValue >> 3) & 0x07);
pHeaderInfo->info11a.db_1 = (A_UINT16)(tempValue & 0x07);
offset++;
tempValue = eepromRead(devNum, (offset + pLibDev->eepromStartLoc));
pHeaderInfo->info11a.txEndToXLNAOn = (A_UINT16)((tempValue >> 8) & 0xff);
pHeaderInfo->info11a.thresh62 = (A_UINT16)(tempValue & 0xff);
offset++;
tempValue = eepromRead(devNum, (offset + pLibDev->eepromStartLoc));
pHeaderInfo->info11a.txEndToXPAOff = (A_UINT16)((tempValue >> 8) & 0xff);
pHeaderInfo->info11a.txFrameToXPAOn = (A_UINT16)(tempValue & 0xff);
offset++;
tempValue = eepromRead(devNum, (offset + pLibDev->eepromStartLoc));
pHeaderInfo->info11a.pgaDesiredSize = (A_INT8)((tempValue >> 8) & 0xff);
pHeaderInfo->info11a.noisefloorThresh = (A_INT8)(tempValue & 0xff);
offset++;
tempValue = eepromRead(devNum, (offset + pLibDev->eepromStartLoc));
if(pHeaderInfo->majorVersion >= 4) {
pHeaderInfo->fixedBiasA = (A_UINT16)((tempValue >> 13) & 0x01);
}
pHeaderInfo->info11a.xlnaGain = (A_UINT16)((tempValue >> 5) & 0xff);
pHeaderInfo->info11a.xgain = (A_UINT16)((tempValue >> 1) & 0x0f);
pHeaderInfo->info11a.xpd = (A_UINT16)(tempValue & 0x01);
if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 3))
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -