Visual Basic Communications Demonstration Program: COMMDEMO

The Visual Basic COMMDEMO program was designed to demonstrate how to call 
the communications related Windows API functions to establish basic serial 
communications.  The COMMDEMO sample program is an example of a simple 
terminal emulation program.  This program was designed mainly for 
educational purposes and therefore is not an example of a full featured 
terminal emulation program.  The concepts presented in this sample program 
should provide a solid foundation from which you can implement serial 
communications into your own Visual Basic application.

The sample program contains comments where needed indicating other possible 
values for variable settings to allow you to easily modify the sample 
program.  For example you could modify the sample program to open any 
communications port; or change the line and event settings to your own 
custom settings.

The COMMDEMO sample program demonstrates the following:

     o How to open and connect to the communications port
     o How to read from the communications port
     o How to write to the communications port
     o How to change the port settings such as the baud rate
     o How to change the event settings such as detecting when a character 
       is received.
     o How to trap and process errors after calling the communications 
       related API functions.

Cross-Reference of the Main Features
---------------------------------------------------------------------------
The following list provides references to the main functional areas of the 
program.  The following reference should make it easier for you to find a 
desired feature related to communications.  All of the procedures listed 
below are contained in the main form called COMMDEMO.FRM.

o How to open and connect to the communications port:

   The code to initialize the communications port line settings is located 
   in the Form_Load event procedure.  The communications port line settings 
   are initialized by calling the Windows API function BuildCommDCB.

   The code to open the communications port is located in function 
   CommConnect.  Function CommConnect calls the functions SetLineSettings 
   and SetEventSettings which demonstrate how to set the communications 
   line (e.g., baud rate, stop bits, hardware handshaking) and event (e.g., 
   ring detect) settings respectively.  The function CommConnect calls the 
   Windows API function OpenComm to open COM1.  The function CommConnect 
   contains a call to the Windows API function SetCommState to set the 
   communications line settings.  The function SetEventSettings contains a 
   call to the windows API function SetCommEventMask to enable 
   communications event trapping.

   Function CommConnect is called from the MNU_Connect_Click event 
   procedure for the Connect! menu.

o How to read from the communications port

   The code that reads in all characters waiting in the communications 
   receive buffer is located in the Timer_CheckInBuf_Timer event procedure.  
   If a successful connection is made, the timer is initiated from the 
   CommConnect function .  The timer is disabled in the CommDisconnect 
   function.  The Timer_CheckInBuf_Timer event procedure contains a call to 
   the Windows API function ReadComm to read the characters waiting in the 
   receive buffer. 

o How to write to the communications port

   The Text_TransmitWin_KeyPress event procedure contains the code which 
   writes characters to the communications port as they are entered in the 
   transmit window.  This event procedure contains a call to the Windows 
   API function WriteComm to write characters to the transmit buffer.

o How to change the port settings such as the baud rate.

   The MNU_BaudRate_Click event procedure for the Baud menu demonstrates 
   how to change the baud rate.  The baud rate can be changed while the 
   communications port is opened or closed.  COMMDEMO demonstrates how to 
   change between baud rates of 1200, 4800 and 9600.  The 
   MNU_BaudRate_Click event procedure demonstrates how to call the Windows 
   API function SetCommState to change the baud rate line setting.

o How to change the event settings such as detecting when a character is 
  received.

   The MNU_Events_CharDetect_Click event procedure for the Events menu 
   demonstrates how to enable or disable character received events.  When 
   character detect event trapping is enabled, a message is displayed in 
   the Communications Status window each time a character is received.  The 
   character detect event trapping can only be enabled or disabled when the 
   communications port is opened.  The MNU_Events_CharDetect_Click event 
   procedure contains a call to the Windows API function SetCommEventMask 
   to change the character detect event setting.

o How to trap and process errors after calling the communications related 
  API functions.

   The function GetOpenCommError demonstrates how to process errors related 
   to opening the communications port.  This function simply interprets the 
   return code from the Windows API function OpenComm.  The 
   GetOpenCommError function is called from the CommConnect function.

   The function ProcessCommError demonstrates how to call the Windows API 
   function GetCommError to process general communications errors.  This 
   function is called from the procedures Timer_CheckInBuf_Timer and 
   Text_TransmitWin_KeyPress when reading from and writing to the 
   communications port respectively.

Cross-Reference to the Windows API functions called by COMMDEMO
---------------------------------------------------------------------------
Below is a reference to the location(s) in the code where the 
communications related Windows API functions are called.  All calls to the 
Windows API functions are located in the main form called COMMDEMO.FRM.  
The declaration for the Windows API functions and related Type ... End Type 
structures is located in the global module called COMMDEMO.GLB.

    Windows API function       Location in COMMDEMO.FRM
    --------------------       --------------------------------------------
    BuildCommDCB...............Form_Load event procedure
    OpenComm...................CommConnect
    CloseComm..................CommConnect
             ..................CommDisconnect
    FlushComm..................CommDisconnect
    ReadComm...................Timer_CheckInBuf_Timer event procedure
    WriteComm..................Text_TransmitWin_KeyPress event procedure
    SetCommState...............SetLineSettings
                ...............MNU_BaudRate_Click event procedure
    SetCommEventMask...........SetEventSettings
                    ...........MNU_Events_CharDetect_Click event procedure
    GetCommError...............ProcessCommError
                ...............Timer_CheckInBuf_Timer event procedure

