// 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 << 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(&socket, buffer, bytes_read); /// error in here, data sending failed !!!
}
}
else{
printf(“PPP failed”);
}
return(0);
}