From 4f50024a2708bc95e19817a4e484cd1a5bdfab55 Mon Sep 17 00:00:00 2001 From: Marcus Meissner Date: Mon, 11 Dec 2006 05:25:46 +0000 Subject: 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 --- packaging/generic/Makefile.am | 1 + packaging/generic/check_ptp_camera | 20 ++++++++++++++++++++ packaging/generic/print-camera-list.c | 20 ++++++++++++++------ 3 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 packaging/generic/check_ptp_camera 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: "( | [mode |owner |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: "( | [mode |owner |group ]* ) ", begin_func: udev_098_begin_func, camera_func: udev_098_camera_func, -- cgit v1.2.1