summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipecamera/image.c9
-rw-r--r--ipecamera/image.h2
-rw-r--r--pci.c4
-rw-r--r--pcilib.h4
4 files changed, 12 insertions, 7 deletions
diff --git a/ipecamera/image.c b/ipecamera/image.c
index 3e320cd..5d2021c 100644
--- a/ipecamera/image.c
+++ b/ipecamera/image.c
@@ -532,7 +532,7 @@ static int ipecamera_resolve_event_id(ipecamera_t *ctx, pcilib_event_id_t evid)
return buf_ptr;
}
-pcilib_event_id_t ipecamera_next_event(void *vctx, pcilib_event_t event_mask) {
+pcilib_event_id_t ipecamera_next_event(void *vctx, pcilib_event_t event_mask, const struct timespec *timeout) {
int buf_ptr;
pcilib_event_id_t reported;
ipecamera_t *ctx = (ipecamera_t*)vctx;
@@ -547,7 +547,12 @@ pcilib_event_id_t ipecamera_next_event(void *vctx, pcilib_event_t event_mask) {
return PCILIB_EVENT_ID_INVALID;
}
- if ((!ctx->event_id)||(ctx->reported_id == ctx->event_id)) return PCILIB_EVENT_ID_INVALID;
+ if ((!ctx->event_id)||(ctx->reported_id == ctx->event_id)) {
+ if (timeout) {
+ // We should wait here for the specified timeout
+ }
+ return PCILIB_EVENT_ID_INVALID;
+ }
// We had an overflow in event counting
if (ctx->reported_id > ctx->event_id) {
diff --git a/ipecamera/image.h b/ipecamera/image.h
index 513449f..245e450 100644
--- a/ipecamera/image.h
+++ b/ipecamera/image.h
@@ -13,7 +13,7 @@ int ipecamera_reset(void *ctx);
int ipecamera_start(void *ctx, pcilib_event_t event_mask, pcilib_callback_t cb, void *user);
int ipecamera_stop(void *ctx);
int ipecamera_trigger(void *ctx, pcilib_event_t event, size_t trigger_size, void *trigger_data);
-pcilib_event_id_t ipecamera_next_event(void *ctx, pcilib_event_t event_mask);
+pcilib_event_id_t ipecamera_next_event(void *ctx, pcilib_event_t event_mask, const struct timespec *timeout);
void* ipecamera_get(void *ctx, pcilib_event_id_t event_id, pcilib_event_data_type_t data_type, size_t arg_size, void *arg, size_t *size);
int ipecamera_return(void *ctx, pcilib_event_id_t event_id);
diff --git a/pci.c b/pci.c
index df1025e..cafdf95 100644
--- a/pci.c
+++ b/pci.c
@@ -688,7 +688,7 @@ int pcilib_stop(pcilib_t *ctx) {
return 0;
}
-pcilib_event_id_t pcilib_get_next_event(pcilib_t *ctx, pcilib_event_t event_mask) {
+pcilib_event_id_t pcilib_get_next_event(pcilib_t *ctx, pcilib_event_t event_mask, const struct timespec *timeout) {
pcilib_event_api_description_t *api;
pcilib_model_t model = pcilib_get_model(ctx);
@@ -700,7 +700,7 @@ pcilib_event_id_t pcilib_get_next_event(pcilib_t *ctx, pcilib_event_t event_mask
}
if (api->next_event)
- return api->next_event(ctx->event_ctx, event_mask);
+ return api->next_event(ctx->event_ctx, event_mask, timeout);
pcilib_error("Event enumeration is not suppored by API");
return PCILIB_EVENT_ID_INVALID;
diff --git a/pcilib.h b/pcilib.h
index 360b9a0..9729aa1 100644
--- a/pcilib.h
+++ b/pcilib.h
@@ -134,7 +134,7 @@ typedef struct {
int (*stop)(void *ctx);
int (*trigger)(void *ctx, pcilib_event_t event, size_t trigger_size, void *trigger_data);
- pcilib_event_id_t (*next_event)(void *ctx, pcilib_event_t event_mask);
+ pcilib_event_id_t (*next_event)(void *ctx, pcilib_event_t event_mask, const struct timespec *timeout);
void* (*get_data)(void *ctx, pcilib_event_id_t event_id, pcilib_event_data_type_t data_type, size_t arg_size, void *arg, size_t *size);
int (*return_data)(void *ctx, pcilib_event_id_t event_id);
} pcilib_event_api_description_t;
@@ -188,7 +188,7 @@ int pcilib_stop(pcilib_t *ctx);
int pcilib_trigger(pcilib_t *ctx, pcilib_event_t event, size_t trigger_size, void *trigger_data);
-pcilib_event_id_t pcilib_get_next_event(pcilib_t *ctx, pcilib_event_t event_mask);
+pcilib_event_id_t pcilib_get_next_event(pcilib_t *ctx, pcilib_event_t event_mask, const struct timespec *timeout);
void *pcilib_get_data(pcilib_t *ctx, pcilib_event_id_t event_id, pcilib_event_data_type_t data_type, size_t *size);
void *pcilib_get_data_with_argument(pcilib_t *ctx, pcilib_event_id_t event_id, pcilib_event_data_type_t data_type, size_t arg_size, void *arg, size_t *size);
/*