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

📄 gprs232.cpp

📁 “TCP/IP协议库及例程”和“PPP-TCP/IP协议库及例程”系英创信息技术有限公司拥有自主知识产权之软件产品(软件产品登记证书号:川DGY-2004-0033)。上述软件的获得者仅允许将上述软件
💻 CPP
字号:
/*//////////////////////////////////////////////////////////////////////////
 Description: The program implements a transparent data transfer between a
	      RS232 based device and a remote server on internet.
//////////////////////////////////////////////////////////////////////////*/
#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.h"
#include "RS232X3.h"
#include "etr232i.h"
#include "readini.h"
#include "tcpclnt.h"

#define	  BUFSIZE	1500
#define   MAXECNT       3

unsigned char           TmpBuf[1536];
struct SERVER_ID        Svr_ID;
int                     ComIdx, BaudIdx;
long                    Timeout;
int                     ECNT=0;

int GetIniPara( );
// return = 0: data is unavailable
//        > 0: data is available, and in pDat
int RS232GetData( int PortNum, char* pDat, int len );
int RS232SendData( int PortNum, char* pDat, int len );

void main( int argc, char** argv  )
{
   int                     i1, len, HIdx, ErrFlg;
   CONN_STATE	           TCPState=0;
   PPPGPRSState            PPPState;
   class TCPClientManager* TCPManager;

_Init:
   // get config parameters
   GetIniPara( );
   InitUART( ComIdx, BaudIdx );          // init RS232 COM
   InstallISR( ComIdx );

   TCPManager = new TCPClientManager( );
   TCPManager->Init( &Svr_ID );

   for( ErrFlg=0, HIdx=0; ; )
      {
      // keep PPP connection
      PPPState = PPP_Running( );
      if( PPPState!=PPPLINKUP )
	 {
	 printf( "RIdx=%d\r", PPPState );
	 continue;
	 }

      // keep TCP connection
      TCPState = TCPManager->Running( );
      if( TCPState!=OPEN )     continue;

      // read Data from tcp connection
      len = TCPManager->ReadData( TmpBuf, BUFSIZE );
      if( len > 0 )			          // remote data available
	 {
	 TmpBuf[len]='\0';
	 printf( "TCP_RCV:%s", TmpBuf );
	 RS232SendData( ComIdx, TmpBuf, len );	   // forward data to device by RS232
	 TCPManager->SetTimeoutCnt( HeartBeat );
	 }

      // read data from RS232 if available
      len = RS232GetData( ComIdx, TmpBuf, BUFSIZE );
      if( len > 0 )                                   // RS232 data available
	 {
	 TmpBuf[len]='\0';
	 printf( "232_RCV:%s", TmpBuf );
	 i1 = TCPManager->WriteData( TmpBuf, len );    // forward data to remote by TCP
	 TCPManager->SetTimeoutCnt( HeartBeat );
	 }

      // timeout processing
      if( TCPManager->IsTimeout( ) )
	 {
	 // send heart beat
	 sprintf( TmpBuf, "Heartbeat CNT=%d", HIdx );
	 HIdx++;
	 i1 = strlen( TmpBuf );
	 TCPManager->WriteData( TmpBuf, i1 );
	 TCPManager->SetTimeoutCnt( HeartBeat );
	 }

      if( ErrFlg == 0 )           continue;
      ErrFlg = 0;
      TCPManager->Close( );
      PPP_Restart( );		   // restart PPP if necessary
      ECNT++;
      if( ECNT > MAXECNT )       break;
      }

   UninstallISR( ComIdx );
   delete TCPManager;
   goto _Init;
}

int   GetIniPara( )
{
   int i1;
   if( ReadIni.GetField( "Config.ini", "[CONFIG]", "RemoteIP", 0, Svr_ID.IPStr ) )
      strcpy( Svr_ID.IPStr, "61.157.21.1" );
   if( ReadIni.GetField( "Config.ini", "[CONFIG]", "RemotePort", 0, Svr_ID.Port ) )
      Svr_ID.Port = 1001;
   if( ReadIni.GetField( "Config.ini", "[CONFIG]", "COM", 0, ComIdx ) )
      ComIdx = 2;
   if( ReadIni.GetField( "Config.ini", "[CONFIG]", "BaudIdx", 0, BaudIdx ) )
      BaudIdx = 12;
   return 0;
}

// return = 0: data is unavailable
//        > 0: data is available, and in pDat
int RS232GetData( int PortNum, char* pDat, int len )
{
   int i, i1;
   for( i=0; i<len; )
      {
      NB_Delay(1);
      i1 = GetInputData( PortNum );
      if( i1!=-1 )
	 {
	 pDat[i] = (char)i1;
	 i++;
	 }
      else   break;
      }
   return i;
}

int RS232SendData( int PortNum, char* pDat, int len )
{
   int i;
   for( i=0; i<len; i++ )
      {
      PutOutputData( PortNum, pDat[i] );
      }
   StartSend( PortNum );
   return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -