summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Meissner <marcus@jet.franken.de>2006-12-11 05:25:46 +0000
committerMarcus Meissner <marcus@jet.franken.de>2006-12-11 05:25:46 +0000
commit4f50024a2708bc95e19817a4e484cd1a5bdfab55 (patch)
treea72f4183ba818c46f46101b0c2200c6b19ccda92
parent63fda59790346947e30298740016760eaa38e5cb (diff)
downloadlibgphoto2-4f50024a2708bc95e19817a4e484cd1a5bdfab55.tar.gz
added check_ptp_camera helper script,
and use it in the UDEV rules. git-svn-id: https://svn.code.sf.net/p/gphoto/code/branches/libgphoto2-2_3/libgphoto2@9563 67ed7778-7388-44ab-90cf-0a291f65f57c
-rw-r--r--packaging/generic/Makefile.am1
-rw-r--r--packaging/generic/check_ptp_camera20
-rw-r--r--packaging/generic/print-camera-list.c20
3 files changed, 35 insertions, 6 deletions
diff --git a/packaging/generic/Makefile.am b/packaging/generic/Makefile.am
index 5c9f855b8..3ebabca6d 100644
--- a/packaging/generic/Makefile.am
+++ b/packaging/generic/Makefile.am
@@ -1,4 +1,5 @@
utils_PROGRAMS = print-camera-list
+EXTRA_DIST = check_ptp_camera
print_camera_list_SOURCE = print-camera-list.c
print_camera_list_LDADD = \
diff --git a/packaging/generic/check_ptp_camera b/packaging/generic/check_ptp_camera
new file mode 100644
index 000000000..f309ed851
--- /dev/null
+++ b/packaging/generic/check_ptp_camera
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# check if any interface of this device is a PTP camera interface (06)
+INTERFACE="${1:-06/01/01}"
+
+BASENAME=${PHYSDEVPATH##*/}
+for d in /sys/${PHYSDEVPATH}/${BASENAME}:*; do
+ [[ -d ${d} ]] || continue
+ INTERFACEID="$(< ${d}/bInterfaceClass)"
+ INTERFACEID="${INTERFACEID}/$(< ${d}/bInterfaceSubClass)"
+ INTERFACEID="${INTERFACEID}/$(< ${d}/bInterfaceProtocol)"
+
+ #echo ${d}: ${INTERFACEID}
+ if [[ ${INTERFACE} == ${INTERFACEID} ]]; then
+ # Found interface
+ exit 0
+ fi
+done
+
+exit 1
diff --git a/packaging/generic/print-camera-list.c b/packaging/generic/print-camera-list.c
index 8d6c4f87e..2ac262806 100644
--- a/packaging/generic/print-camera-list.c
+++ b/packaging/generic/print-camera-list.c
@@ -284,7 +284,11 @@ static int
udev_begin_func (const func_params_t *params)
{
printf ("# udev rules file for libgphoto2 devices (udev < 0.98)\n#\n");
- printf ("BUS!=\"usb\", ACTION!=\"add\", GOTO=\"libgphoto2_rules_end\"\n\n");
+ /* Note: 2 lines because we need to use || ... having them on the same
+ * line would mean &&.
+ */
+ printf ("BUS!=\"usb*\", GOTO=\"libgphoto2_rules_end\"\n");
+ printf ("ACTION!=\"add\", GOTO=\"libgphoto2_rules_end\"\n\n");
return 0;
}
@@ -292,7 +296,11 @@ static int
udev_098_begin_func (const func_params_t *params)
{
printf ("# udev rules file for libgphoto2 devices (udev >= 0.98)\n#\n");
- printf ("SUBSYSTEMS!=\"usb\", ACTION!=\"add\", GOTO=\"libgphoto2_rules_end\"\n\n");
+ /* Note: 2 lines because we need to use || ... having them on the same
+ * line would mean &&.
+ */
+ printf ("SUBSYSTEM!=\"usb*\", GOTO=\"libgphoto2_rules_end\"\n");
+ printf ("ACTION!=\"add\", GOTO=\"libgphoto2_rules_end\"\n\n");
return 0;
}
@@ -352,7 +360,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))
- printf("ENV{INTERFACE}==\"%d/%d/%d\", ", class, subclass, proto);
+ printf("PROGRAM=\"check_ptp_camera %02d/%02d/%02d\", ", class, subclass, proto);
else
fprintf(stderr,"unhandled interface match flags %x\n", flags);
} else {
@@ -459,7 +467,7 @@ udev_098_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))
- printf("ENV{INTERFACE}==\"%d/%d/%d\", ", class, subclass, proto);
+ printf("PROGRAM=\"check_ptp_camera %02d/%02d/%02d\", ", class, subclass, proto);
else
fprintf(stderr,"unhandled interface match flags %x\n", flags);
} else {
@@ -1022,7 +1030,7 @@ static const output_format_t formats[] = {
},
{name: "udev-rules",
descr: "udev < 0.98 rules file",
- help: "Put it into /etc/udev/libgphoto2.rules, set file mode, owner, group or add script to run",
+ help: "Put it into /etc/udev/rules.d/90-libgphoto2.rules, set file mode, owner, group\n or add script to run. This rule files also uses the\n check_ptp_camera script included in libgphoto2 source. Either put it to\n /lib/udev/check_ptp_camera or adjust the path in the generated rules file.",
paramdescr: "( <PATH_TO_SCRIPT> | [mode <mode>|owner <owner>|group <group>]* ) ",
begin_func: udev_begin_func,
camera_func: udev_camera_func,
@@ -1030,7 +1038,7 @@ static const output_format_t formats[] = {
},
{name: "udev-rules-0.98",
descr: "udev >= 0.98 rules file",
- help: "Put it into /etc/udev/libgphoto2.rules, set file mode, owner, group or add script to run, for udev >= 0.98",
+ help: "Put it into /etc/udev/rules.d/90-libgphoto2.rules, set file mode, owner, group\n or add script to run, for udev >= 0.98. This rule files also uses the\n check_ptp_camera script included in libgphoto2 source. Either put it to\n /lib/udev/check_ptp_camera or adjust the path in the generated rules file.",
paramdescr: "( <PATH_TO_SCRIPT> | [mode <mode>|owner <owner>|group <group>]* ) ",
begin_func: udev_098_begin_func,
camera_func: udev_098_camera_func,