contrib: add a HOWTO for new users
[libam7xxx.git] / src / am7xxx.c
index 76df87d..84d7e9c 100644 (file)
@@ -800,7 +800,7 @@ static int open_device(am7xxx_context *ctx,
        }
 
        if (current_configuration != (*dev)->desc->configuration) {
        }
 
        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;
                      (*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));
        *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));
 
        }
        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.
         *
         * 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;
 
 out:
        return ret;
@@ -1214,10 +1213,9 @@ AM7XXX_PUBLIC int am7xxx_get_device_info(am7xxx_device *dev,
        int ret;
        struct am7xxx_header h;
 
        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)
 
        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
 
        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;
 }
 
        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)
 {
                                        unsigned int *scaled_width,
                                        unsigned int *scaled_height)
 {
-
        am7xxx_device_info device_info;
        float width_ratio;
        float height_ratio;
        am7xxx_device_info device_info;
        float width_ratio;
        float height_ratio;