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

📄 parseloadear.c

📁 Atheros AP Test with Agilent N4010A source code
💻 C
📖 第 1 页 / 共 3 页
字号:
			ear_cfg->reg_cfg = (REGISTER_CFG *) malloc(sizeof(REGISTER_CFG));
			temp_reg_cfg = ear_cfg->reg_cfg;
		}
		else {
			temp_reg_cfg->next = (REGISTER_CFG *) malloc(sizeof(REGISTER_CFG));
			temp_reg_cfg = temp_reg_cfg->next;
		}
		ASSERT(temp_reg_cfg != NULL);
		temp_reg_cfg->version_mask = prev_version_mask;
		temp_reg_cfg->next = NULL;
		temp_reg_cfg->write_type.reg_write_type1 = NULL;
		if (ear[iIndex] & 0x8000) { // its version mask, else register header
		   temp_reg_cfg->version_mask = (A_UINT16) ear[iIndex++];
		}
		if (prev_version_mask != temp_reg_cfg->version_mask) {
			prev_version_mask = temp_reg_cfg->version_mask;
		}
		//Should be register header
		temp_reg_cfg->reg_hdr.field0.value = (A_UINT16) ear[iIndex++];
        //printf("ear[%d]=%x:temp_reg_cfg->reg_hdr.field0.value=%x:\n", (iIndex-1), ear[iIndex-1], temp_reg_cfg->reg_hdr.field0.value);
        //printf("CM=%d:D=%d:pll=%d:\n", temp_reg_cfg->reg_hdr.field0.pack0.channel_modifier_present, temp_reg_cfg->reg_hdr.field0.pack0.disabler_present, temp_reg_cfg->reg_hdr.field2.pack2.pll);
		ASSERT(temp_reg_cfg->reg_hdr.field0.pack0.bit15 == 0);
		if (temp_reg_cfg->reg_hdr.field0.pack0.channel_modifier_present) {
			temp_reg_cfg->reg_hdr.field1.channel_modifier = (A_UINT16) ear[iIndex++];
		}
		if (temp_reg_cfg->reg_hdr.field0.pack0.disabler_present) {
			temp_reg_cfg->reg_hdr.field2.disabler_mask = (A_UINT16) ear[iIndex++];
		}
        else {
			temp_reg_cfg->reg_hdr.field2.disabler_mask = 0;
        }
		if (temp_reg_cfg->reg_hdr.field2.pack2.pll) {
			temp_reg_cfg->reg_hdr.pll_value = (A_UINT16) ear[iIndex++];
		}

		switch(temp_reg_cfg->reg_hdr.field0.pack0.type) {
		case WRITE_TYPE0:
			do {
			//printf("TYPE0:iIndex=%d\n", iIndex);
              		  if (temp_reg_cfg->write_type.reg_write_type0 == NULL) {
				temp_reg_cfg->write_type.reg_write_type0 = (REGISTER_WRITE_TYPE0 *) malloc(sizeof(REGISTER_WRITE_TYPE0));
				temp_reg_write_type0 = temp_reg_cfg->write_type.reg_write_type0;
			  }
			  else {
				temp_reg_write_type0->next = (REGISTER_WRITE_TYPE0 *) malloc(sizeof(REGISTER_WRITE_TYPE0));
				temp_reg_write_type0 = temp_reg_write_type0->next;
			  }
			  ASSERT(temp_reg_write_type0 != NULL);
			  temp_reg_write_type0->next = NULL;

			  temp_reg_write_type0->field0.value = (A_UINT16) ear[iIndex++];

			  switch(temp_reg_write_type0->field0.pack.tag){
			  case 0:
			  case 3:
				  temp_reg_write_type0->msw = (A_UINT16) ear[iIndex++];
				  temp_reg_write_type0->lsw = (A_UINT16) ear[iIndex++];
				  break;
			  case 1:
			  case 2:
				  temp_reg_write_type0->msw = (A_UINT16) ear[iIndex++];
				  break;
			  }
			  ASSERT(iIndex<numLocations);
			} while(temp_reg_write_type0->field0.pack.tag != 3);
			break;
		case WRITE_TYPE1:
			//printf("TYPE1:iIndex=%d\n", iIndex);
              		if (temp_reg_cfg->write_type.reg_write_type1 == NULL) {
				temp_reg_cfg->write_type.reg_write_type1 = (REGISTER_WRITE_TYPE1 *) malloc(sizeof(REGISTER_WRITE_TYPE1));
				temp_reg_write_type1 = temp_reg_cfg->write_type.reg_write_type1;
			  	temp_reg_write_type1->next = NULL;
			  }
			  ASSERT(temp_reg_write_type1 != NULL);
			  temp_reg_write_type1->field0.value = (A_UINT16) ear[iIndex++];
			  for(jIndex=0; jIndex<=temp_reg_write_type1->field0.pack.num; jIndex++) {
			  	ASSERT(iIndex<numLocations);
				temp_reg_write_type1->data_msw[jIndex] = (A_UINT16) ear[iIndex++];
				temp_reg_write_type1->data_lsw[jIndex] = (A_UINT16) ear[iIndex++];
			  }
			break;
		case WRITE_TYPE2:
			//printf("TYPE2:iIndex=%d\n", iIndex);
			do {
              		  if (temp_reg_cfg->write_type.reg_write_type2 == NULL) {
				temp_reg_cfg->write_type.reg_write_type2 = (REGISTER_WRITE_TYPE2 *) malloc(sizeof(REGISTER_WRITE_TYPE2));
				temp_reg_write_type2 = temp_reg_cfg->write_type.reg_write_type2;
			  }
			  else {
					temp_reg_write_type2->next = (REGISTER_WRITE_TYPE2 *) malloc(sizeof(REGISTER_WRITE_TYPE2));
					temp_reg_write_type2 = temp_reg_write_type2->next;
			  }
			  ASSERT(temp_reg_write_type2 != NULL);
			  temp_reg_write_type2->next = NULL;

 			  temp_reg_write_type2->field0.value = (A_UINT16) ear[iIndex++];
  
			  switch(temp_reg_write_type2->field0.pack0.extended){
			    case 0:
			      temp_reg_write_type2->field1.value = (A_UINT16) ear[iIndex++];	  
				break;
			    case 1:
				  temp_reg_write_type2->num_bits = (A_UINT16) ear[iIndex++];
				  temp_reg_write_type2->num_data = A_DIV_UP(temp_reg_write_type2->num_bits, 16);
				  temp_reg_write_type2->data = (A_UINT16 *) malloc(sizeof (A_UINT16) * temp_reg_write_type2->num_data);
				  for(jIndex=0; jIndex<temp_reg_write_type2->num_data; jIndex++) {
			  		  ASSERT(iIndex<numLocations);
					  temp_reg_write_type2->data[jIndex] = (A_UINT16)ear[iIndex++];
				  }
				break;
			  }
			  ASSERT(iIndex<numLocations);
			}while(!temp_reg_write_type2->field0.pack0.last);
			break;
		case WRITE_TYPE3:
			//printf("TYPE3:iIndex=%d\n", iIndex);
			do {
              		  if (temp_reg_cfg->write_type.reg_write_type3 == NULL) {
				temp_reg_cfg->write_type.reg_write_type3 = (REGISTER_WRITE_TYPE3 *) malloc(sizeof(REGISTER_WRITE_TYPE3));
				temp_reg_write_type3 = temp_reg_cfg->write_type.reg_write_type3;
			  }
			  else {
					temp_reg_write_type3->next = (REGISTER_WRITE_TYPE3 *) malloc(sizeof(REGISTER_WRITE_TYPE3));
					temp_reg_write_type3 = temp_reg_write_type3->next;
			  }
			  ASSERT(temp_reg_write_type3 != NULL);
			  temp_reg_write_type3->next = NULL;

 			  temp_reg_write_type3->field0.value = (A_UINT16) ear[iIndex++];
  
			  temp_reg_write_type3->address = (A_UINT16) ear[iIndex++];
			  temp_reg_write_type3->data_msw = (A_UINT16) ear[iIndex++];
			  if (temp_reg_write_type3->field0.pack.num_bits > 16) {
				  temp_reg_write_type3->data_lsw = (A_UINT16) ear[iIndex++];
			  }
			  ASSERT(iIndex<numLocations);
			}while(!temp_reg_write_type3->field0.pack.last);
			break;
		}
		if (!ear[iIndex]) break;
	}
	printParsedFormattedData(ear_cfg);
	freeup_earcfg(ear_cfg);
	
}

void printParsedFormattedData(EAR_CFG *ear_cfg) {
    REGISTER_CFG *temp_reg_cfg = NULL;
    REGISTER_WRITE_TYPE0 *temp_reg_write_type0=NULL;
    REGISTER_WRITE_TYPE1 *temp_reg_write_type1=NULL;
    REGISTER_WRITE_TYPE2 *temp_reg_write_type2=NULL;
    REGISTER_WRITE_TYPE3 *temp_reg_write_type3=NULL;
    A_UINT32 iIndex;
    A_UINT16 prev_version_mask;
    char *tag_str[] = {"32 bit data", "lower 16 bit data", "upper 16 bit data", "32 bit data and last write in the block"};


    temp_reg_cfg = ear_cfg->reg_cfg;

    uiPrintf("******  Version Id = %x  ****** \n", ear_cfg->version_id);	
    uiPrintf("******  Version Mask = %x  ******  \n", temp_reg_cfg->version_mask);	
    prev_version_mask = temp_reg_cfg->version_mask;
    while(temp_reg_cfg) {
	if (prev_version_mask != temp_reg_cfg->version_mask) {
    		uiPrintf("******  Version Mask = %x  ******  \n", temp_reg_cfg->version_mask);	
    		prev_version_mask = temp_reg_cfg->version_mask;
	}
	uiPrintf("Hdr value = %x::", temp_reg_cfg->reg_hdr.field0.value);
	printModeString( (A_UINT16) temp_reg_cfg->reg_hdr.field0.pack0.reg_modality_mask);
	if (temp_reg_cfg->reg_hdr.field0.pack0.channel_modifier_present) {
		uiPrintf("Channel modifier = ");
		if (temp_reg_cfg->reg_hdr.field1.pack1.bit15) {
			uiPrintf("Single channel %0d MHz\n", temp_reg_cfg->reg_hdr.field1.pack1.bit0_14);
		}
		else
		{
			uiPrintf("%x::", temp_reg_cfg->reg_hdr.field1.channel_modifier);
		}
	}
	if (temp_reg_cfg->reg_hdr.field0.pack0.disabler_present) {
		uiPrintf("Disabler = %x -> ", temp_reg_cfg->reg_hdr.field2.disabler_mask);
		if (temp_reg_cfg->reg_hdr.field2.pack2.pll) {
			uiPrintf("PLL  %x\n", temp_reg_cfg->reg_hdr.pll_value);
		}
	}
	switch(temp_reg_cfg->reg_hdr.field0.pack0.type) {
		case 0:
			uiPrintf("TYPE 0\n");
			temp_reg_write_type0 = temp_reg_cfg->write_type.reg_write_type0;
			while(temp_reg_write_type0) {
				uiPrintf("Address = %x::", temp_reg_write_type0->field0.pack.address<<2);
				uiPrintf("%s\n", tag_str[temp_reg_write_type0->field0.pack.tag]);
				uiPrintf("=== >	%x\n", temp_reg_write_type0->msw);
				if (temp_reg_write_type0->field0.pack.tag == 0 || temp_reg_write_type0->field0.pack.tag == 3) {
				   uiPrintf("=== >	%x ", temp_reg_write_type0->lsw);
				}
				uiPrintf("\n");
				temp_reg_write_type0 = temp_reg_write_type0 -> next;
			}
			break;
		case 1:
			uiPrintf("TYPE 1, Group addresses\n");
			temp_reg_write_type1 = temp_reg_cfg->write_type.reg_write_type1;
			while(temp_reg_write_type1) {
				uiPrintf("Number of data = %x\n", temp_reg_write_type1->field0.pack.num);
				uiPrintf("Address = %x\n", temp_reg_write_type1->field0.pack.address<<2);
				for(iIndex=0; iIndex<=temp_reg_write_type1->field0.pack.num; iIndex++) {
				   uiPrintf("Data MSW[%d] = %x \n", iIndex, temp_reg_write_type1->data_msw[iIndex]);
				   uiPrintf("Data LSW[%d] = %x \n", iIndex, temp_reg_write_type1->data_lsw[iIndex]);
				}
				temp_reg_write_type1 = temp_reg_write_type1 -> next;
			}
			break;
		case 2:
			uiPrintf("TYPE 2, Analog registers = ");
			temp_reg_write_type2 = temp_reg_cfg->write_type.reg_write_type2;
			while(temp_reg_write_type2) {
				uiPrintf("%x\n", temp_reg_write_type2->field0.value);
				if (temp_reg_write_type2->field0.pack0.extended) {
				   for(iIndex=0; iIndex<temp_reg_write_type2->num_data; iIndex++) {
				      uiPrintf("=== >	%x\n", temp_reg_write_type2->data[iIndex]);
				   }
				}
				else {
				   uiPrintf("%x\n", temp_reg_write_type2->field1.value);
				}
				temp_reg_write_type2 = temp_reg_write_type2 -> next;
			}
			break;
		case 3:
			uiPrintf("TYPE 3 \n");
			temp_reg_write_type3 = temp_reg_cfg->write_type.reg_write_type3;
			while(temp_reg_write_type3) {
				uiPrintf("Field 0 === >	%x::", temp_reg_write_type3->field0.value);
				uiPrintf("Opcode = %d\n", temp_reg_write_type3->field0.pack.opcode);
				uiPrintf("Address = %x\n", temp_reg_write_type3->address);
				if (temp_reg_write_type3->field0.pack.num_bits > 16) {
					uiPrintf("Data MSW %x\n", temp_reg_write_type3->data_msw);
					uiPrintf("Data LSW %x\n", temp_reg_write_type3->data_lsw);
				}
				else {
					uiPrintf("Data %x\n", temp_reg_write_type3->data_msw);
				}
				temp_reg_write_type3 = temp_reg_write_type3 -> next;
			}
			break;
	}
        temp_reg_cfg = temp_reg_cfg->next;
    }

}

int parseLoadEar(char *ear_cfg_filename, A_UINT32 ear[MAX_EAR_LOCATIONS], A_UINT32 *numlocations, int debug)
{

	EAR_CFG *ear_cfg = NULL;
	A_UINT32 iIndex;

	ear_cfg = (EAR_CFG *) malloc(sizeof(EAR_CFG));
	ASSERT(ear_cfg != NULL);
	ear_cfg->reg_cfg = NULL;
	if (parseEarCfgFile(ear_cfg_filename, &ear_cfg) != -1) {
	   if (debug) printf("creating EAR \n");
	   *numlocations = createEAR(ear_cfg, ear);
	   if (debug) printf("created EAR \n");
	   if (debug) {
	       printf("printing parsed file \n");
	       printf("Number of EAR locations = %d\n", *numlocations);
	       printParsedFormattedData(ear_cfg);
	       printf("EAR words are \n");
	       for(iIndex=0; iIndex<*numlocations; iIndex++) {
	   	    printf("%x\n", ear[iIndex]);
	       }
	   }

	   freeup_earcfg(ear_cfg);
	   ear_cfg=NULL;
//		 uiPrintf("\nThe Number of Ear Location = %d",*numlocations);
	   return *numlocations;
 	}	
	else {
		return -1;
	}
}

⌨️ 快捷键说明

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