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

📄 burn_i2c_gatewayid.c

📁 这是I2c网关Id独立烧写程序
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/i2c.h>
#include <ctype.h>
#include <asm/arch-cpe/cpe/fic8120.h>
#include "burn_i2c_gatewayid.h"

#define GATEWAY_ID  "Gatewayid"
unsigned char i2c_read_buf[32]={0};
unsigned char i2cread_buf[32]={0};
unsigned char gateway_id[16]={0};

static i2c_message  i2c_ap_read,i2c_ap_write;
static int i2c_fd ;

int i2c_read(unsigned char begin_addr,int length)
{	
	
	char *value=(char *)i2c_read_buf;
	int i=0,ret=0;

	i2c_ap_read.clockdiv = 45 ;	//Adopt deault clock div  MHZ
	i2c_ap_read.addr = 0xa9;  
	i2c_ap_read.waddr =begin_addr;
	i2c_ap_read.len = length;
	i2c_ap_read.buf =  value;
	if ((ret=ioctl(i2c_fd,I2C_RDWR,&i2c_ap_read)) < 0) 
		{
			printf("Error in ioctl I2C_Read(Err:0x%2x)\n",ret);
			return -1;
		}
	
}

int i2c_write_one(unsigned char begin_addr,unsigned char *buf)
{	
	char *value=(char *)buf;
	int ret=0;
	
	i2c_ap_write.clockdiv = 45 ;	//Adopt deault clock div  MHZ
	i2c_ap_write.addr = 0xa8;  
	i2c_ap_write.waddr =begin_addr;
	//printf("begin_addr:::0x%02x\n",begin_addr);
	//printf("*value:::0x%02x\n",*value);
	i2c_ap_write.len = 1;
	i2c_ap_write.buf = value;
	if ((ret=ioctl(i2c_fd,I2C_RDWR,&i2c_ap_write)) < 0) 
		{
			printf("Error in ioctl I2C_Read(Err:0x%2x)\n",ret);
			return -1;
		}
}

int i2c_write_more(unsigned char begin_addr,unsigned char *buf,int length)
{
	int i=0;
	unsigned char *tmp_buf = buf,tmp_addr=begin_addr;
	for(i=0;i<length;i++)
		{
			printf("burnID_addr::0x%02x   burnID_value::%c  hex::0x%02x\n",tmp_addr,*tmp_buf ,*tmp_buf);
			i2c_write_one(tmp_addr, tmp_buf);
			
			tmp_addr++;
			tmp_buf++;
			usleep(5);
		}
}


unsigned char *getvar_from_file(char *conf_path, char *get_name, unsigned char *get_value)
{
	char name[32],value[32];
	FILE *conf_fp;
	
	if (!(conf_fp=fopen(conf_path,"r"))) // open file pointer
	{	
		printf("%s open failed...<br>\n",conf_path);
		printf("get_name=%s <br>\n", get_name);
//++ Foster
printf("default %s, %s, %s <br>\n",conf_path,get_name, get_value);
//-- Foster
		defaults_setting();
		conf_fp=fopen(conf_path,"r");
	}

	fseek( conf_fp, 0, SEEK_SET );

	while (feof(conf_fp) == 0){
		fscanf(conf_fp,"%s %s\n",name,get_value);	//Read next record
		if(!strcmp(name,get_name))
		{
			fclose(conf_fp);
			return get_value;
		}
	 }
//++ Foster
printf("default %s, %s, %s <br>\n",conf_path,get_name, get_value);
//-- Foster
	 defaults_setting();
	 conf_fp=fopen(conf_path,"r");
	 while (feof(conf_fp) == 0){
		fscanf(conf_fp,"%s %s\n",name,get_value);	//Read next record
		if(!strcmp(name,get_name))
		{
			 fclose(conf_fp);
			return get_value;
		}
	 }
	 
	 printf("%s is not defined...<br>\n",get_name);
	 //fclose(conf_fp);
	 return NULL;
}

static void help(void)
{
	printf("\n\n\tburnID: [burnID ID] \n");
	printf("\t \"ID is must be 16 char [0~9],[a~z],[A~Z]\"\n" );
	printf("\t such as bellow :\n\t burnID 0123456789ABCDF\n");
	return;
}
int defaults_setting()
{
	FILE *temp_fp;
	char renamecmd[128];	
	if (!(temp_fp=fopen("/etc/temp","w")))
		{ 
			printf("/etc/temp open failed...\n");
			return 0;
		}

	fprintf(temp_fp,"%s %s\n","Gatewayid","0123456789abcdef");	
	fflush(temp_fp);
	fclose(temp_fp);
	sprintf(renamecmd,"mv /etc/temp %s",GATEWAYID_PATH);
	system(renamecmd);
	return 1;  
}

int main(int argc,char *argv[])
{		
	char filename[20];
	int adapter_nr =0;
	int i=0;
	unsigned char tmp[16]={0};
	unsigned char addr=0xd0;	
	char *burn_tmp=NULL;
	
	memset(filename,0,20); 
	sprintf(filename,"/dev/i2c-%d",adapter_nr);	
	
	if ((i2c_fd = open(filename,O_RDWR))<0) 
	{
		printf("Error in file open...%s\n",filename);
		exit(1);
	}
	if((argc!=2)||(strlen(argv[1])!=16))
		{
			help();
			return -1;
		}
	burn_tmp=argv[1];
	for(i=0;i<16;i++)
		{
			if(!isalnum(burn_tmp[i]))
				{
					printf("\tburn_id[%d]= \"%c\"\n\tthis isn't a letter or number \n",i,burn_tmp[i]);
					help();
					return -1;
				}
			else
				{
					 burn_tmp[i]=toupper(burn_tmp[i]);
				}			
		}	
	printf("\n\burn ID is :%s \n ",burn_tmp);
	i2c_write_more(addr, burn_tmp, 16);
}

⌨️ 快捷键说明

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