#include #include #include "wkUtil.h" //convert the test vector file to test vectors. //chn is the download channel defination int txtcvt(char *filename,TestVector *tv,pindef *chn) { FILE *in,*out; TestVector tp; char linename[32][64]={'/t'}; char row[64]; int i,pt,len,rownum,nameflag=0,ln=0,time; int StartRowFlag=0,StartRowNum=0,VtNum=0,GetRowNumberFlag; if((in=fopen(filename,"rt"))==NULL) { printf("Cannot open the file:%s\n",filename); return 0; } while(!feof(in)) { fgets(row,64,in); len=strlen(row); nameflag=0; for(pt=0;pt='a')&&(row[pt]<='z'))||((row[pt]>='A')&&(row[pt]<='Z'))) { nameflag=1; break; } } if(nameflag==1) for(pt=0;pt='a')&&(row[pt]<='z'))||((row[pt]>='A')&&(row[pt]<='Z'))||((row[pt]>='0')&&(row[pt]<='9'))) { if(row[pt]!=(char)*(((chn+pt/2)->name)+ln)) { printf("The TestVector file header unmatched, Maybe define a wrong chip!\n"); exit(0); } } } else break; ln++; } printf("File header matched!\n"); while(!feof(in)) { + GetRowNumberFlag=0; pt=len-1; rownum=0; time=1; while((GetRowNumberFlag!=2)&&(pt>=0)) { if((row[pt]>='0')&&(row[pt]<='9')) { GetRowNumberFlag=1; rownum=rownum+time*(row[pt]-'0'); time=time*10; if(StartRowFlag==0) { StartRowFlag=1; StartRowNum=rownum; } } else if(GetRowNumberFlag==1) { GetRowNumberFlag=2; if(rownum!=StartRowNum+VtNum) { printf("Illegal Test Vector file format!"); return 0; } VtNum++; if(VtNum==BufSize) return VtNum-1; } pt--; } tp=0;i=0; while(((chn+i)->pinN)!=-1) { if(row[2*i]=='1') tp=tp+(1<<((chn+i)->pinN)); i++; } *(tv+VtNum-1)=tp; //printf("%d:%d ",VtNum-1,*(tv+VtNum-1)); //printf("%s",row); fgets(row,64,in); len=strlen(row); } fclose(in); return VtNum; } //read back the test result and convert it according to channel defination int SaveToFile(char *filename,TestVector *TV,int depth,pindef *chn) { FILE * out; TestVector tpTV; char t; //struct pindef tpChn; int maxlen=0; int i,j,a,b; if((out=fopen(filename,"wt"))==NULL) { printf("Cannot open the file:%s\n",filename); return 0; } i=0; while((chn+i)->pinN!=-1) { a=strlen((chn+i)->name); b=maxlen; maxlen=(a>b)?a:b; i++; } for(j=0;jpinN!=-1) { t=(char)*(((chn+i)->name)+j); if(((t>='a')&&(t<='z'))||((t>='A')&&(t<='Z'))||((t>='0')&&(t<='9'))||(t=='_')||(t=='-')) fprintf(out,"%c ",(char)*(((chn+i)->name)+j)); else fprintf(out," "); i++; } if(j==0) fprintf(out,"N"); fprintf(out,"\n"); } for(j=0;jpinN!=-1) { if((*(TV+j))&(1<<(chn+i)->pinN)) fprintf(out,"1 "); else fprintf(out,"0 "); i++; } fprintf(out,"%d\n",j); } close(out); }