Bug in SetCommState()
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Bug in SetCommState()
It seems that SetCommState() is not able to change the serial communication port baud rate.
Antonio, can you look at it? If you need a sample of the problem please let me know.
EMG
Antonio, can you look at it? If you need a sample of the problem please let me know.
EMG
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: Bug in SetCommState()
Found! There are at least the following functions to fix:
and obviously move up nCom definition.
EMG
Code: Select all
#ifdef __HARBOUR__
CLIPPER BUILDCOMMDCB( PARAMS ) // () cInfoDef, @ cDeviceBlock --> lOk
#else
CLIPPER BUILDCOMMD( PARAMS ) // CB() cInfoDef, @ cDeviceBlock --> lOk
#endif
{
DCB dcb;
GetCommState( hCom, &dcb ); // EMG
#ifdef __FLAT__
if( BuildCommDCB( _parc( 1 ), &dcb ) ) // OK
#else
if( BuildCommDCB( _parc( 1 ), &dcb ) == 0 ) // OK
#endif
{
_storclen( ( char * ) &dcb, sizeof( dcb ), 2 );
_retl( TRUE );
}
else // Error
{
_storc( "", 2 );
_retl( FALSE );
}
}
Code: Select all
#ifdef __HARBOUR__
CLIPPER SETCOMMSTATE( PARAMS ) // ()
#else
CLIPPER SETCOMMSTA( PARAMS ) // TE()
#endif
{
#ifdef __FLAT__
_retl( SetCommState( hCom, ( DCB FAR * ) _parc( 2 ) ) != 0 ); // EMG
#else
_retl( SetCommState( ( DCB FAR * ) _parc( 1 ) ) == 0 );
#endif
}
EMG
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
No, you declared it that way.Antonio Linares wrote:Enrico,
Thanks. I guess you declare hComm as static HANDLE hComm;
Yes, this is another problem. Why did you organize comm.c in such way?Antonio Linares wrote:But the problem I see is that you can only manage one comm port at the same time, isn't it ?
EMG
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Solved:
EMG
Code: Select all
short int WriteComm( short int idComDev, void FAR * lpvBuf, short int cbWrite )
{
DWORD dwBytesWritten = cbWrite;
overlap.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); // EMG
dwEventsRead = WriteFile( hCom, lpvBuf, cbWrite, &dwBytesWritten, &overlap );
WaitForSingleObject( overlap.hEvent, INFINITE ); // EMG
GetOverlappedResult( hCom, &overlap, &dwBytesWritten, FALSE );
CloseHandle( overlap.hEvent ); // EMG
return ( ( short int ) dwBytesWritten );
}
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
I try to fix comm.c with the EMG code, but
i have compiling errors:
Progetto: WP32, Ambiente: BorlandWin:
[1]:Bcc32.Exe -M -c -O2 -tW -v- -X -DHB_FM_STATISTICS_OFF -DHB_NO_DEFAULT_API_MACROS -DHB_NO_DEFAULT_STACK_MACROS -DHB_OS_WIN_32 -Ic:\ut\fwh27\include -IC:\BCC55\Include;C:\xHxFw27\Include -nObj comm.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
comm.c:
Error E2451 comm.c 58: Undefined symbol 'hCom' in function BUILDCOMMD
Error E2451 comm.c 85: Undefined symbol 'hCom' in function SETCOMMSTA
*** 2 errors in Compile ***
I have FWH 2.7 December/2005
Directory di C:\ut\fwh27\source\winapi
16/05/2003 10.05 11.841 comm.c
i have compiling errors:
Progetto: WP32, Ambiente: BorlandWin:
[1]:Bcc32.Exe -M -c -O2 -tW -v- -X -DHB_FM_STATISTICS_OFF -DHB_NO_DEFAULT_API_MACROS -DHB_NO_DEFAULT_STACK_MACROS -DHB_OS_WIN_32 -Ic:\ut\fwh27\include -IC:\BCC55\Include;C:\xHxFw27\Include -nObj comm.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
comm.c:
Error E2451 comm.c 58: Undefined symbol 'hCom' in function BUILDCOMMD
Error E2451 comm.c 85: Undefined symbol 'hCom' in function SETCOMMSTA
*** 2 errors in Compile ***
I have FWH 2.7 December/2005
Directory di C:\ut\fwh27\source\winapi
16/05/2003 10.05 11.841 comm.c
Pedro Gonzalez
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Put this just before OPENCOMM():
EMG
Code: Select all
static HANDLE hCom = INVALID_HANDLE_VALUE;