📄 vxworks-ppp.c
字号:
for(i=0;i<50;i++)
{
ppp_if[0]->ipcp_wantoptions.ouraddr=0;
ppp_if[0]->ipcp_gotoptions.ouraddr=0;
taskDelay(10);
}
}
int find(int b)
{
int i;
int j;
char *temp;
j=0;
b=(int)ppp_if[0];
temp=(char *)b;
for(i=b;i<b+5916;i++)
{
if(temp[0]==88 && temp[1]==88 && temp[2]==88 && temp[3]==88)
{
printf("%08x\n\r",i);
temp[0]=0;
temp[1]=0;
temp[2]=0;
temp[3]=0;
}
temp++;
}
return -1;
}
STATUS pppConnect(void)
{
unsigned char atCmdSendString[50];
unsigned char atCmdRecvString[100];
unsigned int waitTime=0;
int readBytes=0;
unsigned char addressInc=0;
unsigned char EnableCheck=1;
unsigned char i;
BOOL haveData=FALSE;
struct in_addr iaddr;
controlLed(1,0);
taskDelay(1000);
controlLed(1,1);
taskDelay(sysClkRateGet()*20);
memset(atCmdSendString,0,50);
memset(atCmdRecvString,0,100);
memset(remoteIpAddress,0,20);
memset(localIpAddress,0,20);
GPRS_Init();
atCmdSend((unsigned char *)"ATZ",(unsigned char *)atCmdRecvString);
printf("**%s\n",atCmdRecvString);
atCmdSend((unsigned char *)"ATE0",atCmdRecvString);
printf("**%s\n",atCmdRecvString);
/* atCmdSend("ATV0",atCmdRecvString);*/
printf("**%s\n",atCmdRecvString);
strcpy((char *)atCmdSendString,"ATD ");
strcat((char *)atCmdSendString,ISPnumber);
if(atCmdSend(atCmdSendString,atCmdRecvString)==ERROR||
strstr((char *)atCmdRecvString,"CONNECT")==NULL)
{
printf("%s",atCmdRecvString);
return ERROR;
}
ioctl(fdModem,FIOFLUSH,0);
/* write(fdModem,"CLIENT",6);
taskDelay(60);
write(fdModem,"CLIENT",6);
printf("Connect %s successful!!!\n",ISPnumber);
taskDelay(60);
*/
memset(atCmdRecvString,0,50);
taskDelay(20);
// close(fdModem);
pppInit(pppUnit,NetCom,"88.88.88.88",NULL,19200,&ippp_options,NULL);
sp((FUNCPTR)pppttt,0,0,0,0,0,0,0,0,0);
// find(0);
// pppttt();
// sp((FUNCPTR)ppp_task,pppUnit,(int)NetCom,(int)"0.0.0.0",(int)"0.0.0.0",38400,(int)&ippp_options,NULL,0,0);
for(waitTime=0;waitTime<150;waitTime++)
{
taskDelay(10);
if(pppInfoGet(pppUnit,&ippp_info)==ERROR) return ERROR;
else
{
if(ippp_info.ipcp_fsm.state==OPENED) break;
}
}
taskDelay(100);
if(waitTime==300) return ERROR;
iaddr.s_addr =ippp_info.ipcp_hisoptions.hisaddr;
inet_ntoa_b(iaddr,(char *)remoteIpAddress);
iaddr.s_addr =ippp_info.ipcp_gotoptions.ouraddr;
inet_ntoa_b(iaddr,(char *)localIpAddress);
printf("The remote host ip address is:%s\n",remoteIpAddress);
printf("The locate host ip address is:%s\n",localIpAddress);
if(mRouteAdd("0.0.0.0",(char *)localIpAddress,0,0,0)==ERROR)
printf("Add 0.0.0.0 route failture!\n");
mRouteAdd((char *)localIpAddress,"127.0.0.1",0xffffffff,0,0);
/* mRouteAdd("211.83.109.195",localIpAddress,0xffffffff,0,0);*/
pppHookAdd(pppUnit,(FUNCPTR)pppRetry,PPP_HOOK_DISCONNECT);
return OK;
}
extern PPP_TASK_VARS *ppp_if[];
void plk(void)
{
printf("ppp_if 0x%x l=%d\n",ppp_if[0],sizeof(PPP_TASK_VARS));
printf("usename:%s password:%s \r\n",ppp_if[0]->user,ppp_if[0]->passwd);
}
STATUS pppVpdn()
{
char buf[100];
unsigned char atCmdRecvString[1000];
int readBytes=0;
unsigned char addressInc=0;
unsigned char EnableCheck=1;
unsigned char i;
BOOL haveData=FALSE;
unsigned int waitTime=0;
struct in_addr iaddr;
unsigned char remoteIpAddress[20];
/*char ISPnumber[100]; 用户所拨电话号码*/
/*char username[100]; 验证的用户名*/
/*char password[100]; 验证的密码*/
VPDN_Init();
/* atCmdSend("AT",atCmdRecvString);
printf("**%s\n",atCmdRecvString);
atCmdSend("ATE0V0",atCmdRecvString);
printf("**%s\n",atCmdRecvString);
*/
write(fdModem,"+++",3);
taskDelay(200);
write(fdModem,"ath0\r\n",6);
taskDelay(200);
write(fdModem,"ATE0\r\n",6);
taskDelay(50);
write(fdModem,"at\r\n",4);
taskDelay(50);
write(fdModem,"at\r\n",4);
taskDelay(50);
write(fdModem,"at\r\n",4);
taskDelay(50);
strcpy(buf,"atdt");
strcat(buf,ISPnumber);
strcat(buf,"\r\n");
printf("进行拨号连接:%s\n",buf);
write(fdModem,buf,11);
taskDelay(100);
ioctl(fdModem,FIOFLUSH,0);
/*等待接收到数据CONNECT*/
for(waitTime=0;waitTime<100*60;waitTime++)
{
ioctl(fdModem,FIONREAD,(int)&readBytes);
if(readBytes>0) break;
taskDelay(1);
}
if(readBytes<=0)
{
printf("atdt16300 没有收到任何数据\r\n");
return ERROR;
}
taskDelay(50);
readBytes=read(fdModem,(char *)(atCmdRecvString),100);
printf("rec:%s\r\n",atCmdRecvString);
if(strstr((char *)atCmdRecvString,"CONNECT")==0)
return ERROR;
/*等待询问用户名密码*/
for(waitTime=0;waitTime<100*60;waitTime++)
{
taskDelay(1);
/* if(waitTime%200==199)
write(fdModem,"16300\r\n",7);*/
ioctl(fdModem,FIONREAD,(int)&readBytes);
if(readBytes>0)
{
readBytes=read(fdModem,(char *)(atCmdRecvString+addressInc),100);
addressInc+=readBytes;
}
if(addressInc>0)
{
if(strstr((char *)atCmdRecvString,"user")!=0)
{
addressInc=0;
strcpy(buf,username);
strcat(buf,"\r\n");
write(fdModem,buf,strlen(buf));
}
if(strstr((char *)atCmdRecvString,"pass")!=0)
{
addressInc=0;
strcpy(buf,password);
strcat(buf,"\r\n");
write(fdModem,buf,strlen(buf));
break;
}
}
}
if(waitTime>=100*60)
{
printf("没收到用户名和密码\n");
return ERROR;
}
/*等待接收到PPP命令*/
for(waitTime=0;waitTime<100*60;waitTime++)
{
taskDelay(1);
/* if(waitTime%200==199)
write(fdModem,"16300\r\n",7);
*/
ioctl(fdModem,FIONREAD,(int)&readBytes);
if(readBytes>0)
{
readBytes=read(fdModem,(char *)(atCmdRecvString),100);
for(i=0;i<readBytes;i++)
{
if(atCmdRecvString[i]==0x7e)
{
printf("It is connecting now!\n");
break;
}
}
if(i<readBytes)
break;
}
}
if(waitTime>=100*60)
{
printf("对方无PPP应答\n");
return ERROR;
}
/* ioctl(fdModem,FIOFLUSH,0);*/
close(fdModem);
printf("pppInit now !!!\n");
// pppInit(pppUnit,NetCom,NULL,NULL,38400,&ippp_options,NULL);
for(waitTime=0;waitTime<100*90;waitTime++)
{
taskDelay(1);
if(pppInfoGet(pppUnit,&ippp_info)==ERROR) return ERROR;
else
{
if(ippp_info.ipcp_fsm.state==OPENED) break;
}
}
taskDelay(100);
if(waitTime==100*90) return ERROR;
iaddr.s_addr =ippp_info.ipcp_hisoptions.hisaddr;
inet_ntoa_b(iaddr,(char *)remoteIpAddress);
iaddr.s_addr =ippp_info.ipcp_gotoptions.ouraddr;
inet_ntoa_b(iaddr,(char *)localIpAddress);
printf("The remote host ip address is:%s\n",remoteIpAddress);
printf("The locate host ip address is:%s\n",localIpAddress);
if(mRouteAdd("0.0.0.0",(char *)localIpAddress,0,0,0)==ERROR)
printf("Add 0.0.0.0 route failture!\n");
mRouteAdd((char *)localIpAddress,"127.0.0.1",0xffffffff,0,0);
pppHookAdd(pppUnit,(FUNCPTR)pppRetry,PPP_HOOK_DISCONNECT);
return OK;
}
void whReadppp()
{
printf("The remote host ip address is:%s\n",remoteIpAddress);
printf("The locate host ip address is:%s\n",localIpAddress);
}
void pppKill()
{
mRouteDelete("0.0.0.0",0,0,0);
mRouteDelete((char *)localIpAddress,0xffffffff,0,0);
pppDelete(pppUnit);
}
void pppRetry()
{
int errn=0;
char retString[20];
pppDelete(pppUnit);
/* close(fdModem);*/
/* if(mRouteAdd("0.0.0.0",localIpAddress,0,0,0)==ERROR)
printf("Add 0.0.0.0 route failture!\n");
mRouteAdd(localIpAddress,"127.0.0.1",0xffffffff,0,0);
mRouteAdd("211.83.109.195",localIpAddress,0xffffffff,0,0);
*/
mRouteDelete("0.0.0.0",0,0,0);
mRouteDelete((char *)localIpAddress,0xffffffff,0,0);
/* mRouteDelete("211.83.109.195",0xffffffff,0,0);*/
/* atCmdSend("+++",retString);
atCmdSend("ATH0",retString);*/
FOREVER
{
if((errn++)>5)/*如果连续5次连接不上服务器,则复位终端*/
{
printf("5次连不上GPRS服务器引起复位!\n");
/*
SafeQuit();/ *安全退出并保存相关文件!2004-10-3 by zhoujun* /
*/
}
printf("ppp reconnect\n");
if(pppConnect()==ERROR)
{
pppDelete(pppUnit);
/* close(fdModem);*/
mRouteDelete("0.0.0.0",0,0,0);
mRouteDelete((char *)localIpAddress,0xffffffff,0,0);
/* mRouteDelete("211.83.109.195",0xffffffff,0,0);*/
/* atCmdSend("+++",retString);
atCmdSend("ATH0",retString);*/
taskDelay(sysClkRateGet()*60);
}
else
return;
}
}
void controlLed(char ledNum,int ledStatus)
{
if(ledNum==0) /*run led*/
{
IOMOD|=0x02;
IOCTL&=(~0x02);
if(ledStatus)
IODATA|=0x02;
else
IODATA&=(~0x02);
}
if(ledNum==1) /*communication led */
{
IOMOD|=0x08;
IOCTL&=(~0x08);
if(ledStatus)
IODATA|=0x08;
else
IODATA&=(~0x08);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -