diff --git a/.gitignore b/.gitignore index fc71eb1..146d9d6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1 @@ /iguanaIR-1.0.3.tar.bz2 -/iguanaIR-1.1.0.tar.bz2 -clog -/iguanaIR-1.0.5.tar.bz2 -/iguanaIR-1.1.0-5.fc22.src.rpm -bak -/iguanair-lirc-e23b9d3.tar.gz -/iguanaIR-1.1.0.tar.gz diff --git a/0001-Remove-trailing-whitespace.patch b/0001-Remove-trailing-whitespace.patch new file mode 100644 index 0000000..09fd357 --- /dev/null +++ b/0001-Remove-trailing-whitespace.patch @@ -0,0 +1,275 @@ +From 93d9206499bab837dccb5d864a875829c3dc057c Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Tue, 25 Dec 2012 11:44:48 +0100 +Subject: [PATCH 1/8] Remove trailing whitespace. + +It makes the patches harder to read. +--- + Makefile.in | 2 +- + client-interface.c | 2 +- + client.c | 8 ++++---- + dataPackets.c | 2 +- + device-interface.c | 10 +++++----- + drivers/libusb.c | 6 +++--- + drivers/libusbpre1.c | 6 +++--- + iguanaIR.h | 2 +- + osx/daemonosx.c | 4 ++-- + server.h | 4 ++-- + udev/iguanaIR.rules | 2 +- + 11 files changed, 24 insertions(+), 24 deletions(-) + +diff --git a/Makefile.in b/Makefile.in +index 71f59cf..e62b6fa 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -187,7 +187,7 @@ endif + .PHONY: dist devel-cleaner + dist: configure + devel-clean: distclean +- rm -rf autoconf/autom4te.cache autoconf/aclocal.m4 ++ rm -rf autoconf/autom4te.cache autoconf/aclocal.m4 + + # rules to rebuild the configure script + M4S=$(filter-out $(srcdir)/autoconf/aclocal.m4, $(wildcard $(srcdir)/autoconf/*.m4)) +diff --git a/client-interface.c b/client-interface.c +index 6c45e0d..6052206 100644 +--- a/client-interface.c ++++ b/client-interface.c +@@ -80,7 +80,7 @@ static int pulsesToIguanaSend(int carrier, + fprintf(stderr, "%5d ", sendCode[x] & IG_PULSE_MASK); + #endif + +- cycles = (uint32_t)((sendCode[x] & IG_PULSE_MASK) / ++ cycles = (uint32_t)((sendCode[x] & IG_PULSE_MASK) / + 1000000.0 * carrier + 0.5); + numBytes = (cycles / MAX_DATA_BYTE) + 1; + cycles %= MAX_DATA_BYTE; +diff --git a/client.c b/client.c +index 13d0053..af0b30e 100644 +--- a/client.c ++++ b/client.c +@@ -162,7 +162,7 @@ bool parseNumber(const char *text, unsigned int *value) + retval = false; + break; + } +- else ++ else + *value = (*value << 1) + text[x] - '0'; + } + else +@@ -432,7 +432,7 @@ static bool handleInternalTask(igtask *cmd, PIPE_PTR conn) + else if ((cmd->spec->code & INTERNAL_SETCONFIG) == INTERNAL_SETCONFIG) + { + setSetting(cmd->spec->bit, cmd->arg, pinState); +- message(LOG_NORMAL, "%s: success\n", cmd->command); ++ message(LOG_NORMAL, "%s: success\n", cmd->command); + retval = true; + } + else +@@ -451,7 +451,7 @@ static bool performTask(PIPE_PTR conn, igtask *cmd) + { + int result = 0; + void *data = NULL; +- ++ + switch(cmd->spec->code) + { + case IG_DEV_RECVON: +@@ -593,7 +593,7 @@ static bool performTask(PIPE_PTR conn, igtask *cmd) + b[3] = (c & 0x0F) << 4 | 0x0C; + } + ((unsigned char*)data)[0] = (unsigned char)(x * 4); +- ++ + break; + } + } +diff --git a/dataPackets.c b/dataPackets.c +index f7900e2..a57574d 100644 +--- a/dataPackets.c ++++ b/dataPackets.c +@@ -75,7 +75,7 @@ bool readDataPacket(dataPacket *packet, PIPE_PTR fd, unsigned int timeout) + + if (result == 0) + errno = ETIMEDOUT; +- ++ + return retval; + } + +diff --git a/device-interface.c b/device-interface.c +index afb1d96..29c104b 100644 +--- a/device-interface.c ++++ b/device-interface.c +@@ -139,7 +139,7 @@ static void queueDataPacket(iguanaDev *idev, dataPacket *current, bool fromDev) + { + insertItem(&idev->recvList, NULL, (itemHeader*)current); + if (! notify(idev->readerPipe[WRITE])) +- message(LOG_ERROR, "Failed to signal primary thread.\n"); ++ message(LOG_ERROR, "Failed to signal primary thread.\n"); + } + else + { +@@ -543,7 +543,7 @@ bool oldPinConfig(iguanaDev *idev, /* required */ + } + } + } +- ++ + if (code == IG_DEV_SETPINCONFIG) + request->data = data; + if (x == 2) +@@ -561,7 +561,7 @@ bool deviceTransaction(iguanaDev *idev, /* required */ + /* For old devices setting pin configs actually becomes 2 + requests, awkward, but the way it has to be to support old + firmware. */ +- if (idev->version <= 3 && ++ if (idev->version <= 3 && + (request->code == IG_DEV_SETPINCONFIG || + request->code == IG_DEV_GETPINCONFIG)) + return oldPinConfig(idev, request, response); +@@ -583,7 +583,7 @@ bool deviceTransaction(iguanaDev *idev, /* required */ + case IG_DEV_GETID: + msg[CODE_OFFSET] = IG_DEV_EXECUTE; + break; +- ++ + case IG_DEV_SETID: + { + unsigned char *block; +@@ -911,7 +911,7 @@ void handleIncomingPackets(iguanaDev *idev) + /* NOTE: last byte is the fill level */ + current->dataLen = length - 1; + dataStart = buffer; +- ++ + message(LOG_DEBUG2, + "Data without ctl header assuming IG_DEV_RECV.\n"); + /* TODO: DEBUG: sleep here to test overflow on the device +diff --git a/drivers/libusb.c b/drivers/libusb.c +index 4993fef..ff2e667 100644 +--- a/drivers/libusb.c ++++ b/drivers/libusb.c +@@ -2,7 +2,7 @@ + ** libusb.c **************************************************************** + **************************************************************************** + * +- * Lowest level interface to the USB devices. ++ * Lowest level interface to the USB devices. + * + * Copyright (C) 2007, IguanaWorks Incorporated (http://iguanaworks.net) + * Author: Joseph Dunn +@@ -519,11 +519,11 @@ static int clearHalt(deviceInfo *info, unsigned int ep) + switch (ep) + { + case EP_IN: +- return libusb_clear_halt(handle->device, ++ return libusb_clear_halt(handle->device, + handle->epIn->bEndpointAddress); + + case EP_OUT: +- return libusb_clear_halt(handle->device, ++ return libusb_clear_halt(handle->device, + handle->epOut->bEndpointAddress); + } + return -1; +diff --git a/drivers/libusbpre1.c b/drivers/libusbpre1.c +index a0fe8d7..0303aa4 100644 +--- a/drivers/libusbpre1.c ++++ b/drivers/libusbpre1.c +@@ -2,7 +2,7 @@ + ** usbclient.c ************************************************************* + **************************************************************************** + * +- * Lowest level interface to the USB devices. ++ * Lowest level interface to the USB devices. + * + * Copyright (C) 2007, IguanaWorks Incorporated (http://iguanaworks.net) + * Author: Joseph Dunn +@@ -435,11 +435,11 @@ static int clearHalt(deviceInfo *info, unsigned int ep) + switch (ep) + { + case EP_IN: +- return usb_clear_halt(handle->device, ++ return usb_clear_halt(handle->device, + handle->epIn->bEndpointAddress); + + case EP_OUT: +- return usb_clear_halt(handle->device, ++ return usb_clear_halt(handle->device, + handle->epOut->bEndpointAddress); + } + return -1; +diff --git a/iguanaIR.h b/iguanaIR.h +index 0d0236d..bbc27ae 100644 +--- a/iguanaIR.h ++++ b/iguanaIR.h +@@ -170,7 +170,7 @@ IGUANAIR_API unsigned char iguanaDataToPinSpec(const void *data, + * below (all default to 0): + * + * bit: name: notes +- * 0 output enable ++ * 0 output enable + * 1 pullup enable + * 2 open drain + * 3 high sink only pins 0 and 1, ignored elsewhere +diff --git a/osx/daemonosx.c b/osx/daemonosx.c +index e425f2b..2397ac8 100644 +--- a/osx/daemonosx.c ++++ b/osx/daemonosx.c +@@ -6,7 +6,7 @@ + Mac OS X. It spawns a thread and waits for notification that an + iguanaIR device has been plugged in at which point it raises a SIGHUP + so that the standard igdaemon hot plug in processing will take place. +- ++ + @note + Without this support the reflasher will not work as the reset operation + during programming results in a disconnect and a reconnect on Mac OS X. +@@ -66,7 +66,7 @@ int daemon_osx_support(const usbId *ids) + static void arm_notification(io_iterator_t iterator) + { + io_object_t object; +- ++ + while ((object = IOIteratorNext(iterator)) != 0) { + IOObjectRelease(object); + } +diff --git a/server.h b/server.h +index 3d1d0ce..c127d5b 100644 +--- a/server.h ++++ b/server.h +@@ -14,7 +14,7 @@ + #ifndef _DAEMON_BASE_H_ + #define _DAEMON_BASE_H_ + +-typedef struct ++typedef struct + { + /* driver location and prefered driver information */ + bool onlyPreferred; +@@ -31,7 +31,7 @@ typedef struct + /* whether the server should ask devices for their labels */ + bool readLabels; + +- /* should the server rescan the usb bus after a disconnect */ ++ /* should the server rescan the usb bus after a disconnect */ + bool autoRescan; + + /* a method for children to communicate back to the list owner */ +diff --git a/udev/iguanaIR.rules b/udev/iguanaIR.rules +index 5e49ebf..e43aa91 100644 +--- a/udev/iguanaIR.rules ++++ b/udev/iguanaIR.rules +@@ -6,7 +6,7 @@ + # + # So if someone is using an old version of udev they may need to use a + # different first line like: +-# SYSFS{manufacturer} == "IguanaWorks", ++# SYSFS{manufacturer} == "IguanaWorks", + + ATTR{manufacturer} == "IguanaWorks", ATTR{product} == "USB IR Transceiver", \ + OWNER = "iguanair", MODE = "0664", \ +-- +1.7.11.7 + diff --git a/0002-Don-t-hardcode-iguanair-UID.patch b/0002-Don-t-hardcode-iguanair-UID.patch new file mode 100644 index 0000000..969407d --- /dev/null +++ b/0002-Don-t-hardcode-iguanair-UID.patch @@ -0,0 +1,27 @@ +From b428df7fbbc6bbf492f40431bc488b24637e142b Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Tue, 25 Dec 2012 11:45:48 +0100 +Subject: [PATCH 2/8] Don't hardcode iguanair UID. + +Using a hardcoded UID will cause all sorts of problems when +already used or not obeying distro conventions. +--- + Makefile.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.in b/Makefile.in +index e62b6fa..9a9cdfa 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -85,7 +85,7 @@ ifeq ($(RPM_OS)$(DARWIN),) + install: adduser + .PHONY: adduser + adduser: +- /usr/sbin/useradd -u 213 -c "Iguanaworks IR Daemon" -d / -s /sbin/nologin iguanair 2>/dev/null || true ++ /usr/sbin/useradd -c "Iguanaworks IR Daemon" -d / -s /sbin/nologin iguanair 2>/dev/null || true + + uninstall: deluser + .PHONY: deluser +-- +1.7.11.7 + diff --git a/0003-Use-platform-specific-python-extension-dir.patch b/0003-Use-platform-specific-python-extension-dir.patch new file mode 100644 index 0000000..0ca7949 --- /dev/null +++ b/0003-Use-platform-specific-python-extension-dir.patch @@ -0,0 +1,27 @@ +From d6a24ca3d0a0f583d21926d4d9d3890f5958ba67 Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Tue, 25 Dec 2012 11:54:55 +0100 +Subject: [PATCH 3/8] Use platform specific python extension dir + +Although this is just an issue for (multi-arch) Fedora, it should +always be correct to use get_python_lib(1,0) instead of (0,0). +--- + configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure b/configure +index f901211..1a51327 100755 +--- a/configure ++++ b/configure +@@ -5167,7 +5167,7 @@ $as_echo "$PYTHON_LDFLAGS" >&6; } + $as_echo_n "checking for Python site-packages path... " >&6; } + if test -z "$PYTHON_SITE_PKG"; then + PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \ +- print distutils.sysconfig.get_python_lib(0,0);"` ++ print distutils.sysconfig.get_python_lib(1,0);"` + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SITE_PKG" >&5 + $as_echo "$PYTHON_SITE_PKG" >&6; } +-- +1.7.11.7 + diff --git a/0004-Don-t-exit-3-in-library-calls.patch b/0004-Don-t-exit-3-in-library-calls.patch new file mode 100644 index 0000000..87afa35 --- /dev/null +++ b/0004-Don-t-exit-3-in-library-calls.patch @@ -0,0 +1,64 @@ +From 15f72105f52e1a4ecaf47e2951af6a2536a6f913 Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Tue, 25 Dec 2012 13:45:32 +0100 +Subject: [PATCH 4/9] Don't exit(3) in library calls + +Basically, it's a bad idea to call exit(3) in a daemon for +whatever reason. + +Signed-off-by: Alec Leamas +--- + support.c | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +diff --git a/support.c b/support.c +index 35724e6..a458bd9 100644 +--- a/support.c ++++ b/support.c +@@ -96,12 +96,12 @@ int message(int level, char *format, ...) + va_list list; + int retval = 0; + FILE *out; ++ char *buffer = NULL; + + va_start(list, format); + out = pickStream(level); + if (out != NULL) + { +- char *buffer; + if (level != LOG_ALWAYS && level != LOG_NORMAL) + { + char when[22]; +@@ -120,12 +120,15 @@ int message(int level, char *format, ...) + if (buffer == NULL) + { + perror("FATAL: message format malloc failedx"); +- exit(2); ++ return -ENOMEM; + } + sprintf(buffer, "%s%s%s", when, msgPrefixes[level], format); + } + else ++ { + buffer = format; ++ perror("Can't select output log stream (configuration error?)"); ++ } + + retval = vfprintf(out, buffer, list); + /* flushing the log file after each write */ +@@ -136,11 +139,7 @@ int message(int level, char *format, ...) + free(buffer); + } + va_end(list); +- +- if (level <= LOG_FATAL) +- exit(1); +- +- return retval; ++ return buffer == format ? -EINVAL : retval; + } + + void appendHex(int level, void *location, unsigned int length) +-- +1.7.11.4 + diff --git a/0005-Improve-driver-dir-detection.patch b/0005-Improve-driver-dir-detection.patch new file mode 100644 index 0000000..b01f147 --- /dev/null +++ b/0005-Improve-driver-dir-detection.patch @@ -0,0 +1,49 @@ +From 2c05db3a37f916a2637745cd603cb8e63c8a6ab7 Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Wed, 26 Dec 2012 08:13:56 +0100 +Subject: [PATCH 5/8] Improve driver dir detection. + +Add a rpath to the private directory so the dynamic loader finds it; +also add a trace output for detected dir. + +Although using rpaths is frowned upon in the general case, using it +for a private library directory like this is perfectly OK. +--- + Makefile.in | 1 + + server.c | 7 ++++++- + 2 files changed, 7 insertions(+), 1 deletion(-) + +diff --git a/Makefile.in b/Makefile.in +index 9a9cdfa..89433f2 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -6,6 +6,7 @@ BINDIR=@bindir@ + + + CFLAGS += -I. -fvisibility=hidden -DIGUANAIR_EXPORTS ++CFLAGS += -Wl,-rpath,$(LIBDIR)/iguanaIR + + ifdef DARWIN + LINKARGS = -Wl,-dylib_current_version,1.0.0,-dylib_compatibility_version,1.0.0 -install_name $(DESTDIR)/$(LIBDIR)/$(LIBNAME) +diff --git a/server.c b/server.c +index 141ee54..3493100 100644 +--- a/server.c ++++ b/server.c +@@ -93,8 +93,13 @@ deviceList* initServer() + #ifdef _WIN32 + srvSettings.driverDir = "."; + #else +- srvSettings.driverDir = "/usr/lib/iguanaIR"; ++ if (access("/usr/lib64", F_OK)) ++ srvSettings.driverDir = "/usr/lib64/iguanaIR"; ++ else ++ srvSettings.driverDir = "/usr/lib/iguanaIR"; + #endif ++ message(LOG_DEBUG, " driverDir: %s\n", srvSettings.driverDir); ++ + } + + /* initialize the commPipe, driver, and device list */ +-- +1.7.11.7 + diff --git a/0006-make-options-file-work-w-systemd.patch b/0006-make-options-file-work-w-systemd.patch new file mode 100644 index 0000000..4f13fdb --- /dev/null +++ b/0006-make-options-file-work-w-systemd.patch @@ -0,0 +1,61 @@ +From ea8f3436c24f579b8fdea4aac0fea5ab1d6b5b42 Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Tue, 25 Dec 2012 16:57:07 +0100 +Subject: [PATCH 6/8] make options file work w systemd + +Systemd uses an option file format which is almost identical +to the standard sh format used by sysV. However, it requires +the values to be quoted. This patch quots all values making +it work for systemd without breaking anything for the sysV +initscript. +--- + iguanaIR.options | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/iguanaIR.options b/iguanaIR.options +index 4dc6e8f..2263787 100644 +--- a/iguanaIR.options ++++ b/iguanaIR.options +@@ -7,7 +7,7 @@ + ## 2 = log debug1 + ## 3 = log debug2 (excessive) + ## 4 = log debug3 (excessively excessive) +-LOGLEVEL=0 ++LOGLEVEL="0" + + ## Because of a bug in libusb, using threads when communicating with + ## our device can cause the device to hang. As a work around, we have +@@ -26,26 +26,26 @@ LOGLEVEL=0 + ## how quickly you can quit the daemon. With threads enabled, we set + ## this timeout to 1000ms. With threads disabled, we put the timeout + ## at 50ms. You can use a larger value if you want to save a little +-## amount of cpu time, but it may cause problems with sends, ++## amount of cpu time, but it may cause problems with sends, + ## particularly long send. + + ## With the --no-threads option used + #RECEIVETIMEOUT=50 + + ## When threads are used (and not --no-threads) +-RECEIVETIMEOUT=1000 ++RECEIVETIMEOUT="1000" + + ## the igdaemon can use different backend USB drivers and should be + ## told which to try first since we prefer the libusb driver to the + ## libusbpre1.0 +-DRIVERS=--driver=libusb ++DRIVERS="--driver=libusb" + + ## You can set the timeout value for sendings IR signals. This set how + ## long to wait for send to successfully complete before assuming that + ## the send failed and returning an error. Time is measured in ms and + ## the default is 1000. Do not change this unless you have good + ## reason. +-SENDTIMEOUT=1000 ++SENDTIMEOUT="1000" + + ## The init.d script for igdaemon auto detects what distro you are + ## using (fedora, debian, ubuntu, gentoo). You can overwrite this +-- +1.7.11.7 + diff --git a/0007-Use-fedora-specific-default-socket-directory.patch b/0007-Use-fedora-specific-default-socket-directory.patch new file mode 100644 index 0000000..8225383 --- /dev/null +++ b/0007-Use-fedora-specific-default-socket-directory.patch @@ -0,0 +1,82 @@ +From fa0085b8773ed9f69d70ce617ac824d52a4f8dff Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Tue, 25 Dec 2012 13:26:05 +0100 +Subject: [PATCH 7/8] Use fedora-specific default socket directory. + +Fedora conventions requires the use of /var/run (or, after 17, just /run) +for the temporary socket directory. Fixed in this patch. + +Using this means that docs need an update, fix: sed -i +'s|/dev/iguanaIR|/var/run/iguanaIR|g' docs/TroubleShooting docs/driver docs/lirc + +Note that the reasoning behind this probably is valid for all Linux +distributions: it's simply that Filesystem Hierarchy Standard (FHS) +assumes that these kind of directories goes into /run. A more complete +but also untested patch is in https://bugzilla.redhat.com/show_bug.cgi?id=642773, +fixes.patch bundled in the source rpm. + +For the time being /var/run is used for historical reasons. On recent +platforms it's a symlink to /run. Over time, using just /run should be +better. + +Signed-off-by: Alec Leamas +--- + iguanaIR.h | 2 ++ + reflasher/looper | 5 ++++- + udev/iguanaIR.rules | 4 ++-- + 3 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/iguanaIR.h b/iguanaIR.h +index bbc27ae..e3301b0 100644 +--- a/iguanaIR.h ++++ b/iguanaIR.h +@@ -53,6 +53,8 @@ + + #ifdef __APPLE__ + #define IGSOCK_NAME "/tmp/iguanaIR/" ++ #elif FEDORA ++ #define IGSOCK_NAME "/var/run/iguanaIR/" + #else + #define IGSOCK_NAME "/dev/iguanaIR/" + #endif +diff --git a/reflasher/looper b/reflasher/looper +index 15c3e20..c0db224 100755 +--- a/reflasher/looper ++++ b/reflasher/looper +@@ -7,6 +7,7 @@ import stat + import sys + import os + import errno ++import platform + + #versions = [3, 4, 0x0101, 0x0102] + versions = [4] +@@ -16,7 +17,9 @@ import iguanaIR + + if sys.platform == 'darwin': + deviceDir = '/tmp/iguanaIR' +-else: ++elif sys.platform == 'linux2' and platform.linux_distribution()[0] == 'Fedora': ++ deviceDir = '/var/run/iguanaIR' ++else + deviceDir = '/dev/iguanaIR' + + def listDevices(path = deviceDir): +diff --git a/udev/iguanaIR.rules b/udev/iguanaIR.rules +index e43aa91..79d6573 100644 +--- a/udev/iguanaIR.rules ++++ b/udev/iguanaIR.rules +@@ -10,8 +10,8 @@ + + ATTR{manufacturer} == "IguanaWorks", ATTR{product} == "USB IR Transceiver", \ + OWNER = "iguanair", MODE = "0664", \ +- RUN = "/bin/mkdir -p /dev/iguanaIR", \ +- RUN += "/bin/chown iguanair /dev/iguanaIR", \ ++ RUN = "/bin/mkdir -p /var/run/iguanaIR", \ ++ RUN += "/bin/chown iguanair /var/run/iguanaIR", \ + RUN += "/etc/init.d/iguanaIR rescan" + + # FOR DEBUGGING TRY ADDING TO THE RUN LINES: +-- +1.7.11.4 + diff --git a/0008-udev-invoke-systemd-support-not-sysV-init-file.patch b/0008-udev-invoke-systemd-support-not-sysV-init-file.patch new file mode 100644 index 0000000..c1357b7 --- /dev/null +++ b/0008-udev-invoke-systemd-support-not-sysV-init-file.patch @@ -0,0 +1,28 @@ +From 4d74cf146fb53514f6b3b71684d6b8232d522e44 Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Tue, 25 Dec 2012 14:04:40 +0100 +Subject: [PATCH 8/8] udev: invoke systemd support, not sysV init file. + +Signed-off-by: Alec Leamas +--- + udev/iguanaIR.rules | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/udev/iguanaIR.rules b/udev/iguanaIR.rules +index 79d6573..7f72f1c 100644 +--- a/udev/iguanaIR.rules ++++ b/udev/iguanaIR.rules +@@ -10,9 +10,7 @@ + + ATTR{manufacturer} == "IguanaWorks", ATTR{product} == "USB IR Transceiver", \ + OWNER = "iguanair", MODE = "0664", \ +- RUN = "/bin/mkdir -p /var/run/iguanaIR", \ +- RUN += "/bin/chown iguanair /var/run/iguanaIR", \ +- RUN += "/etc/init.d/iguanaIR rescan" ++ RUN = "/usr/share/iguanaIR/rescan" + + # FOR DEBUGGING TRY ADDING TO THE RUN LINES: + #RUN += "/bin/bash -c 'echo $major $minor r=$result i=$id n=$number k=$kernel p=$parent r=$root >> /tmp/udev.txt'" +-- +1.7.11.7 + diff --git a/0010-Change-iguanaIR.-iguanair.-to-match-other-plugins.patch b/0010-Change-iguanaIR.-iguanair.-to-match-other-plugins.patch deleted file mode 100644 index f07fd13..0000000 --- a/0010-Change-iguanaIR.-iguanair.-to-match-other-plugins.patch +++ /dev/null @@ -1,853 +0,0 @@ -From 7e0aca378b95b8618c1adc936e7988be165fcc13 Mon Sep 17 00:00:00 2001 -From: Alec Leamas -Date: Thu, 1 Sep 2016 02:51:03 +0200 -Subject: [PATCH 10/13] Change iguanaIR.* -> iguanair.* to match other - plugins. - -The mixed casing is only used by iguanair, causing some problems -when handling plugin. Also, using lowercase creates a visible -difference to the mixed-case driver file. ---- - iguanaIR.c | 364 ---------------------------------------------------------- - iguanaIR.conf | 13 --- - iguanaIR.html | 18 --- - iguanair.c | 364 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - iguanair.conf | 13 +++ - iguanair.html | 18 +++ - 6 files changed, 395 insertions(+), 395 deletions(-) - delete mode 100755 iguanaIR.c - delete mode 100755 iguanaIR.conf - delete mode 100755 iguanaIR.html - create mode 100755 iguanair.c - create mode 100755 iguanair.conf - create mode 100755 iguanair.html - -diff --git a/iguanaIR.c b/iguanaIR.c -deleted file mode 100755 -index f2e5794..0000000 ---- a/iguanaIR.c -+++ /dev/null -@@ -1,364 +0,0 @@ --/**************************************************************************** --** hw_iguanaIR.c *********************************************************** --**************************************************************************** --* --* routines for interfacing with Iguanaworks USB IR devices --* --* Copyright (C) 2006, Joseph Dunn --* --* Distribute under GPL version 2. --* --*/ -- --#ifdef HAVE_CONFIG_H --# include --#endif -- --#include --#include --#include --#include --#include --#include --#if defined __APPLE__ --#include --#include --#else --#include --#endif --#include -- --#include "lirc_driver.h" -- --#include "iguanaIR.h" --static const logchannel_t logchannel = LOG_DRIVER; -- --static int sendConn = -1; --static pid_t child = 0; --static int recvDone = 0; --static int currentCarrier = -1; -- --static void quitHandler(int sig) --{ -- recvDone = 1; --} -- --static void recv_loop(int fd, int notify) --{ -- int conn; -- -- alarm(0); -- signal(SIGTERM, quitHandler); -- /* signal(SIGPIPE, SIG_DFL); */ -- signal(SIGINT, quitHandler); -- signal(SIGHUP, SIG_IGN); -- signal(SIGALRM, SIG_IGN); -- -- /* notify parent by closing notify */ -- close(notify); -- -- conn = iguanaConnect(drv.device); -- if (conn != -1) { -- iguanaPacket request, response; -- lirc_t prevCode = -1; -- -- request = iguanaCreateRequest(IG_DEV_RECVON, 0, NULL); -- if (iguanaWriteRequest(request, conn)) { -- while (!recvDone) { -- /* read from device */ -- do -- response = iguanaReadResponse(conn, 1000); -- while (!recvDone && ((response == NULL && errno == ETIMEDOUT) -- || (iguanaResponseIsError(response) && errno == ETIMEDOUT))); -- -- if (iguanaResponseIsError(response)) { -- /* be quiet during exit */ -- if (!recvDone) -- log_error("error response: %s\n", strerror(errno)); -- break; -- } else if (iguanaCode(response) == IG_DEV_RECV) { -- uint32_t* code; -- unsigned int length, x, y = 0; -- lirc_t buffer[8]; /* we read 8 bytes max at a time -- * from the device, i.e. packet -- * can only contain 8 -- * signals. */ -- -- /* pull the data off the packet */ -- code = (uint32_t*)iguanaRemoveData(response, &length); -- length /= sizeof(uint32_t); -- -- /* translate the code into lirc_t pulses (and make -- * sure they don't split across iguana packets. */ -- for (x = 0; x < length; x++) { -- if (prevCode == -1) { -- prevCode = (code[x] & IG_PULSE_MASK); -- if (prevCode > PULSE_MASK) -- prevCode = PULSE_MASK; -- if (code[x] & IG_PULSE_BIT) -- prevCode |= PULSE_BIT; -- } else if (((prevCode & PULSE_BIT) && (code[x] & IG_PULSE_BIT)) -- || (!(prevCode & PULSE_BIT) && !(code[x] & IG_PULSE_BIT))) { -- /* can overflow pulse mask, so just set to -- * largest possible */ -- if ((prevCode & PULSE_MASK) + (code[x] & IG_PULSE_MASK) > -- PULSE_MASK) -- prevCode = (prevCode & PULSE_BIT) | PULSE_MASK; -- else -- prevCode += code[x] & IG_PULSE_MASK; -- } else { -- buffer[y] = prevCode; -- y++; -- -- prevCode = (code[x] & IG_PULSE_MASK); -- if (prevCode > PULSE_MASK) -- prevCode = PULSE_MASK; -- if (code[x] & IG_PULSE_BIT) -- prevCode |= PULSE_BIT; -- } -- } -- -- /* write the data and free it */ -- if (y > 0) { -- chk_write(fd, -- buffer, -- sizeof(lirc_t) * y); -- } -- free(code); -- } -- -- iguanaFreePacket(response); -- } -- } -- -- iguanaFreePacket(request); -- } -- -- iguanaClose(conn); -- close(fd); --} -- --static int iguana_init(void) --{ -- int recv_pipe[2], retval = 0; -- -- rec_buffer_init(); -- -- if (pipe(recv_pipe) != 0) { -- log_error("couldn't open pipe: %s", strerror(errno)); -- } else { -- int notify[2]; -- -- if (pipe(notify) != 0) { -- log_error("couldn't open pipe: %s", strerror(errno)); -- close(recv_pipe[0]); -- close(recv_pipe[1]); -- } else { -- drv.fd = recv_pipe[0]; -- -- child = fork(); -- if (child == -1) { -- log_error("couldn't fork child process: %s", strerror(errno)); -- } else if (child == 0) { -- close(recv_pipe[0]); -- close(notify[0]); -- recv_loop(recv_pipe[1], notify[1]); -- _exit(0); -- } else { -- int dummy; -- -- close(recv_pipe[1]); -- close(notify[1]); -- /* make sure child has set its signal handler to avoid race with iguana_deinit() */ -- chk_read(notify[0], &dummy, 1); -- close(notify[0]); -- sendConn = iguanaConnect(drv.device); -- if (sendConn == -1) { -- log_error("couldn't open connection to iguanaIR daemon: %s", -- strerror(errno)); -- } else { -- retval = 1; -- } -- } -- } -- } -- -- return retval; --} -- --static pid_t dowaitpid(pid_t pid, int* stat_loc, int options) --{ -- pid_t retval; -- -- do -- retval = waitpid(pid, stat_loc, options); -- while (retval == (pid_t)-1 && errno == EINTR); -- -- return retval; --} -- --static int iguana_deinit(void) --{ -- /* close the connection to the iguana daemon */ -- if (sendConn != -1) { -- iguanaClose(sendConn); -- sendConn = -1; -- } -- -- /* signal the child process to exit */ -- if (child > 0 && (kill(child, SIGTERM) == -1 || dowaitpid(child, NULL, 0) != (pid_t)-1)) -- child = 0; -- -- /* close drv.fd since otherwise we leak open files */ -- close(drv.fd); -- drv.fd = -1; -- -- return child == 0; --} -- --static char* iguana_rec(struct ir_remote* remotes) --{ -- char* retval = NULL; -- -- if (rec_buffer_clear()) -- retval = decode_all(remotes); -- return retval; --} -- --static bool daemonTransaction(unsigned char code, void* value, size_t size) --{ -- uint8_t* data; -- bool retval = false; -- -- data = (uint8_t*)malloc(size); -- if (data != NULL) { -- iguanaPacket request, response = NULL; -- -- memcpy(data, value, size); -- request = iguanaCreateRequest(code, size, data); -- if (request) { -- if (iguanaWriteRequest(request, sendConn)) -- response = iguanaReadResponse(sendConn, 10000); -- iguanaFreePacket(request); -- } else { -- free(data); -- } -- -- /* handle success */ -- if (!iguanaResponseIsError(response)) -- retval = true; -- iguanaFreePacket(response); -- } -- return retval; --} -- --static int iguana_send(struct ir_remote* remote, struct ir_ncode* code) --{ -- int retval = 0; -- uint32_t freq; -- -- /* set the carrier frequency if necessary */ -- freq = htonl(remote->freq); -- if (remote->freq != currentCarrier && remote->freq >= 25000 && remote->freq <= 100000 -- && daemonTransaction(IG_DEV_SETCARRIER, &freq, sizeof(freq))) -- currentCarrier = remote->freq; -- -- if (send_buffer_put(remote, code)) { -- int length, x; -- const lirc_t* signals; -- uint32_t* igsignals; -- -- length = send_buffer_length(); -- signals = send_buffer_data(); -- -- igsignals = (uint32_t*)malloc(sizeof(uint32_t) * length); -- if (igsignals != NULL) { -- iguanaPacket request, response = NULL; -- -- /* must pack the data into a unit32_t array */ -- for (x = 0; x < length; x++) { -- igsignals[x] = signals[x] & PULSE_MASK; -- if (signals[x] & PULSE_BIT) -- igsignals[x] |= IG_PULSE_BIT; -- } -- -- /* construct a request and send it to the daemon -- * TRICKY: IguanaFreePacket free()'s both the -- * igsignals chunk and the request packet, but -- * iguanaCreateRequest does not malloc that chunk. -- */ -- request = iguanaCreateRequest(IG_DEV_SEND, sizeof(uint32_t) * length, igsignals); -- if (iguanaWriteRequest(request, sendConn)) { -- /* response will only come back after the device has -- * transmitted */ -- response = iguanaReadResponse(sendConn, 10000); -- if (!iguanaResponseIsError(response)) -- retval = 1; -- -- iguanaFreePacket(response); -- } -- -- /* free the packet and the data */ -- iguanaFreePacket(request); -- } -- } -- -- return retval; --} -- --static int iguana_ioctl(unsigned int code, void* arg) --{ -- int retcode = -1; -- uint8_t channels = *(uint8_t*)arg; -- -- /* set the transmit channels: return 0 on success, 4 if -- * out-of-range (see ioctl) */ -- if (code == LIRC_SET_TRANSMITTER_MASK) { -- if (channels > 0x0F) -- retcode = 4; -- else if (daemonTransaction(IG_DEV_SETCHANNELS, &channels, sizeof(channels))) -- retcode = 0; -- } -- -- return retcode; --} -- --static lirc_t readdata(lirc_t timeout) --{ -- lirc_t code = 0; -- struct pollfd pfd = {.fd = drv.fd, .events = POLLIN, .revents = 0}; -- /* attempt a read with a timeout using select */ -- if (poll(&pfd, 1, timeout / 1000) > 0) { -- /* if we failed to get data return 0 */ -- if (read(drv.fd, &code, sizeof(lirc_t)) <= 0) -- iguana_deinit(); -- } -- return code; --} -- --const struct driver hw_iguanaIR = { -- .name = "iguanaIR", -- .device = "0", -- .features = LIRC_CAN_REC_MODE2 | \ -- LIRC_CAN_SEND_PULSE | \ -- LIRC_CAN_SET_SEND_CARRIER | \ -- LIRC_CAN_SET_TRANSMITTER_MASK, -- .send_mode = LIRC_MODE_PULSE, -- .rec_mode = LIRC_MODE_MODE2, -- .code_length = sizeof(int), -- .init_func = iguana_init, -- .deinit_func = iguana_deinit, -- .open_func = default_open, -- .close_func = default_close, -- .send_func = iguana_send, -- .rec_func = iguana_rec, -- .decode_func = receive_decode, -- .drvctl_func = iguana_ioctl, -- .readdata = readdata, -- .api_version = 3, -- .driver_version = "0.9.3", -- .info = "See file://" PLUGINDOCS "/iguanair.html", -- .device_hint = "/var/run/iguanaIR/*", --}; -- --const struct driver* hardwares[] = { &hw_iguanaIR, (const struct driver*)NULL }; -diff --git a/iguanaIR.conf b/iguanaIR.conf -deleted file mode 100755 -index 12e9523..0000000 ---- a/iguanaIR.conf -+++ /dev/null -@@ -1,13 +0,0 @@ --# This is a lirc configuration for a capture device. --# See README for more. -- --config: -- driver: iguanaIR -- id: iguanaIR -- label: Iguanaworks USB IR Transceiver -- menu: usb -- note: This is the user-space driver from Iguanaworks, Inc. -- There is also a built-in kernel driver. Both can be used -- but not concurrently. -- product_driver: 1781:0938 -- modprobe: [blacklist iguanair] -diff --git a/iguanaIR.html b/iguanaIR.html -deleted file mode 100755 -index 99609c3..0000000 ---- a/iguanaIR.html -+++ /dev/null -@@ -1,18 +0,0 @@ --

-- This driver supports both receiving and sending (blasting) using -- the IguanaIR devices from -- http://iguanaworks.net/ir.

--

-- The LIRC driver works on top of the IguanaIR low-level userspace -- driver which provides a socket interface. It is available from -- the same source, and also packaged for many distributions -- including Debian, Fedora and Arch Linux. --

-- The --device argument to the driver is a socket designator created -- by the low-level driveri. It defaults to '0' which implies -- /run/iguanair/0. --

-- The kernel has built-in support for these devices in the -- iguanair module. This can be used instead of this driver in -- many cases. If the userspace driver should be used, the -- kernel driver must be blacklisted.

-diff --git a/iguanair.c b/iguanair.c -new file mode 100755 -index 0000000..f2e5794 ---- /dev/null -+++ b/iguanair.c -@@ -0,0 +1,364 @@ -+/**************************************************************************** -+** hw_iguanaIR.c *********************************************************** -+**************************************************************************** -+* -+* routines for interfacing with Iguanaworks USB IR devices -+* -+* Copyright (C) 2006, Joseph Dunn -+* -+* Distribute under GPL version 2. -+* -+*/ -+ -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#if defined __APPLE__ -+#include -+#include -+#else -+#include -+#endif -+#include -+ -+#include "lirc_driver.h" -+ -+#include "iguanaIR.h" -+static const logchannel_t logchannel = LOG_DRIVER; -+ -+static int sendConn = -1; -+static pid_t child = 0; -+static int recvDone = 0; -+static int currentCarrier = -1; -+ -+static void quitHandler(int sig) -+{ -+ recvDone = 1; -+} -+ -+static void recv_loop(int fd, int notify) -+{ -+ int conn; -+ -+ alarm(0); -+ signal(SIGTERM, quitHandler); -+ /* signal(SIGPIPE, SIG_DFL); */ -+ signal(SIGINT, quitHandler); -+ signal(SIGHUP, SIG_IGN); -+ signal(SIGALRM, SIG_IGN); -+ -+ /* notify parent by closing notify */ -+ close(notify); -+ -+ conn = iguanaConnect(drv.device); -+ if (conn != -1) { -+ iguanaPacket request, response; -+ lirc_t prevCode = -1; -+ -+ request = iguanaCreateRequest(IG_DEV_RECVON, 0, NULL); -+ if (iguanaWriteRequest(request, conn)) { -+ while (!recvDone) { -+ /* read from device */ -+ do -+ response = iguanaReadResponse(conn, 1000); -+ while (!recvDone && ((response == NULL && errno == ETIMEDOUT) -+ || (iguanaResponseIsError(response) && errno == ETIMEDOUT))); -+ -+ if (iguanaResponseIsError(response)) { -+ /* be quiet during exit */ -+ if (!recvDone) -+ log_error("error response: %s\n", strerror(errno)); -+ break; -+ } else if (iguanaCode(response) == IG_DEV_RECV) { -+ uint32_t* code; -+ unsigned int length, x, y = 0; -+ lirc_t buffer[8]; /* we read 8 bytes max at a time -+ * from the device, i.e. packet -+ * can only contain 8 -+ * signals. */ -+ -+ /* pull the data off the packet */ -+ code = (uint32_t*)iguanaRemoveData(response, &length); -+ length /= sizeof(uint32_t); -+ -+ /* translate the code into lirc_t pulses (and make -+ * sure they don't split across iguana packets. */ -+ for (x = 0; x < length; x++) { -+ if (prevCode == -1) { -+ prevCode = (code[x] & IG_PULSE_MASK); -+ if (prevCode > PULSE_MASK) -+ prevCode = PULSE_MASK; -+ if (code[x] & IG_PULSE_BIT) -+ prevCode |= PULSE_BIT; -+ } else if (((prevCode & PULSE_BIT) && (code[x] & IG_PULSE_BIT)) -+ || (!(prevCode & PULSE_BIT) && !(code[x] & IG_PULSE_BIT))) { -+ /* can overflow pulse mask, so just set to -+ * largest possible */ -+ if ((prevCode & PULSE_MASK) + (code[x] & IG_PULSE_MASK) > -+ PULSE_MASK) -+ prevCode = (prevCode & PULSE_BIT) | PULSE_MASK; -+ else -+ prevCode += code[x] & IG_PULSE_MASK; -+ } else { -+ buffer[y] = prevCode; -+ y++; -+ -+ prevCode = (code[x] & IG_PULSE_MASK); -+ if (prevCode > PULSE_MASK) -+ prevCode = PULSE_MASK; -+ if (code[x] & IG_PULSE_BIT) -+ prevCode |= PULSE_BIT; -+ } -+ } -+ -+ /* write the data and free it */ -+ if (y > 0) { -+ chk_write(fd, -+ buffer, -+ sizeof(lirc_t) * y); -+ } -+ free(code); -+ } -+ -+ iguanaFreePacket(response); -+ } -+ } -+ -+ iguanaFreePacket(request); -+ } -+ -+ iguanaClose(conn); -+ close(fd); -+} -+ -+static int iguana_init(void) -+{ -+ int recv_pipe[2], retval = 0; -+ -+ rec_buffer_init(); -+ -+ if (pipe(recv_pipe) != 0) { -+ log_error("couldn't open pipe: %s", strerror(errno)); -+ } else { -+ int notify[2]; -+ -+ if (pipe(notify) != 0) { -+ log_error("couldn't open pipe: %s", strerror(errno)); -+ close(recv_pipe[0]); -+ close(recv_pipe[1]); -+ } else { -+ drv.fd = recv_pipe[0]; -+ -+ child = fork(); -+ if (child == -1) { -+ log_error("couldn't fork child process: %s", strerror(errno)); -+ } else if (child == 0) { -+ close(recv_pipe[0]); -+ close(notify[0]); -+ recv_loop(recv_pipe[1], notify[1]); -+ _exit(0); -+ } else { -+ int dummy; -+ -+ close(recv_pipe[1]); -+ close(notify[1]); -+ /* make sure child has set its signal handler to avoid race with iguana_deinit() */ -+ chk_read(notify[0], &dummy, 1); -+ close(notify[0]); -+ sendConn = iguanaConnect(drv.device); -+ if (sendConn == -1) { -+ log_error("couldn't open connection to iguanaIR daemon: %s", -+ strerror(errno)); -+ } else { -+ retval = 1; -+ } -+ } -+ } -+ } -+ -+ return retval; -+} -+ -+static pid_t dowaitpid(pid_t pid, int* stat_loc, int options) -+{ -+ pid_t retval; -+ -+ do -+ retval = waitpid(pid, stat_loc, options); -+ while (retval == (pid_t)-1 && errno == EINTR); -+ -+ return retval; -+} -+ -+static int iguana_deinit(void) -+{ -+ /* close the connection to the iguana daemon */ -+ if (sendConn != -1) { -+ iguanaClose(sendConn); -+ sendConn = -1; -+ } -+ -+ /* signal the child process to exit */ -+ if (child > 0 && (kill(child, SIGTERM) == -1 || dowaitpid(child, NULL, 0) != (pid_t)-1)) -+ child = 0; -+ -+ /* close drv.fd since otherwise we leak open files */ -+ close(drv.fd); -+ drv.fd = -1; -+ -+ return child == 0; -+} -+ -+static char* iguana_rec(struct ir_remote* remotes) -+{ -+ char* retval = NULL; -+ -+ if (rec_buffer_clear()) -+ retval = decode_all(remotes); -+ return retval; -+} -+ -+static bool daemonTransaction(unsigned char code, void* value, size_t size) -+{ -+ uint8_t* data; -+ bool retval = false; -+ -+ data = (uint8_t*)malloc(size); -+ if (data != NULL) { -+ iguanaPacket request, response = NULL; -+ -+ memcpy(data, value, size); -+ request = iguanaCreateRequest(code, size, data); -+ if (request) { -+ if (iguanaWriteRequest(request, sendConn)) -+ response = iguanaReadResponse(sendConn, 10000); -+ iguanaFreePacket(request); -+ } else { -+ free(data); -+ } -+ -+ /* handle success */ -+ if (!iguanaResponseIsError(response)) -+ retval = true; -+ iguanaFreePacket(response); -+ } -+ return retval; -+} -+ -+static int iguana_send(struct ir_remote* remote, struct ir_ncode* code) -+{ -+ int retval = 0; -+ uint32_t freq; -+ -+ /* set the carrier frequency if necessary */ -+ freq = htonl(remote->freq); -+ if (remote->freq != currentCarrier && remote->freq >= 25000 && remote->freq <= 100000 -+ && daemonTransaction(IG_DEV_SETCARRIER, &freq, sizeof(freq))) -+ currentCarrier = remote->freq; -+ -+ if (send_buffer_put(remote, code)) { -+ int length, x; -+ const lirc_t* signals; -+ uint32_t* igsignals; -+ -+ length = send_buffer_length(); -+ signals = send_buffer_data(); -+ -+ igsignals = (uint32_t*)malloc(sizeof(uint32_t) * length); -+ if (igsignals != NULL) { -+ iguanaPacket request, response = NULL; -+ -+ /* must pack the data into a unit32_t array */ -+ for (x = 0; x < length; x++) { -+ igsignals[x] = signals[x] & PULSE_MASK; -+ if (signals[x] & PULSE_BIT) -+ igsignals[x] |= IG_PULSE_BIT; -+ } -+ -+ /* construct a request and send it to the daemon -+ * TRICKY: IguanaFreePacket free()'s both the -+ * igsignals chunk and the request packet, but -+ * iguanaCreateRequest does not malloc that chunk. -+ */ -+ request = iguanaCreateRequest(IG_DEV_SEND, sizeof(uint32_t) * length, igsignals); -+ if (iguanaWriteRequest(request, sendConn)) { -+ /* response will only come back after the device has -+ * transmitted */ -+ response = iguanaReadResponse(sendConn, 10000); -+ if (!iguanaResponseIsError(response)) -+ retval = 1; -+ -+ iguanaFreePacket(response); -+ } -+ -+ /* free the packet and the data */ -+ iguanaFreePacket(request); -+ } -+ } -+ -+ return retval; -+} -+ -+static int iguana_ioctl(unsigned int code, void* arg) -+{ -+ int retcode = -1; -+ uint8_t channels = *(uint8_t*)arg; -+ -+ /* set the transmit channels: return 0 on success, 4 if -+ * out-of-range (see ioctl) */ -+ if (code == LIRC_SET_TRANSMITTER_MASK) { -+ if (channels > 0x0F) -+ retcode = 4; -+ else if (daemonTransaction(IG_DEV_SETCHANNELS, &channels, sizeof(channels))) -+ retcode = 0; -+ } -+ -+ return retcode; -+} -+ -+static lirc_t readdata(lirc_t timeout) -+{ -+ lirc_t code = 0; -+ struct pollfd pfd = {.fd = drv.fd, .events = POLLIN, .revents = 0}; -+ /* attempt a read with a timeout using select */ -+ if (poll(&pfd, 1, timeout / 1000) > 0) { -+ /* if we failed to get data return 0 */ -+ if (read(drv.fd, &code, sizeof(lirc_t)) <= 0) -+ iguana_deinit(); -+ } -+ return code; -+} -+ -+const struct driver hw_iguanaIR = { -+ .name = "iguanaIR", -+ .device = "0", -+ .features = LIRC_CAN_REC_MODE2 | \ -+ LIRC_CAN_SEND_PULSE | \ -+ LIRC_CAN_SET_SEND_CARRIER | \ -+ LIRC_CAN_SET_TRANSMITTER_MASK, -+ .send_mode = LIRC_MODE_PULSE, -+ .rec_mode = LIRC_MODE_MODE2, -+ .code_length = sizeof(int), -+ .init_func = iguana_init, -+ .deinit_func = iguana_deinit, -+ .open_func = default_open, -+ .close_func = default_close, -+ .send_func = iguana_send, -+ .rec_func = iguana_rec, -+ .decode_func = receive_decode, -+ .drvctl_func = iguana_ioctl, -+ .readdata = readdata, -+ .api_version = 3, -+ .driver_version = "0.9.3", -+ .info = "See file://" PLUGINDOCS "/iguanair.html", -+ .device_hint = "/var/run/iguanaIR/*", -+}; -+ -+const struct driver* hardwares[] = { &hw_iguanaIR, (const struct driver*)NULL }; -diff --git a/iguanair.conf b/iguanair.conf -new file mode 100755 -index 0000000..12e9523 ---- /dev/null -+++ b/iguanair.conf -@@ -0,0 +1,13 @@ -+# This is a lirc configuration for a capture device. -+# See README for more. -+ -+config: -+ driver: iguanaIR -+ id: iguanaIR -+ label: Iguanaworks USB IR Transceiver -+ menu: usb -+ note: This is the user-space driver from Iguanaworks, Inc. -+ There is also a built-in kernel driver. Both can be used -+ but not concurrently. -+ product_driver: 1781:0938 -+ modprobe: [blacklist iguanair] -diff --git a/iguanair.html b/iguanair.html -new file mode 100755 -index 0000000..99609c3 ---- /dev/null -+++ b/iguanair.html -@@ -0,0 +1,18 @@ -+

-+ This driver supports both receiving and sending (blasting) using -+ the IguanaIR devices from -+ http://iguanaworks.net/ir.

-+

-+ The LIRC driver works on top of the IguanaIR low-level userspace -+ driver which provides a socket interface. It is available from -+ the same source, and also packaged for many distributions -+ including Debian, Fedora and Arch Linux. -+

-+ The --device argument to the driver is a socket designator created -+ by the low-level driveri. It defaults to '0' which implies -+ /run/iguanair/0. -+

-+ The kernel has built-in support for these devices in the -+ iguanair module. This can be used instead of this driver in -+ many cases. If the userspace driver should be used, the -+ kernel driver must be blacklisted.

--- -2.5.5 - diff --git a/0010-build-Remove-cmake-dist-generation.patch b/0010-build-Remove-cmake-dist-generation.patch deleted file mode 100644 index 0384a9a..0000000 --- a/0010-build-Remove-cmake-dist-generation.patch +++ /dev/null @@ -1,39 +0,0 @@ -From ac541ea506a82ab699bff42829f697e46755eb12 Mon Sep 17 00:00:00 2001 -From: Alec Leamas -Date: Mon, 30 Jan 2017 10:56:33 +0100 -Subject: [PATCH 10/14] build: Remove cmake dist generation. - -The cmake code is worse in at least two ways: It includes whatever -junk it finds in the source directory, and it isn't aware of the -lirc-driver-iguanair in the parent directory. The make-dist.sh -script just is better, so drop the cmake code. ---- - software/usb_ir/CMakeLists.txt | 12 ------------ - 1 file changed, 12 deletions(-) - -diff --git a/software/usb_ir/CMakeLists.txt b/software/usb_ir/CMakeLists.txt -index e056483..8a55372 100644 ---- a/software/usb_ir/CMakeLists.txt -+++ b/software/usb_ir/CMakeLists.txt -@@ -15,18 +15,6 @@ Set(SO_AGE 3) - - Set(SOVERSION 0) - --# Source dist setup --set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${FULLVER}") --set(CPACK_SOURCE_IGNORE_FILES -- "/build/;/.git/;~$;${CPACK_SOURCE_IGNORE_FILES}") --set(CPACK_SOURCE_GENERATOR TGZ) --include(CPack) -- --add_custom_target(check_git ${CMAKE_COMMAND} -- -P ${CMAKE_SOURCE_DIR}/check_git_status.cmake) --add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source -- DEPENDS check_git) -- - #Set(TARGET_ANDROID true) - - If(TARGET_ANDROID) --- -2.9.3 - diff --git a/0011-Rename-link-README-files-to-match-modified-install-r.patch b/0011-Rename-link-README-files-to-match-modified-install-r.patch deleted file mode 100644 index 2d2f602..0000000 --- a/0011-Rename-link-README-files-to-match-modified-install-r.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 889ff6716f40c5abca23bbfed9660e29903cc009 Mon Sep 17 00:00:00 2001 -From: Alec Leamas -Date: Thu, 1 Sep 2016 02:52:51 +0200 -Subject: [PATCH 11/13] Rename/link README files to match modified install - routines. - ---- - README | 28 ---------------------------- - README.md | 1 + - iguanair.txt | 28 ++++++++++++++++++++++++++++ - 3 files changed, 29 insertions(+), 28 deletions(-) - delete mode 100755 README - create mode 120000 README.md - create mode 100755 iguanair.txt - -diff --git a/README b/README -deleted file mode 100755 -index 843baf6..0000000 ---- a/README -+++ /dev/null -@@ -1,28 +0,0 @@ --IguanaIR LIRC driver README --=========================== -- --This driver used to be part of the LIRC sources. In order to improve --the maintenance it has been moved to Iguanaworks, Inc which is the --primary hardware and software vendor. -- --From 0.9.4 the driver is available at: https://github.com/iguanaworks/iguanair-lirc -- --As a transition step the same files are available here during the 0.9.4 --cycle. These files are a complete lirc driver for iguanair. Building requires --lirc >= 0.9.4. If you are using a packaged version you probably need to --have the -devel and -doc packages installed. Note that the downstream --sources at https://github.com/iguanaworks/iguanair-lirc are preferred and --will be the only option in next release. -- --To build and install the driver together with the support files: -- -- $ make -- $ sudo make install -- --Verifying the driver after make install: -- -- $ lirc-lsplugins -q iguanair -- --- /usr/lib64/lirc/plugins/iguanair.so -- --You could also find the driver docs in the manual. The path varies, but --in a packaged version typically /usr/share/doc/lirc/lirc.org/html/index.html. -diff --git a/README.md b/README.md -new file mode 120000 -index 0000000..b471562 ---- /dev/null -+++ b/README.md -@@ -0,0 +1 @@ -+iguanair.txt -\ No newline at end of file -diff --git a/iguanair.txt b/iguanair.txt -new file mode 100755 -index 0000000..843baf6 ---- /dev/null -+++ b/iguanair.txt -@@ -0,0 +1,28 @@ -+IguanaIR LIRC driver README -+=========================== -+ -+This driver used to be part of the LIRC sources. In order to improve -+the maintenance it has been moved to Iguanaworks, Inc which is the -+primary hardware and software vendor. -+ -+From 0.9.4 the driver is available at: https://github.com/iguanaworks/iguanair-lirc -+ -+As a transition step the same files are available here during the 0.9.4 -+cycle. These files are a complete lirc driver for iguanair. Building requires -+lirc >= 0.9.4. If you are using a packaged version you probably need to -+have the -devel and -doc packages installed. Note that the downstream -+sources at https://github.com/iguanaworks/iguanair-lirc are preferred and -+will be the only option in next release. -+ -+To build and install the driver together with the support files: -+ -+ $ make -+ $ sudo make install -+ -+Verifying the driver after make install: -+ -+ $ lirc-lsplugins -q iguanair -+ --- /usr/lib64/lirc/plugins/iguanair.so -+ -+You could also find the driver docs in the manual. The path varies, but -+in a packaged version typically /usr/share/doc/lirc/lirc.org/html/index.html. --- -2.5.5 - diff --git a/0011-lirc-drv-Fix-missing-linker-flag.patch b/0011-lirc-drv-Fix-missing-linker-flag.patch deleted file mode 100644 index d4127e5..0000000 --- a/0011-lirc-drv-Fix-missing-linker-flag.patch +++ /dev/null @@ -1,25 +0,0 @@ -From db05b2629b6b5a5972a51e2d2fbbf04e45e56cc8 Mon Sep 17 00:00:00 2001 -From: Alec Leamas -Date: Fri, 3 Feb 2017 00:01:08 +0100 -Subject: [PATCH 11/14] lirc-drv: Fix missing linker flag. - ---- - software/lirc-drv-iguanair/Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/software/lirc-drv-iguanair/Makefile b/software/lirc-drv-iguanair/Makefile -index 3bae4e9..6aff458 100755 ---- a/software/lirc-drv-iguanair/Makefile -+++ b/software/lirc-drv-iguanair/Makefile -@@ -17,7 +17,7 @@ driver = iguanair - - all: $(driver).so - --LDFLAGS += -liguanaIR -L../usb_ir/build -+LDFLAGS += -lusb -liguanaIR -L../usb_ir/build - CFLAGS += -I../usb_ir - MODPROBE_CONF = 60-blacklist-kernel-iguanair.conf - --- -2.9.3 - diff --git a/0012-Makefile-Add-DESTDIR-support.patch b/0012-Makefile-Add-DESTDIR-support.patch deleted file mode 100644 index 4a2ff0f..0000000 --- a/0012-Makefile-Add-DESTDIR-support.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 4d692f097e5c556f47404c97a5ce2c0b2180ee3a Mon Sep 17 00:00:00 2001 -From: Alec Leamas -Date: Thu, 1 Sep 2016 03:17:27 +0200 -Subject: [PATCH 12/13] Makefile: Add DESTDIR support - ---- - Makefile | 21 +++++++++++++++------ - 1 file changed, 15 insertions(+), 6 deletions(-) - -diff --git a/Makefile b/Makefile -index c6a7f7a..4db147a 100755 ---- a/Makefile -+++ b/Makefile -@@ -8,7 +8,7 @@ - # - - --driver = iguanaIR -+driver = iguanair - - all: $(driver).so - -@@ -18,7 +18,13 @@ PLUGINDIR ?= $(shell pkg-config --variable=plugindir lirc-driver) - CONFIGDIR ?= $(shell pkg-config --variable=configdir lirc-driver) - PLUGINDOCS ?= $(shell pkg-config --variable=plugindocs lirc-driver) - --include $(PLUGINDOCS)/plugindocs.mk -+PLUGINDOCS_MK = $(PLUGINDOCS)/plugindocs.mk -+MODPROBE_CONF = 60-blacklist-kernel-iguanair.conf -+ -+ifneq ($(wildcard $(PLUGINDOCS_MK)),) -+ include $(PLUGINDOCS_MK) -+endif -+ - - $(driver).o: $(driver).c - -@@ -26,11 +32,14 @@ $(driver).so: $(driver).o - gcc --shared -fpic $(LDFLAGS) -o $@ $< - - install: $(driver).so -- install $< $(PLUGINDIR) -- install $(driver).conf $(CONFIGDIR) -- install $(driver).html $(PLUGINDOCS) -- install -m 644 60-blacklist-kernel-iguanair.conf /etc/modprobe.d -+ install -pDm 755 $< $(DESTDIR)$(PLUGINDIR)/$< -+ install -pDm 644 $(driver).html $(DESTDIR)$(PLUGINDOCS)/$(driver).html -+ install -pDm 644 $(driver).conf $(DESTDIR)$(CONFIGDIR)/$(driver).conf -+ install -pDm 644 $(MODPROBE_CONF) \ -+ $(DESTDIR)/etc/modprobe.d/$(MODPROBE_CONF) -+ifneq ($(wildcard $(PLUGINDOCS_MK)),) - $(MAKE) update -+endif - - clean: - rm -f *.o *.so --- -2.5.5 - diff --git a/0012-build-cmake-Use-correct-permissions-when-installing.patch b/0012-build-cmake-Use-correct-permissions-when-installing.patch deleted file mode 100644 index 1f5a353..0000000 --- a/0012-build-cmake-Use-correct-permissions-when-installing.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 4264b5d65c012fdbe4e2b676ef1987ab4a0778dd Mon Sep 17 00:00:00 2001 -From: Alec Leamas -Date: Sat, 4 Feb 2017 10:56:21 +0100 -Subject: [PATCH 12/14] build: cmake: Use correct permissions when installing. - ---- - software/usb_ir/CMakeLists.txt | 2 ++ - software/usb_ir/files/systemd/usr/bin/iguanaIR-rescan | 12 ++++++------ - 2 files changed, 8 insertions(+), 6 deletions(-) - -diff --git a/software/usb_ir/CMakeLists.txt b/software/usb_ir/CMakeLists.txt -index 8a55372..665ae82 100644 ---- a/software/usb_ir/CMakeLists.txt -+++ b/software/usb_ir/CMakeLists.txt -@@ -245,9 +245,11 @@ install(FILES iguanaIR.h - DESTINATION /usr/include) - if (${SYSTEMD_FOUND} EQUAL 1) - install(DIRECTORY files/systemd/usr -+ USE_SOURCE_PERMISSIONS - DESTINATION /) - else() - install(DIRECTORY files/sysV/usr files/sysV/etc -+ USE_SOURCE_PERMISSIONS - DESTINATION /) - endif() - -diff --git a/software/usb_ir/files/systemd/usr/bin/iguanaIR-rescan b/software/usb_ir/files/systemd/usr/bin/iguanaIR-rescan -index a41a59d..9d0a700 100755 ---- a/software/usb_ir/files/systemd/usr/bin/iguanaIR-rescan -+++ b/software/usb_ir/files/systemd/usr/bin/iguanaIR-rescan -@@ -4,11 +4,11 @@ - # signal fails, restart daemon. - - if systemctl --quiet is-active iguanaIR.service; then -- pid=$( systemctl --property=MainPID show iguanaIR.service ) || \ -- pid='' -- pid=${pid##*=} -- [ -n "$pid" ] && kill -HUP $pid &>/dev/null && exit 0 -+ pid=$( systemctl --property=MainPID show iguanaIR.service ) || \ -+ pid='' -+ pid=${pid##*=} -+ [ -n "$pid" ] && kill -HUP $pid &>/dev/null && exit 0 - fi - systemctl show --property=UnitFileState iguanaIR.service | -- grep -q enabled && \ -- systemctl restart iguanaIR.service -+ grep -q enabled && \ -+ systemctl restart iguanaIR.service --- -2.9.3 - diff --git a/0013-Convert-all-files-to-LF-line-endings-like-main-drive.patch b/0013-Convert-all-files-to-LF-line-endings-like-main-drive.patch deleted file mode 100644 index 107a0a4..0000000 --- a/0013-Convert-all-files-to-LF-line-endings-like-main-drive.patch +++ /dev/null @@ -1,988 +0,0 @@ -From c75c2561ae65c711a80136e96fcba0f0fbb00294 Mon Sep 17 00:00:00 2001 -From: Alec Leamas -Date: Thu, 1 Sep 2016 03:25:23 +0200 -Subject: [PATCH 13/13] Convert all files to LF line endings (like main driver - files). - ---- - 60-blacklist-kernel-iguanair.conf | 4 +- - Makefile | 90 ++--- - iguanair.c | 728 +++++++++++++++++++------------------- - iguanair.conf | 26 +- - iguanair.html | 36 +- - iguanair.txt | 56 +-- - 6 files changed, 470 insertions(+), 470 deletions(-) - -diff --git a/60-blacklist-kernel-iguanair.conf b/60-blacklist-kernel-iguanair.conf -index 1cf1cfa..1888c18 100755 ---- a/60-blacklist-kernel-iguanair.conf -+++ b/60-blacklist-kernel-iguanair.conf -@@ -1,2 +1,2 @@ --# kernel iguanair module conflicts with userspace IguanaIR daemon --blacklist iguanair -+# kernel iguanair module conflicts with userspace IguanaIR daemon -+blacklist iguanair -diff --git a/Makefile b/Makefile -index 4db147a..dd093eb 100755 ---- a/Makefile -+++ b/Makefile -@@ -1,45 +1,45 @@ --# --# Template for building a lirc userspace driver out of tree. --# Requires that lirc is installed in system locations, in --# particular that the /usr/lib[64]/pkgconfig/lirc-driver.pc --# is in place (/usr/local/lib/pkgconfig/... is also OK). --# The required file plugindocs.mk might live in a -doc --# package which then is needed. --# -- -- --driver = iguanair -- --all: $(driver).so -- --CFLAGS += $(shell pkg-config --cflags lirc-driver) --LDFLAGS += $(shell pkg-config --libs lirc-driver) --PLUGINDIR ?= $(shell pkg-config --variable=plugindir lirc-driver) --CONFIGDIR ?= $(shell pkg-config --variable=configdir lirc-driver) --PLUGINDOCS ?= $(shell pkg-config --variable=plugindocs lirc-driver) -- --PLUGINDOCS_MK = $(PLUGINDOCS)/plugindocs.mk --MODPROBE_CONF = 60-blacklist-kernel-iguanair.conf -- --ifneq ($(wildcard $(PLUGINDOCS_MK)),) -- include $(PLUGINDOCS_MK) --endif -- -- --$(driver).o: $(driver).c -- --$(driver).so: $(driver).o -- gcc --shared -fpic $(LDFLAGS) -o $@ $< -- --install: $(driver).so -- install -pDm 755 $< $(DESTDIR)$(PLUGINDIR)/$< -- install -pDm 644 $(driver).html $(DESTDIR)$(PLUGINDOCS)/$(driver).html -- install -pDm 644 $(driver).conf $(DESTDIR)$(CONFIGDIR)/$(driver).conf -- install -pDm 644 $(MODPROBE_CONF) \ -- $(DESTDIR)/etc/modprobe.d/$(MODPROBE_CONF) --ifneq ($(wildcard $(PLUGINDOCS_MK)),) -- $(MAKE) update --endif -- --clean: -- rm -f *.o *.so -+# -+# Template for building a lirc userspace driver out of tree. -+# Requires that lirc is installed in system locations, in -+# particular that the /usr/lib[64]/pkgconfig/lirc-driver.pc -+# is in place (/usr/local/lib/pkgconfig/... is also OK). -+# The required file plugindocs.mk might live in a -doc -+# package which then is needed. -+# -+ -+ -+driver = iguanair -+ -+all: $(driver).so -+ -+CFLAGS += $(shell pkg-config --cflags lirc-driver) -+LDFLAGS += $(shell pkg-config --libs lirc-driver) -+PLUGINDIR ?= $(shell pkg-config --variable=plugindir lirc-driver) -+CONFIGDIR ?= $(shell pkg-config --variable=configdir lirc-driver) -+PLUGINDOCS ?= $(shell pkg-config --variable=plugindocs lirc-driver) -+ -+PLUGINDOCS_MK = $(PLUGINDOCS)/plugindocs.mk -+MODPROBE_CONF = 60-blacklist-kernel-iguanair.conf -+ -+ifneq ($(wildcard $(PLUGINDOCS_MK)),) -+ include $(PLUGINDOCS_MK) -+endif -+ -+ -+$(driver).o: $(driver).c -+ -+$(driver).so: $(driver).o -+ gcc --shared -fpic $(LDFLAGS) -o $@ $< -+ -+install: $(driver).so -+ install -pDm 755 $< $(DESTDIR)$(PLUGINDIR)/$< -+ install -pDm 644 $(driver).html $(DESTDIR)$(PLUGINDOCS)/$(driver).html -+ install -pDm 644 $(driver).conf $(DESTDIR)$(CONFIGDIR)/$(driver).conf -+ install -pDm 644 $(MODPROBE_CONF) \ -+ $(DESTDIR)/etc/modprobe.d/$(MODPROBE_CONF) -+ifneq ($(wildcard $(PLUGINDOCS_MK)),) -+ $(MAKE) update -+endif -+ -+clean: -+ rm -f *.o *.so -diff --git a/iguanair.c b/iguanair.c -index f2e5794..a43665f 100755 ---- a/iguanair.c -+++ b/iguanair.c -@@ -1,364 +1,364 @@ --/**************************************************************************** --** hw_iguanaIR.c *********************************************************** --**************************************************************************** --* --* routines for interfacing with Iguanaworks USB IR devices --* --* Copyright (C) 2006, Joseph Dunn --* --* Distribute under GPL version 2. --* --*/ -- --#ifdef HAVE_CONFIG_H --# include --#endif -- --#include --#include --#include --#include --#include --#include --#if defined __APPLE__ --#include --#include --#else --#include --#endif --#include -- --#include "lirc_driver.h" -- --#include "iguanaIR.h" --static const logchannel_t logchannel = LOG_DRIVER; -- --static int sendConn = -1; --static pid_t child = 0; --static int recvDone = 0; --static int currentCarrier = -1; -- --static void quitHandler(int sig) --{ -- recvDone = 1; --} -- --static void recv_loop(int fd, int notify) --{ -- int conn; -- -- alarm(0); -- signal(SIGTERM, quitHandler); -- /* signal(SIGPIPE, SIG_DFL); */ -- signal(SIGINT, quitHandler); -- signal(SIGHUP, SIG_IGN); -- signal(SIGALRM, SIG_IGN); -- -- /* notify parent by closing notify */ -- close(notify); -- -- conn = iguanaConnect(drv.device); -- if (conn != -1) { -- iguanaPacket request, response; -- lirc_t prevCode = -1; -- -- request = iguanaCreateRequest(IG_DEV_RECVON, 0, NULL); -- if (iguanaWriteRequest(request, conn)) { -- while (!recvDone) { -- /* read from device */ -- do -- response = iguanaReadResponse(conn, 1000); -- while (!recvDone && ((response == NULL && errno == ETIMEDOUT) -- || (iguanaResponseIsError(response) && errno == ETIMEDOUT))); -- -- if (iguanaResponseIsError(response)) { -- /* be quiet during exit */ -- if (!recvDone) -- log_error("error response: %s\n", strerror(errno)); -- break; -- } else if (iguanaCode(response) == IG_DEV_RECV) { -- uint32_t* code; -- unsigned int length, x, y = 0; -- lirc_t buffer[8]; /* we read 8 bytes max at a time -- * from the device, i.e. packet -- * can only contain 8 -- * signals. */ -- -- /* pull the data off the packet */ -- code = (uint32_t*)iguanaRemoveData(response, &length); -- length /= sizeof(uint32_t); -- -- /* translate the code into lirc_t pulses (and make -- * sure they don't split across iguana packets. */ -- for (x = 0; x < length; x++) { -- if (prevCode == -1) { -- prevCode = (code[x] & IG_PULSE_MASK); -- if (prevCode > PULSE_MASK) -- prevCode = PULSE_MASK; -- if (code[x] & IG_PULSE_BIT) -- prevCode |= PULSE_BIT; -- } else if (((prevCode & PULSE_BIT) && (code[x] & IG_PULSE_BIT)) -- || (!(prevCode & PULSE_BIT) && !(code[x] & IG_PULSE_BIT))) { -- /* can overflow pulse mask, so just set to -- * largest possible */ -- if ((prevCode & PULSE_MASK) + (code[x] & IG_PULSE_MASK) > -- PULSE_MASK) -- prevCode = (prevCode & PULSE_BIT) | PULSE_MASK; -- else -- prevCode += code[x] & IG_PULSE_MASK; -- } else { -- buffer[y] = prevCode; -- y++; -- -- prevCode = (code[x] & IG_PULSE_MASK); -- if (prevCode > PULSE_MASK) -- prevCode = PULSE_MASK; -- if (code[x] & IG_PULSE_BIT) -- prevCode |= PULSE_BIT; -- } -- } -- -- /* write the data and free it */ -- if (y > 0) { -- chk_write(fd, -- buffer, -- sizeof(lirc_t) * y); -- } -- free(code); -- } -- -- iguanaFreePacket(response); -- } -- } -- -- iguanaFreePacket(request); -- } -- -- iguanaClose(conn); -- close(fd); --} -- --static int iguana_init(void) --{ -- int recv_pipe[2], retval = 0; -- -- rec_buffer_init(); -- -- if (pipe(recv_pipe) != 0) { -- log_error("couldn't open pipe: %s", strerror(errno)); -- } else { -- int notify[2]; -- -- if (pipe(notify) != 0) { -- log_error("couldn't open pipe: %s", strerror(errno)); -- close(recv_pipe[0]); -- close(recv_pipe[1]); -- } else { -- drv.fd = recv_pipe[0]; -- -- child = fork(); -- if (child == -1) { -- log_error("couldn't fork child process: %s", strerror(errno)); -- } else if (child == 0) { -- close(recv_pipe[0]); -- close(notify[0]); -- recv_loop(recv_pipe[1], notify[1]); -- _exit(0); -- } else { -- int dummy; -- -- close(recv_pipe[1]); -- close(notify[1]); -- /* make sure child has set its signal handler to avoid race with iguana_deinit() */ -- chk_read(notify[0], &dummy, 1); -- close(notify[0]); -- sendConn = iguanaConnect(drv.device); -- if (sendConn == -1) { -- log_error("couldn't open connection to iguanaIR daemon: %s", -- strerror(errno)); -- } else { -- retval = 1; -- } -- } -- } -- } -- -- return retval; --} -- --static pid_t dowaitpid(pid_t pid, int* stat_loc, int options) --{ -- pid_t retval; -- -- do -- retval = waitpid(pid, stat_loc, options); -- while (retval == (pid_t)-1 && errno == EINTR); -- -- return retval; --} -- --static int iguana_deinit(void) --{ -- /* close the connection to the iguana daemon */ -- if (sendConn != -1) { -- iguanaClose(sendConn); -- sendConn = -1; -- } -- -- /* signal the child process to exit */ -- if (child > 0 && (kill(child, SIGTERM) == -1 || dowaitpid(child, NULL, 0) != (pid_t)-1)) -- child = 0; -- -- /* close drv.fd since otherwise we leak open files */ -- close(drv.fd); -- drv.fd = -1; -- -- return child == 0; --} -- --static char* iguana_rec(struct ir_remote* remotes) --{ -- char* retval = NULL; -- -- if (rec_buffer_clear()) -- retval = decode_all(remotes); -- return retval; --} -- --static bool daemonTransaction(unsigned char code, void* value, size_t size) --{ -- uint8_t* data; -- bool retval = false; -- -- data = (uint8_t*)malloc(size); -- if (data != NULL) { -- iguanaPacket request, response = NULL; -- -- memcpy(data, value, size); -- request = iguanaCreateRequest(code, size, data); -- if (request) { -- if (iguanaWriteRequest(request, sendConn)) -- response = iguanaReadResponse(sendConn, 10000); -- iguanaFreePacket(request); -- } else { -- free(data); -- } -- -- /* handle success */ -- if (!iguanaResponseIsError(response)) -- retval = true; -- iguanaFreePacket(response); -- } -- return retval; --} -- --static int iguana_send(struct ir_remote* remote, struct ir_ncode* code) --{ -- int retval = 0; -- uint32_t freq; -- -- /* set the carrier frequency if necessary */ -- freq = htonl(remote->freq); -- if (remote->freq != currentCarrier && remote->freq >= 25000 && remote->freq <= 100000 -- && daemonTransaction(IG_DEV_SETCARRIER, &freq, sizeof(freq))) -- currentCarrier = remote->freq; -- -- if (send_buffer_put(remote, code)) { -- int length, x; -- const lirc_t* signals; -- uint32_t* igsignals; -- -- length = send_buffer_length(); -- signals = send_buffer_data(); -- -- igsignals = (uint32_t*)malloc(sizeof(uint32_t) * length); -- if (igsignals != NULL) { -- iguanaPacket request, response = NULL; -- -- /* must pack the data into a unit32_t array */ -- for (x = 0; x < length; x++) { -- igsignals[x] = signals[x] & PULSE_MASK; -- if (signals[x] & PULSE_BIT) -- igsignals[x] |= IG_PULSE_BIT; -- } -- -- /* construct a request and send it to the daemon -- * TRICKY: IguanaFreePacket free()'s both the -- * igsignals chunk and the request packet, but -- * iguanaCreateRequest does not malloc that chunk. -- */ -- request = iguanaCreateRequest(IG_DEV_SEND, sizeof(uint32_t) * length, igsignals); -- if (iguanaWriteRequest(request, sendConn)) { -- /* response will only come back after the device has -- * transmitted */ -- response = iguanaReadResponse(sendConn, 10000); -- if (!iguanaResponseIsError(response)) -- retval = 1; -- -- iguanaFreePacket(response); -- } -- -- /* free the packet and the data */ -- iguanaFreePacket(request); -- } -- } -- -- return retval; --} -- --static int iguana_ioctl(unsigned int code, void* arg) --{ -- int retcode = -1; -- uint8_t channels = *(uint8_t*)arg; -- -- /* set the transmit channels: return 0 on success, 4 if -- * out-of-range (see ioctl) */ -- if (code == LIRC_SET_TRANSMITTER_MASK) { -- if (channels > 0x0F) -- retcode = 4; -- else if (daemonTransaction(IG_DEV_SETCHANNELS, &channels, sizeof(channels))) -- retcode = 0; -- } -- -- return retcode; --} -- --static lirc_t readdata(lirc_t timeout) --{ -- lirc_t code = 0; -- struct pollfd pfd = {.fd = drv.fd, .events = POLLIN, .revents = 0}; -- /* attempt a read with a timeout using select */ -- if (poll(&pfd, 1, timeout / 1000) > 0) { -- /* if we failed to get data return 0 */ -- if (read(drv.fd, &code, sizeof(lirc_t)) <= 0) -- iguana_deinit(); -- } -- return code; --} -- --const struct driver hw_iguanaIR = { -- .name = "iguanaIR", -- .device = "0", -- .features = LIRC_CAN_REC_MODE2 | \ -- LIRC_CAN_SEND_PULSE | \ -- LIRC_CAN_SET_SEND_CARRIER | \ -- LIRC_CAN_SET_TRANSMITTER_MASK, -- .send_mode = LIRC_MODE_PULSE, -- .rec_mode = LIRC_MODE_MODE2, -- .code_length = sizeof(int), -- .init_func = iguana_init, -- .deinit_func = iguana_deinit, -- .open_func = default_open, -- .close_func = default_close, -- .send_func = iguana_send, -- .rec_func = iguana_rec, -- .decode_func = receive_decode, -- .drvctl_func = iguana_ioctl, -- .readdata = readdata, -- .api_version = 3, -- .driver_version = "0.9.3", -- .info = "See file://" PLUGINDOCS "/iguanair.html", -- .device_hint = "/var/run/iguanaIR/*", --}; -- --const struct driver* hardwares[] = { &hw_iguanaIR, (const struct driver*)NULL }; -+/**************************************************************************** -+** hw_iguanaIR.c *********************************************************** -+**************************************************************************** -+* -+* routines for interfacing with Iguanaworks USB IR devices -+* -+* Copyright (C) 2006, Joseph Dunn -+* -+* Distribute under GPL version 2. -+* -+*/ -+ -+#ifdef HAVE_CONFIG_H -+# include -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#if defined __APPLE__ -+#include -+#include -+#else -+#include -+#endif -+#include -+ -+#include "lirc_driver.h" -+ -+#include "iguanaIR.h" -+static const logchannel_t logchannel = LOG_DRIVER; -+ -+static int sendConn = -1; -+static pid_t child = 0; -+static int recvDone = 0; -+static int currentCarrier = -1; -+ -+static void quitHandler(int sig) -+{ -+ recvDone = 1; -+} -+ -+static void recv_loop(int fd, int notify) -+{ -+ int conn; -+ -+ alarm(0); -+ signal(SIGTERM, quitHandler); -+ /* signal(SIGPIPE, SIG_DFL); */ -+ signal(SIGINT, quitHandler); -+ signal(SIGHUP, SIG_IGN); -+ signal(SIGALRM, SIG_IGN); -+ -+ /* notify parent by closing notify */ -+ close(notify); -+ -+ conn = iguanaConnect(drv.device); -+ if (conn != -1) { -+ iguanaPacket request, response; -+ lirc_t prevCode = -1; -+ -+ request = iguanaCreateRequest(IG_DEV_RECVON, 0, NULL); -+ if (iguanaWriteRequest(request, conn)) { -+ while (!recvDone) { -+ /* read from device */ -+ do -+ response = iguanaReadResponse(conn, 1000); -+ while (!recvDone && ((response == NULL && errno == ETIMEDOUT) -+ || (iguanaResponseIsError(response) && errno == ETIMEDOUT))); -+ -+ if (iguanaResponseIsError(response)) { -+ /* be quiet during exit */ -+ if (!recvDone) -+ log_error("error response: %s\n", strerror(errno)); -+ break; -+ } else if (iguanaCode(response) == IG_DEV_RECV) { -+ uint32_t* code; -+ unsigned int length, x, y = 0; -+ lirc_t buffer[8]; /* we read 8 bytes max at a time -+ * from the device, i.e. packet -+ * can only contain 8 -+ * signals. */ -+ -+ /* pull the data off the packet */ -+ code = (uint32_t*)iguanaRemoveData(response, &length); -+ length /= sizeof(uint32_t); -+ -+ /* translate the code into lirc_t pulses (and make -+ * sure they don't split across iguana packets. */ -+ for (x = 0; x < length; x++) { -+ if (prevCode == -1) { -+ prevCode = (code[x] & IG_PULSE_MASK); -+ if (prevCode > PULSE_MASK) -+ prevCode = PULSE_MASK; -+ if (code[x] & IG_PULSE_BIT) -+ prevCode |= PULSE_BIT; -+ } else if (((prevCode & PULSE_BIT) && (code[x] & IG_PULSE_BIT)) -+ || (!(prevCode & PULSE_BIT) && !(code[x] & IG_PULSE_BIT))) { -+ /* can overflow pulse mask, so just set to -+ * largest possible */ -+ if ((prevCode & PULSE_MASK) + (code[x] & IG_PULSE_MASK) > -+ PULSE_MASK) -+ prevCode = (prevCode & PULSE_BIT) | PULSE_MASK; -+ else -+ prevCode += code[x] & IG_PULSE_MASK; -+ } else { -+ buffer[y] = prevCode; -+ y++; -+ -+ prevCode = (code[x] & IG_PULSE_MASK); -+ if (prevCode > PULSE_MASK) -+ prevCode = PULSE_MASK; -+ if (code[x] & IG_PULSE_BIT) -+ prevCode |= PULSE_BIT; -+ } -+ } -+ -+ /* write the data and free it */ -+ if (y > 0) { -+ chk_write(fd, -+ buffer, -+ sizeof(lirc_t) * y); -+ } -+ free(code); -+ } -+ -+ iguanaFreePacket(response); -+ } -+ } -+ -+ iguanaFreePacket(request); -+ } -+ -+ iguanaClose(conn); -+ close(fd); -+} -+ -+static int iguana_init(void) -+{ -+ int recv_pipe[2], retval = 0; -+ -+ rec_buffer_init(); -+ -+ if (pipe(recv_pipe) != 0) { -+ log_error("couldn't open pipe: %s", strerror(errno)); -+ } else { -+ int notify[2]; -+ -+ if (pipe(notify) != 0) { -+ log_error("couldn't open pipe: %s", strerror(errno)); -+ close(recv_pipe[0]); -+ close(recv_pipe[1]); -+ } else { -+ drv.fd = recv_pipe[0]; -+ -+ child = fork(); -+ if (child == -1) { -+ log_error("couldn't fork child process: %s", strerror(errno)); -+ } else if (child == 0) { -+ close(recv_pipe[0]); -+ close(notify[0]); -+ recv_loop(recv_pipe[1], notify[1]); -+ _exit(0); -+ } else { -+ int dummy; -+ -+ close(recv_pipe[1]); -+ close(notify[1]); -+ /* make sure child has set its signal handler to avoid race with iguana_deinit() */ -+ chk_read(notify[0], &dummy, 1); -+ close(notify[0]); -+ sendConn = iguanaConnect(drv.device); -+ if (sendConn == -1) { -+ log_error("couldn't open connection to iguanaIR daemon: %s", -+ strerror(errno)); -+ } else { -+ retval = 1; -+ } -+ } -+ } -+ } -+ -+ return retval; -+} -+ -+static pid_t dowaitpid(pid_t pid, int* stat_loc, int options) -+{ -+ pid_t retval; -+ -+ do -+ retval = waitpid(pid, stat_loc, options); -+ while (retval == (pid_t)-1 && errno == EINTR); -+ -+ return retval; -+} -+ -+static int iguana_deinit(void) -+{ -+ /* close the connection to the iguana daemon */ -+ if (sendConn != -1) { -+ iguanaClose(sendConn); -+ sendConn = -1; -+ } -+ -+ /* signal the child process to exit */ -+ if (child > 0 && (kill(child, SIGTERM) == -1 || dowaitpid(child, NULL, 0) != (pid_t)-1)) -+ child = 0; -+ -+ /* close drv.fd since otherwise we leak open files */ -+ close(drv.fd); -+ drv.fd = -1; -+ -+ return child == 0; -+} -+ -+static char* iguana_rec(struct ir_remote* remotes) -+{ -+ char* retval = NULL; -+ -+ if (rec_buffer_clear()) -+ retval = decode_all(remotes); -+ return retval; -+} -+ -+static bool daemonTransaction(unsigned char code, void* value, size_t size) -+{ -+ uint8_t* data; -+ bool retval = false; -+ -+ data = (uint8_t*)malloc(size); -+ if (data != NULL) { -+ iguanaPacket request, response = NULL; -+ -+ memcpy(data, value, size); -+ request = iguanaCreateRequest(code, size, data); -+ if (request) { -+ if (iguanaWriteRequest(request, sendConn)) -+ response = iguanaReadResponse(sendConn, 10000); -+ iguanaFreePacket(request); -+ } else { -+ free(data); -+ } -+ -+ /* handle success */ -+ if (!iguanaResponseIsError(response)) -+ retval = true; -+ iguanaFreePacket(response); -+ } -+ return retval; -+} -+ -+static int iguana_send(struct ir_remote* remote, struct ir_ncode* code) -+{ -+ int retval = 0; -+ uint32_t freq; -+ -+ /* set the carrier frequency if necessary */ -+ freq = htonl(remote->freq); -+ if (remote->freq != currentCarrier && remote->freq >= 25000 && remote->freq <= 100000 -+ && daemonTransaction(IG_DEV_SETCARRIER, &freq, sizeof(freq))) -+ currentCarrier = remote->freq; -+ -+ if (send_buffer_put(remote, code)) { -+ int length, x; -+ const lirc_t* signals; -+ uint32_t* igsignals; -+ -+ length = send_buffer_length(); -+ signals = send_buffer_data(); -+ -+ igsignals = (uint32_t*)malloc(sizeof(uint32_t) * length); -+ if (igsignals != NULL) { -+ iguanaPacket request, response = NULL; -+ -+ /* must pack the data into a unit32_t array */ -+ for (x = 0; x < length; x++) { -+ igsignals[x] = signals[x] & PULSE_MASK; -+ if (signals[x] & PULSE_BIT) -+ igsignals[x] |= IG_PULSE_BIT; -+ } -+ -+ /* construct a request and send it to the daemon -+ * TRICKY: IguanaFreePacket free()'s both the -+ * igsignals chunk and the request packet, but -+ * iguanaCreateRequest does not malloc that chunk. -+ */ -+ request = iguanaCreateRequest(IG_DEV_SEND, sizeof(uint32_t) * length, igsignals); -+ if (iguanaWriteRequest(request, sendConn)) { -+ /* response will only come back after the device has -+ * transmitted */ -+ response = iguanaReadResponse(sendConn, 10000); -+ if (!iguanaResponseIsError(response)) -+ retval = 1; -+ -+ iguanaFreePacket(response); -+ } -+ -+ /* free the packet and the data */ -+ iguanaFreePacket(request); -+ } -+ } -+ -+ return retval; -+} -+ -+static int iguana_ioctl(unsigned int code, void* arg) -+{ -+ int retcode = -1; -+ uint8_t channels = *(uint8_t*)arg; -+ -+ /* set the transmit channels: return 0 on success, 4 if -+ * out-of-range (see ioctl) */ -+ if (code == LIRC_SET_TRANSMITTER_MASK) { -+ if (channels > 0x0F) -+ retcode = 4; -+ else if (daemonTransaction(IG_DEV_SETCHANNELS, &channels, sizeof(channels))) -+ retcode = 0; -+ } -+ -+ return retcode; -+} -+ -+static lirc_t readdata(lirc_t timeout) -+{ -+ lirc_t code = 0; -+ struct pollfd pfd = {.fd = drv.fd, .events = POLLIN, .revents = 0}; -+ /* attempt a read with a timeout using select */ -+ if (poll(&pfd, 1, timeout / 1000) > 0) { -+ /* if we failed to get data return 0 */ -+ if (read(drv.fd, &code, sizeof(lirc_t)) <= 0) -+ iguana_deinit(); -+ } -+ return code; -+} -+ -+const struct driver hw_iguanaIR = { -+ .name = "iguanaIR", -+ .device = "0", -+ .features = LIRC_CAN_REC_MODE2 | \ -+ LIRC_CAN_SEND_PULSE | \ -+ LIRC_CAN_SET_SEND_CARRIER | \ -+ LIRC_CAN_SET_TRANSMITTER_MASK, -+ .send_mode = LIRC_MODE_PULSE, -+ .rec_mode = LIRC_MODE_MODE2, -+ .code_length = sizeof(int), -+ .init_func = iguana_init, -+ .deinit_func = iguana_deinit, -+ .open_func = default_open, -+ .close_func = default_close, -+ .send_func = iguana_send, -+ .rec_func = iguana_rec, -+ .decode_func = receive_decode, -+ .drvctl_func = iguana_ioctl, -+ .readdata = readdata, -+ .api_version = 3, -+ .driver_version = "0.9.3", -+ .info = "See file://" PLUGINDOCS "/iguanair.html", -+ .device_hint = "/var/run/iguanaIR/*", -+}; -+ -+const struct driver* hardwares[] = { &hw_iguanaIR, (const struct driver*)NULL }; -diff --git a/iguanair.conf b/iguanair.conf -index 12e9523..6d17d77 100755 ---- a/iguanair.conf -+++ b/iguanair.conf -@@ -1,13 +1,13 @@ --# This is a lirc configuration for a capture device. --# See README for more. -- --config: -- driver: iguanaIR -- id: iguanaIR -- label: Iguanaworks USB IR Transceiver -- menu: usb -- note: This is the user-space driver from Iguanaworks, Inc. -- There is also a built-in kernel driver. Both can be used -- but not concurrently. -- product_driver: 1781:0938 -- modprobe: [blacklist iguanair] -+# This is a lirc configuration for a capture device. -+# See README for more. -+ -+config: -+ driver: iguanaIR -+ id: iguanaIR -+ label: Iguanaworks USB IR Transceiver -+ menu: usb -+ note: This is the user-space driver from Iguanaworks, Inc. -+ There is also a built-in kernel driver. Both can be used -+ but not concurrently. -+ product_driver: 1781:0938 -+ modprobe: [blacklist iguanair] -diff --git a/iguanair.html b/iguanair.html -index 99609c3..a62cdb1 100755 ---- a/iguanair.html -+++ b/iguanair.html -@@ -1,18 +1,18 @@ --

-- This driver supports both receiving and sending (blasting) using -- the IguanaIR devices from -- http://iguanaworks.net/ir.

--

-- The LIRC driver works on top of the IguanaIR low-level userspace -- driver which provides a socket interface. It is available from -- the same source, and also packaged for many distributions -- including Debian, Fedora and Arch Linux. --

-- The --device argument to the driver is a socket designator created -- by the low-level driveri. It defaults to '0' which implies -- /run/iguanair/0. --

-- The kernel has built-in support for these devices in the -- iguanair module. This can be used instead of this driver in -- many cases. If the userspace driver should be used, the -- kernel driver must be blacklisted.

-+

-+ This driver supports both receiving and sending (blasting) using -+ the IguanaIR devices from -+ http://iguanaworks.net/ir.

-+

-+ The LIRC driver works on top of the IguanaIR low-level userspace -+ driver which provides a socket interface. It is available from -+ the same source, and also packaged for many distributions -+ including Debian, Fedora and Arch Linux. -+

-+ The --device argument to the driver is a socket designator created -+ by the low-level driveri. It defaults to '0' which implies -+ /run/iguanair/0. -+

-+ The kernel has built-in support for these devices in the -+ iguanair module. This can be used instead of this driver in -+ many cases. If the userspace driver should be used, the -+ kernel driver must be blacklisted.

-diff --git a/iguanair.txt b/iguanair.txt -index 843baf6..4494163 100755 ---- a/iguanair.txt -+++ b/iguanair.txt -@@ -1,28 +1,28 @@ --IguanaIR LIRC driver README --=========================== -- --This driver used to be part of the LIRC sources. In order to improve --the maintenance it has been moved to Iguanaworks, Inc which is the --primary hardware and software vendor. -- --From 0.9.4 the driver is available at: https://github.com/iguanaworks/iguanair-lirc -- --As a transition step the same files are available here during the 0.9.4 --cycle. These files are a complete lirc driver for iguanair. Building requires --lirc >= 0.9.4. If you are using a packaged version you probably need to --have the -devel and -doc packages installed. Note that the downstream --sources at https://github.com/iguanaworks/iguanair-lirc are preferred and --will be the only option in next release. -- --To build and install the driver together with the support files: -- -- $ make -- $ sudo make install -- --Verifying the driver after make install: -- -- $ lirc-lsplugins -q iguanair -- --- /usr/lib64/lirc/plugins/iguanair.so -- --You could also find the driver docs in the manual. The path varies, but --in a packaged version typically /usr/share/doc/lirc/lirc.org/html/index.html. -+IguanaIR LIRC driver README -+=========================== -+ -+This driver used to be part of the LIRC sources. In order to improve -+the maintenance it has been moved to Iguanaworks, Inc which is the -+primary hardware and software vendor. -+ -+From 0.9.4 the driver is available at: https://github.com/iguanaworks/iguanair-lirc -+ -+As a transition step the same files are available here during the 0.9.4 -+cycle. These files are a complete lirc driver for iguanair. Building requires -+lirc >= 0.9.4. If you are using a packaged version you probably need to -+have the -devel and -doc packages installed. Note that the downstream -+sources at https://github.com/iguanaworks/iguanair-lirc are preferred and -+will be the only option in next release. -+ -+To build and install the driver together with the support files: -+ -+ $ make -+ $ sudo make install -+ -+Verifying the driver after make install: -+ -+ $ lirc-lsplugins -q iguanair -+ --- /usr/lib64/lirc/plugins/iguanair.so -+ -+You could also find the driver docs in the manual. The path varies, but -+in a packaged version typically /usr/share/doc/lirc/lirc.org/html/index.html. --- -2.5.5 - diff --git a/0016-reflasher-Move-to-python3.patch b/0016-reflasher-Move-to-python3.patch deleted file mode 100644 index 516c9bd..0000000 --- a/0016-reflasher-Move-to-python3.patch +++ /dev/null @@ -1,106 +0,0 @@ -From ad3c951d613fd8926f2afc4ce219dee592418fad Mon Sep 17 00:00:00 2001 -From: Alec Leamas -Date: Thu, 22 Aug 2019 18:42:11 +0200 -Subject: [PATCH] reflasher: Move to python3. - ---- - files/python/usr/bin/iguanaIR-reflasher | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/files/python/usr/share/iguanaIR-reflasher/iguanaIR-reflasher b/files/python/usr/bin/iguanaIR-reflasher/iguanaIR-reflasher -index 97cacc2..abfbc50 100755 ---- a/files/python/usr/share/iguanaIR-reflasher/iguanaIR-reflasher -+++ b/files/python/usr/share/iguanaIR-reflasher/iguanaIR-reflasher -@@ -1,4 +1,4 @@ --#!/usr/bin/python2.7 -tt -+#!/usr/bin/python3 - # - # ************************************************************************** - # ** upgrade-usb *********************************************************** -@@ -215,7 +215,7 @@ def listDevices(path = iguanaIR.IGSOCK_NAME): - if device != 'ctl' and \ - not stat.S_ISLNK(os.lstat(os.path.join(path, device)).st_mode): - devices.append(device) -- except Exception, inst: -+ except Exception as inst: - devices = ['0'] - if MessageCannotlistdevice == False: - message(LOG_WARN,"""Guessing device "0", failed to list devices:\n %s\n""" % inst) -@@ -466,7 +466,7 @@ def writePagesToDevice(pages): - count += 1 - if count == rebootPage: - sys.stdout.write('\n Rebooting device') -- print deviceTransaction(iguanaIR.IG_DEV_RESET) -+ print(deviceTransaction(iguanaIR.IG_DEV_RESET)) - if deviceVersion() != version: - message(LOG_WARN, "Mid-write reboot unsuccessful.\n") - -@@ -506,7 +506,7 @@ def writeHexFile(filename, blank_pages = False, setFeatures = False): - pages = readPages(open(filename, 'r')) - - if blank_pages: -- blanks = range(128) -+ blanks = list(range(128)) - for page in pages: - blanks.remove(page['start'] / 64) - -@@ -538,7 +538,7 @@ def writeHexFile(filename, blank_pages = False, setFeatures = False): - def checkFileExists(path): - try: - os.stat(path) -- except OSError, inst: -+ except OSError as inst: - if inst[0] != errno.ENOENT: - raise - return False --- -2.20.1 - -diff --git a/files/python/usr/bin/iguanaIR-reflasher b/files/python/usr/bin/iguanaIR-reflasher -index 97cacc2..abfbc50 100755 ---- a/files/python/usr/bin/iguanaIR-reflasher -+++ b/files/python/usr/bin/iguanaIR-reflasher -@@ -1,4 +1,4 @@ --#!/usr/bin/python2.7 -tt -+#!/usr/bin/python3 - # - # ************************************************************************** - # ** upgrade-usb *********************************************************** -@@ -215,7 +215,7 @@ def listDevices(path = iguanaIR.IGSOCK_NAME): - if device != 'ctl' and \ - not stat.S_ISLNK(os.lstat(os.path.join(path, device)).st_mode): - devices.append(device) -- except Exception, inst: -+ except Exception as inst: - devices = ['0'] - if MessageCannotlistdevice == False: - message(LOG_WARN,"""Guessing device "0", failed to list devices:\n %s\n""" % inst) -@@ -466,7 +466,7 @@ def writePagesToDevice(pages): - count += 1 - if count == rebootPage: - sys.stdout.write('\n Rebooting device') -- print deviceTransaction(iguanaIR.IG_DEV_RESET) -+ print(deviceTransaction(iguanaIR.IG_DEV_RESET)) - if deviceVersion() != version: - message(LOG_WARN, "Mid-write reboot unsuccessful.\n") - -@@ -506,7 +506,7 @@ def writeHexFile(filename, blank_pages = False, setFeatures = False): - pages = readPages(open(filename, 'r')) - - if blank_pages: -- blanks = range(128) -+ blanks = list(range(128)) - for page in pages: - blanks.remove(page['start'] / 64) - -@@ -538,7 +538,7 @@ def writeHexFile(filename, blank_pages = False, setFeatures = False): - def checkFileExists(path): - try: - os.stat(path) -- except OSError, inst: -+ except OSError as inst: - if inst[0] != errno.ENOENT: - raise - return False --- -2.20.1 diff --git a/0020-build-Fix-DESTDIR-dont-update-docs.patch b/0020-build-Fix-DESTDIR-dont-update-docs.patch deleted file mode 100644 index c31d14c..0000000 --- a/0020-build-Fix-DESTDIR-dont-update-docs.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 89f10c5f0c4374fb8ac51f1878b8b79329123c5b Mon Sep 17 00:00:00 2001 -From: Alec Leamas -Date: Wed, 25 Jan 2017 16:35:50 +0100 -Subject: [PATCH] fix - ---- - .../Makefile | 22 +++++----------------- - 1 file changed, 5 insertions(+), 17 deletions(-) - -diff --git a/iguanair-lirc-e23b9d3726b010c9e747786ffe72e38debc8cfef/Makefile b/iguanair-lirc-e23b9d3726b010c9e747786ffe72e38debc8cfef/Makefile -index dd093eb..be86c43 100755 ---- a/iguanair-lirc-e23b9d3726b010c9e747786ffe72e38debc8cfef/Makefile -+++ b/iguanair-lirc-e23b9d3726b010c9e747786ffe72e38debc8cfef/Makefile -@@ -3,9 +3,6 @@ - # Requires that lirc is installed in system locations, in - # particular that the /usr/lib[64]/pkgconfig/lirc-driver.pc - # is in place (/usr/local/lib/pkgconfig/... is also OK). --# The required file plugindocs.mk might live in a -doc --# package which then is needed. --# - - - driver = iguanair -@@ -18,13 +15,7 @@ PLUGINDIR ?= $(shell pkg-config --variable=plugindir lirc-driver) - CONFIGDIR ?= $(shell pkg-config --variable=configdir lirc-driver) - PLUGINDOCS ?= $(shell pkg-config --variable=plugindocs lirc-driver) - --PLUGINDOCS_MK = $(PLUGINDOCS)/plugindocs.mk --MODPROBE_CONF = 60-blacklist-kernel-iguanair.conf -- --ifneq ($(wildcard $(PLUGINDOCS_MK)),) -- include $(PLUGINDOCS_MK) --endif -- -+MODPROBE_CONF = 60-blacklist-kernel-iguanair.conf - - $(driver).o: $(driver).c - -@@ -32,14 +23,11 @@ $(driver).so: $(driver).o - gcc --shared -fpic $(LDFLAGS) -o $@ $< - - install: $(driver).so -- install -pDm 755 $< $(DESTDIR)$(PLUGINDIR)/$< -- install -pDm 644 $(driver).html $(DESTDIR)$(PLUGINDOCS)/$(driver).html -- install -pDm 644 $(driver).conf $(DESTDIR)$(CONFIGDIR)/$(driver).conf -- install -pDm 644 $(MODPROBE_CONF) \ -+ install -D $< $(DESTDIR)$(PLUGINDIR)/$< -+ install -D $(driver).conf $(DESTDIR)$(CONFIGDIR)/$(driver).conf -+ install -D $(driver).html $(DESTDIR)$(PLUGINDOCS)/$(driver).html -+ install -Dm 644 $(MODPROBE_CONF) \ - $(DESTDIR)/etc/modprobe.d/$(MODPROBE_CONF) --ifneq ($(wildcard $(PLUGINDOCS_MK)),) -- $(MAKE) update --endif - - clean: - rm -f *.o *.so --- -2.9.3 - diff --git a/README.fedora b/README.fedora deleted file mode 100644 index f277f65..0000000 --- a/README.fedora +++ /dev/null @@ -1,13 +0,0 @@ -Fedora README -============= - -On recent kernels (F17+) you will need to disable the kernel ir stuff -to make the iguanaIR driver work. Basically, blacklist all rc_* -modules using a file in /etc/modprobe.d. The list varies, my -own file is: - - blacklist rc_medion_x10_or2x - blacklist rc_pinnacle_pctv_hd - blacklist ati_remote - blacklist rc_core - diff --git a/changeset_2710.patch b/changeset_2710.patch deleted file mode 100644 index 395037a..0000000 --- a/changeset_2710.patch +++ /dev/null @@ -1,24 +0,0 @@ -Index: /trunk/software/usb_ir/CMakeLists.txt -=================================================================== ---- trunk/software/usb_ir/CMakeLists.txt (revision 2709) -+++ trunk/software/usb_ir/CMakeLists.txt (revision 2710) -@@ -1,4 +1,7 @@ - cmake_minimum_required(VERSION 2.6) - project(IguanaIR C) -+ -+Set(SOVERSION 0) -+Set(FULLVER 0.3) - - #Set(TARGET_ANDROID true) -@@ -98,9 +101,10 @@ - iguanaIR.c dataPackets.c ${PIPESRC} - ${BASESRC}) -+set_target_properties(iguanaIR PROPERTIES -+ VERSION ${SOVERSION} SOVERSION ${FULLVER}) - set_property(TARGET iguanaIR - APPEND PROPERTY COMPILE_DEFINITIONS IGUANAIR_EXPORTS) - install(TARGETS iguanaIR - DESTINATION ${LIBDIR}) -- - - # build the service/server that controls hardware diff --git a/cmake-args.patch b/cmake-args.patch deleted file mode 100644 index 9f4031d..0000000 --- a/cmake-args.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff --git a/runCmake b/runCmake -index f37873c..6d19253 100755 ---- a/runCmake -+++ b/runCmake -@@ -40,5 +40,5 @@ fi - # create the build path - mkdir -p $BUILDDIR - cd $BUILDDIR --PATH=${QTPATH}:${PYPATH}:${PATH} ARCH=${ARCH} CSPATH=${CSPATH} ${CMAKE} ${CHAIN} .. -+PATH=${QTPATH}:${PYPATH}:${PATH} ARCH=${ARCH} CSPATH=${CSPATH} ${CMAKE} ${CHAIN} $@ .. - cd .. diff --git a/iguanaIR-rescan b/iguanaIR-rescan index a41a59d..6565144 100755 --- a/iguanaIR-rescan +++ b/iguanaIR-rescan @@ -1,7 +1,7 @@ #!/bin/bash # # If iguanaIR runs, signal HUP to start a rescan. If not started, or -# signal fails, restart daemon. +# signal fails, try-restart daemon. if systemctl --quiet is-active iguanaIR.service; then pid=$( systemctl --property=MainPID show iguanaIR.service ) || \ @@ -9,6 +9,4 @@ if systemctl --quiet is-active iguanaIR.service; then pid=${pid##*=} [ -n "$pid" ] && kill -HUP $pid &>/dev/null && exit 0 fi -systemctl show --property=UnitFileState iguanaIR.service | - grep -q enabled && \ - systemctl restart iguanaIR.service +systemctl try-restart iguanaIR.service diff --git a/iguanaIR.logrotate b/iguanaIR.logrotate index e84b43f..ce609ad 100644 --- a/iguanaIR.logrotate +++ b/iguanaIR.logrotate @@ -1,5 +1,4 @@ -/var/log/iguanaIR/*.log { - su iguanair iguanair +/var/log/iguanaIR { missingok notifempty postrotate diff --git a/iguanaIR.spec b/iguanaIR.spec index b57c995..3f95e16 100644 --- a/iguanaIR.spec +++ b/iguanaIR.spec @@ -1,427 +1,239 @@ -%global commit6 e23b9d3726b010c9e747786ffe72e38debc8cfef -%global shortcommit %(c=%{commit6}; echo ${c:0:7}) -%global repo https://github.com/iguanaworks/iguanair-lirc/archive -%global __python %{__python3} - Name: iguanaIR -Version: 1.1.0 -Release: 44%{?dist} -Epoch: 2 +Version: 1.0.3 +Release: 2%{?dist} Summary: Driver for Iguanaworks USB IR transceiver -# Automatically converted from old format: GPLv2 and LGPLv2 - review is highly recommended. -License: GPL-2.0-only AND LicenseRef-Callaway-LGPLv2 +Group: System Environment/Daemons + +# Following files are LGPL2.1, remaining GPLv2: +# ./support.h ./iguanaIR.h ./support.c ./pipes.c ./compat.h ./pipes.h +# ./iguanaIR.c ./dataPackets.h ./compat-unix.c ./dataPackets.c +License: GPLv2 and LGPLv2 URL: http://iguanaworks.net/ir -Source0: http://iguanaworks.net/downloads/%{name}-%{version}.tar.bz2 +Source0: http://iguanaworks.net/downloads/iguanaIR-%{version}.tar.bz2 Source1: iguanaIR.service Source2: iguanaIR-rescan -Source3: README.fedora -Source4: patch-soname -Source5: iguanaIR.logrotate -Source6: %{repo}/%{commit6}/iguanair-lirc-%{shortcommit}.tar.gz -# https://iguanaworks.net/projects/IguanaIR/ticket/317 -Patch1: changeset_2710.patch -Patch2: rpath.patch -Patch3: cmake-args.patch - -# https://github.com/iguanaworks/iguanair-lirc/pull/1 (Patch10..Patch13) -Source10: 0010-Change-iguanaIR.-iguanair.-to-match-other-plugins.patch -Source11: 0011-Rename-link-README-files-to-match-modified-install-r.patch -Source12: 0012-Makefile-Add-DESTDIR-support.patch -Source13: 0013-Convert-all-files-to-LF-line-endings-like-main-drive.patch - -Source20: 0020-build-Fix-DESTDIR-dont-update-docs.patch -Source21: 0016-reflasher-Move-to-python3.patch +Source3: iguanaIR.logrotate +Patch1: 0001-Remove-trailing-whitespace.patch +# http://iguanaworks.net/projects/IguanaIR/ticket/279 +Patch2: 0002-Don-t-hardcode-iguanair-UID.patch +# http://iguanaworks.net/projects/IguanaIR/ticket/280 +Patch3: 0003-Use-platform-specific-python-extension-dir.patch +# http://iguanaworks.net/projects/IguanaIR/ticket/281 +Patch4: 0004-Don-t-exit-3-in-library-calls.patch +# http://iguanaworks.net/projects/IguanaIR/ticket/282 +Patch5: 0005-Improve-driver-dir-detection.patch +# http://iguanaworks.net/projects/IguanaIR/ticket/283 +Patch6: 0006-make-options-file-work-w-systemd.patch +# http://iguanaworks.net/projects/IguanaIR/ticket/284 +Patch7: 0007-Use-fedora-specific-default-socket-directory.patch +# Fedora only, not acceptable upstream. +Patch8: 0008-udev-invoke-systemd-support-not-sysV-init-file.patch +Requires: lirc +Requires: logrotate Requires: udev -BuildRequires: cmake gcc -BuildRequires: dos2unix -BuildRequires: git BuildRequires: libusb1-devel -%if 0%{?fedora} < 37 -libusb-devel -%endif +BuildRequires: libusb-devel BuildRequires: popt-devel -BuildRequires: systemd +BuildRequires: python2-devel +BuildRequires: systemd-units + +Requires(pre): shadow-utils +Requires(post): systemd-units +Requires(post): systemd-sysv +Requires(preun): systemd-units +Requires(postun): systemd-units -%{?systemd_requires} -Requires(post): systemd-sysv # some features can be disabled during the rpm build -%{?_without_clock_gettime: %define _disable_clock_gettime --disable-clock_gettime} +%{?_without_clock_gettime: %global _disable_clock_gettime --disable-clock_gettime} -# Filter away versioned plugin deps (they only depend on ABI): -%global __provides_exclude_from ^%{_libdir}/lirc/plugins/.*$ +# Don't add provides for python .so and private lib so-files +%global __provides_exclude _iguanaIR.so +%global __provides_exclude_from %{_libdir}/iguanaIR/.*[.]so + +# Don't require private libs in /usr/lib[64]/iguanaIR +%global __requires_exclude libusbpre1.so|libusb.so %description This package provides igdaemon and igclient, the programs necessary to control the Iguanaworks USB IR transceiver. - %package devel Summary: Library and header files for iguanaIR -Requires: %{name} = %{epoch}:%{version}-%{release} +Group: Development/Libraries +Requires: %{name}%{?_isa} = %{version}-%{release} %description devel The development files needed to interact with the iguanaIR igdaemon are included in this package. +%package -n python-iguanaIR +Group: System Environment/Daemons +Summary: Python module for Iguanaworks USB IR transceiver +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: python +BuildRequires: python2-devel swig -%package reflasher -Summary: Reflasher for Iguanaworks USB IR transceiver +%description -n python-iguanaIR +This package provides the swig-generated Python module for interfacing +with the Iguanaworks USB IR transceiver. + +%package firmware +Group: System Environment/Daemons +Summary: Firmware and reflasher for Iguanaworks USB IR transceiver +Requires: %{name} = %{version}-%{release} BuildArch: noarch -%description reflasher +%description firmware This package provides the reflasher/testing script and assorted firmware versions for the Iguanaworks USB IR transceiver. If you have no idea what this means, you don't need it. - -%if 0%{fedora} > 23 -%package -n lirc-drv-iguanair -Summary: lirc plugin for iguanair user-space driver -Requires: lirc >= 0.9.4 -BuildRequires: lirc-devel >= 0.9.4 -BuildRequires: make - -%description -n lirc-drv-iguanair -lirc plugin providing full support for the iguanaIR userspace driver, -the same as was built in into the lirc releases up to 0.9.3. -%endif - - %prep -%setup -q -n %{name}-%{version} -%setup -q -T -D -a 6 -%patch -P1 -p3 -%patch -P2 -p1 -%patch -P3 -p1 -cp %{SOURCE3} README.fedora -cd iguanair-lirc-%{commit6} -patch -p1 < %{SOURCE10} -patch -p1 < %{SOURCE11} -patch -p1 < %{SOURCE12} -git apply --whitespace=fix %{SOURCE13} -dos2unix Makefile -patch -l -p2 --fuzz 2 < %{SOURCE20} -cd .. -patch -p1 --fuzz 2 < %{SOURCE21} +%setup -q -n iguanaIR-%{version} +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 -# Create a sysusers.d config file -cat >iguanair.sysusers.conf < /var/run/iguanaIR +sed -i 's/\r//' docs/* +rm docs/pullDocs +sed -i 's|/dev/iguanaIR|/var/run/iguanaIR|g' \ + docs/TroubleShooting docs/driver docs/lirc +# Noarch data wrongly in libdir. +# http://iguanaworks.net/projects/IguanaIR/ticket/286 +sed -i 's|$(LIBDIR)|%{_datadir}|g' reflasher/Makefile + +# Force proper compile flags usage. +sed -i '/^CFLAGS/s|$| -DFEDORA=1 -fpic %{optflags}|' Makefile.in + +# Remove foreign packaging +rm -rf osx packaging %build -./runCmake -DLIBDIR="%{_libdir}" -cd build -make CFLAGS="%{optflags} -fpic -DFEDORA=1 -DHAVE_KERNEL_LIRC_H=1 -I.." %{?_smp_mflags} -cp %{SOURCE4} . +%configure %{?_disable_clock_gettime} +make %{?_smp_mflags} %install -%if 0%{fedora} > 23 -cd iguanair-lirc-%{commit6} -PLUGINDOCS=$(pkg-config --variable=plugindocs lirc-driver) -make LDFLAGS="-liguanaIR -L../build" CFLAGS="%{optflags} \ - -fpic -I.. -DHAVE_KERNEL_LIRC_H=1 -DPLUGINDOCS=\\\"$PLUGINDOCS\\\"" \ - DESTDIR=$RPM_BUILD_ROOT install -cd .. -%endif - - -mkdir -p $RPM_BUILD_ROOT/%{_datadir} || : -cp -ar files/python/usr/share/iguanaIR-reflasher $RPM_BUILD_ROOT/%{_datadir} -mkdir -p $RPM_BUILD_ROOT/%{_bindir} || : -cp -ar files/python/usr/bin/* $RPM_BUILD_ROOT/%{_bindir} - -cd build -make install PREFIX=$RPM_BUILD_ROOT/usr DESTDIR=$RPM_BUILD_ROOT \ - INLIBDIR=$RPM_BUILD_ROOT%{_libdir} -rm -rf $RPM_BUILD_ROOT/%{_libdir}/python%{python_version}/site-packages - -install -m755 -d $RPM_BUILD_ROOT%{_localstatedir}/run/%{name} - -%if 0%{fedora} > 30 -rm -rf $RPM_BUILD_ROOT/%{_libdir}/python2.7/site-packages -%endif - -# fix missing links -pushd $RPM_BUILD_ROOT%{_libdir} -rm libiguanaIR.so.0.3 -mv libiguanaIR.so.0 libiguanaIR.so.0.3 -ln -sf libiguanaIR.so.0.3 libiguanaIR.so.0 +make install PREFIX=$RPM_BUILD_ROOT/usr DESTDIR=$RPM_BUILD_ROOT INLIBDIR=$RPM_BUILD_ROOT%{_libdir} # Use /etc/sysconfig instead of /etc/default -mkdir $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig || : +mkdir $RPM_BUILD_ROOT/etc/sysconfig mv $RPM_BUILD_ROOT/etc/default/iguanaIR \ - $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig + $RPM_BUILD_ROOT/etc/sysconfig # Fix up some stray file permissions issues - chmod a-x $RPM_BUILD_ROOT%{_includedir}/%{name}.h \ - $RPM_BUILD_ROOT%{_datadir}/%{name}-reflasher/hex/* +chmod -x $RPM_BUILD_ROOT%{python_sitearch}/*.py \ + $RPM_BUILD_ROOT%{_includedir}/iguanaIR.h \ + $RPM_BUILD_ROOT%{_datadir}/iguanaIR-reflasher/hex/* # Remove the installed initfile and install the systemd support instead. -rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/init.d/ -install -m644 -D %{SOURCE1} $RPM_BUILD_ROOT%{_unitdir}/%{name}.service -install -m755 -D %{SOURCE2} $RPM_BUILD_ROOT%{_libexecdir}/iguanaIR/rescan +rm -rf $RPM_BUILD_ROOT/etc/init.d/ +install -m644 -pD %{SOURCE1} $RPM_BUILD_ROOT%{_unitdir}/iguanaIR.service +install -m755 -pD %{SOURCE2} $RPM_BUILD_ROOT%{_datadir}/iguanaIR/rescan -# Install private log dir, tmpfiles.d setup. -install -m755 -d $RPM_BUILD_ROOT%{_localstatedir}/log/iguanaIR +# Install private log dir. +install -m755 -pd $RPM_BUILD_ROOT/var/log/iguanaIR +install -m644 -pD %SOURCE3 $RPM_BUILD_ROOT/etc/logrotate.d/%name -install -m755 -d $RPM_BUILD_ROOT/%{_tmpfilesdir} -cat > $RPM_BUILD_ROOT/%{_tmpfilesdir}/%{name}.conf < $RPM_BUILD_ROOT/etc/tmpfiles.d/iguanaIR.conf < $RPM_BUILD_ROOT/etc/modprobe.d/blacklist-iguanair.conf << EOF +# iguanaIR user space driver blacklisting the kernel driver +blacklist iguanair +EOF +%pre +getent group iguanair >/dev/null || groupadd -r iguanair +getent passwd iguanair >/dev/null || \ + useradd -r -g iguanair -d /var/run/iguanaIR -s /sbin/nologin \ + -c "Iguanaworks IR Daemon" iguanair +exit 0 %post -%systemd_post %{name}.service +if [ $1 -eq 1 ] ; then + # Initial installation + /bin/systemctl daemon-reload >/dev/null 2>&1 || : +fi +/sbin/ldconfig %preun -%systemd_preun %{name}.service +if [ $1 -eq 0 ] ; then + # Package removal, not upgrade + /bin/systemctl --no-reload disable iguanaIR.service > /dev/null 2>&1 || : + /bin/systemctl stop iguanaIR.service > /dev/null 2>&1 || : +fi %postun -%systemd_postun_with_restart %{name}.service +/bin/systemctl daemon-reload >/dev/null 2>&1 || : +if [ $1 -ge 1 ] ; then + # Package upgrade, not uninstall + /bin/systemctl try-restart iguanaIR.service >/dev/null 2>&1 || : +fi +/sbin/ldconfig %files -%license LICENSE LICENSE-LGPL -%doc README.txt WHY ChangeLog AUTHORS -%doc README.fedora +%doc AUTHORS LICENSE LICENSE-LGPL WHY protocols.txt README.txt notes.txt ChangeLog +%doc docs %{_bindir}/igdaemon %{_bindir}/igclient -%{_bindir}/iguanaIR-rescan -%{_libdir}/lib%{name}.so.* -%{_libdir}/%{name}/*.so -%{_libexecdir}/%{name}/ -%{_unitdir}/%{name}.service -%config(noreplace) /etc/logrotate.d/%{name} -/lib/udev/rules.d/80-%{name}.rules -%config(noreplace) /etc/sysconfig/%{name} -%{_tmpfilesdir}/%{name}.conf -%ghost %attr(755, iguanair, iguanair) /run/%{name} -%attr(775, iguanair, iguanair) %{_localstatedir}/log/%{name} - -%if 0%{fedora} < 30 -%{_libdir}/python2.7/* -%endif -%{_sysusersdir}/iguanair.conf +%{_libdir}/libiguanaIR.so.* +%{_libdir}/iguanaIR/ +%{_datadir}/iguanaIR/ +%{_unitdir}/iguanaIR.service +/lib/udev/rules.d/80-iguanaIR.rules +%config(noreplace) /etc/modprobe.d/blacklist-iguanair.conf +%config(noreplace) /etc/sysconfig/iguanaIR +%config(noreplace) /etc/tmpfiles.d/iguanaIR.conf +%config(noreplace) /etc/logrotate.d/iguanaIR +%attr(755, iguanair, iguanair) /lib/udev/devices/iguanaIR +%attr(755, iguanair, iguanair) /run/iguanaIR +%attr(755, iguanair, iguanair) /var/log/iguanaIR %files devel -%{_includedir}/%{name}.h -%{_libdir}/lib%{name}.so +%doc examples +%{_includedir}/iguanaIR.h +%{_libdir}/libiguanaIR.so -%files reflasher -%{_datadir}/%{name}-reflasher/ -%{_bindir}/%{name}-reflasher +%files -n python-iguanaIR +%{python_sitearch}/* -%if 0%{fedora} > 23 -%files -n lirc-drv-iguanair -%config /etc/modprobe.d/60-blacklist-kernel-iguanair.conf -%{_libdir}/lirc/plugins/iguanair.so -%{_docdir}/lirc/plugindocs/iguanair.html -%{_datadir}/lirc/configs/iguanair.conf -%endif +%files firmware +%{_bindir}/iguanaIR-reflasher +%{_datadir}/iguanaIR-reflasher/ %changelog -* Thu Jul 24 2025 Fedora Release Engineering - 2:1.1.0-44 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild +* Thu Feb 14 2013 Fedora Release Engineering - 1.0.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild -* Tue Feb 11 2025 Zbigniew Jędrzejewski-Szmek - 2:1.1.0-43 -- Add sysusers.d config file to allow rpm to create users/groups automatically +* Tue Jan 15 2013 Alec Leamas - 1.0.3-1 +- Handle review remarks: +- Revert license to GPLv2 + LGPLv2, +- Preserve timestamps, unowned dirs, missing Requires. -* Fri Jan 17 2025 Fedora Release Engineering - 2:1.1.0-42 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Mon Sep 02 2024 Miroslav Suchý - 2:1.1.0-41 -- convert license to SPDX - -* Thu Jul 18 2024 Fedora Release Engineering - 2:1.1.0-40 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Wed Jan 24 2024 Fedora Release Engineering - 2:1.1.0-39 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Sat Jan 20 2024 Fedora Release Engineering - 2:1.1.0-38 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Thu Jul 20 2023 Fedora Release Engineering - 2:1.1.0-37 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Thu Jan 19 2023 Fedora Release Engineering - 2:1.1.0-36 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Thu Jul 21 2022 Fedora Release Engineering - 2:1.1.0-35 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Thu Jan 20 2022 Fedora Release Engineering - 2:1.1.0-34 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Thu Jul 22 2021 Fedora Release Engineering - 2:1.1.0-33 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 2:1.1.0-32 -- Rebuilt for updated systemd-rpm-macros - See https://pagure.io/fesco/issue/2583. - -* Tue Jan 26 2021 Fedora Release Engineering - 2:1.1.0-31 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Tue Jul 28 2020 Fedora Release Engineering - 2:1.1.0-30 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Wed Jan 29 2020 Fedora Release Engineering - 2:1.1.0-29 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Thu Aug 22 2019 Alec Leamas - 2:1.1.0-28 -- Move to python3 (Closes: #1737981). -- Drop the SWIG-generated python bindings. -- Update ancient systemd scriptlets. - -* Thu Jul 25 2019 Fedora Release Engineering - 2:1.1.0-27 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Fri Feb 01 2019 Fedora Release Engineering - 2:1.1.0-26 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Fri Jul 13 2018 Fedora Release Engineering - 2:1.1.0-25 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Wed Feb 07 2018 Fedora Release Engineering - 2:1.1.0-24 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Wed Aug 02 2017 Fedora Release Engineering - 2:1.1.0-23 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 2:1.1.0-22 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Fri Feb 10 2017 Fedora Release Engineering - 2:1.1.0-21 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Fri Jan 27 2017 Alec Leamas - 2:1.1.0-20 -- Fix bad linkage for dynamic lirc-drv-iguanair module. - -* Wed Jan 25 2017 Alec Leamas - 2:1.1.0-19 -- -18 was a COPR release only. -- Drop the python package which does not compile cleanly any more. -- Add lirc plugin generation. -- Fix %%license usage for license files - #1413263. -- Use %%tmpfilesdir as required - #1413263. -- Remove horrible hacks from -10 to break circular dep lirc <=> iguanaIR. -- Filter away plugin deps - they only depend on ABI. -- Fix so-file links - #1409065 - -* Tue Jul 19 2016 Fedora Release Engineering - 2:1.1.0-17 -- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages - -* Thu Feb 04 2016 Fedora Release Engineering - 2:1.1.0-16 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Wed Jun 17 2015 Fedora Release Engineering - 2:1.1.0-15 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Mon Dec 22 2014 Alec Leamas - 2:1.1.0-14 -- Fixing #1176627: Update logrotate conf. - -* Thu Dec 11 2014 Alec Leamas - 2:1.1.0-13 -- Filter away bogus, patched so-name from Requires: - -* Wed Dec 10 2014 Alec Leamas - 2:1.1.0-12 -- Fixes #1159618. -- Re-install logrotate file, mysteriously dropped sometime. - -* Wed Sep 10 2014 Alec Leamas - 2:1.1.0-11 -- Fixed 64-bit provides tweak. - -* Tue Sep 09 2014 Alec Leamas - 2:1.1.0-10 -- Added 64-bit provides tweak. - -* Wed Sep 03 2014 Alec Leamas - 2:1.1.0-9 -- Remove needless and circular dependency on lirc. - -* Wed Sep 03 2014 Alec Leamas - 2:1.1.0-8 -- patch soname + add virtual compatibility Provides: - -* Wed Sep 3 2014 Alec Leamas - 1:1.1.0-4 -- New attempt to introduce 1.1.0 (ABI bump) - -* Wed Aug 20 2014 Alec Leamas - 1:1.0.5-5 -- Updating dependencies with epoch (sigh...). - -* Tue Aug 19 2014 Alec Leamas - 1:1.0.5-4 -- Backing out 1.1.0 due to ABI problems. -- Purged old changelog dating to 2006, partly outside Fedora. - -* Mon Aug 18 2014 Alec Leamas - 1.1.0-3 -- Add missing patch (how did this ever build?). - -* Sat Aug 16 2014 Fedora Release Engineering - 1.1.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Mon Aug 11 2014 Alec Leamas - 1.1.0-1 -- Updating to latest version -- Old patches now upstreamed, new patches for cmake required. LIBDIR handling - needs cleanup (not required part in rpath.patch). - -* Sat Jun 07 2014 Fedora Release Engineering - 1.0.5-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Sat Aug 03 2013 Fedora Release Engineering - 1.0.5-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Sun Apr 21 2013 Alec Leamas - 1.0.5-1 -- Update to latest upstream 1.0.5 -- Most patches merged upstream. - -* Tue Dec 25 2012 Alec Leamas - 1.0.3-1 -- Updated to 1.0.3 -- Moved most of fixes.patch to spec file, split rest to smaller ones. -- Support sysconfig configuration file. -- Include documentation files -- Install udev rule in /lib/udev, not /etc/udev. -- Fixed udev issue invoking '/etc/init.d/iguanaIR rescan'. - -* Wed Apr 18 2012 Jason L Tibbitts III - 1.0.1-3 -- Some systemd and dependency filtering suggestions. - -* Fri Jan 28 2011 Jarod Wilson 1.0.1-2 -- Address Fedora package review concerns (#642773) - -* Thu Jan 20 2011 Jarod Wilson 1.0.1-1 -- Update to 1.0.1 release - -* Wed Oct 13 2010 Jarod Wilson 1.0-0.2.pre2.svn1419 -- Update to 1.0pre2 snapshot plus svn rev 1419 additions -- Patch in additional changes to use more suitable locations for - plugins, socket directory and reflasher files - -* Wed Jul 21 2010 Jarod Wilson 1.0-0.1.pre2 -- Update to 1.0pre2 snapshot -- Revamp spec to be more compliant with Fedora packaging guidelines +* Wed Jan 2 2013 Alec Leamas - 1.0.3-1 +- Initial release based on work by Joseph Dunn, Jarod Wilson and + Jason Tibbits in bug 642773 +- Set license to GPLv2, can't find any LGPL files. diff --git a/patch-soname b/patch-soname deleted file mode 100755 index 7a57143..0000000 --- a/patch-soname +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - -function patch_strings_in_file() -{ - local FILE="$1" - local PATTERN="$2" - local REPLACEMENT="$3" - - # Find all unique strings in FILE that contain the pattern - STRINGS=$(strings ${FILE} | grep ${PATTERN} | sort -u -r) - - if [ "${STRINGS}" != "" ] ; then - echo "File '${FILE}' contain strings with '${PATTERN}' in them:" - - for OLD_STRING in ${STRINGS} ; do - # Create the new string with a simple bash-replacement - NEW_STRING=${OLD_STRING//${PATTERN}/${REPLACEMENT}} - - # Create null terminated ASCII HEX representations of the strings - OLD_STRING_HEX="$(echo -n ${OLD_STRING} | xxd -g 0 -u -ps -c 256)00" - NEW_STRING_HEX="$(echo -n ${NEW_STRING} | xxd -g 0 -u -ps -c 256)00" - - if [ ${#NEW_STRING_HEX} -le ${#OLD_STRING_HEX} ] ; then - # Pad the replacement string with null terminations so the - # length matches the original string - while [ ${#NEW_STRING_HEX} -lt ${#OLD_STRING_HEX} ] ; do - NEW_STRING_HEX="${NEW_STRING_HEX}00" - done - - # Now, replace every occurrence of OLD_STRING with NEW_STRING - echo -n "Replacing ${OLD_STRING} with ${NEW_STRING}... " - hexdump -ve '1/1 "%.2X"' ${FILE} | \ - sed "s/${OLD_STRING_HEX}/${NEW_STRING_HEX}/g" | \ - xxd -r -p > ${FILE}.tmp - chmod --reference ${FILE} ${FILE}.tmp - mv ${FILE}.tmp ${FILE} - echo "Done!" - else - echo "New string '${NEW_STRING}' is longer than old" \ - "string '${OLD_STRING}'. Skipping." - fi - done - fi -} - -patch_strings_in_file $@ diff --git a/rpath.patch b/rpath.patch deleted file mode 100644 index e3b54de..0000000 --- a/rpath.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 6bdf24d..7ca5c4b 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -71,6 +71,9 @@ ElseIf("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") - Set(DAEMONLIBS pthread dl) - EndIf() - -+ Set(CMAKE_SKIP_RPATH True) -+ Set(INSTALL_LIBDIR @libdir@) -+ - Set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O2 -Wall -pedantic") - - # see if we have clock_gettime in time.h - diff --git a/sources b/sources index 30c49ff..7c21b4a 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -SHA512 (iguanaIR-1.1.0.tar.bz2) = 19d793598043c203192c7de0066794629ef64cefe901beca4e894e2090a3d0a91d813de1ae5440a8d51c1f94ad4a960278dbe625302564dcc39c38a668cf18f2 -SHA512 (iguanair-lirc-e23b9d3.tar.gz) = ad116c16ea9f18259e2b915f1e1589d08e4ddc787459bc8595876ec0cc2ea36265a2dcb6b7792e3d1e9faab8e8ad680fdf9f0f59fac6d87148464aeb0aba86fb +172b897083f014c9b5ade296ccc48298 iguanaIR-1.0.3.tar.bz2