diff --git a/.gitignore b/.gitignore index fc71eb1..5970392 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,3 @@ 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/0003-Use-platform-specific-python-extension-dir.patch b/0003-Use-platform-specific-python-extension-dir.patch new file mode 100644 index 0000000..2dc94c8 --- /dev/null +++ b/0003-Use-platform-specific-python-extension-dir.patch @@ -0,0 +1,25 @@ +From 2877272703e7b9f59cd5c690c70555b101c69815 Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Tue, 25 Dec 2012 11:54:55 +0100 +Subject: [PATCH 3/7] Use platform specific python extension dir + +--- + 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/0006-udev-invoke-systemd-support-not-sysV-init-file.patch b/0006-udev-invoke-systemd-support-not-sysV-init-file.patch new file mode 100644 index 0000000..bf08829 --- /dev/null +++ b/0006-udev-invoke-systemd-support-not-sysV-init-file.patch @@ -0,0 +1,13 @@ +diff --git a/udev/iguanaIR.rules b/udev/iguanaIR.rules +index b3bc34f..21bc00d 100644 +--- a/udev/iguanaIR.rules ++++ b/udev/iguanaIR.rules +@@ -12,7 +12,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/libexec/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'" 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/iguanaIR.spec b/iguanaIR.spec index b57c995..7e446fb 100644 --- a/iguanaIR.spec +++ b/iguanaIR.spec @@ -1,16 +1,11 @@ -%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} +Release: 14%{?dist} Epoch: 2 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 +License: GPLv2 and LGPLv2 URL: http://iguanaworks.net/ir Source0: http://iguanaworks.net/downloads/%{name}-%{version}.tar.bz2 Source1: iguanaIR.service @@ -18,58 +13,69 @@ 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 - Requires: udev -BuildRequires: cmake gcc -BuildRequires: dos2unix -BuildRequires: git -BuildRequires: libusb1-devel -%if 0%{?fedora} < 37 -libusb-devel -%endif +BuildRequires: cmake +BuildRequires: libusb1-devel, libusb-devel BuildRequires: popt-devel BuildRequires: systemd + # For patch-soname (xxd, util-linux) +Buildrequires: /usr/bin/xxd +BuildRequires: util-linux %{?systemd_requires} Requires(post): systemd-sysv +# resolve cyclic dep iguanaIR <-> lirc. Once removed +# in lirc, we can do the required so-bump. +%ifarch x86_64 +Provides: libiguanaIR.so.0()(64bit) +Provides: libiguanaIR.so.0(IGUANAIR_0)(64bit) +%else +Provides: libiguanaIR.so.0 +Provides: libiguanaIR.so.0(IGUANAIR_0) +%endif + + # some features can be disabled during the rpm build %{?_without_clock_gettime: %define _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 files +%define __provides_exclude_from %{python_sitearch}/.*\.so$ +# Filter away patched soname form requires +%global __requires_exclude libiguanaIR.so.0.3 %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 +Group: Development/Libraries Requires: %{name} = %{epoch}:%{version}-%{release} %description devel The development files needed to interact with the iguanaIR igdaemon are included in this package. +%package python +Group: System Environment/Daemons +Summary: Python module for Iguanaworks USB IR transceiver +Requires: %{name} = %{epoch}:%{version}-%{release}, python >= 2.4 +BuildRequires: python-devel swig + +%description python +This package provides the swig-generated Python module for interfacing +with the Iguanaworks USB IR transceiver. %package reflasher +Group: System Environment/Daemons Summary: Reflasher for Iguanaworks USB IR transceiver BuildArch: noarch @@ -79,81 +85,35 @@ 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 +%patch1 -p3 +%patch2 -p1 +%patch3 -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} - -# Create a sysusers.d config file -cat >iguanair.sysusers.conf < 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 +make install PREFIX=$RPM_BUILD_ROOT/usr DESTDIR=$RPM_BUILD_ROOT INLIBDIR=$RPM_BUILD_ROOT%{_libdir} install -m755 -d $RPM_BUILD_ROOT%{_localstatedir}/run/%{name} -%if 0%{fedora} > 30 -rm -rf $RPM_BUILD_ROOT/%{_libdir}/python2.7/site-packages -%endif +# For now, patch bad soname introduced when they switched to cmake... +bash -c "./patch-soname $RPM_BUILD_ROOT%{_libdir}/libiguanaIR.so.0.3 \ + libiguanaIR.so.0.3 IGUANAIR_0" # 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 # Use /etc/sysconfig instead of /etc/default @@ -162,7 +122,8 @@ mv $RPM_BUILD_ROOT/etc/default/iguanaIR \ $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig # Fix up some stray file permissions issues - chmod a-x $RPM_BUILD_ROOT%{_includedir}/%{name}.h \ +chmod -x $RPM_BUILD_ROOT%{python_sitearch}/*.py \ + $RPM_BUILD_ROOT%{_includedir}/%{name}.h \ $RPM_BUILD_ROOT%{_datadir}/%{name}-reflasher/hex/* # Remove the installed initfile and install the systemd support instead. @@ -173,30 +134,48 @@ install -m755 -D %{SOURCE2} $RPM_BUILD_ROOT%{_libexecdir}/iguanaIR/rescan # Install private log dir, tmpfiles.d setup. install -m755 -d $RPM_BUILD_ROOT%{_localstatedir}/log/iguanaIR -install -m755 -d $RPM_BUILD_ROOT/%{_tmpfilesdir} -cat > $RPM_BUILD_ROOT/%{_tmpfilesdir}/%{name}.conf < $RPM_BUILD_ROOT/etc/tmpfiles.d/%{name}.conf </dev/null || groupadd -r iguanair +getent passwd iguanair >/dev/null || \ + useradd -r -g iguanair -d %{_localstatedir}/run/%{name} -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 %{name}.service > /dev/null 2>&1 || : + /bin/systemctl stop %{name}.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 %{name}.service >/dev/null 2>&1 || : +fi +/sbin/ldconfig %files -%license LICENSE LICENSE-LGPL -%doc README.txt WHY ChangeLog AUTHORS +%doc AUTHORS LICENSE LICENSE-LGPL +%doc README.txt WHY ChangeLog %doc README.fedora %{_bindir}/igdaemon %{_bindir}/igclient @@ -205,133 +184,25 @@ install -m0644 -D iguanair.sysusers.conf %{buildroot}%{_sysusersdir}/iguanair.co %{_libdir}/%{name}/*.so %{_libexecdir}/%{name}/ %{_unitdir}/%{name}.service -%config(noreplace) /etc/logrotate.d/%{name} +/etc/logrotate.d/%{name} /lib/udev/rules.d/80-%{name}.rules %config(noreplace) /etc/sysconfig/%{name} -%{_tmpfilesdir}/%{name}.conf +%config(noreplace) /etc/tmpfiles.d/%{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 - %files devel %{_includedir}/%{name}.h %{_libdir}/lib%{name}.so +%files python +%{python_sitearch}/* + %files reflasher %{_datadir}/%{name}-reflasher/ %{_bindir}/%{name}-reflasher -%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 - - %changelog -* Thu Jul 24 2025 Fedora Release Engineering - 2:1.1.0-44 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_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 - -* 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. diff --git a/sources b/sources index 30c49ff..39942e8 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -SHA512 (iguanaIR-1.1.0.tar.bz2) = 19d793598043c203192c7de0066794629ef64cefe901beca4e894e2090a3d0a91d813de1ae5440a8d51c1f94ad4a960278dbe625302564dcc39c38a668cf18f2 -SHA512 (iguanair-lirc-e23b9d3.tar.gz) = ad116c16ea9f18259e2b915f1e1589d08e4ddc787459bc8595876ec0cc2ea36265a2dcb6b7792e3d1e9faab8e8ad680fdf9f0f59fac6d87148464aeb0aba86fb +798eda1de8873c8da41fb50ffe221140 iguanaIR-1.1.0.tar.bz2