Can't get PPP over GPRS modem to work

I am having a problem getting PPP to work on a multitech EDGE/GPRS modem. It will dial, connect and get the start of the ppp data. Looks like it does most of the stuff it needs, then disconnects. Here is the log. Anyone else have this working? RCM5700 using DC 10.4.6

CHAT: sending ‘AT’
CHAT: expecting ‘ok’
SERLINK: sendpacket totlen=4 i/f 0
SERLINK: sendpacket using 0000AEF7
SERLINK: transmitter was idle
SERLINK: got raw packet len=5, chatting=login
SERLINK: got raw packet len=4, chatting=login
CHAT: found it!
CHAT: sending ‘ATDT*98#’
SERLINK: got raw packet len=5, chatting=login
SERLINK: got raw packet len=4, chatting=login
CHAT: expecting ‘CONNECT’
SERLINK: sendpacket totlen=10 i/f 0
SERLINK: sendpacket using 0000AEF7
SERLINK: transmitter was idle
SERLINK: got raw packet len=1, chatting=login
SERLINK: got raw packet len=1, chatting=login
SERLINK: got raw packet len=7, chatting=login
SERLINK: got raw packet len=2, chatting=login
SERLINK: got raw packet len=6, chatting=login
SERLINK: got raw packet len=3, chatting=login
CHAT: found it!
CHAT: not sending anything
CHAT: expecting ‘~’
SERLINK: got raw packet len=1, chatting=login
CHAT: found it!
CHAT: end of script
PPP: sending LCP config req i/f 0
SERLINK: sendpacket totlen=24 i/f 0
SERLINK: sendpacket using 0000AF32
SERLINK: transmitter was idle
PPP: got packet AF32 on i/f:0 protocol:0xc021
PPP: got LCP packet code=0x02 id=1 len=20 i/f 0
PPP: received LCP ACK i/f 0. local_acked = 1
PPP: got packet AF32 on i/f:0 protocol:0xc021
PPP: got LCP packet code=0x01 id=3 len=28 i/f 0
PPP: LCP config request i/f 0
PPP: accepting option 1
PPP: accepting option 3
PPP: accepting option 5
PPP: accepting option 2
PPP: accepting option 7
PPP: accepting option 8
PPP: sending LCP ack i/f 0
SERLINK: sendpacket totlen=32 i/f 0
SERLINK: sendpacket using 0000AEF7
SERLINK: transmitter was idle
PPP: sending our credentials 5003975151/5003975151
PPP: sending PAP auth i/f 0
SERLINK: sendpacket totlen=30 i/f 0
SERLINK: sendpacket using 0000AF32
SERLINK: transmitter was idle
PPP: got packet AF32 on i/f:0 protocol:0xc023
PPP: got PAP packet code=0x02 id=0 len=39 i/f 0
PPP: sending IPCP config i/f 0
SERLINK: sendpacket totlen=26 i/f 0
SERLINK: sendpacket using 0000AF32
SERLINK: transmitter was idle
PPP: got packet AF32 on i/f:0 protocol:0xc021
PPP: got LCP packet code=0x05 id=0 len=29 i/f 0
PPP: sending LCP term ack i/f 0
SERLINK: sendpacket totlen=8 i/f 0
SERLINK: sendpacket using 0000AEF7
SERLINK: transmitter was idle
PPP: link i/f 0 is down
PPP failed
IP address is 0.0.0.0
sock_init_or_exit: interface failed to start

// i’m used Wave COM Wismo Fast Track M1206B WM20452
// succesed for PPP connection, but failed sending data to server, any body help me? Thanks
// erwinyn@gmail.com

#define TCPCONFIG 0
#define USE_PPP_SERIAL 0x04 // modem connect on port C with out hardware flow control (only tx, rx and ground)

#define PPP_VERBOSE
#define PPP_DEBUG

#define PPPLINK_VERBOSE
#define PPPLINK_DEBUG

#define CHAT_VERBOSE
#define CHAT_DEBUG

#define REMOTE_USERNAME “”
#define REMOTE_PASSWORD “”

#define MODEM_BAUDRATE 115200L
#define PPP_BAUDRATE 115200L

#define HW_FLOWCONTROL 0
#define DEST “114.121.57.1” // computer server IP
#define PORT 23 // computer server IP

#define maks 255
#define CINBUFSIZE maks
#define COUTBUFSIZE maks

#memmap xmem
#use “dcrtcp.lib”
#use “RCM56xxW.lib” // used RCM5600W

////////////////////////////////////////////////////////////////////////////////
////////////////////////////// GENERAL FUNCTION ////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

void delaySec(unsigned long ts){
unsigned long tm;
tm=read_rtc();
while((read_rtc()-tm)=sizeof(arr)) p=0;
}
}
printf("SAVE ERROR TIMEOUT
");
return(0);
}

////////////////////////////////////////////////////////////////////////////////

char echo_off(){
unsigned char p, arr[128];
int tmp;
unsigned long t;

for(p=0;p<128;p++) arr[p]=0;
serCputs(“ATE0”);
serCputc(13);

p=0;
t=read_rtc();
while(read_rtc()-t<=2){
tmp=serCgetc();
if(tmp!=-1){
arr[p]=(unsigned char)tmp;
if(strstr(arr,“OK”)){
if(save_settings()){
printf("WRITE << ECHO_OFF OK
“);
return(1);
}
else{
printf(”###WRITE << ECHO_OFF ERROR
“);
return(0);
}
}
if(strstr(arr,“ERROR”)){
printf(”###WRITE << ECHO_OFF ERROR
“);
return(0);
}
p++;
if (p>=sizeof(arr)) p=0;
}
}
printf(”###WRITE << ECHO_OFF ERROR TIMEOUT
");
return(0);
}

////////////////////////////////////////////////////////////////////////////////

xmem char modemFlowControlON(){
unsigned char p, arr[128];
int tmp;
unsigned long t;

for(p=0;p<128;p++) arr[p]=0;
serCputs(“AT+IFC=2,2”);
serCputc(13);

p=0;
t=read_rtc();
while(read_rtc()-t<=4){
tmp=serCgetc();
if(tmp!=-1){
arr[p]=(unsigned char)tmp;
if(strstr(arr,“OK”)){
if(save_settings()){
printf("WRITE << MODEM FLOWCONTROL-ON OK
“);
return(1);
}
else{
printf(”###WRITE << MODEM FLOWCONTROL-ON ERROR
“);
return(0);
}
}
if(strstr(arr,“ERROR”)){
printf(”###WRITE << MODEM FLOWCONTROL-ON ERROR
“);
return(0);
}
p++;
if (p>=sizeof(arr)) p=0;
}
}
printf(”###WRITE << MODEM FLOWCONTROL-ON ERROR TIMEOUT
");
return(0);
}

////////////////////////////////////////////////////////////////////////////////

xmem char modemFlowControlOFF(){
unsigned char p, arr[128];
int tmp;
unsigned long t;

for(p=0;p<128;p++) arr[p]=0;
serCputs(“AT+IFC=0,0”);
serCputc(13);

p=0;
t=read_rtc();
while(read_rtc()-t<=4){
tmp=serCgetc();
if(tmp!=-1){
arr[p]=(unsigned char)tmp;
if(strstr(arr,“OK”)){
if(save_settings()){
printf("WRITE << MODEM FLOWCONTROL-OFF OK
“);
return(1);
}
else{
printf(”###WRITE << MODEM FLOWCONTROL-OFF ERROR
“);
return(0);
}
}
if(strstr(arr,“ERROR”)){
printf(”###WRITE << MODEM FLOWCONTROL-OFF ERROR
“);
return(0);
}
p++;
if (p>=sizeof(arr)) p=0;
}
}
printf(”###WRITE << MODEM FLOWCONTROL-OFF ERROR TIMEOUT
");
return(0);
}

////////////////////////////////////////////////////////////////////////////////

char modem_restart(){
unsigned char p, arr[128],i;
int tmp;
unsigned long t;

for(p=0;p<128;p++) arr[p]=0;
serCputs(“AT+CFUN=1”);
serCputc(13);

p=0;
t=read_rtc();
while(read_rtc()-t<=2){
tmp=serCgetc();
if(tmp!=-1){
arr[p]=(unsigned char) tmp;
if(strstr(arr,“OK”)){
printf("WRITE << MODEM-RESTART OK
“);
return(1);
}
if(strstr(arr,“ERROR”)){
printf(”###WRITE << MODEM-RESTART ERROR
“);
return(0);
}
p++;
if(p>=sizeof(arr)) p=0;
}
}
printf(”###WRITE << MODEM-RESTART ERROR TIMEOUT
");
return(0);
}

////////////////////////////////////////////////////////////////////////////////

char MODEM_RESET(){
int i,n;

printf("******************** RESET INITIALIZE
");
n=0;
for(i=0;i<5;i++)
if(modem_restart()){
n++;
break;
}
for(i=0;i<5;i++)
if(modemFlowControlOFF()){
n++;
break;
}
for(i=0;i<5;i++)
if(echo_off()){
n++;
break;
}

delaySec(12);

if(n==3){
  printf("******************** WRITE &lt;&lt; MODEM-RESET OK

“);
return(1);
}
else{
printf(”#################### WRITE << MODEM-RESET ERROR
");
return(0);
}
}

////////////////////////////////////////////////////////////////////////////////

char modem_tester(){
unsigned char p, arr[128];
int tmp;
unsigned long t;

for(p=0;p<128;p++) arr[p]=0;
serCputs(“AT”);
serCputc(13);

p=0;
t=read_rtc();
while(read_rtc()-t<=2){
tmp=serCgetc();
if(tmp!=-1){
arr[p]=(unsigned char)tmp;
if(strstr(arr,“OK”)){
printf("MODEM_TESTER OK
");
return(1);
}
if(strstr(arr,“ERROR”)){
printf("MODEM_TESTER ERROR
");
return(0);
}
p++;
if (p>=sizeof(arr)) p=0;
}
}
printf("MODEM_TESTER ERROR
");
return(0);
}

////////////////////////////////////////////////////////////////////////////////
////////////////////////////// GPRS FUNCTION ////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

char WritePDP(){
unsigned char p, arr[128];
int tmp;
unsigned long t;

for(p=0;p<128;p++) arr[p]=0;
serCputs(“AT+CGDCONT=1,"IP","telkomsel"\r”);
serCputc(13);

p=0;
t=read_rtc();
while(read_rtc()-t<=2){
tmp=serCgetc();
if(tmp!=-1){
arr[p]=(unsigned char)tmp;
if(strstr(arr,“OK”)){
printf("MODEM_DEF_PDP OK
");
return(1);
}
if(strstr(arr,“ERROR”)){
printf("MODEM_DEF_PDP ERROR
");
return(0);
}
p++;
if (p>=sizeof(arr)) p=0;
}
}
printf("MODEM_DEF_PDP ERROR
");
return(0);
}

////////////////////////////////////////////////////////////////////////////////

char DialISP(){
unsigned char p, arr[128];
int tmp;
unsigned long t;

for(p=0;p<128;p++) arr[p]=0;
serCputs(“ATD99**1#\r”);
serCputc(13);

p=0;
t=read_rtc();
while(read_rtc()-t<=7){
tmp=serCgetc();
if(tmp!=-1){
arr[p]=(unsigned char)tmp;
if(strstr(arr,“CONNECT”)){
printf("Connected to ISP
");
return(1);
}
if(strstr(arr,“ERROR”)){
printf("Error Connect to ISP
");
return(0);
}
p++;
if (p>=sizeof(arr)) p=0;
}
}
printf("Error Connect to ISP
");
return(0);
}

////////////////////////////////////////////////////////////////////////////////

char WriteCGATTStart(){
unsigned char p, arr[128];
int tmp;
unsigned long t;

for(p=0;p<128;p++) arr[p]=0;
serCputs(“AT+CGATT=1”);
serCputc(13);

p=0;
t=read_rtc();
while(read_rtc()-t<=5){
tmp=serCgetc();
if(tmp!=-1 ){
arr[p]=(unsigned char) tmp;
if(strstr(arr,“OK”)){
printf("WRITE << CGATT_START OK
“);
return(1);
}
if(strstr(arr,“ERROR”)){
printf(”###WRITE << CGATT_START ERROR
“);
return(0);
}
p++;
if (p>=sizeof(arr)) p=0;
}
}
printf(”###WRITE << CGATT_START ERROR TIMEOUT
");
return(0);
}

////////////////////////////////////////////////////////////////////////////////

char WriteCGATTStop(){
unsigned char p, arr[128];
int tmp;
unsigned long t;

for(p=0;p<128;p++) arr[p]=0;
serCputs(“AT+CGATT=0”);
serCputc(13);

p=0;
t=read_rtc();
while(read_rtc()-t<=2){
tmp=serCgetc();
if(tmp!=-1 ){
arr[p]=(unsigned char) tmp;
if(strstr(arr,“OK”)){
printf("WRITE << CGATT_STOP OK
“);
return(1);
}
if(strstr(arr,“ERROR”)){
printf(”###WRITE << CGATT_STOP ERROR
“);
return(0);
}
p++;
if (p>=sizeof(arr)) p=0;
}
}
printf(”###WRITE << CGATT_STOP ERROR TIMEOUT
");
return(0);
}

////////////////////////////////////////////////////////////////////////////////

char WriteCGACTStart(){
unsigned char p, arr[128];
int tmp;
unsigned long t;

for(p=0;p<128;p++) arr[p]=0;
serCputs(“AT+CGACT=1,1”);
serCputc(13);

p=0;
t=read_rtc();
while(read_rtc()-t<=15){
tmp=serCgetc();
if(tmp!=-1 ){
arr[p]=(unsigned char) tmp;
if(strstr(arr,“OK”)){
printf("WRITE << CGACT_START OK
“);
return(1);
}
if(strstr(arr,“ERROR”)) {
printf(”###WRITE << CGACT_START ERROR
“);
return(0);
}
p++;
if (p>=sizeof(arr)) p=0;
}
}
printf(”###WRITE << CGACT_START ERROR TIMEOUT
");
return(0);
}

////////////////////////////////////////////////////////////////////////////////

char WriteCGACTStop(){
unsigned char p, arr[128];
int tmp;
unsigned long t;

for(p=0;p<128;p++) arr[p]=0;
serCputs(“AT+CGACT=0,1”);
serCputc(13);

p=0;
t=read_rtc();
while(read_rtc()-t<=15){
tmp=serCgetc();
if(tmp!=-1 ){
arr[p]=(unsigned char) tmp;
if(strstr(arr,“OK”)){
printf("WRITE << CGACT_STOP OK
“);
return(1);
}
if(strstr(arr,“ERROR”)){
printf(”###WRITE << CGACT_STOP ERROR
“);
return(0);
}
p++;
if (p>=sizeof(arr)) p=0;
}
}
printf(”###WRITE << CGACT_STOP ERROR TIMEOUT
");
return(0);
}

////////////////////////////////////////////////////////////////////////////////

void initial_ports(){
WrPortI(SPCR,&SPCRShadow,0x84); // setups Port A to output (cable downloader)
WrPortI(PADR,&PADRShadow,0xFF);
WrPortI(PBDR,&PBDRShadow,0x00);
WrPortI(PCDR,&PCDRShadow,0x00);
//WrPortI(PDDDR,&PDDRShadow,0x00);
}

////////////////////////////////////////////////////////////////////////////////

int main(){
int i;
char buffer[100];
int bytes_read;
longword destIP;
tcp_Socket socket;

initial_ports();
serCopen(MODEM_BAUDRATE);
serCflowcontrolOff();

for(i=0;i<5;i++) if(MODEM_RESET()) break;
for(i=0;i<5;i++) if(echo_off()) break;

for(i=0;i<5;i++) if(WriteCGATTStart()) break;

for(i=0;i<5;i++) if(WritePDP()) break;

for(i=0;i<5;i++) if(WriteCGACTStart()) break;

for(i=0;i<5;i++) if(DialISP()) break;

sock_init();

ifconfig(IF_PPP2,
IFS_PPP_INIT,
IFS_PPP_SPEED, PPP_BAUDRATE,
IFS_PPP_FLOWCONTROL, 0,
IFS_PPP_HANGUP, “ATH”,
IFS_PPP_MODEMESCAPE, 1,
IFS_PPP_ACCEPTIP, 1,
IFS_PPP_ACCEPTDNS, 1,
IFS_PPP_REMOTEAUTH, REMOTE_USERNAME, REMOTE_PASSWORD,
IFS_DEBUG, 6,
IFS_UP,
IFS_END);

while(ifpending(IF_PPP2)%2) tcp_tick(NULL);

if(ifstatus(IF_PPP2)){
printf("
PPP established
");

  printf("

IP Address is %s
",inet_ntoa(buffer,gethostid()));

  printf("

Open socket for connection

");
tcp_open(&socket,0,destIP,PORT,NULL);

   printf("

Connection established, sending data…

");

  sprintf(buffer,"test");
  while(1){
  	sock_write(&amp;socket, buffer, bytes_read);     /// error in here, data sending failed !!!
  }

}
else{
printf(“PPP failed”);
}
return(0);
}