Use poll() on the client-side during server waits to implement
overlapped I/O.
diff --git a/server/serial.c b/server/serial.c
index 953be97..738bcbc 100644
--- a/server/serial.c
+++ b/server/serial.c
@@ -173,76 +173,25 @@
return 1;
}
-/* these functions are for interaction with asynchronous i/o objects */
-int serial_async_setup(struct object *obj, struct async *ov)
+/* these function calculates the timeout for an async operation
+ on a serial port */
+int get_serial_async_timeout(struct object *obj, int type, int count)
{
struct serial *serial = (struct serial *)obj;
- int timeout;
if(obj->ops != &serial_ops)
return 0;
- switch(async_type(ov))
+ switch(type)
{
case ASYNC_TYPE_READ:
- timeout = serial->readconst + serial->readmult*async_count(ov);
- async_add_timeout(ov, timeout);
- async_set_eventmask(ov,EV_RXCHAR);
- break;
+ return serial->readconst + serial->readmult*count;
case ASYNC_TYPE_WRITE:
- timeout = serial->writeconst + serial->writemult*async_count(ov);
- async_add_timeout(ov, timeout);
- async_set_eventmask(ov,EV_TXEMPTY);
- break;
- case ASYNC_TYPE_WAIT:
- async_set_eventmask(ov,serial->eventmask);
- break;
+ return serial->writeconst + serial->writemult*count;
}
-
- return 1;
+ return 0;
}
-int serial_async_get_poll_events( struct async *ov )
-{
- int events=0,mask;
-
- switch(async_type(ov))
- {
- case ASYNC_TYPE_READ:
- events |= POLLIN;
- break;
- case ASYNC_TYPE_WRITE:
- events |= POLLOUT;
- break;
- case ASYNC_TYPE_WAIT:
- /*
- * FIXME: here is the spot to implement other WaitCommEvent flags
- */
- mask = async_get_eventmask(ov);
- if(mask&EV_RXCHAR)
- events |= POLLIN;
- /* if(mask&EV_TXEMPTY)
- events |= POLLOUT; */
- break;
- }
- return events;
-}
-
-/* receive a select event, and output a windows event */
-int serial_async_poll_event(struct object *obj, int event)
-{
- int r=0;
-
- /*
- * FIXME: here is the spot to implement other WaitCommEvent flags
- */
- if(event & POLLIN)
- r |= EV_RXCHAR;
- if(event & POLLOUT)
- r |= EV_TXEMPTY;
-
- return r;
-}
/* create a serial */
DECL_HANDLER(create_serial)