May 01, 2024, 08:48:18 PM

News:

IonicWind Snippit Manager 2.xx Released!  Install it on a memory stick and take it with you!  With or without IWBasic!


SerialPorts.Dll

Started by Kym, January 14, 2010, 06:53:24 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Kym

 I have just started to use EBasic  and have just joined this forum.
Have been trying to get the SerialPorts.dll  to function as mentioned in this thread.

http://www.ionicwind.com/forums/index.php/topic,3404.msg27290/topicseen.html#msg27290

I have had some success in doing this , using the EBasic ready headers supplied in the other thread.

Here is some test  code that i am try to get working.
$MAIN

$use "SerialPorts.lib"

declare cdecl import, ser_GetDllVersion(),string          'This works
declare cdecl import, ser_GetDllCopyright(),string      'This works
declare cdecl import, ser_GetDllDate(),string                'This works
declare cdecl import, ser_GetDllName(),string              'This works
declare cdecl import, ser_CloseComPort( HANDLE hPort ),bool
declare cdecl import, ser_OpenComPort( pointer tInfo ),HANDLE
declare cdecl import, ser_SetDataLenght( HANDLE hPort, eDataLenght eLenght ),bool
declare cdecl import, ser_SetDtrControl( HANDLE hPort, eDTRConfig eDtr ),bool
declare cdecl import, ser_SetParityBit( HANDLE hPort, eParityBit eParity ),bool
declare cdecl import, ser_SetRtsControl( HANDLE hPort, eRTSConfig eRts ),bool
declare cdecl import, ser_SetBaudRate( HANDLE hPort, eBaudRate eBaud ),bool
declare cdecl import, ser_SetStopBits( HANDLE hPort, eStopBits eStop ),bool
declare cdecl import, ser_SetTimeouts( HANDLE hPort, pointer tTimeOuts ),bool
   
CONST RICHEDIT_1 = 1
CONST RICHEDIT_2 = 2
CONST RICHEDIT_3 = 3
CONST RICHEDIT_4 = 4
CONST RICHEDIT_5 = 5
CONST STATIC_6 = 6
CONST STATIC_7 = 7
CONST STATIC_8 = 8
CONST STATIC_9 = 9
CONST STATIC_10 = 10


DIALOG d1
CREATEDIALOG d1,0,0,450,202,0x80C80080,0,"SerialPorts.Lib",&d1_handler
CONTROL d1,@RICHEDIT,"",80,10,350,20,0x50800000,RICHEDIT_1
CONTROL d1,@RICHEDIT,"",80,40,350,20,0x50800000,RICHEDIT_2
CONTROL d1,@RICHEDIT,"",80,70,350,20,0x50800000,RICHEDIT_3
CONTROL d1,@RICHEDIT,"",80,100,350,20,0x50800000,RICHEDIT_4
CONTROL d1,@RICHEDIT,"",80,130,350,20,0x50800000,RICHEDIT_5

CONTROL d1,@STATIC,"Name",20,13,50,20,0x5000010B,STATIC_6
CONTROL d1,@STATIC,"Version",20,43,50,20,0x5000010B,STATIC_7
CONTROL d1,@STATIC,"Date",20,73,50,20,0x5000010B,STATIC_8
CONTROL d1,@STATIC,"Copyright",20,104,50,20,0x5000010B,STATIC_9
CONTROL d1,@STATIC,"ComPort",20,132,50,20,0x5000010B,STATIC_10

DOMODAL d1


SUB d1_handler
SELECT @MESSAGE
CASE @IDINITDIALOG
CENTERWINDOW d1
SETCONTROLTEXT(d1,RICHEDIT_1,ser_GetDllName())
SETCONTROLTEXT(d1,RICHEDIT_2,ser_GetDllVersion())
SETCONTROLTEXT(d1,RICHEDIT_3,ser_GetDllDate())
SETCONTROLTEXT(d1,RICHEDIT_4,ser_GetDllCopyright())

/* Initialize any controls here */
CASE @IDCLOSEWINDOW
CLOSEDIALOG d1,@IDOK
CASE @IDCONTROL
SELECT @CONTROLID
CASE RICHEDIT_1
/* respond to control notifications here */
CASE RICHEDIT_2
/* respond to control notifications here */
CASE RICHEDIT_3
/* respond to control notifications here */
CASE RICHEDIT_4
/* respond to control notifications here */
CASE RICHEDIT_5
/* respond to control notifications here */
ENDSELECT
ENDSELECT
RETURN
ENDSUB


Now the first 4 lines of imports work fine and i can display the results of these functions.
As to the rest , if I try to use them I cannot compile them as always get errors.
Take this line for an example

ser_CloseComPort( HANDLE hPort ),bool

How do i set the HANDLE  and  hPort  Parts of this , or do I have to define them some How?

Kym




sapero

January 14, 2010, 07:28:55 AM #1 Last Edit: January 14, 2010, 07:33:11 AM by sapero
Hi Kym,
A HANDLE is Microsoft specific data type, not known by Ebasic by default. It is defined somewhere in windowssdk.inc.
You can also define it by hand, before the first "declare import":
typedef HANDLE int
The SerialPorts.inc header handles it for you:
$use "SerialPorts.lib"

$ifndef __windowssdk_inc__
typedef HANDLE UINT
...

Kym

Wow Sapero ,quick reply.

Ok , where am i going wrong, as I have used the header files that you supplied but,

If i do this i get syntax errors.
ser_CloseComPort( HANDLE hPort ),bool

and  some how i have to pass say com1 to the Handle or hPort
then set the baudrate etc.

As I thought the headers already defined these things.

Kym



LarryMc

That's not how you call subroutines/functions

See the section in the help file on "Using Subroutines"

Larry
LarryMc
Larry McCaughn :)
Author of IWB+, Custom Button Designer library, Custom Chart Designer library, Snippet Manager, IWGrid control library, LM_Image control library

Kym

 Ok ,Larry read the instructions ,but still making no sensse of this

we have here:
ser_CloseComPort( HANDLE hPort ),bool
what i need to know is how to pass the correct Values for the (Handle  hPort)
part of this.

Kym .

LarryMc

The "HANDLE hport" is the handle returned with the comport was opened.
You have these 2 declares

declare cdecl import, ser_OpenComPort( pointer tInfo ),HANDLE
declare cdecl import, ser_CloseComPort( HANDLE hPort ),bool


the proper syntax would look like:

tInfo MyInfo
MyInfo.blah=...
MyInfo.blah=...
MyInfo.blah=...
MyInfo.blah=...

int myPort

myPort=ser_OpenComPort( &MyInfo )

whatever.....

ser_CloseComPort(myPort)


Something along those lines.

Larry
LarryMc
Larry McCaughn :)
Author of IWB+, Custom Button Designer library, Custom Chart Designer library, Snippet Manager, IWGrid control library, LM_Image control library

Kym

Well it was something along those lines.

here is what i just tried
def A:int
A = 0 :
DEF COM1 as POINTER
COM1 = A :

ser_OpenComPort(COM1)


ser_CloseComPort(COM1)



and this will open the port and then close it.
if A = 1 then Com2 is set.

Kym

LarryMc

But that still isn't correct.
type tPortInfo
    eComPort        ePort
    eBaudRate       eBaud
    eStopBits       eStop
    eDataLenght     eLenght
    eParityBit      eParity
    eDTRConfig      eDtr
    eRTSConfig      eRts
endtype
def tInfo as tPortInfo

what you are doing is sending it just the com port and the baud/stop/len/parity/dtr/rts are just picking up whatever garbage is in memory after where the port is stored.

Larry
LarryMc
Larry McCaughn :)
Author of IWB+, Custom Button Designer library, Custom Chart Designer library, Snippet Manager, IWGrid control library, LM_Image control library

Kym

Maybe this is more to your liking

A = 0 :
DEF COM1 as POINTER
COM1 = A :

ser_OpenComPort(COM1)

ser_SetBaudRate(COM1, 9600)
ser_SetStopBits( COM1, 1 )
ser_SetDataLenght( COM1, 8)
ser_SetParityBit( COM1,0 )
ser_SetDtrControl( COM1, 0 )
ser_SetRtsControl( COM1,0)


ser_CloseComPort(COM1)


yeah still working on it , What would be  best is something like this,
ser_OpenComPort(COM1,9600,1,8,1,0,0,0)

But a least I  can  Open the Com ports now.
the rest will follow, I hope.

Kym

LarryMc

Whatever floats your boat; ;)
I was just going by the .inc referenced at the beginning for the dll.

Glad you got it working.

Larry
LarryMc
Larry McCaughn :)
Author of IWB+, Custom Button Designer library, Custom Chart Designer library, Snippet Manager, IWGrid control library, LM_Image control library

Kym

Well Water usually Floats my Boat ;D

Thanks For the help.

Kym

Copex

Quote from: Kym on January 14, 2010, 10:59:14 PM
, What would be  best is something like this,
ser_OpenComPort(COM1,9600,1,8,1,0,0,0)

But a least I  can  Open the Com ports now.
the rest will follow, I hope.

Kym

D.I.Y - (not tested)



OpenComPort(COM1,9600,1,8,1,0,0,0)

sub openComPort(int port,int BaudRate,int StopBits,int DataLen,int Parity, int Dtr,int Rts)
ser_OpenComPort(port)
ser_SetBaudRate(port, BaudRate)
ser_SetStopBits( port, StopBits )
ser_SetDataLenght( port, DataLen)
ser_SetParityBit( port,Parity )
ser_SetDtrControl( port, Dtr)
ser_SetRtsControl( port,Rts)
endsub
-
I really should learn how to use a spell checker! though im not sure how it will help someone who can not spell?
-
Except where otherwise noted, content Posted By Copex is
licensed under a Creative Commons Attribution 3.0 License

http://creativecommons.org/licenses/by/3.0/

Kym

QuoteD.I.Y - (not tested)

Changed this line.
openComPort(Port,9600,1,8,0,0,0)

Tester name Kym
Thoughts = Works great , exactly what i was after.

Still only sets 1 bit at a time , but thats how the DLL was written.

Kym