Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
654fcc72
Commit
654fcc72
authored
Sep 16, 2000
by
Mike McCormack
Committed by
Alexandre Julliard
Sep 16, 2000
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented SetCommMask, SetCommTimeouts, GetCommMask, GetCommTimeouts.
parent
007fb240
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
202 additions
and
54 deletions
+202
-54
server.h
include/server.h
+35
-1
comm.c
misc/comm.c
+73
-53
request.h
server/request.h
+4
-0
serial.c
server/serial.c
+55
-0
trace.c
server/trace.c
+35
-0
No files found.
include/server.h
View file @
654fcc72
...
...
@@ -1322,6 +1322,36 @@ struct create_serial_request
IN
char
name
[
1
];
/* file name */
};
struct
get_serial_info_request
{
REQUEST_HEADER
;
/* request header */
IN
int
handle
;
/* handle to comm port */
OUT
unsigned
int
readinterval
;
OUT
unsigned
int
readconst
;
OUT
unsigned
int
readmult
;
OUT
unsigned
int
writeconst
;
OUT
unsigned
int
writemult
;
OUT
unsigned
int
eventmask
;
OUT
unsigned
int
commerror
;
};
struct
set_serial_info_request
{
REQUEST_HEADER
;
/* request header */
IN
int
handle
;
/* handle to comm port */
IN
int
flags
;
/* bitmask to set values (see below) */
IN
unsigned
int
readinterval
;
IN
unsigned
int
readconst
;
IN
unsigned
int
readmult
;
IN
unsigned
int
writeconst
;
IN
unsigned
int
writemult
;
IN
unsigned
int
eventmask
;
IN
unsigned
int
commerror
;
};
#define SERIALINFO_SET_TIMEOUTS 0x01
#define SERIALINFO_SET_MASK 0x02
#define SERIALINFO_SET_ERROR 0x04
/* Everything below this line is generated automatically by tools/make_requests */
/* ### make_requests begin ### */
...
...
@@ -1435,6 +1465,8 @@ enum request
REQ_WAKE_QUEUE
,
REQ_WAIT_INPUT_IDLE
,
REQ_CREATE_SERIAL
,
REQ_GET_SERIAL_INFO
,
REQ_SET_SERIAL_INFO
,
REQ_NB_REQUESTS
};
...
...
@@ -1550,9 +1582,11 @@ union generic_request
struct
wake_queue_request
wake_queue
;
struct
wait_input_idle_request
wait_input_idle
;
struct
create_serial_request
create_serial
;
struct
get_serial_info_request
get_serial_info
;
struct
set_serial_info_request
set_serial_info
;
};
#define SERVER_PROTOCOL_VERSION 2
1
#define SERVER_PROTOCOL_VERSION 2
2
/* ### make_requests end ### */
/* Everything above this line is generated automatically by tools/make_requests */
...
...
misc/comm.c
View file @
654fcc72
...
...
@@ -1906,26 +1906,17 @@ BOOL WINAPI SetupComm( HANDLE handle, DWORD insize, DWORD outsize)
*/
BOOL
WINAPI
GetCommMask
(
HANDLE
handle
,
LPDWORD
evtmask
)
{
int
fd
;
struct
get_serial_info_request
*
req
=
get_req_buffer
()
;
TRACE
(
"handle %d, mask %p
\n
"
,
handle
,
evtmask
);
if
(
0
>
(
fd
=
COMM_GetReadFd
(
handle
)))
{
FIXME
(
"no handle %d found
\n
"
,
handle
);
req
->
handle
=
handle
;
if
(
server_call
(
REQ_GET_SERIAL_INFO
))
return
FALSE
;
}
close
(
fd
);
*
evtmask
=
eventmask
;
TRACE
(
"%s%s%s%s%s%s%s%s%s
\n
"
,
(
eventmask
&
EV_BREAK
)
?
"EV_BREAK"
:
""
,
(
eventmask
&
EV_CTS
)
?
"EV_CTS"
:
""
,
(
eventmask
&
EV_DSR
)
?
"EV_DSR"
:
""
,
(
eventmask
&
EV_ERR
)
?
"EV_ERR"
:
""
,
(
eventmask
&
EV_RING
)
?
"EV_RING"
:
""
,
(
eventmask
&
EV_RLSD
)
?
"EV_RLSD"
:
""
,
(
eventmask
&
EV_RXCHAR
)
?
"EV_RXCHAR"
:
""
,
(
eventmask
&
EV_RXFLAG
)
?
"EV_RXFLAG"
:
""
,
(
eventmask
&
EV_TXEMPTY
)
?
"EV_TXEMPTY"
:
""
);
if
(
evtmask
)
*
evtmask
=
req
->
eventmask
;
return
TRUE
;
}
...
...
@@ -1935,26 +1926,17 @@ BOOL WINAPI GetCommMask(HANDLE handle,LPDWORD evtmask)
*/
BOOL
WINAPI
SetCommMask
(
HANDLE
handle
,
DWORD
evtmask
)
{
int
fd
;
struct
set_serial_info_request
*
req
=
get_req_buffer
()
;
TRACE
(
"handle %d, mask %lx
\n
"
,
handle
,
evtmask
);
TRACE
(
"%s%s%s%s%s%s%s%s%s
\n
"
,
(
evtmask
&
EV_BREAK
)
?
"EV_BREAK"
:
""
,
(
evtmask
&
EV_CTS
)
?
"EV_CTS"
:
""
,
(
evtmask
&
EV_DSR
)
?
"EV_DSR"
:
""
,
(
evtmask
&
EV_ERR
)
?
"EV_ERR"
:
""
,
(
evtmask
&
EV_RING
)
?
"EV_RING"
:
""
,
(
evtmask
&
EV_RLSD
)
?
"EV_RLSD"
:
""
,
(
evtmask
&
EV_RXCHAR
)
?
"EV_RXCHAR"
:
""
,
(
evtmask
&
EV_RXFLAG
)
?
"EV_RXFLAG"
:
""
,
(
evtmask
&
EV_TXEMPTY
)
?
"EV_TXEMPTY"
:
""
);
if
(
0
>
(
fd
=
COMM_GetWriteFd
(
handle
)))
{
FIXME
(
"no handle %d found
\n
"
,
handle
);
req
->
handle
=
handle
;
req
->
flags
=
SERIALINFO_SET_MASK
;
req
->
eventmask
=
evtmask
;
if
(
server_call
(
REQ_SET_SERIAL_INFO
))
return
FALSE
;
}
close
(
fd
);
eventmask
=
evtmask
;
return
TRUE
;
}
...
...
@@ -2461,41 +2443,78 @@ BOOL WINAPI TransmitCommChar(HANDLE hComm,CHAR chTransmit)
/*****************************************************************************
* GetCommTimeouts (KERNEL32.160)
*/
BOOL
WINAPI
GetCommTimeouts
(
HANDLE
h
co
m
,
LPCOMMTIMEOUTS
lptimeouts
)
BOOL
WINAPI
GetCommTimeouts
(
HANDLE
h
Com
m
,
LPCOMMTIMEOUTS
lptimeouts
)
{
FIXME
(
"(%x,%p):stub.
\n
"
,
hcom
,
lptimeouts
);
struct
get_serial_info_request
*
req
=
get_req_buffer
();
TRACE
(
"(%x,%p)
\n
"
,
hComm
,
lptimeouts
);
if
(
!
lptimeouts
)
{
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
FALSE
;
}
req
->
handle
=
hComm
;
if
(
server_call
(
REQ_GET_SERIAL_INFO
))
return
FALSE
;
lptimeouts
->
ReadIntervalTimeout
=
req
->
readinterval
;
lptimeouts
->
ReadTotalTimeoutMultiplier
=
req
->
readmult
;
lptimeouts
->
ReadTotalTimeoutConstant
=
req
->
readconst
;
lptimeouts
->
WriteTotalTimeoutMultiplier
=
req
->
writemult
;
lptimeouts
->
WriteTotalTimeoutConstant
=
req
->
writeconst
;
return
TRUE
;
}
/*****************************************************************************
* SetCommTimeouts (KERNEL32.453)
*
* Sets the timeouts used when reading and writing data to/from COMM ports.
*
* ReadIntervalTimeout
* - converted and passes to linux kernel as c_cc[VTIME]
* ReadTotalTimeoutMultiplier, ReadTotalTimeoutConstant
* - used in ReadFile to calculate GetOverlappedResult's timeout
* WriteTotalTimeoutMultiplier, WriteTotalTimeoutConstant
* - used in WriteFile to calculate GetOverlappedResult's timeout
*/
BOOL
WINAPI
SetCommTimeouts
(
HANDLE
hcom
,
LPCOMMTIMEOUTS
lptimeouts
)
{
/* struct DosDeviceStruct *ptr; */
struct
termios
tios
;
BOOL
WINAPI
SetCommTimeouts
(
HANDLE
hComm
,
/* [I] handle of COMM device */
LPCOMMTIMEOUTS
lptimeouts
/* [I] pointer to COMMTIMEOUTS structure */
)
{
struct
set_serial_info_request
*
req
=
get_req_buffer
();
int
fd
;
struct
termios
tios
;
FIXME
(
"(%x,%p):stub.
\n
"
,
hcom
,
lptimeouts
);
/*
if ((ptr = GetDeviceStruct(hcom)) == NULL) {
FIXME("no handle for cid = %0x!.\n",hcom);
return FALSE;
}
*/
TRACE
(
"(%x,%p)
\n
"
,
hComm
,
lptimeouts
);
fd
=
COMM_GetWriteFd
(
hcom
);
if
(
fd
<
0
)
{
FIXME
(
"no fd for cid = %0x!.
\n
"
,
hcom
);
if
(
!
lptimeouts
)
{
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
FALSE
;
}
req
->
handle
=
hComm
;
req
->
flags
=
SERIALINFO_SET_TIMEOUTS
;
FIXME
(
"ReadIntervalTimeout %ld
\n
"
,
lptimeouts
->
ReadIntervalTimeout
)
;
FIXME
(
"ReadTotalTimeoutMultiplier %ld
\n
"
,
lptimeouts
->
ReadTotalTimeoutMultiplier
)
;
FIXME
(
"ReadTotalTimeoutConstant %ld
\n
"
,
lptimeouts
->
ReadTotalTimeoutConstant
)
;
FIXME
(
"WriteTotalTimeoutMultiplier %ld
\n
"
,
lptimeouts
->
WriteTotalTimeoutMultiplier
)
;
FIXME
(
"WriteTotalTimeoutConstant %ld
\n
"
,
lptimeouts
->
WriteTotalTimeoutConstant
)
;
req
->
readinterval
=
lptimeouts
->
ReadIntervalTimeout
;
req
->
readmult
=
lptimeouts
->
ReadTotalTimeoutMultiplier
;
req
->
readconst
=
lptimeouts
->
ReadTotalTimeoutConstant
;
req
->
writemult
=
lptimeouts
->
WriteTotalTimeoutMultiplier
;
req
->
writeconst
=
lptimeouts
->
WriteTotalTimeoutConstant
;
if
(
server_call
(
REQ_SET_SERIAL_INFO
))
return
FALSE
;
/* FIXME: move this stuff to the server */
fd
=
COMM_GetWriteFd
(
hComm
);
if
(
fd
<
0
)
{
FIXME
(
"no fd for handle = %0x!.
\n
"
,
hComm
);
return
FALSE
;
}
if
(
-
1
==
tcgetattr
(
fd
,
&
tios
))
{
FIXME
(
"tcgetattr on fd %d failed!
\n
"
,
fd
);
...
...
@@ -2507,6 +2526,7 @@ BOOL WINAPI SetCommTimeouts(HANDLE hcom,LPCOMMTIMEOUTS lptimeouts) {
FIXME
(
"tcsetattr on fd %d failed!
\n
"
,
fd
);
return
FALSE
;
}
close
(
fd
);
return
TRUE
;
}
...
...
server/request.h
View file @
654fcc72
...
...
@@ -202,6 +202,8 @@ DECL_HANDLER(get_msg_queue);
DECL_HANDLER
(
wake_queue
);
DECL_HANDLER
(
wait_input_idle
);
DECL_HANDLER
(
create_serial
);
DECL_HANDLER
(
get_serial_info
);
DECL_HANDLER
(
set_serial_info
);
#ifdef WANT_REQUEST_HANDLERS
...
...
@@ -316,6 +318,8 @@ static const req_handler req_handlers[REQ_NB_REQUESTS] =
(
req_handler
)
req_wake_queue
,
(
req_handler
)
req_wait_input_idle
,
(
req_handler
)
req_create_serial
,
(
req_handler
)
req_get_serial_info
,
(
req_handler
)
req_set_serial_info
,
};
#endif
/* WANT_REQUEST_HANDLERS */
...
...
server/serial.c
View file @
654fcc72
...
...
@@ -196,3 +196,58 @@ DECL_HANDLER(create_serial)
}
}
DECL_HANDLER
(
get_serial_info
)
{
struct
serial
*
serial
;
if
((
serial
=
get_serial_obj
(
current
->
process
,
req
->
handle
,
0
)))
{
/* timeouts */
req
->
readinterval
=
serial
->
readinterval
;
req
->
readconst
=
serial
->
readconst
;
req
->
readmult
=
serial
->
readmult
;
req
->
writeconst
=
serial
->
writeconst
;
req
->
writemult
=
serial
->
writemult
;
/* event mask */
req
->
eventmask
=
serial
->
eventmask
;
/* comm port error status */
req
->
commerror
=
serial
->
commerror
;
release_object
(
serial
);
}
}
DECL_HANDLER
(
set_serial_info
)
{
struct
serial
*
serial
;
if
((
serial
=
get_serial_obj
(
current
->
process
,
req
->
handle
,
0
)))
{
/* timeouts */
if
(
req
->
flags
&
SERIALINFO_SET_TIMEOUTS
)
{
serial
->
readinterval
=
req
->
readinterval
;
serial
->
readconst
=
req
->
readconst
;
serial
->
readmult
=
req
->
readmult
;
serial
->
writeconst
=
req
->
writeconst
;
serial
->
writemult
=
req
->
writemult
;
}
/* event mask */
if
(
req
->
flags
&
SERIALINFO_SET_MASK
)
{
serial
->
eventmask
=
req
->
eventmask
;
}
/* comm port error status */
if
(
req
->
flags
&
SERIALINFO_SET_ERROR
)
{
serial
->
commerror
=
req
->
commerror
;
}
release_object
(
serial
);
}
}
server/trace.c
View file @
654fcc72
...
...
@@ -1431,6 +1431,35 @@ static void dump_create_serial_reply( const struct create_serial_request *req )
fprintf
(
stderr
,
" handle=%d"
,
req
->
handle
);
}
static
void
dump_get_serial_info_request
(
const
struct
get_serial_info_request
*
req
)
{
fprintf
(
stderr
,
" handle=%d"
,
req
->
handle
);
}
static
void
dump_get_serial_info_reply
(
const
struct
get_serial_info_request
*
req
)
{
fprintf
(
stderr
,
" readinterval=%08x,"
,
req
->
readinterval
);
fprintf
(
stderr
,
" readconst=%08x,"
,
req
->
readconst
);
fprintf
(
stderr
,
" readmult=%08x,"
,
req
->
readmult
);
fprintf
(
stderr
,
" writeconst=%08x,"
,
req
->
writeconst
);
fprintf
(
stderr
,
" writemult=%08x,"
,
req
->
writemult
);
fprintf
(
stderr
,
" eventmask=%08x,"
,
req
->
eventmask
);
fprintf
(
stderr
,
" commerror=%08x"
,
req
->
commerror
);
}
static
void
dump_set_serial_info_request
(
const
struct
set_serial_info_request
*
req
)
{
fprintf
(
stderr
,
" handle=%d,"
,
req
->
handle
);
fprintf
(
stderr
,
" flags=%d,"
,
req
->
flags
);
fprintf
(
stderr
,
" readinterval=%08x,"
,
req
->
readinterval
);
fprintf
(
stderr
,
" readconst=%08x,"
,
req
->
readconst
);
fprintf
(
stderr
,
" readmult=%08x,"
,
req
->
readmult
);
fprintf
(
stderr
,
" writeconst=%08x,"
,
req
->
writeconst
);
fprintf
(
stderr
,
" writemult=%08x,"
,
req
->
writemult
);
fprintf
(
stderr
,
" eventmask=%08x,"
,
req
->
eventmask
);
fprintf
(
stderr
,
" commerror=%08x"
,
req
->
commerror
);
}
static
const
dump_func
req_dumpers
[
REQ_NB_REQUESTS
]
=
{
(
dump_func
)
dump_new_process_request
,
(
dump_func
)
dump_wait_process_request
,
...
...
@@ -1540,6 +1569,8 @@ static const dump_func req_dumpers[REQ_NB_REQUESTS] = {
(
dump_func
)
dump_wake_queue_request
,
(
dump_func
)
dump_wait_input_idle_request
,
(
dump_func
)
dump_create_serial_request
,
(
dump_func
)
dump_get_serial_info_request
,
(
dump_func
)
dump_set_serial_info_request
,
};
static
const
dump_func
reply_dumpers
[
REQ_NB_REQUESTS
]
=
{
...
...
@@ -1651,6 +1682,8 @@ static const dump_func reply_dumpers[REQ_NB_REQUESTS] = {
(
dump_func
)
0
,
(
dump_func
)
dump_wait_input_idle_reply
,
(
dump_func
)
dump_create_serial_reply
,
(
dump_func
)
dump_get_serial_info_reply
,
(
dump_func
)
0
,
};
static
const
char
*
const
req_names
[
REQ_NB_REQUESTS
]
=
{
...
...
@@ -1762,6 +1795,8 @@ static const char * const req_names[REQ_NB_REQUESTS] = {
"wake_queue"
,
"wait_input_idle"
,
"create_serial"
,
"get_serial_info"
,
"set_serial_info"
,
};
/* ### make_requests end ### */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment