Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

MSComm OnComm event (Input InBufferCount)

Posted on 2006-11-06
6
Medium Priority
?
1,418 Views
Last Modified: 2012-05-05
I'm trying to understand this OnComm event code. I'm using someone else's code and I need to know what it's doing. I do understand most of it but here's the questions I do have.

Why is stComChar declared with * 1 ?

A CommEvent must be capable of being events other than recieve events. In this code we only trap for the "comEvReceive" event, correct?

When the comEvReceive event fires, the incoming data is only 1 character? So we keep holding each character until a CR is detected?

After processing all incoming data, the InBufferCount is clear until another OnComm event is fired? Does the OnComm event (or shall we say the com device) send an InBufferCount every time it fires?





Private Sub comm1_OnComm()

    Static stEvent As String   'storage for an Modem event
    Dim stComChar As String * 1   'temporary storage for received comm port data
   
    Select Case comm1.CommEvent

        Case comEvReceive                                       ' Received RThreshold # of chars.

            Do
                stComChar = comm1.Input                         'read 1 character .Inputlen = 1

                Select Case stComChar

                    Case vbLf                                   'Ignore linefeeds

                    Case vbCr                                   'The CR indicates the end of the Receive String
                        If Len(stEvent) > 0 Then
                          ProcessEvent stEvent                  'Process the Modem event
                          stEvent = ""
                        End If
                    Case Else
                        stEvent = stEvent + stComChar           'Save everything between CR's
                End Select

            Loop While comm1.InBufferCount                      'Loop until all characters in receive buffer are processed

    End Select
0
Comment
Question by:HKComputer
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 
LVL 65

Accepted Solution

by:
rockiroads earned 2000 total points
ID: 17881996
OnComm probably gets called when u have performed some communications between host and remote, beit a send or receive

CommEvent - is the type of communication

Case comEvReceive - u are checking for the received communication

u then read one character at a time, and if its a carriage return (not linefeed) and
stEvent has a value in it then u process that event

otherwise u set stEvent to be the char just read

basically read the input, string the carriage returns

0
 
LVL 4

Author Comment

by:HKComputer
ID: 17882059
>u then read one character at a time

Is there an option to do otherwise? Does data "stream" in one character at a time?
0
 
LVL 65

Assisted Solution

by:rockiroads
rockiroads earned 2000 total points
ID: 17882099
Reason why its reading one char at a time is to strip off the carriage returns
I cant tell u whether there is a good alternative or not as I dont have that kind of setup to test
Also, u need to look at the ProcessEvent function, what does it do with the argument thats passed?
0
NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

 
LVL 4

Author Comment

by:HKComputer
ID: 17882237
I do have the ProcessEvent function under control. In fact, the code I posted works very well. It's just there's a few parts of it that didn't make sense and I don't like to use code I don't understand.

I've developed a feature that checks Com ports for available modems, then checks to see if they are CallerID compatible. There is no sure-fire way of knowing if the modem is truly CallerID compatible and/or enabled, at least not for all modems. But you can give the user a pretty good idea using the code I've developed.

Then you can enable your modems (my code supports 2 of them) to monitor your lines for incoming calls. The process event logs the caller's information, then checks to see if it is a customer in the database. If so, there is a feature that can be enabled that pops up that caller's information. It all happens fast enough that you can see that caller's info. by about the second ring. The bad part is that monitoring the modem makes that modem unavailable for any other application to use. I wish there was some cost-effective way of "passively" monitoring the modem.

This is probably old hat for all you other access programmers but if someone wants the code I'd probably be willing to release. For free. Thanks to all the experts at EE for their tireless assistance. -HK
0
 
LVL 4

Author Comment

by:HKComputer
ID: 17882467
I failed to notice the following settings that get set when I "connect" to my modem:

        comm2.DTREnable = True
        comm2.RTSEnable = True
        comm2.RThreshold = 1   ' Generate a receive event on every character received
        comm2.InputLen = 1


Now I see why we are processing 1 character at a time.
0
 
LVL 65

Expert Comment

by:rockiroads
ID: 17882492
Sure must be cpu hungry then. I know Access is pretty crap at that. I run queries, that may take time to run, it slows down my PC a fair bit (well at work that is!!!)

I guess thats why u need DoEvents in your code to help out a little
0

Featured Post

Enroll in September's Course of the Month

This month’s featured course covers 16 hours of training in installation, management, and deployment of VMware vSphere virtualization environments. It's free for Premium Members, Team Accounts, and Qualified Experts!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article describes two methods for creating a combo box that can be used to add new items to the row source -- one for simple lookup tables, and one for a more complex row source where the new item needs data for several fields.
We live in a world of interfaces like the one in the title picture. VBA also allows to use interfaces which offers a lot of possibilities. This article describes how to use interfaces in VBA and how to work around their bugs.
Using Microsoft Access, learn some simple rules for how to construct tables in a relational database. Split up all multi-value fields into single values: Split up fields that belong to other things into separate tables: Make sure that all record…
In Microsoft Access, learn different ways of passing a string value within a string argument. Also learn what a “Type Mis-match” error is about.

722 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question