1. Event service routine

This is a multi-part message in MIME format.

------=_NextPart_000_000F_01C30FDC.D1E6C710
	charset="iso-8859-1"

Hello all,

I have a problem with event service routine ! I implement =
PCOMM.DLL(MOXA) library contributed from Kondor Attila and 
communication =
with serial port work very well, but his pcomm.ew lack any event 
service =
rutine . Down at bottom is help for C++ for creating  event 
service =
routine in case when terminator character is received.   =20

After I successfully register event service with :

sio_term_irq_=3Ddefine_c_func(Pcomm,"sio_term_irq",{C_INT,C_INT,C_INT}, 
=
C_INT)
global function sio_term_irq( integer port,atom TermIrq, atom code)
                 ret=3Dc_func(sio_term_irq_,{port,TermIrq,code})
    if ret=3DSIO_BADPORT then
     warnErr("Port is not opened in advance")
    end if
    if ret=3DSIO_WIN32FAIL  then
     warnErr("Calling Win32 function failed")
    end if
    if ret=3DSIO_BADPARM  then
     warnErr("Bad parameter")
    end if
                 return ret
  end function

sci_rup=3Dsio_term_irq( 1,??? , 59)
??? any number form 1 to 50
and return 0(SIO_OK) which mean event service enabled, after if =
terminator character is received  programm crash with message 
"EXW.EXE =
generate errors . . .  ". After that I don't now how to handle ( =
possible with call_back  but I don't now HOW ...)




Language Syntax
C/C++ int WINAPI sio_term_irq(int port, VOID (CALLBACK 
*func)(int port), =
char code)
Argument:
port =3D COM port number
func =3D event service routine entry
If the func is NULL, it will disable this routine.
code =3D terminator code
Return:
SIO_OK OK
SIO_BADPORT Port is not opened in advance
SIO_WIN32FAIL Calling Win32 function failed
Call GetLastError to get the error code
Example:
C/C++
/* Define event service routine */
/* Recommend to declare this function as global function */
VOID CALLBACK TermIrq(int port)
{
}
/* Enable event service routine */
ret =3D sio_term_irq( 2, TermIrq, 'A');
if (ret !=3D SIO_OK) {
  /* Fail  */
}
/* After event service routine enabled, TermIrq() will be 
activated =
whenever terminator character is received. */
/* Disable event service routine */
ret =3D sio_term_irq( 2, NULL, 0 );


                                                     Manny 
farewell from =
Croatia !


------=_NextPart_000_000F_01C30FDC.D1E6C710
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2800.1170" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#e0edeb>
<DIV><FONT face=3DArial size=3D2><FONT face=3D"Times New Roman" =
size=3D3>Hello=20
all,</FONT><BR></FONT></DIV>
<DIV><FONT face=3DArial size=3D2>I have a problem with</FONT><FONT =
face=3DArial=20
size=3D2>&nbsp;event service routine ! I&nbsp;implement =
PCOMM.DLL(<EM>MOXA</EM>)=20
library&nbsp;contributed from <STRONG>Kondor =
Attila&nbsp;</STRONG>and<STRONG>=20
</STRONG>communication with serial port work very well, but his 
pcomm.ew =

lack&nbsp;any event service rutine .&nbsp;Down&nbsp;at 
bottom&nbsp;is =
help for=20
C++ for creating&nbsp; event service routine in case when 
terminator =
character=20
is received.&nbsp;&nbsp;&nbsp;&nbsp;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>After I successfully register 
event =
service with=20
:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial color=3D#800080=20
size=3D2>sio_term_irq_=3D<STRONG>define_c_func</STRONG>(Pcomm,"sio_term_i=
rq",{C_INT,C_INT,C_INT},=20
C_INT)</FONT></DIV>
<DIV><FONT face=3DArial color=3D#800080 size=3D2><FONT =
color=3D#008080>global function=20
sio_term_irq( integer port,atom TermIrq, atom=20
code)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;=20
ret=3Dc_func(sio_term_irq_,{port,TermIrq,code})<BR>&nbsp;&nbsp;&nbsp;if=20
ret=3DSIO_BADPORT&nbsp;then<BR>&nbsp;&nbsp;&nbsp;&nbsp;warnErr("Port 
is =
not opened=20
in advance")<BR>&nbsp;&nbsp;&nbsp;end=20
if<BR>&nbsp;&nbsp;&nbsp;if&nbsp;ret=3DSIO_WIN32FAIL&nbsp;=20
then<BR>&nbsp;&nbsp;&nbsp;&nbsp;warnErr("Calling Win32 function=20
failed")<BR>&nbsp;&nbsp;&nbsp;end=20
if<BR>&nbsp;&nbsp;&nbsp;if&nbsp;ret=3DSIO_BADPARM&nbsp;=20
then<BR>&nbsp;&nbsp;&nbsp;&nbsp;warnErr("Bad=20
parameter")<BR>&nbsp;&nbsp;&nbsp;end if</FONT></FONT></DIV>
<DIV><FONT face=3DArial color=3D#800080 size=3D2><FONT=20
color=3D#000000>&nbsp;</FONT><FONT=20
color=3D#008080>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;=20
return ret<BR>&nbsp;end function</FONT></FONT></DIV>
<DIV><FONT face=3DArial color=3D#800080 size=3D2><FONT=20
color=3D#008080></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial color=3D#800080 size=3D2><FONT=20
color=3D#008080><STRONG>sci_rup=3Dsio_term_irq( 1,??? ,=20
59)</STRONG></FONT></FONT></DIV>
<DIV><FONT face=3DArial color=3D#008080 size=3D2>??? any number 
form 1 =
to=20
50</FONT></DIV>
<DIV><FONT face=3DArial color=3D#800080 size=3D2><FONT =
color=3D#008080><FONT=20
color=3D#000000>and&nbsp;return 0(SIO_OK) which mean event service =
enabled, after=20
if terminator character&nbsp;is received&nbsp; programm crash with =
message=20
"<EM><FONT color=3D#ff0000>EXW.EXE generate errors . . 
.</FONT></EM> =
&nbsp;".=20
After that I don't now how to handle ( possible with =
<U>call_back</U>&nbsp; but=20
I don't now HOW ...)</FONT></DIV>
<DIV><FONT color=3D#000000></FONT><FONT 
color=3D#000000></FONT><FONT=20
color=3D#000000></FONT><FONT color=3D#000000></FONT><FONT =
color=3D#000000></FONT><FONT=20
color=3D#000000></FONT><FONT color=3D#000000></FONT><FONT =
color=3D#000000></FONT><FONT=20
color=3D#000000></FONT><BR></FONT><BR></DIV></FONT>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><EM><FONT color=3D#0000ff><FONT face=3DArial=20
size=3D2>Language&nbsp;Syntax<BR>C/C++&nbsp;int WINAPI 
sio_term_irq(int =
port, VOID=20
(CALLBACK *func)(int port), char code)<BR></FONT><FONT 
face=3DArial=20
size=3D2>Argument:</FONT></FONT></EM></DIV>
<DIV><FONT face=3DArial color=3D#0000ff size=3D2><EM>port =3D 
COM port=20
number</EM></FONT></DIV>
<DIV><FONT face=3DArial color=3D#0000ff size=3D2><EM>func =3D 
event =
service routine=20
entry</EM></FONT></DIV>
<DIV><FONT face=3DArial color=3D#0000ff size=3D2><EM>If the func 
is =
NULL, it will=20
disable this routine.</EM></FONT></DIV>
<DIV><FONT face=3DArial color=3D#0000ff size=3D2><EM>code =3D 
terminator =

code</EM></FONT></DIV>
<DIV><FONT face=3DArial color=3D#0000ff =
size=3D2><EM>Return:</EM></FONT></DIV>
<DIV><FONT face=3DArial color=3D#0000ff=20
size=3D2><EM>SIO_OK&nbsp;OK<BR>SIO_BADPORT&nbsp;Port is not 
opened in=20
advance<BR>SIO_WIN32FAIL&nbsp;Calling Win32 function 
failed<BR>Call =
GetLastError=20
to get the error code</EM></FONT></DIV>
<DIV><FONT face=3DArial color=3D#0000ff =
size=3D2><EM>Example:</EM></FONT></DIV>
<DIV><FONT face=3DArial color=3D#0000ff =
size=3D2><EM>C/C++</EM></FONT></DIV>
<DIV><FONT face=3DArial color=3D#0000ff size=3D2><EM>/* Define 
event =
service routine=20
*/</EM></FONT></DIV>
<DIV><FONT face=3DArial color=3D#0000ff size=3D2><EM>/* 
Recommend to =
declare this=20
function as global function */</EM></FONT></DIV>
<DIV><FONT face=3DArial color=3D#0000ff size=3D2><EM>VOID CALLBACK =
TermIrq(int=20
port)<BR>{<BR>}</EM></FONT><FONT face=3DArial 
size=3D2><BR><EM><FONT=20
color=3D#0000ff>/* Enable event service routine */</FONT></EM></DIV>
<DIV><EM><FONT color=3D#0000ff>ret =3D sio_term_irq( 2, TermIrq, =
=91A=92);<BR>if (ret !=3D=20
SIO_OK) {<BR>&nbsp;/* Fail&nbsp; */<BR>}</FONT></EM></DIV>
<DIV><EM><FONT color=3D#0000ff>/* After event service routine 
enabled, =
TermIrq()=20
will be activated whenever terminator character is received.=20
*/</FONT></EM></DIV>
<DIV><EM><FONT color=3D#0000ff>/* Disable event service routine=20
*/</FONT></EM></DIV>
<DIV><EM><FONT color=3D#0000ff>ret =3D sio_term_irq( 2, NULL, 0=20
);</FONT></EM></FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;=20
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; =
&nbsp;&nbsp;&nbsp;=20
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; =
&nbsp;&nbsp;&nbsp;=20
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Manny 
farewell =
from=20
Croatia !</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>

------=_NextPart_000_000F_01C30FDC.D1E6C710--






-- 
Regards,
    Rob Craig
    Rapid Deployment Software
    http://www.RapidEuphoria.com

new topic     » topic index » view message » categorize

2. Event service routine

Manny:

This is example of how to do the callback.
you need to create a callback using routine_id to
create a pointer to your TermIrq procedure.
This example is only for you to test the
idea and is not a complete working program. 

procedure TermIrq(integer port)
  -- do something  
end procedure

sio_term_irq_=define_c_func(Pcomm,"sio_term_irq",
                   {C_INT,C_POINTER,C_INT},C_INT)

global 
function sio_term_irq( integer port,atom TermIrq, atom code)
  ret=c_func(sio_term_irq_,{port,call_back(routine_id("TermIrq")),code})
  if ret=SIO_BADPORT then
    warnErr("Port is not opened in advance")
  end if
  if ret=SIO_WIN32FAIL then
    warnErr("Calling Win32 function failed")
  end if
  if ret=SIO_BADPARM then
    warnErr("Bad parameter")
  end if
  return ret
end function

Bernie

new topic     » goto parent     » topic index » view message » categorize

3. Re: Event service routine

On the second parameter:
VOID (CALLBACK *func)(int port)
is the definition for the procedure. It takes one parameter, 'port' of type 
int. You can define the function as:

function CallBackFunc(atom port)

  Since the definition says it should return 'void', that means that the 
return value is disregarded. It will not matter what value you return. To 
get the correct address, use call_back(routine_id("CallBackFunc")).

>From: Marijan  Lopac <marijan.lopac1 at zg.hinet.hr>
>Subject: Event service routine
>Date: Thu, 1 May 2003 12:25:58 +0200
>
>
>Hello all,
>
>I have a problem with event service routine ! I implement PCOMM.DLL(MOXA) 
>library contributed from Kondor Attila and
>communication with serial port work very well, but his pcomm.ew lack any 
>event
>service rutine . Down at bottom is help for C++ for creating  event
>service routine in case when terminator character is received.
>
>After I successfully register event service with :
>
>sio_term_irq_=define_c_func(Pcomm,"sio_term_irq",{C_INT,C_INT,C_INT},
>C_INT)
>global function sio_term_irq( integer port,atom TermIrq, atom code)
>                  ret=c_func(sio_term_irq_,{port,TermIrq,code})
>     if ret=SIO_BADPORT then
>      warnErr("Port is not opened in advance")
>     end if
>     if ret=SIO_WIN32FAIL  then
>      warnErr("Calling Win32 function failed")
>     end if
>     if ret=SIO_BADPARM  then
>      warnErr("Bad parameter")
>     end if
>                  return ret
>   end function
>
>sci_rup=sio_term_irq( 1,??? , 59)
>??? any number form 1 to 50
>and return 0(SIO_OK) which mean event service enabled, after if terminator 
>character is received  programm crash with message
>"EXW.EXE generate errors . . .  ". After that I don't now how to handle ( 
>possible with call_back  but I don't now HOW ...)
>
>
>Language Syntax
>C/C++ int WINAPI sio_term_irq(int port, VOID (CALLBACK
>*func)(int port), char code)
>Argument:
>port = COM port number
>func = event service routine entry
>If the func is NULL, it will disable this routine.
>code = terminator code
>Return:
>SIO_OK OK
>SIO_BADPORT Port is not opened in advance
>SIO_WIN32FAIL Calling Win32 function failed
>Call GetLastError to get the error code
>Example:
>C/C++
>/* Define event service routine */
>/* Recommend to declare this function as global function */
>VOID CALLBACK TermIrq(int port)
>{
>}
>/* Enable event service routine */
>ret = sio_term_irq( 2, TermIrq, 'A');
>if (ret != SIO_OK) {
>   /* Fail  */
>}
>/* After event service routine enabled, TermIrq() will be
>activated whenever terminator character is received. */
>/* Disable event service routine */
>ret = sio_term_irq( 2, NULL, 0 );
>
>
>                                                      Manny
>farewell from Croatia !
>
>
>
>TOPICA - Start your own email discussion group. FREE!
>
>

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu