From 77b5dab04b1305ba1e65eb7459349f99f36eba73 Mon Sep 17 00:00:00 2001 From: Daniel Drake Date: Fri, 15 Feb 2008 18:06:24 +0000 Subject: [PATCH] aeslib: introduce user_data for write registers callback aes2501 needs this for state tracking --- libfprint/aeslib.c | 12 +++++++----- libfprint/aeslib.h | 5 +++-- libfprint/drivers/aes4000.c | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/libfprint/aeslib.c b/libfprint/aeslib.c index bf9d0f2..4c797c3 100644 --- a/libfprint/aeslib.c +++ b/libfprint/aeslib.c @@ -39,6 +39,7 @@ struct write_regv_data { const struct aes_regwrite *regs; unsigned int offset; aes_write_regv_cb callback; + void *user_data; }; static void continue_write_regv(struct write_regv_data *wdata); @@ -56,9 +57,9 @@ static void write_regv_trf_complete(libusb_dev_handle *devh, libusb_urb_handle_free(urbh); if (status != FP_URB_COMPLETED) - wdata->callback(wdata->imgdev, -EIO); + wdata->callback(wdata->imgdev, -EIO, wdata->user_data); else if (rqlength != actual_length) - wdata->callback(wdata->imgdev, -EPROTO); + wdata->callback(wdata->imgdev, -EPROTO, wdata->user_data); else continue_write_regv(wdata); } @@ -110,7 +111,7 @@ static void continue_write_regv(struct write_regv_data *wdata) while (TRUE) { if (offset >= wdata->num_regs) { fp_dbg("all registers written"); - wdata->callback(wdata->imgdev, 0); + wdata->callback(wdata->imgdev, 0, wdata->user_data); return; } if (wdata->regs[offset].reg) @@ -133,7 +134,7 @@ static void continue_write_regv(struct write_regv_data *wdata) r = do_write_regv(wdata, upper_bound); if (r < 0) { - wdata->callback(wdata->imgdev, r); + wdata->callback(wdata->imgdev, r, wdata->user_data); return; } @@ -144,7 +145,7 @@ static void continue_write_regv(struct write_regv_data *wdata) * single URB up to a limit. insert writes to non-existent register 0 to force * specific groups of writes to be separated by different URBs. */ void aes_write_regv(struct fp_img_dev *dev, const struct aes_regwrite *regs, - unsigned int num_regs, aes_write_regv_cb callback) + unsigned int num_regs, aes_write_regv_cb callback, void *user_data) { struct write_regv_data *wdata = g_malloc(sizeof(*wdata)); fp_dbg("write %d regs", num_regs); @@ -153,6 +154,7 @@ void aes_write_regv(struct fp_img_dev *dev, const struct aes_regwrite *regs, wdata->regs = regs; wdata->offset = 0; wdata->callback = callback; + wdata->user_data = user_data; continue_write_regv(wdata); } diff --git a/libfprint/aeslib.h b/libfprint/aeslib.h index e42d1e8..3c65dae 100644 --- a/libfprint/aeslib.h +++ b/libfprint/aeslib.h @@ -27,10 +27,11 @@ struct aes_regwrite { unsigned char value; }; -typedef void (*aes_write_regv_cb)(struct fp_img_dev *dev, int result); +typedef void (*aes_write_regv_cb)(struct fp_img_dev *dev, int result, + void *user_data); void aes_write_regv(struct fp_img_dev *dev, const struct aes_regwrite *regs, - unsigned int num_regs, aes_write_regv_cb callback); + unsigned int num_regs, aes_write_regv_cb callback, void *user_data); void aes_assemble_image(unsigned char *input, size_t width, size_t height, unsigned char *output); diff --git a/libfprint/drivers/aes4000.c b/libfprint/drivers/aes4000.c index 3b9130e..cc838e7 100644 --- a/libfprint/drivers/aes4000.c +++ b/libfprint/drivers/aes4000.c @@ -177,7 +177,7 @@ static void do_capture(struct fp_img_dev *dev) } } -static void init_reqs_cb(struct fp_img_dev *dev, int result) +static void init_reqs_cb(struct fp_img_dev *dev, int result, void *user_data) { fpi_imgdev_activate_complete(dev, result); if (result == 0) @@ -186,7 +186,7 @@ static void init_reqs_cb(struct fp_img_dev *dev, int result) static int dev_activate(struct fp_img_dev *dev, enum fp_imgdev_state state) { - aes_write_regv(dev, init_reqs, G_N_ELEMENTS(init_reqs), init_reqs_cb); + aes_write_regv(dev, init_reqs, G_N_ELEMENTS(init_reqs), init_reqs_cb, NULL); return 0; }