📄 meeprom.c
字号:
tempValue = eepromRead(devNum, pOffsets->HDR_MODE_DEVICE_INFO);
pHeaderInfo->turboDisable = (A_UINT16)((tempValue >> 15) & 0x01);
pHeaderInfo->RFKill = (A_UINT16)((tempValue >> 14) & 0x01);
pHeaderInfo->deviceType = (A_UINT16)((tempValue >> 11) & 0x07);
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.turbo2wMaxPower = (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);
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);
pHeaderInfo->earStartLocation = (A_UINT16)(tempValue & 0xfff);
pHeaderInfo->eepMap = (A_UINT16)((tempValue >> 14) & 0x3);
tempValue = eepromRead(devNum, pOffsets->HDR_ANTENNA_GAIN + 2);
pHeaderInfo->trgtPowerStartLocation = (A_UINT16)(tempValue & 0xfff);
pHeaderInfo->enable32khz = (A_UINT16)((tempValue >> 15) & 0x1);
if(pHeaderInfo->minorVersion >= 5) {
pHeaderInfo->oldEnable32khz = (A_UINT16)((tempValue >> 15) & 0x1);
pHeaderInfo->enable32khz = (A_UINT16)((tempValue >> 14) & 0x1);
}
}
if((pHeaderInfo->majorVersion >= 4) && (pHeaderInfo->minorVersion >= 4)){
tempValue = eepromRead(devNum, pOffsets->HDR_ANTENNA_GAIN + 3);
pHeaderInfo->eepFileVersion = (A_UINT16)((tempValue >> 8) & 0xff);
pHeaderInfo->earFileVersion = (A_UINT16)(tempValue & 0xff);
tempValue = eepromRead(devNum, pOffsets->HDR_ANTENNA_GAIN + 4);
pHeaderInfo->artBuildNumber = (A_UINT16)((tempValue >> 10) & 0x3f);
pHeaderInfo->earFileIdentifier = (A_UINT16)(tempValue & 0xff);
}
if((pHeaderInfo->majorVersion >= 4) && (pHeaderInfo->minorVersion >= 5)){
tempValue = eepromRead(devNum, pOffsets->HDR_ANTENNA_GAIN + 5);
pHeaderInfo->maskRadio0 = (A_UINT16)(tempValue & 0x3);
pHeaderInfo->maskRadio1 = (A_UINT16)((tempValue >> 2) & 0x3);
}
offset = pOffsets->HDR_11A_COMMON;
tempValue = eepromRead(devNum, offset);
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);
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);
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);
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);
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);
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);
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);
pHeaderInfo->info11a.txEndToXLNAOn = (A_UINT16)((tempValue >> 8) & 0xff);
pHeaderInfo->info11a.thresh62 = (A_UINT16)(tempValue & 0xff);
offset++;
tempValue = eepromRead(devNum, offset);
pHeaderInfo->info11a.txEndToXPAOff = (A_UINT16)((tempValue >> 8) & 0xff);
pHeaderInfo->info11a.txFrameToXPAOn = (A_UINT16)(tempValue & 0xff);
offset++;
tempValue = eepromRead(devNum, offset);
pHeaderInfo->info11a.pgaDesiredSize = (A_INT8)((tempValue >> 8) & 0xff);
pHeaderInfo->info11a.noisefloorThresh = (A_INT8)(tempValue & 0xff);
offset++;
tempValue = eepromRead(devNum, offset);
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))
|| (pHeaderInfo->majorVersion == 4)){
offset++;
tempValue = eepromRead(devNum, offset);
pHeaderInfo->info11a.falseDetectBackoff = (A_UINT16)((tempValue >> 6) & 0x7f);
}
if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 4))
|| (pHeaderInfo->majorVersion == 4)){
pHeaderInfo->info11a.initialGainI = (A_UINT16)((tempValue >> 13) & 0x07);
pHeaderInfo->info11a.xrTargetPower = (A_UINT16)(tempValue & 0x3f);
offset++;
tempValue = eepromRead(devNum, offset);
pHeaderInfo->info11a.initialGainI = (A_UINT16)(((tempValue & 0x07) << 3) | pHeaderInfo->info11a.initialGainI);
}
if(pHeaderInfo->majorVersion == 4) {
pHeaderInfo->info11a.iqCalQ = (A_UINT16)((tempValue >> 3) & 0x1f);
pHeaderInfo->info11a.iqCalI = (A_UINT16)((tempValue >> 8) & 0x3f);
offset++;
if(pHeaderInfo->minorVersion >= 1) {
tempValue = eepromRead(devNum, offset);
pHeaderInfo->info11a.rxtxMargin = (A_UINT16)(tempValue & 0x3f);
}
}
//11b and g params
//start by reading b
pModeInfo = &(pHeaderInfo->info11b);
offset = pOffsets->HDR_11B_COMMON;
for (i = 0; i < 2; i++) {
tempValue = eepromRead(devNum, offset);
pModeInfo->switchSettling = (A_UINT16)((tempValue >> 8) & 0x7f);
pModeInfo->txrxAtten = (A_UINT16)((tempValue >> 2) & 0x3f);
pModeInfo->antennaControl[0] = (A_UINT16)((tempValue << 4) & 0x3f);
tempValue = eepromRead(devNum, offset + 1);
pModeInfo->antennaControl[0] = (A_UINT16)(((tempValue >> 12) & 0x0f) | pModeInfo->antennaControl[0]);
pModeInfo->antennaControl[1] = (A_UINT16)((tempValue >> 6) & 0x3f);
pModeInfo->antennaControl[2] = (A_UINT16)(tempValue & 0x3f);
tempValue = eepromRead(devNum, offset + 2);
pModeInfo->antennaControl[3] = (A_UINT16)((tempValue >> 10) & 0x3f);
pModeInfo->antennaControl[4] = (A_UINT16)((tempValue >> 4) & 0x3f);
pModeInfo->antennaControl[5] = (A_UINT16)((tempValue << 2) & 0x3f);
tempValue = eepromRead(devNum, offset + 3);
pModeInfo->antennaControl[5] = (A_UINT16)(((tempValue >> 14) & 0x03) | pModeInfo->antennaControl[5]);
pModeInfo->antennaControl[6] = (A_UINT16)((tempValue >> 8) & 0x3f);
pModeInfo->antennaControl[7] = (A_UINT16)((tempValue >> 2) & 0x3f);
pModeInfo->antennaControl[8] = (A_UINT16)((tempValue << 4) & 0x3f);
tempValue = eepromRead(devNum, offset + 4);
pModeInfo->antennaControl[8] = (A_UINT16)(((tempValue >> 12) & 0x0f) | pModeInfo->antennaControl[8]);
pModeInfo->antennaControl[9] = (A_UINT16)((tempValue >> 6) & 0x3f);
pModeInfo->antennaControl[10] = (A_UINT16)(tempValue & 0x3f);
tempValue = eepromRead(devNum, offset + 5);
pModeInfo->adcDesiredSize = (A_INT8)((tempValue >> 8) & 0xff);
pModeInfo->ob_1 = (A_UINT16)((tempValue >> 4) & 0x07);
pModeInfo->db_1 = (A_UINT16)(tempValue & 0x07);
tempValue = eepromRead(devNum, offset + 6);
pModeInfo->txEndToXLNAOn = (A_UINT16)((tempValue >> 8) & 0xff);
pModeInfo->thresh62 = (A_UINT16)(tempValue & 0xff);
tempValue = eepromRead(devNum, offset + 7);
pModeInfo->txEndToXPAOff = (A_UINT16)((tempValue >> 8) & 0xff);
pModeInfo->txFrameToXPAOn = (A_UINT16)(tempValue & 0xff);
tempValue = eepromRead(devNum, offset + 8);
pModeInfo->pgaDesiredSize = (A_INT8)((tempValue >> 8) & 0xff);
pModeInfo->noisefloorThresh = (A_INT8)(tempValue & 0xff);
tempValue = eepromRead(devNum, offset + 9);
if((pHeaderInfo->majorVersion == 4) && (i == 1)) {
pHeaderInfo->fixedBiasB = (A_UINT16)((tempValue >> 13) & 0x01);
}
pModeInfo->xlnaGain = (A_UINT16)((tempValue >> 5) & 0xff);
pModeInfo->xgain = (A_UINT16)((tempValue >> 1) & 0x0f);
pModeInfo->xpd = (A_UINT8)(tempValue & 0x01);
if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 3))
|| (pHeaderInfo->majorVersion == 4)){
tempValue = eepromRead(devNum, offset+10);
pModeInfo->falseDetectBackoff = (A_UINT16)((tempValue >> 6) & 0x7f);
}
//read the extra info for EEPROM version 3.4
if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 4))
|| (pHeaderInfo->majorVersion == 4)){
pModeInfo->initialGainI = (A_UINT16)((tempValue >> 13) & 0x07);
tempValue = eepromRead(devNum, offset + 11);
pModeInfo->initialGainI = (A_UINT16)(((tempValue & 0x07) << 3) | pModeInfo->initialGainI);
pLibDev->p16kEepHeader->scaledOfdmCckDelta = (A_UINT16)((tempValue & 0xff) >> 3);
if((pHeaderInfo->majorVersion == 4) && (pHeaderInfo->minorVersion >= 6)) {
pLibDev->p16kEepHeader->scaledCh14FilterCckDelta = (A_UINT16)((tempValue >> 11) & 0x1f);
}
tempValue = eepromRead(devNum, offset + 12);
pModeInfo->calPier1 = (A_UINT16)(tempValue & 0xff);
if(pModeInfo->calPier1 != 0xff) {
pModeInfo->calPier1 = fbin2freq_2p4(devNum, pModeInfo->calPier1);
}
pModeInfo->calPier2 = (A_UINT16)((tempValue >> 8) & 0xff);
if(pModeInfo->calPier2 != 0xff) {
pModeInfo->calPier2 = fbin2freq_2p4(devNum, pModeInfo->calPier2);
}
if(i == 1) { //11g mode
tempValue = eepromRead(devNum, offset + 13);
pModeInfo->turbo2wMaxPower = (A_UINT16)(tempValue & 0x7f);
pModeInfo->xrTargetPower = (A_UINT16)((tempValue >> 7) & 0x3f);
}
}
if(pHeaderInfo->majorVersion == 4) {
if(i == 0) {
tempValue = eepromRead(devNum, offset + 13);
pModeInfo->calPier3 = (A_UINT16)(tempValue & 0xff);
if(pModeInfo->calPier3 != 0xff) {
pModeInfo->calPier3 = fbin2freq_2p4(devNum, pModeInfo->calPier3);
}
if(pHeaderInfo->minorVersion >= 1) {
pModeInfo->rxtxMargin = (A_UINT16)((tempValue >> 8) & 0x3f);
}
}
if(i == 1) { //11g mode
tempValue = eepromRead(devNum, offset + 14);
pModeInfo->calPier3 = (A_UINT16)(tempValue & 0xff);
if(pModeInfo->calPier3 != 0xff) {
pModeInfo->calPier3 = fbin2freq_2p4(devNum, pModeInfo->calPier3);
}
if(pHeaderInfo->minorVersion >= 1) {
pModeInfo->rxtxMargin = (A_UINT16)((tempValue >> 8) & 0x3f);
}
tempValue = eepromRead(devNum, offset + 15);
pModeInfo->iqCalQ = (A_UINT16)(tempValue & 0x1f);
pModeInfo->iqCalI = (A_UINT16)((tempValue >> 5) & 0x3f);
if(pHeaderInfo->minorVersion >= 2) {
tempValue = eepromRead(devNum, offset + 16);
pHeaderInfo->ofdmCckGainDeltaX2 = (A_INT8)(tempValue & 0xFF);
}
}
}
//change params to read g stuff
pModeInfo = &(pHeaderInfo->info11g);
offset = pOffsets->HDR_11G_COMMON;
}
//read the test groups
offset = pOffsets->HDR_CTL;
for( i = 0; i < pHeaderInfo->numCtl; i+=2) {
tempValue = eepromRead(devNum, offset++);
pHeaderInfo->testGroups[i] = (A_UINT16)((tempValue >> 8) & 0xff);
pHeaderInfo->testGroups[i+1] = (A_UINT16)(tempValue & 0xff);
}
//read b and g ob/db, store in ob/db_4
if(((pHeaderInfo->majorVersion == 3) && (pHeaderInfo->minorVersion >= 1))
|| (pHeaderInfo->majorVersion == 4)){
tempValue = eepromRead(devNum, pOffsets->HDR_11B_SPECIFIC);
pHeaderInfo->info11b.db_4 = (A_UINT16)((tempValue >> 3) & 0x7);
pHeaderInfo->info11b.ob_4 = (A_UINT16)(tempValue & 0x7);
tempValue = eepromRead(devNum, pOffsets->HDR_11G_SPECIFIC);
pHeaderInfo->info11g.db_4 = (A_UINT16)((tempValue >> 3) & 0x7);
pHeaderInfo->info11g.ob_4 = (A_UINT16)(tempValue & 0x7);
}
//read corner cal info
#if 0
if(pHeaderInfo->minorVersion >= 2) {
offset = pOffsets->HDR_11A_SPECIFIC;
tempValue = eepromRead(devNum, offset++);
pHeaderInfo->cornerCal[0].gSel = (A_UINT16)(tempValue & 0x1);
pHeaderInfo->cornerCal[0].pd84 = (A_UINT16)((tempValue >> 1) & 0x1);
pHeaderInfo->cornerCal[0].pd90 = (A_UINT16)((tempValue >> 2) & 0x1);
pHeaderInfo->cornerCal[0].clip = (A_UINT16)((tempValue >> 3) & 0x7);
pHeaderInfo->cornerCal[1].gSel = (A_UINT16)((tempValue >> 6) & 0x1);
pHeaderInfo->cornerCal[1].pd84 = (A_UINT16)((tempValue >> 7) & 0x1);
pHeaderInfo->cornerCal[1].pd90 = (A_UINT16)((tempValue >> 8) & 0x1);
pHeaderInfo->cornerCal[1].clip = (A_UINT16)((tempValue >> 9) & 0x7);
pHeaderInfo->cornerCal[2].gSel = (A_UINT16)((tempValue >> 12) & 0x1);
pHeaderInfo->cornerCal[2].pd84 = (A_UINT16)((tempValue >> 13) & 0x1);
pHeaderInfo->cornerCal[2].pd90 = (A_UINT16)((tempValue >> 14) & 0x1);
pHeaderInfo->cornerCal[2].clip = (A_UINT16)((tempValue >> 15) & 0x1);
tempValue = eepromRead(devNum, offset);
pHeaderInfo->cornerCal[2].clip = (A_UINT16)(((tempValue & 0x3) << 1) | pHeaderInfo->cornerCal[2].clip);
pHeaderInfo->cornerCal[3].gSel = (A_UINT16)((tempValue >> 2) & 0x1);
pHeaderInfo->cornerCal[3].pd84 = (A_UINT16)((tempValue >> 3) & 0x1);
pHeaderInfo->cornerCal[3].pd90 = (A_UINT16)((tempValue >> 4) & 0x1);
pHeaderInfo->cornerCal[3].clip = (A_UINT16)((tempValue >> 5) & 0x7);
}
#endif
return;
}
/**************************************************************************
* programHeaderInfo - Program device registers with eeprom header info
*
* RETURNS:
*/
void programHeaderInfo
(
A_UINT32 devNum,
MDK_EEP_HEADER_INFO *pHeaderInfo,
A_UINT16 freq,
A_UCHAR mode
)
{
A_UINT32 tempOB=0;
A_UINT32 tempDB=0;
MODE_HEADER_INFO *pModeInfo;
LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
switch(mode) {
case MODE_11A:
pModeInfo = &(pHeaderInfo->info11a);
break;
case MODE_11G:
case MODE_11O:
pModeInfo = &(pHeaderInfo->info11g);
break;
case MODE_11B:
pModeInfo = &(pHeaderInfo->info11b);
break;
default:
mError(devNum, EINVAL, "Device Number %d:Illegal mode passed to programHeaderInfo\n", devNum);
return;
} //end switch
writeField(devNum, "bb_switch_settling", pModeInfo->switchSettling);
writeField(devNum, "bb_txrxatten", pModeInfo->txrxAtten);
//Antenna controls are not being applied
writeField(devNum, "bb_adc_desired_size", pModeInfo->adcDesiredSize);
if(((freq > 4000) && (freq < 5260)) || (mode != MODE_11A)) {
tempOB = pModeInfo->ob_1;
tempDB = pModeInfo->db_1;
}
else if ((freq >= 5260) && (freq < 5500)) {
tempOB = pModeInfo->ob_2;
tempDB = pModeInfo->db_2;
}
else if ((freq >= 5500) && (freq < 5725)) {
tempOB = pModeInfo->ob_3;
tempDB = pModeInfo->db_3;
}
else if (freq >= 5725) {
tempOB = pModeInfo->ob_4;
tempDB = pModeInfo->db_4;
}
writeField(devNum, "rf_ob", tempOB);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -