diff options
| author | 1999-12-02 23:07:38 +0000 | |
|---|---|---|
| committer | 1999-12-02 23:07:38 +0000 | |
| commit | 0f5ef10baaba0890f7e9bed6545e0614b65e7884 (patch) | |
| tree | 115fc38dea3113e5937f33fba540764e0802c80b /src/eventloop.c | |
Initial revision
git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@1 53a565d1-3bb7-0310-b661-cf11e63c67ab
Diffstat (limited to 'src/eventloop.c')
| -rw-r--r-- | src/eventloop.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/eventloop.c b/src/eventloop.c new file mode 100644 index 0000000..32b053c --- /dev/null +++ b/src/eventloop.c @@ -0,0 +1,81 @@ + +#include <unistd.h> + +#include "raw1394.h" +#include "kernel-raw1394.h" +#include "raw1394_private.h" + + +int raw1394_loop_iterate(struct raw1394_handle *handle) +{ + struct raw1394_request *req = &handle->req; + int retval = 0; + + if (read(handle->fd, req, sizeof(*req)) < 0) { + return -1; + } + + switch (req->type) { + case RAW1394_REQ_BUS_RESET: + handle->generation = req->generation; + handle->num_of_nodes = req->misc & 0xffff; + handle->local_id = req->misc >> 16; + + if (handle->bus_reset_handler) { + retval = handle->bus_reset_handler(handle); + } + break; + + case RAW1394_REQ_ISO_RECEIVE: + if (handle->iso_handler) { + retval = handle->iso_handler(handle, + (handle->buffer[0] >> 8) + & 0x3f, req->length, + handle->buffer); + } + break; + + default: + if (handle->tag_handler) { + retval = handle->tag_handler(handle, req->tag, + req->error); + } + break; + } + + return retval; +} + + +bus_reset_handler_t raw1394_set_bus_reset_handler(struct raw1394_handle *handle, + bus_reset_handler_t new) +{ + bus_reset_handler_t old; + + old = handle->bus_reset_handler; + handle->bus_reset_handler = new; + + return old; +} + +tag_handler_t raw1394_set_tag_handler(struct raw1394_handle *handle, + tag_handler_t new) +{ + tag_handler_t old; + + old = handle->tag_handler; + handle->tag_handler = new; + + return old; +} + +iso_handler_t raw1394_set_iso_handler(struct raw1394_handle *handle, + iso_handler_t new) +{ + iso_handler_t old; + + old = handle->iso_handler; + handle->iso_handler = new; + + return old; +} |
