From: Antonio Ospite Date: Fri, 7 Dec 2012 10:59:32 +0000 (+0100) Subject: am7xxx: make libam7xxx work with Philips/Sagemcom PPX projectors X-Git-Tag: v0.1.3~6^2 X-Git-Url: https://git.ao2.it/libam7xxx.git/commitdiff_plain/0d31e557fdefb6edaa7172a77455fc104946e5b9?ds=sidebyside;hp=55ed26c219ebf43143f7d2554aed884535866f91 am7xxx: make libam7xxx work with Philips/Sagemcom PPX projectors Philips/Sagemcom PicoPix projectors require that the DEVINFO packet is the first one to be sent to the device in order for it to successfully return the correct device information. Call am7xxx_get_device_info() from am7xxx_open_device() to fulfill the requirement from above. The device info will be cached by am7xxx_get_device_info() and further calls to the latter will return the correct data too. --- diff --git a/src/am7xxx.c b/src/am7xxx.c index 632136a..96fd2b9 100644 --- a/src/am7xxx.c +++ b/src/am7xxx.c @@ -703,12 +703,28 @@ AM7XXX_PUBLIC int am7xxx_open_device(am7xxx_context *ctx, am7xxx_device **dev, ret = scan_devices(ctx, SCAN_OP_OPEN_DEVICE, device_index, dev); if (ret < 0) { errno = ENODEV; + goto out; } else if (ret > 0) { warning(ctx, "device %d already open\n", device_index); errno = EBUSY; ret = -EBUSY; + goto out; } + /* Philips/Sagemcom PicoPix projectors require that the DEVINFO packet + * 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, + */ + if ((*dev)->device_info == NULL) { + ret = am7xxx_get_device_info(*dev, NULL); + if (ret < 0) + error(ctx, "cannot get device info\n"); + } + +out: return ret; }