summaryrefslogtreecommitdiff
path: root/packaging
diff options
context:
space:
mode:
authorMarcus Meissner <marcus@jet.franken.de>2012-02-26 19:00:38 +0000
committerMarcus Meissner <marcus@jet.franken.de>2012-02-26 19:00:38 +0000
commite3a82c018b353e0d1d7df5cb996f706b0be6bb0f (patch)
tree1087e5f8db745e818888ad07bc3dd25df917110f /packaging
parent41055035c1fa2f1022449d61b2824417cba42e8d (diff)
downloadlibgphoto2-e3a82c018b353e0d1d7df5cb996f706b0be6bb0f.tar.gz
merged from 2.4 branch with the ubuntu udev 179 fixes
git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@13887 67ed7778-7388-44ab-90cf-0a291f65f57c
Diffstat (limited to 'packaging')
-rw-r--r--packaging/generic/print-camera-list.c43
1 files changed, 40 insertions, 3 deletions
diff --git a/packaging/generic/print-camera-list.c b/packaging/generic/print-camera-list.c
index fefea11ba..218aa3aac 100644
--- a/packaging/generic/print-camera-list.c
+++ b/packaging/generic/print-camera-list.c
@@ -369,13 +369,15 @@ idlist_camera_func (const func_params_t *params,
typedef enum {
UDEV_PRE_0_98 = 0,
UDEV_0_98 = 1,
- UDEV_136 = 2
+ UDEV_136 = 2,
+ UDEV_175 = 3
} udev_version_t;
static const StringFlagItem udev_version_t_map[] = {
{ "pre-0.98", UDEV_PRE_0_98 },
{ "0.98", UDEV_0_98 },
{ "136", UDEV_136 },
+ { "175", UDEV_175 },
{ NULL, 0 }
};
@@ -409,7 +411,22 @@ udev_parse_params (const func_params_t *params, void **data)
"ACTION!=\"add\", GOTO=\"libgphoto2_rules_end\"\n"
"SUBSYSTEM!=\"usb\", GOTO=\"libgphoto2_usb_end\"\n"
"ENV{DEVTYPE}!=\"usb_device\", GOTO=\"libgphoto2_usb_end\"\n\n"
- "ENV{ID_USB_INTERFACES}==\"\", IMPORT{program}=\"usb_id --export %%p\"\n\n"
+ "ENV{ID_USB_INTERFACES}==\"\", IMPORT{program}=\"usb_id --export %%p\"\n"
+ /* ignore mass storage class having devices in mark-up */
+ "ENV{ID_USB_INTERFACES}==\"*:08*:*\", GOTO=\"libgphoto2_usb_end\"\n"
+ /* shortcut the most common camera driver, ptp class, so we avoid parsing 1000
+ * more rules . It will be completed in udev_begin_func() */
+ "ENV{ID_USB_INTERFACES}==\"*:060101:*\", ENV{ID_GPHOTO2}=\"1\", ENV{GPHOTO2_DRIVER}=\"PTP\", ",
+ /* UDEV_175 */
+ "ACTION!=\"add\", GOTO=\"libgphoto2_rules_end\"\n"
+ "SUBSYSTEM!=\"usb\", GOTO=\"libgphoto2_usb_end\"\n"
+ "ENV{DEVTYPE}!=\"usb_device\", GOTO=\"libgphoto2_usb_end\"\n\n"
+ "ENV{ID_USB_INTERFACES}==\"\", IMPORT{builtin}=\"usb_id\"\n"
+ /* ignore mass storage class having devices in mark-up */
+ "ENV{ID_USB_INTERFACES}==\"*:08*:*\", GOTO=\"libgphoto2_usb_end\"\n"
+ /* shortcut the most common camera driver, ptp class, so we avoid parsing 1000
+ * more rules . It will be completed in udev_begin_func() */
+ "ENV{ID_USB_INTERFACES}==\"*:060101:*\", ENV{ID_GPHOTO2}=\"1\", ENV{GPHOTO2_DRIVER}=\"PTP\", "
};
static const char * const usbcam_strings[] = {
/* UDEV_PRE_0_98 */
@@ -417,6 +434,8 @@ udev_parse_params (const func_params_t *params, void **data)
/* UDEV_0_98 */
"ATTRS{idVendor}==\"%04x\", ATTRS{idProduct}==\"%04x\"",
/* UDEV_136 */
+ "ATTRS{idVendor}==\"%04x\", ATTRS{idProduct}==\"%04x\", ENV{ID_GPHOTO2}=\"1\", ENV{GPHOTO2_DRIVER}=\"proprietary\"",
+ /* UDEV_175 */
"ATTRS{idVendor}==\"%04x\", ATTRS{idProduct}==\"%04x\", ENV{ID_GPHOTO2}=\"1\", ENV{GPHOTO2_DRIVER}=\"proprietary\""
};
static const char * const usbdisk_strings[] = {
@@ -425,6 +444,8 @@ udev_parse_params (const func_params_t *params, void **data)
/* UDEV_0_98 */
"KERNEL==\"%s\", ATTRS{idVendor}==\"%04x\", ATTRS{idProduct}==\"%04x\"",
/* UDEV_136 */
+ "KERNEL==\"%s\", ATTRS{idVendor}==\"%04x\", ATTRS{idProduct}==\"%04x\", ENV{ID_GPHOTO2}=\"1\", ENV{GPHOTO2_DRIVER}=\"proprietary\"",
+ /* UDEV_175 */
"KERNEL==\"%s\", ATTRS{idVendor}==\"%04x\", ATTRS{idProduct}==\"%04x\", ENV{ID_GPHOTO2}=\"1\", ENV{GPHOTO2_DRIVER}=\"proprietary\""
};
udev_persistent_data_t *pdata;
@@ -502,6 +523,22 @@ udev_begin_func (const func_params_t *params, void **data)
print_version_comment(stdout, "# ", "\n", NULL, "#\n");
printf ("# this file is autogenerated, local changes will be LOST on upgrades\n");
printf ("%s", pdata->begin_string);
+
+ if (pdata->version == UDEV_136 || pdata->version == UDEV_175) {
+ if (pdata->mode != NULL || pdata->owner != NULL || pdata->group != NULL) {
+ if (pdata->mode != NULL) {
+ printf("MODE=\"%s\", ", pdata->mode);
+ }
+ if (pdata->owner != NULL) {
+ printf("OWNER=\"%s\", ", pdata->owner);
+ }
+ if (pdata->group != NULL) {
+ printf("GROUP=\"%s\", ", pdata->group);
+ }
+ }
+
+ printf ("GOTO=\"libgphoto2_usb_end\"\n\n");
+ }
}
return 0;
}
@@ -578,7 +615,7 @@ udev_camera_func (const func_params_t *params,
if (flags & GP_USB_HOTPLUG_MATCH_INT_CLASS) {
if ((flags & (GP_USB_HOTPLUG_MATCH_INT_CLASS|GP_USB_HOTPLUG_MATCH_INT_SUBCLASS|GP_USB_HOTPLUG_MATCH_INT_PROTOCOL)) == (GP_USB_HOTPLUG_MATCH_INT_CLASS|GP_USB_HOTPLUG_MATCH_INT_SUBCLASS|GP_USB_HOTPLUG_MATCH_INT_PROTOCOL)) {
- if (pdata->version == UDEV_136) {
+ if (pdata->version == UDEV_136 || pdata->version == UDEV_175) {
printf("ENV{ID_USB_INTERFACES}==\"*:%02d%02d%02d:*\", ENV{ID_GPHOTO2}=\"1\", ENV{GPHOTO2_DRIVER}=\"PTP\"", class, subclass, proto);
} else {
printf("PROGRAM=\"check-ptp-camera %02d/%02d/%02d\"", class, subclass, proto);