📄 imgdl.c
字号:
if(status == OK)
{
if(ifAddrSet(INTER_NAME,key)==OK)
{
status=OK;
printf("Set Manager IP Address to %s Success!\r\n",key);
}
else
{
ifAddrSet(INTER_NAME,"192.168.12.166");
printf("set manager ip address = 192.168.12.166\r\n");
}
}
memset(key,0,sizeof(key));
status = ConfigGetKey("/agent/GWM7040.BIN","TDMoIP","GWM7040_MANA_SUB_MASK",key);
if(status == OK)
{
str2SubNet(key, &NetMask);
if(ifMaskSet(INTER_NAME,NetMask)==OK)
{
status=OK;
printf("Set Manager Subnet Mask to %s Success!\r\n",key);
}
else
{
ifMaskSet(INTER_NAME,0xffffff00);
printf("set manager subnet mask = 255.255.255.0\r\n");
}
}
return status;
}
#endif
void tempForSystemRun(int i)
{
FILE *fp;
char buf[5];
fp=fopen("/agent/tempRun.bin","w");
sprintf(buf,"%d",i);
if(fp==NULL)
printf("Error Get!\r\n");
else
{
fwrite(buf,1,1,fp);
}
fclose(fp);
return 0;
}
void DemoInitInBootRom()
{
int status;
status = ds21455DeviceInit();
if(status == OK)
{
printf("ds21455 Init complete!\r\n");
}
else
{
printf("ds21455 init Error!\r\n");
}
if(status == OK)
{
status = zl50114DeviceLiuInit();
if(status == OK)
{
printf("zl50114 Init complete!\r\n");
}
else
{
printf("zl50114 Init Error!\r\nErrno Number = %d\r\n",status);
}
}
if(status == OK)
{
tempForSystemRun(1);
printf("Device Init done!\r\n");
}
else
{
tempForSystemRun(0);
printf("Device Init Error!\r\n");
}
/*
if(status == OK)
{
printf("start E1 Interrupt !\r\n");
taskSpawn ("tTest", 120, 8,
20000, (FUNCPTR) DeviceIntrDemo,
0,0,0,0,0,0,0,0,0,0);
}*/
}
void wdlf(char * pLine)
{
char fname[3][20];
switch(atoi(pLine))
{
case 0:
printf("the TFTP server is :");
scanf("%s",fname[0]);
printf("file get is:");
scanf("%s",fname[1]);
printf("the name upload:");
scanf("%s",fname[2]);
tftpDownLoadFile(fname[0], fname[1], fname[2]);
break;
case 1:
testa();
break;
default:
printf("the result is %d\r\n",zl50114DeviceLiuInit());
printf("the result of ds21455 is %d\r\n",ds21455DeviceInit());
}
#if 0
char usage[]={"w <option number>\r\n
0 DMA example\r\n
1 Frame example\r\n
2 LAN-LAN example\r\n
3 WAN-WAN example\r\n
4 WAN-PE-PKT master mode\r\n
5 WAN-PE-PKT slave mode\r\n
6 WAN-PE-PKT for single board\r\n
7 DS21455 Init\r\n
8 DS21455 Interrupt Test\r\n"};
int span;
int par[4];
/*
taskSpawn ("tTest", 120, 8,
20000, (FUNCPTR) test1,
0,0,0,0,0,0,0,0,0,0);
printf("task1 OK\r\n");
*/
if(strlen(pLine)==0)
{
printf("%s\r\n",usage);
return;
}
switch(atoi(pLine))
{
case 0:
kernelTimeSlice(10);
printf("DMA init\r\n");
printf("resule is %s\r\n",zl5011xGetErrString2(dmaExample()));
printf("DMA Init OK\r\n");
break;
case 1:
printf("zl50114 Init\r\n");
test1();
printf("zl50114 Init OK\r\n");
break;
case 2:
printf("LAN_LAN example\r\n");
printf("resule is %s\r\n",zl5011xGetErrString2(lanlanExample()));
break;
case 3:
printf("WAN_WAN example\r\n");
test2(2,par);
break;
case 4:
printf("WAN_PE_PKT master\r\n");
test2(0,GetPar(par));
break;
case 5:
printf("WAN_PE_PKT slave\r\n");
test2(1,GetPar(par));
break;
case 6:
printf("WAN_PE_PKT port 0 connect to port 1\r\n");
test2(3,GetPar(par));
break;
case 7:
printf("which stream you want to init(0,1,2,3):");
scanf("%d",&span);
if(span<0 || span>3)
printf("error stream range!\r\n");
else
{
printf("DS21455 Init start\r\n");
test3(span);
printf("DS21455 Init Complete!\r\n");
}
break;
case 8:
printf("DS21455 Interrupt TEST!\r\n");
test4();
break;
case 9:
printf(" lan lan test!\r\n");
lanlanTest();
break;
default:
printf("undefined value\r\n");
printf("%s\r\n",usage);
break;
}
#endif
/*
flashdlCpy((Uint32T)pLine,(Uint32T) BOOTROMSTART, 10);
*/
/*
sscanf(pLine,"%s %s %s %s",&fname[0][0],&fname[1][0],&fname[2][0],ttmp);
printf("host=%s\r\nname=%s\r\nsize=%s\r\nswitch=%s\r\n",&fname[0][0],&fname[1][0],&fname[2][0],ttmp);
netw(&fname[0][0],&fname[1][0],atoi(&fname[2][0]));
*/
}
static int ftpGetFile( char* host, char* fileName, void * buff ,int * maxSize)
{
int dataFd, total = 0;
int ctrlFd;
int num;
int tmp;
int last=0;
int status=OK;
int * buffhead;
char buf [BUFFERSIZE ];
printf("Get file from %s,maxsize=%d\r\nPlease wait ...\r\n",host,*maxSize);
buffhead=buff;
if (ftpXfer (host, "power", "power","","RETR %s","",fileName, &ctrlFd, &dataFd) == ERROR)
{
printf("Can not establish link to host %s\r\n",host);
num=read(ctrlFd,buf,sizeof(buf));
printf("error=%s\r\n",buf);
return (ERROR);
}
while ((num = read (dataFd, buf, sizeof (buf))) > 0)
{
last=total;
total += num;
if(total>*maxSize)
{
tmp=total-*maxSize;
num=num-tmp;
total=total-tmp;
printf("over flow!total=%d,maxSize=%d,num=%d\r\n",total,*maxSize,num);
memcpy(buff+last,buf,num);
break;
}
memcpy(buff+last, buf, num);
if(total%10240==0)
printf(".");
}
close (dataFd);
*maxSize=total;
printf("\r\n");
if (ftpReplyGet (ctrlFd, TRUE) != FTP_COMPLETE)
status = ERROR;
if (ftpCommand (ctrlFd, "QUIT", 0, 0, 0, 0, 0, 0) != FTP_COMPLETE)
status = ERROR;
close (ctrlFd);
if( total >0 && status==OK)
printf("File Transfered Successfully!\r\nSave %d to %08x\r\n ",total,(Uint32T)buffhead);
else
{
printf("File Transfered Failed!\r\n ");
return ERROR;
}
return status;
}
/*******************************************************************************
netw
use tftp net download bootrom image to mm
*******************************************************************************/
static void netw (char *adrs,char * name,int size)
{
void * buff;
/*
printf("host=%s,name=%s,size=%d\r\n",adrs,name,size);
*/
if(size<=0)
{
printf("inValid file size!\r\n");
return;
}
buff=malloc(size);
if(NULL==buff)
{
printf("Request memory fail!\r\n");
return;
}
memset(buff,0,size);
if(atoi(ttmp)==0)
{
if(tftpGetFile(adrs,name,buff,&size)==OK)
{
printf("tftp download OK!\r\n");
writeflash((Uint32T)(buff+ADDRESSSTART),(Uint32T) 0x40000100, size-ADDRESSSTART);
printf("Flash write OK!\r\n");
}
}
else
{
if(ftpGetFile(adrs,name,buff,&size)==OK)
{
printf("FTP download OK!\r\n");
writeflash((Uint32T)(buff+ADDRESSSTART),(Uint32T)0x40000100,size-ADDRESSSTART);
printf("Flash write OK!\r\n");
}
}
free(buff);
}
#ifndef GWM7040
#define MAX_FOR_CYCLE 100
#else
#define MAX_FOR_CYCLE 20
#endif
static int optionIsDownW(Uint32T addr,Uint16T data)
{
/*
vUint16T pooling;
*((vUint16T *)BOOTROMSTART+0x555) = 0xAA;
*((vUint16T *)BOOTROMSTART+0x2AA) = 0x55;
*((vUint16T *)BOOTROMSTART+0x555) = 0x80;
*((vUint16T *)BOOTROMSTART+0x555) = 0xAA;
*((vUint16T *)BOOTROMSTART+0x2AA) = 0x55;
*((vUint16T *)(BOOTROMSTART+addr)) = 0x30;
*/
vUint16T polling;
int n=0;
/*polling = *((vUint16T *)(addr));
while(!(polling & 0x0100))
{
polling = *((vUint16T *)(addr));
if(polling==data)
break;
}*/
/*taskDelay(1);*/
for(n=0;n<MAX_FOR_CYCLE;n++);
return 1;
}
static int optionIsDown(Uint32T addr)
{
/*
vUint16T pooling;
*((vUint16T *)BOOTROMSTART+0x555) = 0xAA;
*((vUint16T *)BOOTROMSTART+0x2AA) = 0x55;
*((vUint16T *)BOOTROMSTART+0x555) = 0x80;
*((vUint16T *)BOOTROMSTART+0x555) = 0xAA;
*((vUint16T *)BOOTROMSTART+0x2AA) = 0x55;
*((vUint16T *)(BOOTROMSTART+addr)) = 0x30;
*/
vUint16T polling;
int n=0;
polling = *((vUint16T *)(addr));
while(!(polling & 0x0100))
{
polling = *((vUint16T *)(addr));
}
/*taskDelay(1);*/
/*for(n=0;n<MAX_FOR_CYCLE;n++);*/
return 1;
}
static Uint32T flashGetSectorAddress(int sector)
{
Uint32T addr=0;
#ifndef GWM7040
if ((sector > 34) || (sector < 0))
{
printf("Sector Number error!\n");
return 0xffffffff;
}
else if (sector> 3)
{
addr = 0x010000 * (sector - 3);
}
else if (sector == 3)
{
addr = 0x008000;
}
else if (sector == 2)
{
addr = 0x006000;
}
else if (sector == 1)
{
addr = 0x004000;
}
else if (sector == 0)
{
addr = 0x000000;
}
#else
if(sector<8)
addr=0x2000*sector;
else
addr=0x10000*(sector-7);
#endif /*if define GWM7040*/
return addr;
}
static int flashdlEarseSector(Uint32T baseadr,int sector)
{
Uint32T sectoraddr;
sectoraddr=flashGetSectorAddress(sector);
if((~sectoraddr)==0)
{
return -1;
}
*((vUint16T *)BOOTROMSTART+0x555) = 0xAA;
*((vUint16T *)BOOTROMSTART+0x2AA) = 0x55;
*((vUint16T *)BOOTROMSTART+0x555) = 0x80;
*((vUint16T *)BOOTROMSTART+0x555) = 0xAA;
*((vUint16T *)BOOTROMSTART+0x2AA) = 0x55;
*((vUint16T *)(BOOTROMSTART+sectoraddr)) = 0x30;
printf("sector %d address %08x earseing...\r\n",sector,sectoraddr);
optionIsDown(BOOTROMSTART+sectoraddr);
printf("sector %d earse complete!\r\n",sector);
return 1;
}
static int flashGetSectorRange(int size,int * low,int * high)
{
int temp;
temp=((size+100)/1024)+1;
*low=0;
if(temp>64)
{
*high=(temp-64)/64+(((temp-64)%64==0)?0:1)+7;
return 1;
}
#ifndef GWM7040
else if(temp<=16)
{
*high=0;
return 1;
}
else if(temp<=24)
{
*high=1;
return 1;
}
else if(temp<=32)
{
*high=2;
return 1;
}
else if(temp<=64)
{
*high=3;
return 1;
}
#else
else
*high=temp/8-((temp%8==0)?1:0);
#endif /*#if define GWM7040*/
return 1;
}
static int flashEarseSectorRange(Uint32T addr,int low,int high)
{
int n;
printf("sector %d to %d will be earsed!\r\n",low,high);
for(n=low;n<=high;n++)
{
flashdlEarseSector(addr, n);
}
printf("serctor earse complete!\r\n");
return 1;
}
static int flashdlWrite(Uint32T addr,Uint16T data)
{
*((vUint16T *)BOOTROMSTART + 0x555) = 0xAA;
*((vUint16T *)BOOTROMSTART + 0x2AA) = 0x55;
*((vUint16T *)BOOTROMSTART + 0x555) = 0xA0;
/*
*((vUint16T *)(0x20000AAA)) = 0xAAAA;
*((vUint16T *)(0x20000554)) = 0x5555;
*((vUint16T *)(0x20000AAA)) = 0xA0A0;
*(vUint16T *)( addr) = data;
*/
/*printf("write %04x to %08x now\r\n",data,addr);*/
return 1;
}
static int flashdlCpy(Uint32T src,Uint32T dest,int size)
{
int n=0;
int low,high;
int tmp;
int r;
printf("start flash copy!\r\n");
tmp=size/2+(((size%2)==0)?0:1);
flashGetSectorRange(size, &low, &high);
flashEarseSectorRange(BOOTROMSTART, 0, 0);
printf("write to flash now!\r\n");
/* Led1T(0);*/
for(n=0;n<tmp;n++)
{
flashdlWrite((Uint32T)(2*n+dest), *(Uint16T *)(src+2*n));
if(n%5120==0)
printf("#");
/* Led2T(((n%2)==0?1:0));*/
taskDelay(sysClkRateGet());
optionIsDownW(2*n+dest,*(Uint16T *)(src+2*n));
/*printf("#");*/
}
/* Led1T(0);*/
printf("\r\n");
printf("write %d bytes to flash\r\n",tmp*2);
return size;
}
int DeviceInit()
{
/*
if(liuInitExample()==0)
{
if(ds21455InitExample()==0)
{
printf("system Init OK!\r\n");
}
return OK;
}
else
{
printf("system init error!\r\n");
return ERROR;
}
return ERROR;
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -