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

📄 cfg_utility.c

📁 基于ecos的redboot
💻 C
📖 第 1 页 / 共 3 页
字号:
	}
	printf("%s (0xXXXXXXXXXXXX): 0x", msg);
	
	gets(str_mac, 13, 0);
	
	if(*str_mac == '\0')
	{
        if(!user)
            return ERROR;

		for(i = 0; i < 6; i++)
		{
			mac[i] = curr_mac[i];
		}
	}
	else
	{
		for(i = 0; i < 12; i++)
		{
			if(!_is_hex(str_mac[i]))
			{
				printf("Mac addrs should be a hex number\n");
				return ERROR;
			}
		}
		
		mac_vid = from_hex(str_mac, 6);
		mac[2] = mac_vid;
		mac[1] = mac_vid >> 8;
		mac[0] = mac_vid >> 16;
		if(mac_vid != MAC_VENDOR_ID)
		{
			printf("Vendor ID incorrect !!!\n");
			return ERROR;
		}
		
		mac_sno = from_hex(&str_mac[6], 6);
		if(mac_sno > 0xfffffe)
		{
			printf("MAC address serial number should be less than 0xffffff !!!\n");
			return ERROR;
		}
		mac[5] = mac_sno;
		mac[4] = mac_sno >> 8;
		mac[3] = mac_sno >> 16;
	}

	return OK;
}

int get_nxt_mac_addr(unsigned char *mac, unsigned char *nxt_mac)
{
    int i;

    for(i = 0; i < 5; i++)
        nxt_mac[i] = mac[i];

    nxt_mac[5] = mac[5] + 1;
    if(nxt_mac[5] < mac[5])
    {
        nxt_mac[4] += 1;
        if(nxt_mac[4] < mac[4])
        {
            nxt_mac[3] += 1;
            if(nxt_mac[3] < mac[3])
            {
                printf("Ran out of MAC Address\n");
                return ERROR;
            }
        }
    }

    return OK;
}

void display_config_data(char *in_cfg_data, int id)
{
	unsigned int temp;
	unsigned char temp_array[14];
    struct COMMON_CFG_CONTENT *common_data = (struct COMMON_CFG_CONTENT *)in_cfg_data;
	
    printf("\nConfiguration DATA\n\n");
	printf("Device ID                   : %d\n", common_data->dev_id);

	memset(temp_array, '\0', 13);
	memcpy(temp_array, common_data->man_id, CFG_MAN_ID_LEN);
	printf("Manufacturer's ID           : %s\n", temp_array);

	memset(temp_array, '\0', 13);
	memcpy(temp_array, common_data->model_id, CFG_MODEL_ID_LEN);
	printf("Model ID                    : %s\n", temp_array);

	memset(temp_array, '\0', 13);
	memcpy(temp_array, common_data->part_num, CFG_PARTNUM_LEN);
	printf("Part Number                 : %s\n", temp_array);

	printf("Part Revision               : %c%c\n", common_data->part_rev[0], common_data->part_rev[1]);

	memset(temp_array, '\0', 13);
	memcpy(temp_array, common_data->serial_num, CFG_SERIAL_NUM_LEN);
	printf("Serial Number               : %s\n", temp_array);

	if(id == KI_DEV_ID)
	{
        struct KI_EEPROM_CONTENT *ki_data = (struct KI_EEPROM_CONTENT *)in_cfg_data;

		printf("Master NPU's MAC Address    : 0x%02x%02x%02x%02x%02x%02x\n", 
                    ki_data->M_ether_mac_addr[0], ki_data->M_ether_mac_addr[1],
                    ki_data->M_ether_mac_addr[2], ki_data->M_ether_mac_addr[3],
                    ki_data->M_ether_mac_addr[4], ki_data->M_ether_mac_addr[5]);

		printf("Slave NPU's MAC Address     : 0x%02x%02x%02x%02x%02x%02x\n", 
                    ki_data->S_ether_mac_addr[0], ki_data->S_ether_mac_addr[1],
                    ki_data->S_ether_mac_addr[2], ki_data->S_ether_mac_addr[3],
                    ki_data->S_ether_mac_addr[4], ki_data->S_ether_mac_addr[5]);
    }
    if(id == PL_DEV_ID)
	{
        struct PL_EEPROM_CONTENT *pl_data = (struct PL_EEPROM_CONTENT *)in_cfg_data;

		printf("MAC Address for Port 0      : 0x%02x%02x%02x%02x%02x%02x\n", 
                    pl_data->mac_addr0[0], pl_data->mac_addr0[1],
                    pl_data->mac_addr0[2], pl_data->mac_addr0[3],
                    pl_data->mac_addr0[4], pl_data->mac_addr0[5]);
		printf("MAC Address for Port 1      : 0x%02x%02x%02x%02x%02x%02x\n", 
                    pl_data->mac_addr1[0], pl_data->mac_addr1[1],
                    pl_data->mac_addr1[2], pl_data->mac_addr1[3],
                    pl_data->mac_addr1[4], pl_data->mac_addr1[5]);
        printf("MAC Address for Port 2      : 0x%02x%02x%02x%02x%02x%02x\n", 
                    pl_data->mac_addr2[0], pl_data->mac_addr2[1],
                    pl_data->mac_addr2[2], pl_data->mac_addr2[3],
                    pl_data->mac_addr2[4], pl_data->mac_addr2[5]);
        printf("MAC Address for Port 3      : 0x%02x%02x%02x%02x%02x%02x\n", 
                    pl_data->mac_addr3[0], pl_data->mac_addr3[1],
                    pl_data->mac_addr3[2], pl_data->mac_addr3[3],
                    pl_data->mac_addr3[4], pl_data->mac_addr3[5]);
    }
    if(id == MI_DEV_ID)
	{
        struct MI_EEPROM_CONTENT *mi_data = (struct MI_EEPROM_CONTENT *)in_cfg_data;

		printf("Operating frequency         : %d MHZ\n", mi_data->ch_freq);
    }

	if(id == KI_DEV_ID)
	{
		switch(common_data->test_status)
		{
		case SKU1_PASS:
			printf("Test Status                 : SKU1_PASS\n");
			break;
		case SKU1_FAIL:
			printf("Test Status                 : SKU1_FAIL\n");
			break;
		case SKU2_PASS:
			printf("Test Status                 : SKU2_PASS\n");
			break;
		case SKU2_FAIL:
			printf("Test Status                 : SKU2_FAIL\n");
			break;
		default:
			printf("Test Status                 : Not Tested\n");
		}
	}
	else
	{
		switch(common_data->test_status)
		{
		case PASS:
			printf("Test Status                 : PASS\n");
			break;
		case FAIL:
			printf("Test Status                 : FAIL\n");
			break;
		default:
			printf("Test Status                 : Not Tested\n");
		}
	}

	memset(temp_array, '\0', 13);
	memcpy(temp_array, common_data->date, CFG_DATE_LEN);
	printf("Date                        : %s\n", temp_array);

	temp = 0;
	temp = common_data->chksum[0];
	temp = temp | (common_data->chksum[1] << 8);
	temp = temp | (common_data->chksum[2] << 16);
	temp = temp | (common_data->chksum[3] << 24);
	printf("CheckSum                    : %x\n", temp);
}

void read_config_data(char *buf, int id)
{
	int i, chksum_addr;
	unsigned int checksum = 0;
	unsigned int read_chksum = 0, cfg_data_sz;
    unsigned char slave_addr;
	
	switch(id)
	{
    case PL_DEV_ID:
		slave_addr = SLAVE_ADDR_2;
		cfg_data_sz = sizeof(struct PL_EEPROM_CONTENT);
		break;
    case BW_DEV_ID:
    case BD_DEV_ID:
        slave_addr = SLAVE_ADDR_2;
		cfg_data_sz = sizeof(struct COMMON_CFG_CONTENT);
		break;
	case MI_DEV_ID:
		slave_addr = SLAVE_ADDR_4;
		cfg_data_sz = sizeof(struct MI_EEPROM_CONTENT);
		break;
	case BI_DEV_ID:
		slave_addr = SLAVE_ADDR_3;
		cfg_data_sz = sizeof(struct COMMON_CFG_CONTENT);
		break;
	case KI_DEV_ID:
		slave_addr = SLAVE_ADDR_1;
		cfg_data_sz = sizeof(struct KI_EEPROM_CONTENT);
		break;
    default:
        return;
	}
	
    if(i2c_seq_read(slave_addr,0x0, buf, cfg_data_sz))
    {
        printf("Encountered problem in reading EPROM\n");
        return;
    }
    	
	/* r will be used by calculate_checksum() */
	r = 55665;
	chksum_addr = (PAGESZ*4) + 9;

	/*calculate the checksum of the read data excluding the checksum field*/
    for(i = 0; i < chksum_addr; i++)
	{
		checksum += calculate_chksum(buf[i]);
	}
	
    i += 4;
	for(; i < cfg_data_sz; i++)
	{
		checksum += calculate_chksum(buf[i]);
	}

	/*covert the stored checksum in to integer*/	
	read_chksum = 0;
	read_chksum = buf[chksum_addr];
	read_chksum = read_chksum | (buf[(chksum_addr + 1)] << 8);
	read_chksum = read_chksum | (buf[(chksum_addr + 2)] << 16);
	read_chksum = read_chksum | (buf[(chksum_addr + 3)] << 24);
	
	if(read_chksum != checksum)
    {
		printf("Warning - checksum error!!!\n");
        printf("read checksum = %x, computed checksum = %x\n",
                                        read_chksum,checksum);
    }
}

int get_data(char *data, int user, int id)
{
	unsigned char passwd[9];
	char data_buf[MAX_CFG_DATA_SZ];
    struct COMMON_CFG_CONTENT *common_data = (struct COMMON_CFG_CONTENT *)data;
    struct COMMON_CFG_CONTENT *curr_content = (struct COMMON_CFG_CONTENT *)data_buf;

	memset(data_buf, 0, MAX_CFG_DATA_SZ);
	if(user)
	{
		printf("Enter Password: ");
        passwd_input = 1;
		gets(passwd, (CFG_PASSWD_LEN + 1), 0);
        passwd_input = 0;
		if(strcmp((char*)passwd, "ixdp2400")) 
		{
			printf("Invalid Password!\n");
			return ERROR;
		}
        read_config_data(data_buf, id);
	}
	common_data->prom_fmt = '0';
	get_dev_id(&common_data->dev_id, &curr_content->dev_id, user, id);
	get_man_id(common_data->man_id, curr_content->man_id, user);
	get_part_rev(common_data->part_rev, curr_content->part_rev, user);
	get_part_num(common_data->part_num, curr_content->part_num, user);
	get_serial_num(common_data->serial_num, curr_content->serial_num, user);
	get_model_id(common_data->model_id, curr_content->model_id, user, id);

	if(!user) 
		memcpy((char *)common_data->passwd, "ixdp2400", CFG_PASSWD_LEN);

    if(id == KI_DEV_ID)
    {
        struct KI_EEPROM_CONTENT *ki_cfg_data = (struct KI_EEPROM_CONTENT *)data;
        struct KI_EEPROM_CONTENT *ki_curr_content = (struct KI_EEPROM_CONTENT *)data_buf;

	    if(!get_mac_addr(ki_cfg_data->M_ether_mac_addr, ki_curr_content->M_ether_mac_addr,  user,
            "Enter Master NPU's Ethernet MAC Address"))
            return ERROR;

        if(!get_nxt_mac_addr(ki_cfg_data->M_ether_mac_addr, ki_cfg_data->S_ether_mac_addr))
            return ERROR;
        
        printf("Slave NPU Ethernet MAC Addr : 0x%02x%02x%02x%02x%02x%02x\n", 
            ki_cfg_data->S_ether_mac_addr[0], ki_cfg_data->S_ether_mac_addr[1],
            ki_cfg_data->S_ether_mac_addr[2], ki_cfg_data->S_ether_mac_addr[3],
            ki_cfg_data->S_ether_mac_addr[4], ki_cfg_data->S_ether_mac_addr[5]);
    }
    if(id == PL_DEV_ID)
    {
        struct PL_EEPROM_CONTENT *pl_cfg_data = (struct PL_EEPROM_CONTENT *)data;
        struct PL_EEPROM_CONTENT *pl_curr_content = (struct PL_EEPROM_CONTENT *)data_buf;

	    if(!get_mac_addr(pl_cfg_data->mac_addr0, pl_curr_content->mac_addr0,  user,
            "Enter MAC Address for Port 0"))
            return ERROR;

        if(!get_nxt_mac_addr(pl_cfg_data->mac_addr0, pl_cfg_data->mac_addr1))
            return ERROR;

        if(!get_nxt_mac_addr(pl_cfg_data->mac_addr1, pl_cfg_data->mac_addr2))
            return ERROR;

        if(!get_nxt_mac_addr(pl_cfg_data->mac_addr2, pl_cfg_data->mac_addr3))
            return ERROR;

        printf("MAC Address for Port 1 : 0x%02x%02x%02x%02x%02x%02x\n", 
            pl_cfg_data->mac_addr1[0], pl_cfg_data->mac_addr1[1],
            pl_cfg_data->mac_addr1[2], pl_cfg_data->mac_addr1[3],
            pl_cfg_data->mac_addr1[4], pl_cfg_data->mac_addr1[5]);
        printf("MAC Address for Port 2 : 0x%02x%02x%02x%02x%02x%02x\n", 
            pl_cfg_data->mac_addr2[0], pl_cfg_data->mac_addr2[1],
            pl_cfg_data->mac_addr2[2], pl_cfg_data->mac_addr2[3],
            pl_cfg_data->mac_addr2[4], pl_cfg_data->mac_addr2[5]);
        printf("MAC Address for Port 3 : 0x%02x%02x%02x%02x%02x%02x\n", 
            pl_cfg_data->mac_addr3[0], pl_cfg_data->mac_addr3[1],
            pl_cfg_data->mac_addr3[2], pl_cfg_data->mac_addr3[3],
            pl_cfg_data->mac_addr3[4], pl_cfg_data->mac_addr3[5]);
    }
    if(id == MI_DEV_ID)
    {
        struct MI_EEPROM_CONTENT *mi_cfg_data = (struct MI_EEPROM_CONTENT *)data;
        struct MI_EEPROM_CONTENT *mi_curr_content = (struct MI_EEPROM_CONTENT *)data_buf;

	    get_op_freq(&(mi_cfg_data->ch_freq), &(mi_curr_content->ch_freq), user);
    }
	return OK;

}

static int write_config_data(char *databuf, int user, int id)
{
	unsigned int checksum=0;
	int i;
    unsigned char slave_addr, chksum_addr;
    int cfg_data_sz;
    struct COMMON_CFG_CONTENT *data = (struct COMMON_CFG_CONTENT *)databuf;
	
	switch(id)
    {
    case PL_DEV_ID:
		slave_addr = SLAVE_ADDR_2;
		cfg_data_sz = sizeof(struct PL_EEPROM_CONTENT);
		break;
    case BW_DEV_ID:
    case BD_DEV_ID:
		slave_addr = SLAVE_ADDR_2;
		cfg_data_sz = sizeof(struct COMMON_CFG_CONTENT);
		break;
    case MI_DEV_ID:
		slave_addr = SLAVE_ADDR_4;
		cfg_data_sz = sizeof(struct MI_EEPROM_CONTENT);
		break;
	case BI_DEV_ID:

⌨️ 快捷键说明

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