Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Mscomm
Message
From
30/01/2002 13:17:13
 
 
To
29/01/2002 22:43:49
General information
Forum:
Visual FoxPro
Category:
Other
Title:
Re: Mscomm
Miscellaneous
Thread ID:
00610951
Message ID:
00612918
Views:
29
Hi!
Jim gave you a great example of using bindevents. I cut some code out of a port test prg I have that I used to check my ports. If you cut and paste it into a .prg, you should be able to run it as is to trap results from the com port when sending "ATZ" Maybe it will help.
*------------------------------------------------------
*--Bindeventex.prg
*--MSCOMM32 and VFPCOM BINDEVENTS Example
*------------------------------------------------------
CLEAR

loCom = CREATEOBJECT("MSCOMMLib.MSComm")
loEventHandler = NEWOBJECT("OnComm")
loVFPCOM = NEWOBJECT("VFPCOM.ComUtil")
loVFPCOM.BindEvents(loCom, loEventHandler)

_VFP.AutoYield=.t.
PUBLIC istep, lcstring
lcstring=""
istep=1
LOCAL i
FOR istep = 1 TO 4
	DO ComClear
	WITH loCom
		IF locom.portopen
			.PortOpen = .f.
		ENDIF
		.CommPort = istep
		.PortOpen = .T.
		.OUTPUT = [ATZ] + CHR(13)
	ENDWITH
ENDFOR
WAIT WINDOW "Closing ports..." NOWAIT
FOR i=1 TO 10
	IF LoCom.PortOpen
		LoCom.PortOpen = .F.
		LoCom.CommPort=i
	ENDIF
ENDFOR
locom=.null.
RELEASE loCom
loEventHandler=.null.
RELEASE loEventhandler
loVFPCOM=.null.
RELEASE loVfPCOM
ocomm=.null.
RELEASE ocomm
oncomm=.null.
RELEASE oncomm
RELEASE istep
RELEASE lcstring
WAIT WINDOW "Finished!" NOWAIT
RETURN

DEFINE CLASS ocomm AS OLECONTROL
    OLECLASS = [MSCOMMLib.MSComm.1]
ENDDEFINE 

DEFINE CLASS oncomm AS custom
	PROCEDURE oncomm
		WAIT WINDOW "Working on Port: "+ALLTRIM(STR(locom.commport)) NOWAIT
		#define    _END_CHAR         CHR(10)
		#define    _NULL             CHR(0)
		LOCAL lnstart,result
		result=""
		lcstring=""
		lnStart=SECONDS()
		DO WHILE loCom.commevent<>2.and.SECONDS()-lnstart<3
			=WaitForResponse(1)
		ENDDO
		IF loCom.commevent=2
			DO WHILE loCom.commevent=2
				lcstring=lcstring+locom.input
				IF lcString=""
					EXIT
				ENDIF
			ENDDO
			LOCAL istop 
			istop=(LEN(lcstring))
			FOR i = 1 TO istop
				DO WHILE ASC(SUBSTR(lcstring, i, 1))!=0 .and. SUBSTR(lcstring, i, 1) != _NULL ;
					.and. ASC(SUBSTR(lcstring, i, 1))!=32
					IF SUBSTR(lcstring, i, 1) != _END_CHAR .and. SUBSTR(lcstring, i, 1)!=">";
						.and.SUBSTR(lcstring, i, 1) != _NULL;
						.and.ASC(SUBSTR(lcstring, i, 1))!=32
						result = LEFT(lcstring, i)
						IF ASC(SUBSTR(lcstring, i, 1))=13 .and. i>1
		    					result = LEFT(lcstring, i-1)
						ENDIF
					    	IF ASC(SUBSTR(lcstring, i, 1))=32 .and. i>1
					    		result = LEFT(lcstring, i-1)
		    				ENDIF
						i=i+1
					ELSE
						i=i+1
					ENDIF
				ENDDO	
				i=i+1
			ENDFOR
			lcstring=result
		     IF "OK" $ lcstring
				? "Comm Port "+ALLTRIM(STR(locom.commport))+" received : "+lcstring
			ELSE
				IF ALLTRIM(lcstring)!=""
					? "Received unusual response: "+lcstring
				ENDIF
			ENDIF
		ENDIF
		RETURN
	ENDPROC
ENDDEFINE

PROCEDURE WaitForResponse
	LPARAMETERS lnDelayInSeconds
	LOCAL lnStartTime
	lnStartTime = SECO()
	DO WHILE SECO() <= (lnStartTime + lnDelayInSeconds) ;
		AND NOT SECO() < lnStartTime
		DOEVENTS()
	ENDDO
ENDPROC

PROCEDURE ComClear
LOCAL mIsOpened
	IF UPPER(TYPE('loCom'))="O"
		WITH loCom
			IF .portopen
				.portopen = .F.
				IF !.portopen
					mIsopened = .F.
				ENDIF
			ENDIF
			IF !mIsOpened
				.CommPort = istep
				.Settings = [9600,n,8,1]
				.InputLen = 0
				.RThreshold=1
				.SThreshold=1
				.PortOpen = .T.
			ENDIF
			IF .PortOpen
				mIsOpened = .T.
			ENDIF
		ENDWITH
		WITH loCom
			IF .portopen
				.PortOpen = .F.
				mIsOpened = .F.
			ENDIF
			IF !mIsOpened
				.inbuffersize=1024
				.RThreshold=1
				.SThreshold=1
				.InputLen = 0
				.PortOpen = .T.
			ENDIF
			IF .PortOpen
				mIsOpened = .T.
			ELSE
				mIsOpened = .F.
			ENDIF
		ENDWITH
	ELSE	&& loCom is NOT an object - cannot access port or phonetree system
		MESSAGEBOX('The ComPort is experiencing a problem.'+CHR(13);
		          +'Could not reset port.'+CHR(13);
		          +'Please start again.',16,'Com Error!',5000000)
	ENDIF	&& is loCom an object?
RETURN
*:EOF
.·*´¨)
.·`TCH
(..·*

010000110101001101101000011000010111001001110000010011110111001001000010011101010111001101110100
"When the debate is lost, slander becomes the tool of the loser." - Socrates
Vita contingit, Vive cum eo. (Life Happens, Live With it.)
"Life is not measured by the number of breaths we take, but by the moments that take our breath away." -- author unknown
"De omnibus dubitandum"
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform