X-Git-Url: https://git.ao2.it/libam7xxx.git/blobdiff_plain/b0731f05fb3ddcbea19c88d628e1b539966c21fd..f4c97d762218d109201a7c8c3f712be2f489b280:/src/am7xxx.c?ds=sidebyside diff --git a/src/am7xxx.c b/src/am7xxx.c index 76df87d..84d7e9c 100644 --- a/src/am7xxx.c +++ b/src/am7xxx.c @@ -800,7 +800,7 @@ static int open_device(am7xxx_context *ctx, } if (current_configuration != (*dev)->desc->configuration) { - debug(ctx, "libusb configuration changed (expected: %hhu, current: %d\n", + debug(ctx, "libusb configuration changed (expected: %hhu, current: %d)\n", (*dev)->desc->configuration, current_configuration); ret = -EINVAL; goto out_libusb_release_interface; @@ -1093,8 +1093,7 @@ AM7XXX_PUBLIC int am7xxx_init(am7xxx_context **ctx) *ctx = malloc(sizeof(**ctx)); if (*ctx == NULL) { fatal("cannot allocate the context (%s)\n", strerror(errno)); - ret = -ENOMEM; - goto out; + return -ENOMEM; } memset(*ctx, 0, sizeof(**ctx)); @@ -1180,14 +1179,14 @@ AM7XXX_PUBLIC int am7xxx_open_device(am7xxx_context *ctx, am7xxx_device **dev, * is the first one to be sent to the device in order for it to * successfully return the correct device information. * - * So, if there is not a cached version of it (from a previous open), - * we ask for device info at open time, + * NOTE: am7xxx_get_device_info() will fetch the actual device info + * from the device only the very first time it's called for a given + * device, otherwise, it'll return a cached version of the device info + * (from a previous call to am7xxx_open_device(), for instance). */ - if ((*dev)->device_info == NULL) { - ret = am7xxx_get_device_info(*dev, NULL); - if (ret < 0) - error(ctx, "cannot get device info\n"); - } + ret = am7xxx_get_device_info(*dev, NULL); + if (ret < 0) + error(ctx, "cannot get device info\n"); out: return ret; @@ -1214,10 +1213,9 @@ AM7XXX_PUBLIC int am7xxx_get_device_info(am7xxx_device *dev, int ret; struct am7xxx_header h; - if (dev->device_info) { - memcpy(device_info, dev->device_info, sizeof(*device_info)); - return 0; - } + /* if there is a cached copy of the device info, just return that */ + if (dev->device_info) + goto return_value; ret = send_command(dev, AM7XXX_PACKET_TYPE_DEVINFO); if (ret < 0) @@ -1251,6 +1249,9 @@ AM7XXX_PUBLIC int am7xxx_get_device_info(am7xxx_device *dev, dev->device_info->unknown1 = h.header_data.devinfo.unknown1; #endif +return_value: + if (device_info) + memcpy(device_info, dev->device_info, sizeof(*device_info)); return 0; } @@ -1261,7 +1262,6 @@ AM7XXX_PUBLIC int am7xxx_calc_scaled_image_dimensions(am7xxx_device *dev, unsigned int *scaled_width, unsigned int *scaled_height) { - am7xxx_device_info device_info; float width_ratio; float height_ratio;