>>*--------Program that sends data to the port >>oncommtype=ON_MESSAGE && equals 4 from define statement in example below >>DO MsComClear && clear the port and get it ready to receive data >>mscom.output="~UMI "+CHR(13) >>* Now in the mscom.oncomm event: >>*--------oncomm method >>#define ON_MESSAGE 4 && receive message from phonetree >>IF oncommtype=ON_MESSAGE >> *--I know that I am retrieving the current message from the phonetree system so >> *--I need to wait for a chr(26) to come back so I know that is the end of the >> *--message. Usually I will not receive a chr(26) back otherwise >> DO WHILE !CHR(26) $ this.lcstring >> *--Keep adding the value from this.input to this.lcstring property >> this.lcString = this.lcstring+this.input >> *--The next three lines for troubleshooting only >> ACTIVATE SCREEN >> ? this.lcstring >> WAIT WINDOW "Check the value of this.lcstring: " >> ENDDO >>ELSE >> *--I don't need to wait for a chr(26) from the port, just grab the information in >> *--in the .input property >> this.lcstring = this.lcstring + this.input >> *--The next three lines for troubleshooting only >> ACTIVATE SCREEN >> ? this.lcstring >> WAIT WINDOW "Check the value of this.lcstring: " >>ENDIF >>*--In some cases I have to trim off excess characters the phonetree system sends back at the >>*--end of the data so I would do that processing here, but otherwise I would just store >>*--the value to this.result for use later on >>IF !(this.lcstring=="") >> this.result=this.lcstring >>ENDIF >>RETURN >>>>
>>*------------------------------------------------------------ >>*--PROCEDURE MsComClear >>*--Used in visual foxpro only for clearing/resetting the com port >>*--1/23/2002 TCHolzer >>PROCEDURE MsComClear >>#IF 'VISUAL' $ UPPER(VERSION()) >> IF UPPER(TYPE('ComForm.MsCom'))="O" >> WITH COMFORM.mscom >> IF .PortOpen >> .PortOpen = .F. >> IF !.PortOpen >> mIsOpened = .F. >> ENDIF >> ENDIF >> IF !mIsOpened >> .CommPort = m_port >> .Settings = ALLTRIM(STR(m_baudrate))+","+s_parity+","+ALLTRIM(STR(m_databits))+","+ALLTRIM(STR(m_stopbits)) >> .InputLen = 0 >> .RThreshold=1 >> .SThreshold=1 >> .PortOpen = .T. >> ENDIF >> IF .PortOpen >> mIsOpened = .T. >> ENDIF >> ENDWITH >> WITH COMFORM.mscom >> 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 && comform.mscom is NOT an object - cannot access port or phonetree system >> MESSAGEBOX('Phonetree is experiencing a problem.'+CHR(13); >> +'Could not access Phonetree to reset port.'+CHR(13); >> +'Please exit phonetree and start again.',16,'Phonetree Error!',5000000) >> ENDIF && is comform.mscom an object? >>#ENDIF >>RETURN >>>>
>>>>*--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 >>>> >>>>>>>>
>>>>*~ 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 >>>>>>>>