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

📄 newtest.c

📁 解析hex文件
💻 C
字号:
#include <unistd.h>
#include <fcntl.h>		// for O_RDWR,O_RDONLY,o_WRONLY
#include <sys/types.h>
#include <sys/msg.h>
#include <stdlib.h>
#define JDEBUG
#include "jdebug.h"
#include "msghdr.h"
//#define DSPFILE "/dev/dspHPI"

/* define buffer length */
#define HEXFILE "hex.hex"
#define	NLEN	40000
#define GLEN  400000
#define NUM 48
#define ENG 55
char data[4][NLEN];
char buf[GLEN];
int count[4],ad[4];
int nread=0;
static int net=0;

int ctoi(char c);
int hpi(int j);
void store(int len,int n,int j,int* pcount);
int main()
{
	
	int fdhex,fddsp,intial=2;
	int i,nread,j,k;
	int test;
	char dspbuf[]={0x0F,0x00,0x11,0x11,0x01,0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};
	nread=0;
	fdhex=open(HEXFILE,O_RDWR);
	if(fdhex<0)
	{
		printf("cant open %s,pls check it.stop\n",HEXFILE);
		exit(0);
	}
	test=read(fdhex,buf,sizeof(buf));
	for(j=0;j<4;j++)
	{
		hpi(j);
		//for(test=0;test<count[j];test++)
			//printf("%x\n",data[j][test]);
			//exit(0);
	}
	
	/*fddsp = open(DSPFILE,O_RDWR);
	if (fddsp < 0)
	{
		printf("cant open %s,pls check it. stop\n",DSPFILE);
		exit(0);
	}*/
	//intial=ioctl(fddsp,0xFF);
	//printf("intial=%x\n",intial);
	//sleep(5);
	//sleep(30);
	for(j=0;j<4;j++)
	{
		printf("!!!!!!!ad=%x,count=%x\n!!!!!!!!!",ad[j],count[j]);
		//intial=ioctl(fddsp,0xDD,ad[j]);
		//write(fddsp,data[j],count[j]);
	}
	//write(fddsp,data[1],1);
	/*sleep(5);
	
	intial=ioctl(fddsp,0xEE);
	intial=ioctl(fddsp,0xAA);
	printf("intial=%x\n",intial);
	while(1)
	{
			printf("write\n");
			if(getchar()=='a')
			write(fddsp,dspbuf,sizeof(dspbuf));
			//sleep(2);
	}*/
/*for(k=0;k<20;k++)
	{
		write(fddsp,dspbuf,sizeof(dspbuf));
		sleep(1);
	}*/
	//while(1);
}
int ctoi(char c)
{
	if(c<'A')
		c-=NUM;
	else
		c-=ENG;
	return c;
}

int hpi(int j)
{
	int n,size,pcount;
	int head=1;
	int lenl,lenh,len;
	pcount=0;
	for(n=nread;n<GLEN;n++)
	{
		if(buf[n]==':')
		{
			lenh=ctoi(buf[n+1]);
			lenl=ctoi(buf[n+2]);
			if(lenh==0&&lenl==0)
			{
				return 0;
			}
			else
			{
				len=lenl+(lenh<<4);
				if(head)
				{
					head=0;
					len=len-4;
					ad[j]=(ctoi(buf[n+9])<<12)+(ctoi(buf[n+10])<<8)+(ctoi(buf[n+11])<<4)+(ctoi(buf[n+12]));
					count[j]=(ctoi(buf[n+13])<<12)+(ctoi(buf[n+14])<<8)+(ctoi(buf[n+15])<<4)+(ctoi(buf[n+16]))+1;
					count[j]=count[j]*2;
					printf("ad=%x,count=%x\n",ad[j],count[j]);
					size=0;
					store(len,n+17,j,&pcount);
					n=n+16+len*2;
					size+=len;
			    if(size==count[j])
			    {
			    	nread=n;
			    	return 0;
			    }
				}
				else
				{
					store(len,n+9,j,&pcount);
					n=n+8+len*2;
					size+=len;
					printf("size=%x\n",size);
					if(size==count[j])
			    {
			    	nread=n;
			    	printf("nread=%d\n",nread);
			    	return 0;
			    }
				}
			}
		}
	}
}
void store(int len,int n,int j,int* pcount)
{
	int i,bytel,byteh,num;
	for(i=0;i<len;i++)
	{
		byteh=ctoi(buf[n]);
		bytel=ctoi(buf[n+1]);
		num=bytel+(byteh<<4);
		n=n+2;
		if(net==0)
		{
			data[j][*pcount+1]=num;
			net=1;
		}
		else 
		{
			data[j][*pcount]=num;
		  *pcount=*pcount+2;
		  net=0;	
		 }	
	}
}

				
					
					

⌨️ 快捷键说明

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