Hook serialui dll into existing comm functions.
This commit is contained in:
parent
dc2461e804
commit
a341a96789
|
@ -156,8 +156,8 @@ import ntdll.dll
|
|||
137 stdcall CloseHandle(long) CloseHandle
|
||||
138 stdcall CloseProfileUserMapping() CloseProfileUserMapping
|
||||
139 stub CloseSystemHandle
|
||||
140 stub CommConfigDialogA
|
||||
141 stub CommConfigDialogW
|
||||
140 stdcall CommConfigDialogA(str long ptr) CommConfigDialogA
|
||||
141 stdcall CommConfigDialogW(wstr long ptr) CommConfigDialogW
|
||||
142 stdcall CompareFileTime(ptr ptr) CompareFileTime
|
||||
143 stdcall CompareStringA(long long str long str long) CompareStringA
|
||||
144 stdcall CompareStringW(long long wstr long wstr long) CompareStringW
|
||||
|
@ -299,7 +299,7 @@ import ntdll.dll
|
|||
280 stdcall GetBinaryTypeA(ptr ptr) GetBinaryTypeA
|
||||
281 stdcall GetBinaryTypeW(ptr ptr) GetBinaryTypeW
|
||||
282 stdcall GetCPInfo(long ptr) GetCPInfo
|
||||
283 stub GetCommConfig
|
||||
283 stdcall GetCommConfig(long ptr) GetCommConfig
|
||||
284 stdcall GetCommMask(long ptr) GetCommMask
|
||||
285 stdcall GetCommModemStatus(long ptr) GetCommModemStatus
|
||||
286 stdcall GetCommProperties(long ptr) GetCommProperties
|
||||
|
@ -633,7 +633,7 @@ import ntdll.dll
|
|||
614 stdcall SearchPathA(str str str long ptr ptr) SearchPathA
|
||||
615 stdcall SearchPathW(wstr wstr wstr long ptr ptr) SearchPathW
|
||||
616 stdcall SetCommBreak(long) SetCommBreak
|
||||
617 stub SetCommConfig
|
||||
617 stdcall SetCommConfig(long ptr) SetCommConfig
|
||||
618 stdcall SetCommMask(long ptr) SetCommMask
|
||||
619 stdcall SetCommState(long ptr) SetCommState
|
||||
620 stdcall SetCommTimeouts(long ptr) SetCommTimeouts
|
||||
|
@ -654,8 +654,8 @@ import ntdll.dll
|
|||
635 stdcall SetCurrentDirectoryA(str) SetCurrentDirectoryA
|
||||
636 stdcall SetCurrentDirectoryW(wstr) SetCurrentDirectoryW
|
||||
637 stub SetDaylightFlag
|
||||
638 stub SetDefaultCommConfigA
|
||||
639 stub SetDefaultCommConfigW
|
||||
638 stdcall SetDefaultCommConfigA(str ptr long) SetDefaultCommConfigA
|
||||
639 stdcall SetDefaultCommConfigW(wstr ptr long) SetDefaultCommConfigW
|
||||
640 stdcall SetEndOfFile(long) SetEndOfFile
|
||||
641 stdcall SetEnvironmentVariableA(str str) SetEnvironmentVariableA
|
||||
642 stdcall SetEnvironmentVariableW(wstr wstr) SetEnvironmentVariableW
|
||||
|
|
229
misc/comm.c
229
misc/comm.c
|
@ -2581,14 +2581,237 @@ BOOL WINAPI WaitCommEvent(HANDLE hFile,LPDWORD eventmask ,LPOVERLAPPED overlappe
|
|||
}
|
||||
|
||||
/***********************************************************************
|
||||
* GetCommProperties (KERNEL32.???)
|
||||
* GetCommProperties (KERNEL32.286)
|
||||
*
|
||||
* This function fills in a structure with the capabilities of the
|
||||
* communications port driver.
|
||||
*
|
||||
* RETURNS
|
||||
*
|
||||
* TRUE on success, FALSE on failure
|
||||
* If successful, the lpCommProp structure be filled in with
|
||||
* properties of the comm port.
|
||||
*/
|
||||
BOOL WINAPI GetCommProperties(HANDLE hFile, LPCOMMPROP lpCommProp)
|
||||
{
|
||||
BOOL WINAPI GetCommProperties(
|
||||
HANDLE hFile, /* handle of the comm port */
|
||||
LPCOMMPROP lpCommProp /* pointer to struct to be filled */
|
||||
) {
|
||||
FIXME("(%d %p )\n",hFile,lpCommProp);
|
||||
if(!lpCommProp)
|
||||
return FALSE;
|
||||
|
||||
/*
|
||||
* These values should be valid for LINUX's serial driver
|
||||
* FIXME: Perhaps they deserve an #ifdef LINUX
|
||||
*/
|
||||
memset(lpCommProp,0,sizeof(COMMPROP));
|
||||
lpCommProp->wPacketLength = 1;
|
||||
lpCommProp->wPacketVersion = 1;
|
||||
lpCommProp->dwServiceMask = SP_SERIALCOMM;
|
||||
lpCommProp->dwReserved1 = 0;
|
||||
lpCommProp->dwMaxTxQueue = 4096;
|
||||
lpCommProp->dwMaxRxQueue = 4096;
|
||||
lpCommProp->dwMaxBaud = BAUD_115200;
|
||||
lpCommProp->dwProvSubType = PST_RS232;
|
||||
lpCommProp->dwProvCapabilities = PCF_DTRDSR | PCF_PARITY_CHECK | PCF_RTSCTS ;
|
||||
lpCommProp->dwSettableParams = SP_BAUD | SP_DATABITS | SP_HANDSHAKING |
|
||||
SP_PARITY | SP_PARITY_CHECK | SP_STOPBITS ;
|
||||
lpCommProp->dwSettableBaud = BAUD_075 | BAUD_110 | BAUD_134_5 | BAUD_150 |
|
||||
BAUD_300 | BAUD_600 | BAUD_1200 | BAUD_1800 | BAUD_2400 | BAUD_4800 |
|
||||
BAUD_9600 | BAUD_19200 | BAUD_38400 | BAUD_57600 | BAUD_115200 ;
|
||||
lpCommProp->wSettableData = DATABITS_5 | DATABITS_6 | DATABITS_7 | DATABITS_8 ;
|
||||
lpCommProp->wSettableStopParity = STOPBITS_10 | STOPBITS_15 | STOPBITS_20 |
|
||||
PARITY_NONE | PARITY_ODD |PARITY_EVEN | PARITY_MARK | PARITY_SPACE;
|
||||
lpCommProp->dwCurrentTxQueue = lpCommProp->dwMaxTxQueue;
|
||||
lpCommProp->dwCurrentRxQueue = lpCommProp->dwMaxRxQueue;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* FIXME:
|
||||
* The functionality of CommConfigDialogA, GetDefaultCommConfig and
|
||||
* SetDefaultCommConfig is implemented in a DLL (usually SERIALUI.DLL).
|
||||
* This is dependent on the type of COMM port, but since it is doubtful
|
||||
* anybody will get around to implementing support for fancy serial
|
||||
* ports in WINE, this is hardcoded for the time being. The name of
|
||||
* this DLL should be stored in and read from the system registry in
|
||||
* the hive HKEY_LOCAL_MACHINE, key
|
||||
* System\\CurrentControlSet\\Services\\Class\\Ports\\????
|
||||
* where ???? is the port number... that is determined by PNP
|
||||
* The DLL should be loaded when the COMM port is opened, and closed
|
||||
* when the COMM port is closed. - MJM 20 June 2000
|
||||
***********************************************************************/
|
||||
static CHAR lpszSerialUI[] = "serialui.dll";
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* CommConfigDialogA (KERNEL32.140)
|
||||
*
|
||||
* Raises a dialog that allows the user to configure a comm port.
|
||||
* Fills the COMMCONFIG struct with information specified by the user.
|
||||
* This function should call a similar routine in the COMM driver...
|
||||
*
|
||||
* RETURNS
|
||||
*
|
||||
* TRUE on success, FALSE on failure
|
||||
* If successful, the lpCommConfig structure will contain a new
|
||||
* configuration for the comm port, as specified by the user.
|
||||
*
|
||||
* BUGS
|
||||
* The library with the CommConfigDialog code is never unloaded.
|
||||
* Perhaps this should be done when the comm port is closed?
|
||||
*/
|
||||
BOOL WINAPI CommConfigDialogA(
|
||||
LPCSTR lpszDevice, /* name of communications device */
|
||||
HANDLE hWnd, /* parent window for the dialog */
|
||||
LPCOMMCONFIG lpCommConfig /* pointer to struct to fill */
|
||||
) {
|
||||
FARPROC lpfnCommDialog;
|
||||
HMODULE hConfigModule;
|
||||
BOOL r;
|
||||
|
||||
TRACE("(%p %x %p)\n",lpszDevice, hWnd, lpCommConfig);
|
||||
|
||||
hConfigModule = LoadLibraryA(lpszSerialUI);
|
||||
if(!hConfigModule)
|
||||
return FALSE;
|
||||
|
||||
lpfnCommDialog = GetProcAddress(hConfigModule, (LPCSTR)3L);
|
||||
|
||||
if(!lpfnCommDialog)
|
||||
return FALSE;
|
||||
|
||||
r = lpfnCommDialog(lpszDevice,hWnd,lpCommConfig);
|
||||
|
||||
/* UnloadLibrary(hConfigModule); */
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* CommConfigDialogW (KERNEL32.141)
|
||||
*
|
||||
* see CommConfigDialogA for more info
|
||||
*/
|
||||
BOOL WINAPI CommConfigDialogW(
|
||||
LPCWSTR lpszDevice, /* name of communications device */
|
||||
HANDLE hWnd, /* parent window for the dialog */
|
||||
LPCOMMCONFIG lpCommConfig /* pointer to struct to fill */
|
||||
) {
|
||||
BOOL r;
|
||||
LPSTR lpDeviceA;
|
||||
|
||||
lpDeviceA = HEAP_strdupWtoA( GetProcessHeap(), 0, lpszDevice );
|
||||
if(lpDeviceA)
|
||||
return FALSE;
|
||||
r = CommConfigDialogA(lpDeviceA,hWnd,lpCommConfig);
|
||||
HeapFree( GetProcessHeap(), 0, lpDeviceA );
|
||||
return r;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* GetCommConfig (KERNEL32.283)
|
||||
*
|
||||
* Fill in the COMMCONFIG structure for the comm port hFile
|
||||
*
|
||||
* RETURNS
|
||||
*
|
||||
* TRUE on success, FALSE on failure
|
||||
* If successful, lpCommConfig contains the comm port configuration.
|
||||
*/
|
||||
BOOL WINAPI GetCommConfig(
|
||||
HFILE hFile,
|
||||
LPCOMMCONFIG lpCommConfig
|
||||
) {
|
||||
BOOL r;
|
||||
|
||||
TRACE("(%x %p)\n",hFile,lpCommConfig);
|
||||
|
||||
if(lpCommConfig == NULL)
|
||||
return FALSE;
|
||||
|
||||
lpCommConfig->dwSize = sizeof(COMMCONFIG);
|
||||
lpCommConfig->wVersion = 1;
|
||||
lpCommConfig->wReserved = 0;
|
||||
r = GetCommState(hFile,&lpCommConfig->dcb);
|
||||
lpCommConfig->dwProviderSubType = PST_RS232;
|
||||
lpCommConfig->dwProviderOffset = 0;
|
||||
lpCommConfig->dwProviderSize = 0;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SetCommConfig (KERNEL32.617)
|
||||
*
|
||||
*/
|
||||
BOOL WINAPI SetCommConfig(
|
||||
HFILE hFile,
|
||||
LPCOMMCONFIG lpCommConfig
|
||||
) {
|
||||
BOOL r;
|
||||
|
||||
TRACE("(%x %p)\n",hFile,lpCommConfig);
|
||||
|
||||
r = SetCommState(hFile,&lpCommConfig->dcb);
|
||||
return r;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* GetCommProperties (KERNEL32.286)
|
||||
*/
|
||||
BOOL WINAPI SetDefaultCommConfigA(
|
||||
LPCSTR lpszDevice,
|
||||
LPCOMMCONFIG lpCommConfig,
|
||||
DWORD dwSize
|
||||
) {
|
||||
FARPROC lpfnSetDefaultCommConfig;
|
||||
HMODULE hConfigModule;
|
||||
BOOL r;
|
||||
|
||||
TRACE("(%p %p %lx)\n",lpszDevice, lpCommConfig, dwSize);
|
||||
|
||||
hConfigModule = LoadLibraryA(lpszSerialUI);
|
||||
if(!hConfigModule)
|
||||
return FALSE;
|
||||
|
||||
lpfnSetDefaultCommConfig = GetProcAddress(hConfigModule, (LPCSTR)4L);
|
||||
|
||||
if(! lpfnSetDefaultCommConfig)
|
||||
return TRUE;
|
||||
|
||||
r = lpfnSetDefaultCommConfig(lpszDevice, lpCommConfig, dwSize);
|
||||
|
||||
/* UnloadLibrary(hConfigModule); */
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* SetDefaultCommConfigW (KERNEL32.639)
|
||||
*
|
||||
*/
|
||||
BOOL WINAPI SetDefaultCommConfigW(
|
||||
LPCWSTR lpszDevice,
|
||||
LPCOMMCONFIG lpCommConfig,
|
||||
DWORD dwSize
|
||||
) {
|
||||
BOOL r;
|
||||
LPSTR lpDeviceA;
|
||||
|
||||
TRACE("(%s %p %lx)\n",debugstr_w(lpszDevice),lpCommConfig,dwSize);
|
||||
|
||||
lpDeviceA = HEAP_strdupWtoA( GetProcessHeap(), 0, lpszDevice );
|
||||
if(lpDeviceA)
|
||||
return FALSE;
|
||||
r = SetDefaultCommConfigA(lpDeviceA,lpCommConfig,dwSize);
|
||||
HeapFree( GetProcessHeap(), 0, lpDeviceA );
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* GetDefaultCommConfigA (KERNEL32.313)
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue