mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +00:00
- Implemented: SetDefaultCommConfigW, SetDefaultCommConfigA, GetDefaultCommConfigW, GetDefaultCommConfigA
- Fixed: GetCommState svn path=/trunk/; revision=32828
This commit is contained in:
parent
fe24e2761f
commit
f835ee0323
1 changed files with 86 additions and 31 deletions
|
@ -45,6 +45,10 @@
|
||||||
|
|
||||||
/* BUILDCOMMDCB & BUILDCOMMDCBANDTIMEOUTS */
|
/* BUILDCOMMDCB & BUILDCOMMDCBANDTIMEOUTS */
|
||||||
|
|
||||||
|
/* STRINGS */
|
||||||
|
static const WCHAR lpszSerialUI[] = {
|
||||||
|
's','e','r','i','a','l','u','i','.','d','l','l',0 };
|
||||||
|
|
||||||
/* TYPES */
|
/* TYPES */
|
||||||
|
|
||||||
/* Pointer to a callback that handles a particular parameter */
|
/* Pointer to a callback that handles a particular parameter */
|
||||||
|
@ -1069,33 +1073,32 @@ GetCommState(HANDLE hFile, LPDCB lpDCB)
|
||||||
DPRINT("GetCommState(%d, %p)\n", hFile, lpDCB);
|
DPRINT("GetCommState(%d, %p)\n", hFile, lpDCB);
|
||||||
|
|
||||||
if (lpDCB == NULL) {
|
if (lpDCB == NULL) {
|
||||||
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
DPRINT("ERROR: GetCommState() - NULL DCB pointer\n");
|
DPRINT("ERROR: GetCommState() - NULL DCB pointer\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpDCB->DCBlength = sizeof(DCB);
|
if (!DeviceIoControl(hFile, IOCTL_SERIAL_GET_BAUD_RATE,
|
||||||
|
NULL, 0, &BaudRate, sizeof(BaudRate), NULL, NULL) ||
|
||||||
|
!DeviceIoControl(hFile, IOCTL_SERIAL_GET_LINE_CONTROL,
|
||||||
|
NULL, 0, &LineControl, sizeof(LineControl), NULL, NULL) ||
|
||||||
|
!DeviceIoControl(hFile, IOCTL_SERIAL_GET_HANDFLOW,
|
||||||
|
NULL, 0, &HandFlow, sizeof(HandFlow), NULL, NULL) ||
|
||||||
|
!DeviceIoControl(hFile, IOCTL_SERIAL_GET_CHARS,
|
||||||
|
NULL, 0, &SpecialChars, sizeof(SpecialChars), NULL, NULL))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
/* FIXME: need to fill following fields (1 bit):
|
memset(lpDCB, 0, sizeof(*lpDCB));
|
||||||
* fBinary: binary mode, no EOF check
|
lpDCB->DCBlength = sizeof(*lpDCB);
|
||||||
* fParity: enable parity checking
|
|
||||||
* fOutX : XON/XOFF out flow control
|
|
||||||
* fInX : XON/XOFF in flow control
|
|
||||||
*/
|
|
||||||
|
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_GET_BAUD_RATE,
|
lpDCB->fBinary = 1;
|
||||||
NULL, 0, &BaudRate, sizeof(BaudRate),&dwBytesReturned, NULL);
|
lpDCB->fParity = 0;
|
||||||
if (!NT_SUCCESS(result)) {
|
|
||||||
DPRINT("ERROR: GetCommState() - DeviceIoControl(IOCTL_SERIAL_GET_BAUD_RATE) Failed.\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
lpDCB->BaudRate = BaudRate.BaudRate;
|
lpDCB->BaudRate = BaudRate.BaudRate;
|
||||||
|
|
||||||
result = DeviceIoControl(hFile, IOCTL_SERIAL_GET_HANDFLOW,
|
lpDCB->StopBits = LineControl.StopBits;
|
||||||
NULL, 0, &HandFlow, sizeof(HandFlow), &dwBytesReturned, NULL);
|
lpDCB->Parity = LineControl.Parity;
|
||||||
if (!NT_SUCCESS(result)) {
|
lpDCB->ByteSize = LineControl.WordLength;
|
||||||
DPRINT("ERROR: GetCommState() - DeviceIoControl(IOCTL_SERIAL_GET_HANDFLOW) Failed.\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (HandFlow.ControlHandShake & SERIAL_CTS_HANDSHAKE) {
|
if (HandFlow.ControlHandShake & SERIAL_CTS_HANDSHAKE) {
|
||||||
lpDCB->fOutxCtsFlow = 1;
|
lpDCB->fOutxCtsFlow = 1;
|
||||||
}
|
}
|
||||||
|
@ -1182,26 +1185,50 @@ GetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
GetDefaultCommConfigW(LPCWSTR lpszName, LPCOMMCONFIG lpCC, LPDWORD lpdwSize)
|
GetDefaultCommConfigW(LPCWSTR lpszName, LPCOMMCONFIG lpCC, LPDWORD lpdwSize)
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
FARPROC pGetDefaultCommConfig;
|
||||||
return FALSE;
|
HMODULE hConfigModule;
|
||||||
|
DWORD res = ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
DPRINT("(%s, %p, %p) *lpdwSize: %u\n", lpszName, lpCC, lpdwSize, lpdwSize ? *lpdwSize : 0 );
|
||||||
|
hConfigModule = LoadLibraryW(lpszSerialUI);
|
||||||
|
|
||||||
|
if (hConfigModule) {
|
||||||
|
pGetDefaultCommConfig = GetProcAddress(hConfigModule, "drvGetDefaultCommConfigW");
|
||||||
|
if (pGetDefaultCommConfig) {
|
||||||
|
res = pGetDefaultCommConfig(lpszName, lpCC, lpdwSize);
|
||||||
|
}
|
||||||
|
FreeLibrary(hConfigModule);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res) SetLastError(res);
|
||||||
|
return (res == ERROR_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
GetDefaultCommConfigA(LPCSTR lpszName, LPCOMMCONFIG lpCC, LPDWORD lpdwSize)
|
GetDefaultCommConfigA(LPCSTR lpszName, LPCOMMCONFIG lpCC, LPDWORD lpdwSize)
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
BOOL ret = FALSE;
|
||||||
return FALSE;
|
UNICODE_STRING lpszNameW;
|
||||||
|
|
||||||
|
DPRINT("(%s, %p, %p) *lpdwSize: %u\n", lpszName, lpCC, lpdwSize, lpdwSize ? *lpdwSize : 0 );
|
||||||
|
if(lpszName) RtlCreateUnicodeStringFromAsciiz(&lpszNameW,lpszName);
|
||||||
|
else lpszNameW.Buffer = NULL;
|
||||||
|
|
||||||
|
ret = GetDefaultCommConfigW(lpszNameW.Buffer,lpCC,lpdwSize);
|
||||||
|
|
||||||
|
RtlFreeUnicodeString(&lpszNameW);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1424,26 +1451,54 @@ SetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
SetDefaultCommConfigA(LPCSTR lpszName, LPCOMMCONFIG lpCC, DWORD dwSize)
|
SetDefaultCommConfigA(LPCSTR lpszName, LPCOMMCONFIG lpCC, DWORD dwSize)
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
BOOL r;
|
||||||
return FALSE;
|
LPWSTR lpDeviceW = NULL;
|
||||||
|
DWORD len;
|
||||||
|
|
||||||
|
DPRINT("(%s, %p, %u)\n", lpszName, lpCC, dwSize);
|
||||||
|
|
||||||
|
if (lpszName)
|
||||||
|
{
|
||||||
|
len = MultiByteToWideChar( CP_ACP, 0, lpszName, -1, NULL, 0 );
|
||||||
|
lpDeviceW = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) );
|
||||||
|
MultiByteToWideChar( CP_ACP, 0, lpszName, -1, lpDeviceW, len );
|
||||||
|
}
|
||||||
|
r = SetDefaultCommConfigW(lpDeviceW,lpCC,dwSize);
|
||||||
|
HeapFree( GetProcessHeap(), 0, lpDeviceW );
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
SetDefaultCommConfigW(LPCWSTR lpszName, LPCOMMCONFIG lpCC, DWORD dwSize)
|
SetDefaultCommConfigW(LPCWSTR lpszName, LPCOMMCONFIG lpCC, DWORD dwSize)
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
FARPROC pGetDefaultCommConfig;
|
||||||
return FALSE;
|
HMODULE hConfigModule;
|
||||||
|
DWORD res = ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
DPRINT("(%s, %p, %p) *dwSize: %u\n", lpszName, lpCC, dwSize, dwSize ? dwSize : 0 );
|
||||||
|
hConfigModule = LoadLibraryW(lpszSerialUI);
|
||||||
|
|
||||||
|
if (hConfigModule) {
|
||||||
|
pGetDefaultCommConfig = GetProcAddress(hConfigModule, "drvGetDefaultCommConfigW");
|
||||||
|
if (pGetDefaultCommConfig) {
|
||||||
|
res = pGetDefaultCommConfig(lpszName, lpCC, &dwSize);
|
||||||
|
}
|
||||||
|
FreeLibrary(hConfigModule);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res) SetLastError(res);
|
||||||
|
return (res == ERROR_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue