📄 burn_i2c_gatewayid.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 + -