#define debug(ctx, ...) log_message(ctx, AM7XXX_LOG_DEBUG, __func__, 0, __VA_ARGS__)
#define trace(ctx, ...) log_message(ctx, AM7XXX_LOG_TRACE, NULL, 0, __VA_ARGS__)
+#define AM7XXX_QUIRK_NO_POWER_MODE (1 << 0)
+#define AM7XXX_QUIRK_NO_ZOOM_MODE (1 << 1)
+
struct am7xxx_usb_device_descriptor {
const char *name;
uint16_t vendor_id;
uint16_t product_id;
uint8_t configuration; /* The bConfigurationValue of the device */
uint8_t interface_number; /* The bInterfaceNumber of the device */
+ unsigned long quirks;
};
-static struct am7xxx_usb_device_descriptor supported_devices[] = {
+static const struct am7xxx_usb_device_descriptor supported_devices[] = {
{
.name = "Acer C110",
.vendor_id = 0x1de1,
.configuration = 2,
.interface_number = 0,
},
+ {
+ .name = "Philips/Sagemcom PicoPix 2330",
+ .vendor_id = 0x21e7,
+ .product_id = 0x0019,
+ .configuration = 1,
+ .interface_number = 0,
+ .quirks = AM7XXX_QUIRK_NO_POWER_MODE | AM7XXX_QUIRK_NO_ZOOM_MODE,
+ },
};
/* The header size on the wire is known to be always 24 bytes, regardless of
if (ret < 0)
goto out_free_context;
- libusb_set_debug((*ctx)->usb_context, 3);
+ libusb_set_debug((*ctx)->usb_context, LIBUSB_LOG_LEVEL_INFO);
ret = scan_devices(*ctx, SCAN_OP_BUILD_DEVLIST , 0, NULL);
if (ret < 0) {
.unknown3 = 0x10,
};
+ if (dev->desc->quirks & AM7XXX_QUIRK_NO_POWER_MODE) {
+ debug(dev->ctx,
+ "setting power mode is unsupported on this device\n");
+ return 0;
+ }
+
switch(power) {
case AM7XXX_POWER_OFF:
h.header_data.power.bit2 = 0;
.unknown3 = 0x10,
};
+ if (dev->desc->quirks & AM7XXX_QUIRK_NO_ZOOM_MODE) {
+ debug(dev->ctx,
+ "setting zoom mode is unsupported on this device\n");
+ return 0;
+ }
+
switch(zoom) {
case AM7XXX_ZOOM_ORIGINAL:
h.header_data.zoom.bit1 = 0;