⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gprs232.cpp

📁 GPRS开发原码,英创386的GPRS控制函数
💻 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 + -