unit1.cpp

来自「一个COM PORT的测试程式,能过COM 回路治具来实现.COM回路接法1-7」· C++ 代码 · 共 142 行

CPP
142
字号
//---------------------------------------------------------------------------

#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include "Pcomm.h"
//---------------------------------------------------------------------------

#pragma argsused
//--------------------------------------------------------------------------
void help()
{
    printf("RS232 Loopback Test V1.0\n");
    printf("Copy Right by Tatung 2003-June-26\n");
    printf("\n");
    printf("Usage:\n");
    printf("winrs232 [port]\n");

}
//--------------------------------------------------------------------------
int BaudRateTable(int br)
{
    switch (br)
        {
         case 9 :  br=2400;
                   break;
         case 10:  br=4800;
                   break;
         case 11:  br=7200;
                   break;
         case 12:  br=9600;
                   break;
         case 13:  br=19200;
                   break;
         case 14:  br=38400;
                   break;
         case 15:  br=57600;
                   break;
         case 16:  br=115200;
                   break;
         default :
                  br=9600;
                  break;
        }
   return (br);
}
//--------------------------------------------------------------------------
int COMTEST(int comport, int baud)
{
   char tbuf[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   char rbuf[80];
   memset(rbuf,0x0,80);

   if (sio_open (comport) == 0)
   {
       // baud = 9 Real Baud Rate is 2400
       // baud = 10 Real Baud Rate is 4800
       // baud = 11 Real Baud Rate is 7200
       // baud = 12 Real Baud Rate is 9600
       // baud = 13 Real Baud Rate is 19200
       // baud = 14 Real Baud Rate is 38400
       // baud = 15 Real Baud Rate is 57600
       // baud = 16 Real Baud Rate is 115200

       sio_ioctl ( comport, baud, P_NONE | BIT_8 | STOP_1 );
       sio_flowctrl ( comport, 0xc );
       sio_flush ( comport, 2 );

       int baud_ret = sio_getbaud ( comport );
       if ( (baud_ret - BaudRateTable(baud)) == 0 )
       {
          sio_write( comport, tbuf, strlen(tbuf));

          // Deley about 0.5 sec
          //for (int j=0;j<10000;j++) { for (int k=0;k<10000;k++) { }  }
          Sleep(500);
          
          sio_read( comport, rbuf, strlen(tbuf));
          if ( strcmp(rbuf,tbuf) == 0)
          {
            printf("Baud Rate: %d, Result=%s\n",baud_ret,rbuf);
            sio_DTR ( comport, 1 );
            sio_RTS ( comport, 1 );
            if (sio_lstatus ( comport ) == 15)
            {
               printf("DTR=1: DSR=1 RI=1 , RTS=1: DCD=1 CTS=1\n");
               sio_DTR ( comport, 0 );
               sio_RTS ( comport, 0 );
               if (sio_lstatus ( comport ) == 0)
               printf("DTR=0: DSR=0 RI=0 , RTS=0: DCD=0 CTS=0\n");
            }
            else
            return -1;

            return 0;
          }
          else
          return -1;
       }
       else
       return -1;
   }
   else
   return -1;
}
//----------------------------------------------------------------------


int main(int argc, char* argv[])
{
    char *testrlt;
    bool test_status; // true --> pass, false --> fail
    if (argc == 2)
    {
      for (int brate=9; brate < 17; brate++)
      {
        if (COMTEST(atoi(argv[1]), brate) == 0)
        {
          sio_close ( atoi(argv[1]) );
          testrlt="Test OK";
          test_status=true;
        }
        else
        {
          testrlt="Test Fail or port number is not exist in system";
          test_status=false;
        }
      }
      printf("%s\n",testrlt);
      if (test_status)
      exit(0);
      else
      exit(1);
    }
    else
    {
      help();
      exit(1);
    }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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