Compare commits
45 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fde01fd9fb | ||
|
|
42c0cc778a | ||
|
|
8525e49f0d | ||
|
|
f8d5981bb1 | ||
|
|
418bfab765 | ||
|
|
b1d6f9ca28 | ||
|
|
9445d7f940 | ||
|
|
12ed678953 | ||
|
|
75cea58244 | ||
|
|
df93d3e47b | ||
|
|
20cc2ba899 | ||
|
|
2912c5eaf5 | ||
|
|
fbb5c22a8b | ||
|
|
16cc3fdb07 | ||
|
|
78edd1d424 | ||
|
|
fd723a7de6 | ||
|
|
1690fe5582 | ||
|
|
267ea60e58 | ||
|
|
6e19728d4c | ||
|
|
68737d2c21 | ||
|
|
777102e450 | ||
|
|
9e7e4c4294 | ||
|
|
fabe805ab6 | ||
|
|
29e3fb635b | ||
|
|
f1e9e3b68c | ||
|
|
b61c330e9c | ||
|
|
bb744fb0d8 | ||
|
|
2819c8baf1 | ||
|
|
ce40c91989 | ||
|
|
30cdb8e345 | ||
|
|
ad85f4bfd7 | ||
|
|
51cc74b60a | ||
|
|
a08c25013a | ||
|
|
ab7a0e55e0 | ||
|
|
26c0476b98 | ||
|
|
a10607fe43 | ||
|
|
50f9b62ede | ||
|
|
cc23db1e07 | ||
|
|
281f010873 | ||
|
|
5abea51dd5 | ||
|
|
82ebf58b4d | ||
|
|
574affc95e | ||
|
|
c678c30890 | ||
|
|
fc2c12da98 | ||
|
|
c2ef7268a9 |
14 changed files with 2488 additions and 120 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -4,3 +4,5 @@ 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
|
||||
|
|
|
|||
|
|
@ -1,25 +0,0 @@
|
|||
From 2877272703e7b9f59cd5c690c70555b101c69815 Mon Sep 17 00:00:00 2001
|
||||
From: Alec Leamas <leamas.alec@gmail.com>
|
||||
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
|
||||
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
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'"
|
||||
853
0010-Change-iguanaIR.-iguanair.-to-match-other-plugins.patch
Normal file
853
0010-Change-iguanaIR.-iguanair.-to-match-other-plugins.patch
Normal file
|
|
@ -0,0 +1,853 @@
|
|||
From 7e0aca378b95b8618c1adc936e7988be165fcc13 Mon Sep 17 00:00:00 2001
|
||||
From: Alec Leamas <leamas.alec@gmail.com>
|
||||
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 <jdunn@iguanaworks.net>
|
||||
-*
|
||||
-* Distribute under GPL version 2.
|
||||
-*
|
||||
-*/
|
||||
-
|
||||
-#ifdef HAVE_CONFIG_H
|
||||
-# include <config.h>
|
||||
-#endif
|
||||
-
|
||||
-#include <poll.h>
|
||||
-#include <signal.h>
|
||||
-#include <stdio.h>
|
||||
-#include <stdint.h>
|
||||
-#include <errno.h>
|
||||
-#include <arpa/inet.h>
|
||||
-#if defined __APPLE__
|
||||
-#include <sys/wait.h>
|
||||
-#include <sys/ioctl.h>
|
||||
-#else
|
||||
-#include <wait.h>
|
||||
-#endif
|
||||
-#include <arpa/inet.h>
|
||||
-
|
||||
-#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 @@
|
||||
-<P>
|
||||
- This driver supports both receiving and sending (blasting) using
|
||||
- the IguanaIR devices from
|
||||
- <a href="http://iguanaworks.net/ir">http://iguanaworks.net/ir.</a></p>
|
||||
-<p>
|
||||
- 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.
|
||||
-<p>
|
||||
- The --device argument to the driver is a socket designator created
|
||||
- by the low-level driveri. It defaults to '0' which implies
|
||||
- <em>/run/iguanair/0</em>.
|
||||
-<p>
|
||||
- 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.</p>
|
||||
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 <jdunn@iguanaworks.net>
|
||||
+*
|
||||
+* Distribute under GPL version 2.
|
||||
+*
|
||||
+*/
|
||||
+
|
||||
+#ifdef HAVE_CONFIG_H
|
||||
+# include <config.h>
|
||||
+#endif
|
||||
+
|
||||
+#include <poll.h>
|
||||
+#include <signal.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdint.h>
|
||||
+#include <errno.h>
|
||||
+#include <arpa/inet.h>
|
||||
+#if defined __APPLE__
|
||||
+#include <sys/wait.h>
|
||||
+#include <sys/ioctl.h>
|
||||
+#else
|
||||
+#include <wait.h>
|
||||
+#endif
|
||||
+#include <arpa/inet.h>
|
||||
+
|
||||
+#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 @@
|
||||
+<P>
|
||||
+ This driver supports both receiving and sending (blasting) using
|
||||
+ the IguanaIR devices from
|
||||
+ <a href="http://iguanaworks.net/ir">http://iguanaworks.net/ir.</a></p>
|
||||
+<p>
|
||||
+ 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.
|
||||
+<p>
|
||||
+ The --device argument to the driver is a socket designator created
|
||||
+ by the low-level driveri. It defaults to '0' which implies
|
||||
+ <em>/run/iguanair/0</em>.
|
||||
+<p>
|
||||
+ 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.</p>
|
||||
--
|
||||
2.5.5
|
||||
|
||||
39
0010-build-Remove-cmake-dist-generation.patch
Normal file
39
0010-build-Remove-cmake-dist-generation.patch
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
From ac541ea506a82ab699bff42829f697e46755eb12 Mon Sep 17 00:00:00 2001
|
||||
From: Alec Leamas <leamas.alec@gmail.com>
|
||||
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
|
||||
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
From 889ff6716f40c5abca23bbfed9660e29903cc009 Mon Sep 17 00:00:00 2001
|
||||
From: Alec Leamas <leamas.alec@gmail.com>
|
||||
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
|
||||
|
||||
25
0011-lirc-drv-Fix-missing-linker-flag.patch
Normal file
25
0011-lirc-drv-Fix-missing-linker-flag.patch
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
From db05b2629b6b5a5972a51e2d2fbbf04e45e56cc8 Mon Sep 17 00:00:00 2001
|
||||
From: Alec Leamas <leamas.alec@gmail.com>
|
||||
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
|
||||
|
||||
59
0012-Makefile-Add-DESTDIR-support.patch
Normal file
59
0012-Makefile-Add-DESTDIR-support.patch
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
From 4d692f097e5c556f47404c97a5ce2c0b2180ee3a Mon Sep 17 00:00:00 2001
|
||||
From: Alec Leamas <leamas.alec@gmail.com>
|
||||
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
|
||||
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
From 4264b5d65c012fdbe4e2b676ef1987ab4a0778dd Mon Sep 17 00:00:00 2001
|
||||
From: Alec Leamas <leamas.alec@gmail.com>
|
||||
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
|
||||
|
||||
988
0013-Convert-all-files-to-LF-line-endings-like-main-drive.patch
Normal file
988
0013-Convert-all-files-to-LF-line-endings-like-main-drive.patch
Normal file
|
|
@ -0,0 +1,988 @@
|
|||
From c75c2561ae65c711a80136e96fcba0f0fbb00294 Mon Sep 17 00:00:00 2001
|
||||
From: Alec Leamas <leamas.alec@gmail.com>
|
||||
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 <jdunn@iguanaworks.net>
|
||||
-*
|
||||
-* Distribute under GPL version 2.
|
||||
-*
|
||||
-*/
|
||||
-
|
||||
-#ifdef HAVE_CONFIG_H
|
||||
-# include <config.h>
|
||||
-#endif
|
||||
-
|
||||
-#include <poll.h>
|
||||
-#include <signal.h>
|
||||
-#include <stdio.h>
|
||||
-#include <stdint.h>
|
||||
-#include <errno.h>
|
||||
-#include <arpa/inet.h>
|
||||
-#if defined __APPLE__
|
||||
-#include <sys/wait.h>
|
||||
-#include <sys/ioctl.h>
|
||||
-#else
|
||||
-#include <wait.h>
|
||||
-#endif
|
||||
-#include <arpa/inet.h>
|
||||
-
|
||||
-#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 <jdunn@iguanaworks.net>
|
||||
+*
|
||||
+* Distribute under GPL version 2.
|
||||
+*
|
||||
+*/
|
||||
+
|
||||
+#ifdef HAVE_CONFIG_H
|
||||
+# include <config.h>
|
||||
+#endif
|
||||
+
|
||||
+#include <poll.h>
|
||||
+#include <signal.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdint.h>
|
||||
+#include <errno.h>
|
||||
+#include <arpa/inet.h>
|
||||
+#if defined __APPLE__
|
||||
+#include <sys/wait.h>
|
||||
+#include <sys/ioctl.h>
|
||||
+#else
|
||||
+#include <wait.h>
|
||||
+#endif
|
||||
+#include <arpa/inet.h>
|
||||
+
|
||||
+#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 @@
|
||||
-<P>
|
||||
- This driver supports both receiving and sending (blasting) using
|
||||
- the IguanaIR devices from
|
||||
- <a href="http://iguanaworks.net/ir">http://iguanaworks.net/ir.</a></p>
|
||||
-<p>
|
||||
- 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.
|
||||
-<p>
|
||||
- The --device argument to the driver is a socket designator created
|
||||
- by the low-level driveri. It defaults to '0' which implies
|
||||
- <em>/run/iguanair/0</em>.
|
||||
-<p>
|
||||
- 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.</p>
|
||||
+<P>
|
||||
+ This driver supports both receiving and sending (blasting) using
|
||||
+ the IguanaIR devices from
|
||||
+ <a href="http://iguanaworks.net/ir">http://iguanaworks.net/ir.</a></p>
|
||||
+<p>
|
||||
+ 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.
|
||||
+<p>
|
||||
+ The --device argument to the driver is a socket designator created
|
||||
+ by the low-level driveri. It defaults to '0' which implies
|
||||
+ <em>/run/iguanair/0</em>.
|
||||
+<p>
|
||||
+ 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.</p>
|
||||
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
|
||||
|
||||
106
0016-reflasher-Move-to-python3.patch
Normal file
106
0016-reflasher-Move-to-python3.patch
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
From ad3c951d613fd8926f2afc4ce219dee592418fad Mon Sep 17 00:00:00 2001
|
||||
From: Alec Leamas <leamas.alec@gmail.com>
|
||||
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
|
||||
60
0020-build-Fix-DESTDIR-dont-update-docs.patch
Normal file
60
0020-build-Fix-DESTDIR-dont-update-docs.patch
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
From 89f10c5f0c4374fb8ac51f1878b8b79329123c5b Mon Sep 17 00:00:00 2001
|
||||
From: Alec Leamas <leamas.alec@gmail.com>
|
||||
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
|
||||
|
||||
290
iguanaIR.spec
290
iguanaIR.spec
|
|
@ -1,11 +1,16 @@
|
|||
%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: 14%{?dist}
|
||||
Release: 44%{?dist}
|
||||
Epoch: 2
|
||||
Summary: Driver for Iguanaworks USB IR transceiver
|
||||
|
||||
Group: System Environment/Daemons
|
||||
License: GPLv2 and LGPLv2
|
||||
# Automatically converted from old format: GPLv2 and LGPLv2 - review is highly recommended.
|
||||
License: GPL-2.0-only AND LicenseRef-Callaway-LGPLv2
|
||||
URL: http://iguanaworks.net/ir
|
||||
Source0: http://iguanaworks.net/downloads/%{name}-%{version}.tar.bz2
|
||||
Source1: iguanaIR.service
|
||||
|
|
@ -13,70 +18,58 @@ 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
|
||||
BuildRequires: libusb1-devel, libusb-devel
|
||||
BuildRequires: popt-devel
|
||||
BuildRequires: systemd-units
|
||||
# For patch-soname (xxd, util-linux)
|
||||
Buildrequires: /usr/bin/xxd
|
||||
BuildRequires: util-linux
|
||||
|
||||
Requires(post): systemd-units, systemd-sysv
|
||||
Requires(preun): systemd-units
|
||||
Requires(postun): systemd-units
|
||||
|
||||
# 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)
|
||||
BuildRequires: cmake gcc
|
||||
BuildRequires: dos2unix
|
||||
BuildRequires: git
|
||||
BuildRequires: libusb1-devel
|
||||
%if 0%{?fedora} < 37
|
||||
libusb-devel
|
||||
%endif
|
||||
BuildRequires: popt-devel
|
||||
BuildRequires: systemd
|
||||
|
||||
%{?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}
|
||||
|
||||
# Don't add provides for python .so files
|
||||
%define __provides_exclude_from %{python_sitearch}/.*\.so$
|
||||
# Filter away versioned plugin deps (they only depend on ABI):
|
||||
%global __provides_exclude_from ^%{_libdir}/lirc/plugins/.*$
|
||||
|
||||
# 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
|
||||
|
||||
|
|
@ -86,35 +79,81 @@ 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}
|
||||
%patch1 -p3
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%setup -q -T -D -a 6
|
||||
%patch -P1 -p3
|
||||
%patch -P2 -p1
|
||||
%patch -P3 -p1
|
||||
cp %{SOURCE3} README.fedora
|
||||
cp %{SOURCE4} .
|
||||
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 <<EOF
|
||||
u iguanair - 'Iguanaworks IR Daemon' %{_localstatedir}/run/%{name} -
|
||||
EOF
|
||||
|
||||
|
||||
|
||||
%build
|
||||
./runCmake -DLIBDIR="%{_libdir}"
|
||||
cd build
|
||||
make CFLAGS="%{optflags} -fpic -DFEDORA=1" %{?_smp_mflags}
|
||||
make CFLAGS="%{optflags} -fpic -DFEDORA=1 -DHAVE_KERNEL_LIRC_H=1 -I.." %{?_smp_mflags}
|
||||
cp %{SOURCE4} .
|
||||
|
||||
|
||||
|
||||
%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}
|
||||
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}
|
||||
|
||||
# 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"
|
||||
%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
|
||||
|
||||
# Use /etc/sysconfig instead of /etc/default
|
||||
|
|
@ -123,8 +162,7 @@ mv $RPM_BUILD_ROOT/etc/default/iguanaIR \
|
|||
$RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
|
||||
|
||||
# Fix up some stray file permissions issues
|
||||
chmod -x $RPM_BUILD_ROOT%{python_sitearch}/*.py \
|
||||
$RPM_BUILD_ROOT%{_includedir}/%{name}.h \
|
||||
chmod a-x $RPM_BUILD_ROOT%{_includedir}/%{name}.h \
|
||||
$RPM_BUILD_ROOT%{_datadir}/%{name}-reflasher/hex/*
|
||||
|
||||
# Remove the installed initfile and install the systemd support instead.
|
||||
|
|
@ -135,48 +173,30 @@ 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/etc/tmpfiles.d
|
||||
cat > $RPM_BUILD_ROOT/etc/tmpfiles.d/%{name}.conf <<EOF
|
||||
install -m755 -d $RPM_BUILD_ROOT/%{_tmpfilesdir}
|
||||
cat > $RPM_BUILD_ROOT/%{_tmpfilesdir}/%{name}.conf <<EOF
|
||||
d /run/%{name} 0755 iguanair iguanair
|
||||
EOF
|
||||
install -m 755 -d $RPM_BUILD_ROOT/run/%{name}
|
||||
install -m 644 -D %{SOURCE5} $RPM_BUILD_ROOT/etc/logrotate.d/%{name}
|
||||
|
||||
install -m0644 -D iguanair.sysusers.conf %{buildroot}%{_sysusersdir}/iguanair.conf
|
||||
|
||||
|
||||
%pre
|
||||
getent group iguanair >/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
|
||||
if [ $1 -eq 1 ] ; then
|
||||
# Initial installation
|
||||
/bin/systemctl daemon-reload >/dev/null 2>&1 || :
|
||||
fi
|
||||
/sbin/ldconfig
|
||||
%systemd_post %{name}.service
|
||||
|
||||
%preun
|
||||
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
|
||||
%systemd_preun %{name}.service
|
||||
|
||||
%postun
|
||||
/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
|
||||
%systemd_postun_with_restart %{name}.service
|
||||
|
||||
|
||||
%files
|
||||
%doc AUTHORS LICENSE LICENSE-LGPL
|
||||
%doc README.txt WHY ChangeLog
|
||||
%license LICENSE LICENSE-LGPL
|
||||
%doc README.txt WHY ChangeLog AUTHORS
|
||||
%doc README.fedora
|
||||
%{_bindir}/igdaemon
|
||||
%{_bindir}/igclient
|
||||
|
|
@ -185,25 +205,133 @@ fi
|
|||
%{_libdir}/%{name}/*.so
|
||||
%{_libexecdir}/%{name}/
|
||||
%{_unitdir}/%{name}.service
|
||||
/etc/logrotate.d/%{name}
|
||||
%config(noreplace) /etc/logrotate.d/%{name}
|
||||
/lib/udev/rules.d/80-%{name}.rules
|
||||
%config(noreplace) /etc/sysconfig/%{name}
|
||||
%config(noreplace) /etc/tmpfiles.d/%{name}.conf
|
||||
%{_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
|
||||
|
||||
%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 <releng@fedoraproject.org> - 2:1.1.0-44
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
|
||||
|
||||
* Tue Feb 11 2025 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 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 <releng@fedoraproject.org> - 2:1.1.0-42
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
|
||||
|
||||
* Mon Sep 02 2024 Miroslav Suchý <msuchy@redhat.com> - 2:1.1.0-41
|
||||
- convert license to SPDX
|
||||
|
||||
* Thu Jul 18 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-40
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
|
||||
|
||||
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-39
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Sat Jan 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-38
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-37
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||
|
||||
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-36
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||
|
||||
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-35
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||
|
||||
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-34
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||
|
||||
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-33
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||
|
||||
* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 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 <releng@fedoraproject.org> - 2:1.1.0-31
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||
|
||||
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-30
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-29
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Thu Aug 22 2019 Alec Leamas <leamas.alec@gmail.com> - 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 <releng@fedoraproject.org> - 2:1.1.0-27
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-26
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-25
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-24
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||
|
||||
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-23
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||
|
||||
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-22
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||
|
||||
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-21
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
||||
|
||||
* Fri Jan 27 2017 Alec Leamas <leamas.alec@gmail.com> - 2:1.1.0-20
|
||||
- Fix bad linkage for dynamic lirc-drv-iguanair module.
|
||||
|
||||
* Wed Jan 25 2017 Alec Leamas <leamas.alec@gmail.com> - 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 <rel-eng@lists.fedoraproject.org> - 2:1.1.0-17
|
||||
- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
|
||||
|
||||
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 2:1.1.0-16
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||
|
||||
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2:1.1.0-15
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
|
||||
|
||||
* Mon Dec 22 2014 Alec Leamas <leamas.alec@gmail.com> - 2:1.1.0-14
|
||||
- Fixing #1176627: Update logrotate conf.
|
||||
|
||||
|
|
|
|||
3
sources
3
sources
|
|
@ -1 +1,2 @@
|
|||
798eda1de8873c8da41fb50ffe221140 iguanaIR-1.1.0.tar.bz2
|
||||
SHA512 (iguanaIR-1.1.0.tar.bz2) = 19d793598043c203192c7de0066794629ef64cefe901beca4e894e2090a3d0a91d813de1ae5440a8d51c1f94ad4a960278dbe625302564dcc39c38a668cf18f2
|
||||
SHA512 (iguanair-lirc-e23b9d3.tar.gz) = ad116c16ea9f18259e2b915f1e1589d08e4ddc787459bc8595876ec0cc2ea36265a2dcb6b7792e3d1e9faab8e8ad680fdf9f0f59fac6d87148464aeb0aba86fb
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue