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=-c 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. --- 0d31e557fdefb6edaa7172a77455fc104946e5b9 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; }