📄 gprs232.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <iostream.h>
#include <time.h>
#include <dos.h>
#include <math.h>
#include "etr_ppp.h"
#include "gprs_sms.h"
#include "RS232X3.h"
#include "etr232i.h"
#include "readini.h"
char TxBuf[1540];
char RxBuf[1540];
int Port, BaudIdx;
int GetIPfromSMS( char* InStr, char* IPStr );
int RS232SendDat( char* pDat );
int RS232GetDat( char* pDat );
void main( int argc, char** argv )
{
int i, i1, i2, ErrFlag, EndFlag, len, SMSFlag;
char IPStr[20];
struct RcvSMSInfo Info[50];
int COMInitialized=0;
int Conn;
int MP;
int ConnNum=0;
if( !GPRSPowerIsOn( ) )
{
DisableIGT( );
NB_Delay( 200 );
EnableIGT( );
NB_Delay( 200 );
DisableIGT( );
NB_Delay( 8000 );
}
// get config parameters
if( ReadIni.GetField( "Config.ini", "[CONFIG]", "RemoteIP", 0, IPStr ) )
strcpy( IPStr, "0.0.0.0" );
if( ReadIni.GetField( "Config.ini", "[CONFIG]", "RemotePort", 0, Port ) )
Port = 1001;
if( ReadIni.GetField( "Config.ini", "[CONFIG]", "BaudIdx", 0, BaudIdx ) )
BaudIdx = 12;
if( argc > 1 )
{
strcpy( IPStr, argv[1] );
Port = 1001;
BaudIdx = 12;
}
_Startup:
i = InitPPPNet( );
if( i < 0 )
{
printf( "Init failed: %d \n", i );
goto _Startup;
}
_Init:
i = GPRS_Logon( );
if( i<0 )
{
printf( "GPRS connect fail\n" );
i = TermPPPNet( );
goto _Startup;
}
printf( "GPRS connect\n" );
//add end
i = SetupPPPLink( 15 );
if( i < 0 )
{
i = TermPPPNet( );
goto _Startup;
}
printf( "PPP Link Up\n" );
// main loop
// Open TCP Conno
_Conn:
MP = MyPort( );
Conn = ConnOpen( IPStr, "TCP/IP", MP, Port, NONBLOCKOPEN );
if( Conn<0 )
{
printf("ConnOpen() failed: %d \n", Conn );
i = TermPPPNet( );
goto _Startup;
}
for( i=0; i<3000; i++ )
{
if( ConnIsEstablished( Conn ) ) break;
printf( "Connecting %d %d...\r", Conn, i );
}
//check power is on/off
if( !GPRSPowerIsOn( ) )
{
if( GetPPPState( ) != -1 ) ForcePPPLinkDown( );
//SysReboot( );
}
if( i==3000 )
{
i = ConnClose( Conn, 1 );
ConnNum++;
if( ConnNum>10 )
{
if( GetPPPState( ) != -1 ) ForcePPPLinkDown( );
//SysReboot( );
}
goto _Conn;
}
ConnNum = 0;
// STEP2: setup COMx
if( COMInitialized == 0 )
{
// init COM3 9600bps
i = InitUART( COM3, BaudIdx ); // RS232
i = InstallISR( COM3 );
COMInitialized = 1;
}
for( ErrFlag=0; ; )
{
if( ConnIsFinished( Conn ) )
{
i = ConnClose( Conn, 1 ); // nonblocking closing
goto _Conn;
}
// STEP3.2: processing received data
if( ConnHasData( Conn ) )
{
len = ConnRead( Conn, RxBuf, 1500 );
if( len < 0 )
{
if( len != EWOULDBLOCK ) ErrFlag = 1;
}
else // response input message!
{
// send data to COM
RxBuf[len] = '\0';
len = RS232SendDat( RxBuf );
}
}
// STEP3: processing data from COM
len = RS232GetDat( RxBuf );
if( len > 0 )
{
for( i=0; i<10000; i++ )
{
if( ConnCanSend( Conn, len ) ) break;
}
if( i<10000)
{
len = ConnWrite( Conn, RxBuf, len, 1 ); // PUSHF=1
if( len < 0 ) ErrFlag = 1;
}
}
// STEP3.4: error processing, if existed
if( ErrFlag != 0 )
{
i = ConnClose( Conn, 1 );
break;
}
if( GetPPPState( ) != 1 ) break;
//check power is on/off
if( !GPRSPowerIsOn( ) )
{
if( GetPPPState( ) != -1 ) ForcePPPLinkDown( );
//SysReboot( );
}
}
if( GetPPPState( ) != -1 ) ForcePPPLinkDown( );
i = TermPPPNet( );
goto _Startup;
UninstallISR( COM3 );
}
int GetIPfromSMS( char* InStr, char* IPStr )
{
int n[4];
if( strncmpi( InStr, "IP=", 3 ) ) return -1;
sscanf( InStr, "IP=%d.%d.%d.%d", &n[0], &n[1], &n[2], &n[3] );
sprintf( IPStr, "%d.%d.%d.%d", n[0], n[1], n[2], n[3] );
return 0;
}
// return = 0: data is unavailable
// > 0: data is available, and in pDat
int RS232GetDat( char* pDat )
{
int i, i1;
for( i=0; i<1400; )
{
NB_Delay(1);
i1 = GetInputData( COM3 );
if( i1!=-1 )
{
pDat[i] = (char)i1;
i++;
}
else break;
}
return i;
}
int RS232SendDat( char* pDat )
{
int i, i1;
i1 = strlen( pDat );
for( i=0; i<i1; i++ )
{
PutOutputData( COM3, pDat[i] );
}
StartSend( COM3 );
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -