Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
MS Comm experts
Message
 
To
07/02/2002 11:50:55
General information
Forum:
Visual FoxPro
Category:
ActiveX controls in VFP
Title:
Miscellaneous
Thread ID:
00614817
Message ID:
00616786
Views:
38
Thanks! I appreciate a jump start! Do I need the OnCommType code?

>Hi David, I 've seen cases where using SET STEP ON really messed up with the .input value when using mscomm32. Be careful of that. I would throw it to the screen instead to check the value and use a wait window for testing the .input value (that's what I did). I've had mixed results with the oncomm event (sometimes firing, sometimes not) and finally got it working. I don't know if this will help or not, but here is my oncomm code:
>
>
>*--MsCommContainer.OnComm()
>*--Last Modified:
>*--TCHolzer 01/22/2002  Trimmed extra characters from receive string
>*--TCHolzer 01/31/2002 Corrected storing of input buffer to variable s for ON_LIST case
>LOCAL ;
>	i,;
>	istop,;
>	lnStart,;
>	lnBegin
>#define    ON_IDLE           0		&& dummy status to prevent onevent firing
>#define    ON_STATUS         1		&& status of phonetree
>#define    ON_SIZE           2		&& number of records in list
>#define    ON_VERSION        3		&& phonetree version
>#define    ON_MESSAGE        4		&& receive message from phonetree
>#define    ON_LIST           5		&& List messages sent to
>#define    ON_PUTMSG         6      && send messge to phonetree
>#define    ON_PUTLST         7      && send list to phonetree
>#define    ON_STOPCALL       8      && stop calling from list immediately
>#define    _END_CHAR         CHR(10)
>#define    _NULL             CHR(0)
>
>this.creceivebuffer=""
>this.creceivestr=""
>this.lcstring=""
>this.result=""
>lnstart=SECONDS()
>lnBegin=SECONDS()
>
>IF UPPER(TYPE('OnCommType'))="N"
>	THIS.oncommtype=OnCommType
>	IF this.oncommtype<>ON_IDLE
>		=this.waitforresponse(1)
>	ELSE
>		=this.waitforresponse(1)
>	ENDIF
>ELSE
>	this.oncommtype=0		&& idle by default
>	=this.waitforresponse(1)
>ENDIF
>
>LnBegin=SECONDS()
>DO WHILE THIS.commevent<>2
>	=this.waitforresponse(1)
>	IF SECONDS()-LnBegin>3
>		IF this.oncommtype<>ON_IDLE
>			*--Should have switched commevent to 2 by now, not receiving for some reason
>			MESSAGEBOX('An Error Occurred with Phonetree.'+CHR(13);
>		          +'Unable to get response.  Please verify'+CHR(13);
>		          +'the Phonetree system is turned on and'+CHR(13);
>		          +'try again.',48,'ERROR communicating with Phonetree.',50000000)
>		ENDIF
>		EXIT
>	ENDIF
>ENDDO
>DO WHILE THIS.CommEvent=2
>     IF THIS.CommEvent=2	&& capture the information in this.input
>		IF THIS.InBufferCount>0	&& received data
>			*--If a message or a list was received, wait for the end of it
>			IF this.oncommtype=ON_MESSAGE.OR.this.oncommtype=ON_LIST	&& receive message or receive list from phonetree
>				lnstart=SECONDS()
>				DO WHILE !CHR(26) $ this.lcstring
>					this.lcString = this.lcstring+this.input
>					IF this.lcString=="".or.alltrim(this.lcstring)=">"	&& nothing received!
>						IF SECONDS()-lnstart>120
>							EXIT
>						ENDIF
>					ENDIF
>				ENDDO
>				IF this.oncommtype=ON_LIST
>					s=this.lcstring
>					this.result=this.lcstring
>					this.lcstring=""
>				ENDIF
>			ELSE
>				this.lcstring  = this.lcstring + this.input
>			ENDIF
>			IF !(this.lcstring == "")
>				this.result = ""
>				*--we captured all of the data from the port, make sure it is not just
>				*--an acknowledgement of a carriage return sent to phonetree
>				IF ALLTRIM(this.lcstring)=">"	&& this is from all carriage returns sent to phonetree
>					EXIT
>				ENDIF
>				i=1
>				istop=(LEN(this.lcstring))
>				IF this.oncommtype!=ON_LIST
>					FOR i = 1 TO istop
>						DO WHILE ASC(SUBSTR(this.lcstring, i, 1))!=0 .and. SUBSTR(this.lcstring, i, 1) != _NULL ;
>							.and. ASC(SUBSTR(this.lcstring, i, 1))!=32
>							IF SUBSTR(this.lcstring, i, 1) != _END_CHAR .and. SUBSTR(this.lcstring, i, 1)!=">";
>								.and.SUBSTR(this.lcstring, i, 1) != _NULL;
>								.and.ASC(SUBSTR(this.lcstring, i, 1))!=32
>								this.result = LEFT(this.lcstring, i)
>								i=i+1
>							ELSE
>								i=i+1
>							ENDIF
>						ENDDO	
>						i=i+1
>					ENDFOR
>				ENDIF
>			ELSE
>				this.result=""
>			ENDIF
>			IF this.oncommtype!=ON_MESSAGE .and. this.oncommtype!=ON_LIST	&& receive message or list from phonetree, do NOT strip
>			    FOR i = 1 TO LEN(this.result)
>			    	IF ASC(SUBSTR(this.result, i, 1))=32 .and. i>1
>			    		this.result = LEFT(this.result, i-1)
>		    		ENDIF
>		    		IF ASC(SUBSTR(this.result, i, 1))=13 .and. i>1
>		    			this.result = LEFT(this.result, i-1)
>			    	ENDIF
>			    ENDFOR
>			ENDIF
>			DO CASE
>			CASE this.oncommtype=ON_STATUS
>				mPTStatus=this.result
>			CASE this.oncommtype=ON_VERSION
>				mPTVersion=this.result
>			CASE this.oncommtype=ON_SIZE
>				mPTSize=this.result
>			CASE this.oncommtype=ON_MESSAGE
>				s=this.result
>			CASE this.oncommtype=ON_LIST
>				*Do NOTHING s is stored above
>			OTHERWISE
>				*DO NOTHING
>			ENDCASE
>		ELSE	&& just in case only
>			EXIT
>		ENDIF
>	ELSE	&& just in case only
>		EXIT
>	ENDIF	&& is commevent 2 or not, of not we exit the loop
>ENDDO	&& while this.commevent=2
>RETURN
>
>
>
>Here is the waitforresponse which I got on the UT:
>
>
>*~ This method loops for the specified
>*~ amount of time calling DOEVENTS().
>*~ This allows time for the modem to respond to the requests.
>
>LPARAMETERS lnDelayInSeconds
>
>LOCAL lnStartTime
>lnStartTime = SECO()
>
>DO WHILE SECO() <= (lnStartTime + lnDelayInSeconds) ;
>		AND NOT SECO() < lnStartTime
>	DOEVENTS()
>ENDDO
>RETURN
>
>
DLC
"Use the Right Tool for the Job!"
davidandcynthia@email.com
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform