Compare commits
68 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 | ||
|
|
5d1063cccf | ||
|
|
e59b432934 | ||
|
|
e483b3e8d9 | ||
|
|
cc5faa9e0b | ||
|
|
1d205c697b | ||
|
|
10f970a6f5 | ||
|
|
a14910cce0 | ||
|
|
f38e16792d | ||
|
|
25647416c6 | ||
|
|
c88f15bdf6 | ||
|
|
8cb2bd2c45 | ||
|
|
6b9729613f | ||
|
|
d38a7d5bd1 | ||
|
|
34b77cbd7f | ||
|
|
031ca5f63b | ||
|
|
38f9aadde2 | ||
|
|
aae93b298a | ||
|
|
986cf02410 | ||
|
|
3bdd72c534 | ||
|
|
337587118f | ||
|
|
b898e37d8e | ||
|
|
aabb8eb308 | ||
|
|
bbf3721578 |
19 changed files with 2683 additions and 173 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
|
@ -1 +1,8 @@
|
|||
/iguanaIR-1.0.3.tar.bz2
|
||||
/iguanaIR-1.1.0.tar.bz2
|
||||
clog
|
||||
/iguanaIR-1.0.5.tar.bz2
|
||||
/iguanaIR-1.1.0-5.fc22.src.rpm
|
||||
bak
|
||||
/iguanair-lirc-e23b9d3.tar.gz
|
||||
/iguanaIR-1.1.0.tar.gz
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
24
changeset_2710.patch
Normal file
24
changeset_2710.patch
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
Index: /trunk/software/usb_ir/CMakeLists.txt
|
||||
===================================================================
|
||||
--- trunk/software/usb_ir/CMakeLists.txt (revision 2709)
|
||||
+++ trunk/software/usb_ir/CMakeLists.txt (revision 2710)
|
||||
@@ -1,4 +1,7 @@
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
project(IguanaIR C)
|
||||
+
|
||||
+Set(SOVERSION 0)
|
||||
+Set(FULLVER 0.3)
|
||||
|
||||
#Set(TARGET_ANDROID true)
|
||||
@@ -98,9 +101,10 @@
|
||||
iguanaIR.c dataPackets.c ${PIPESRC}
|
||||
${BASESRC})
|
||||
+set_target_properties(iguanaIR PROPERTIES
|
||||
+ VERSION ${SOVERSION} SOVERSION ${FULLVER})
|
||||
set_property(TARGET iguanaIR
|
||||
APPEND PROPERTY COMPILE_DEFINITIONS IGUANAIR_EXPORTS)
|
||||
install(TARGETS iguanaIR
|
||||
DESTINATION ${LIBDIR})
|
||||
-
|
||||
|
||||
# build the service/server that controls hardware
|
||||
11
cmake-args.patch
Normal file
11
cmake-args.patch
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
diff --git a/runCmake b/runCmake
|
||||
index f37873c..6d19253 100755
|
||||
--- a/runCmake
|
||||
+++ b/runCmake
|
||||
@@ -40,5 +40,5 @@ fi
|
||||
# create the build path
|
||||
mkdir -p $BUILDDIR
|
||||
cd $BUILDDIR
|
||||
-PATH=${QTPATH}:${PYPATH}:${PATH} ARCH=${ARCH} CSPATH=${CSPATH} ${CMAKE} ${CHAIN} ..
|
||||
+PATH=${QTPATH}:${PYPATH}:${PATH} ARCH=${ARCH} CSPATH=${CSPATH} ${CMAKE} ${CHAIN} $@ ..
|
||||
cd ..
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
/var/log/iguanaIR {
|
||||
/var/log/iguanaIR/*.log {
|
||||
su iguanair iguanair
|
||||
missingok
|
||||
notifempty
|
||||
postrotate
|
||||
|
|
|
|||
434
iguanaIR.spec
434
iguanaIR.spec
|
|
@ -1,58 +1,75 @@
|
|||
%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.0.5
|
||||
Release: 1%{?dist}
|
||||
Version: 1.1.0
|
||||
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
|
||||
Source2: iguanaIR-rescan
|
||||
Source3: README.fedora
|
||||
# https://iguanaworks.net/projects/IguanaIR/ticket/205 for patch 5, 3, 2.
|
||||
Patch3: 0003-Use-platform-specific-python-extension-dir.patch
|
||||
# Fedora only
|
||||
Patch6: 0006-udev-invoke-systemd-support-not-sysV-init-file.patch
|
||||
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
|
||||
|
||||
Requires: lirc, udev
|
||||
BuildRequires: popt-devel, libusb1-devel, libusb-devel, systemd-units
|
||||
Requires(post): systemd-units, systemd-sysv
|
||||
Requires(preun): systemd-units
|
||||
Requires(postun): systemd-units
|
||||
# https://github.com/iguanaworks/iguanair-lirc/pull/1 (Patch10..Patch13)
|
||||
Source10: 0010-Change-iguanaIR.-iguanair.-to-match-other-plugins.patch
|
||||
Source11: 0011-Rename-link-README-files-to-match-modified-install-r.patch
|
||||
Source12: 0012-Makefile-Add-DESTDIR-support.patch
|
||||
Source13: 0013-Convert-all-files-to-LF-line-endings-like-main-drive.patch
|
||||
|
||||
Source20: 0020-build-Fix-DESTDIR-dont-update-docs.patch
|
||||
Source21: 0016-reflasher-Move-to-python3.patch
|
||||
|
||||
Requires: udev
|
||||
|
||||
BuildRequires: cmake gcc
|
||||
BuildRequires: dos2unix
|
||||
BuildRequires: git
|
||||
BuildRequires: libusb1-devel
|
||||
%if 0%{?fedora} < 37
|
||||
libusb-devel
|
||||
%endif
|
||||
BuildRequires: 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/.*$
|
||||
|
||||
|
||||
%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} = %{version}-%{release}
|
||||
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} = %{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
|
||||
|
||||
|
|
@ -62,31 +79,90 @@ 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}
|
||||
%patch3 -p1
|
||||
%patch6 -p1
|
||||
%setup -q -T -D -a 6
|
||||
%patch -P1 -p3
|
||||
%patch -P2 -p1
|
||||
%patch -P3 -p1
|
||||
cp %{SOURCE3} README.fedora
|
||||
cd iguanair-lirc-%{commit6}
|
||||
patch -p1 < %{SOURCE10}
|
||||
patch -p1 < %{SOURCE11}
|
||||
patch -p1 < %{SOURCE12}
|
||||
git apply --whitespace=fix %{SOURCE13}
|
||||
dos2unix Makefile
|
||||
patch -l -p2 --fuzz 2 < %{SOURCE20}
|
||||
cd ..
|
||||
patch -p1 --fuzz 2 < %{SOURCE21}
|
||||
|
||||
# Create a sysusers.d config file
|
||||
cat >iguanair.sysusers.conf <<EOF
|
||||
u iguanair - 'Iguanaworks IR Daemon' %{_localstatedir}/run/%{name} -
|
||||
EOF
|
||||
|
||||
|
||||
|
||||
%build
|
||||
%configure %{?_disable_clock_gettime}
|
||||
make CFLAGS="%{optflags} -fpic -DFEDORA=1" %{?_smp_mflags}
|
||||
./runCmake -DLIBDIR="%{_libdir}"
|
||||
cd build
|
||||
make CFLAGS="%{optflags} -fpic -DFEDORA=1 -DHAVE_KERNEL_LIRC_H=1 -I.." %{?_smp_mflags}
|
||||
cp %{SOURCE4} .
|
||||
|
||||
|
||||
%install
|
||||
make install PREFIX=$RPM_BUILD_ROOT/usr DESTDIR=$RPM_BUILD_ROOT INLIBDIR=$RPM_BUILD_ROOT%{_libdir}
|
||||
%if 0%{fedora} > 23
|
||||
cd iguanair-lirc-%{commit6}
|
||||
PLUGINDOCS=$(pkg-config --variable=plugindocs lirc-driver)
|
||||
make LDFLAGS="-liguanaIR -L../build" CFLAGS="%{optflags} \
|
||||
-fpic -I.. -DHAVE_KERNEL_LIRC_H=1 -DPLUGINDOCS=\\\"$PLUGINDOCS\\\"" \
|
||||
DESTDIR=$RPM_BUILD_ROOT install
|
||||
cd ..
|
||||
%endif
|
||||
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT/%{_datadir} || :
|
||||
cp -ar files/python/usr/share/iguanaIR-reflasher $RPM_BUILD_ROOT/%{_datadir}
|
||||
mkdir -p $RPM_BUILD_ROOT/%{_bindir} || :
|
||||
cp -ar files/python/usr/bin/* $RPM_BUILD_ROOT/%{_bindir}
|
||||
|
||||
cd build
|
||||
make install PREFIX=$RPM_BUILD_ROOT/usr DESTDIR=$RPM_BUILD_ROOT \
|
||||
INLIBDIR=$RPM_BUILD_ROOT%{_libdir}
|
||||
rm -rf $RPM_BUILD_ROOT/%{_libdir}/python%{python_version}/site-packages
|
||||
|
||||
install -m755 -d $RPM_BUILD_ROOT%{_localstatedir}/run/%{name}
|
||||
|
||||
%if 0%{fedora} > 30
|
||||
rm -rf $RPM_BUILD_ROOT/%{_libdir}/python2.7/site-packages
|
||||
%endif
|
||||
|
||||
# fix missing links
|
||||
pushd $RPM_BUILD_ROOT%{_libdir}
|
||||
rm libiguanaIR.so.0.3
|
||||
mv libiguanaIR.so.0 libiguanaIR.so.0.3
|
||||
ln -sf libiguanaIR.so.0.3 libiguanaIR.so.0
|
||||
|
||||
# Use /etc/sysconfig instead of /etc/default
|
||||
mkdir $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig || :
|
||||
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.
|
||||
|
|
@ -97,71 +173,229 @@ 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 -m755 -d $RPM_BUILD_ROOT/run/%{name}
|
||||
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 WHY protocols.txt
|
||||
%doc README.txt notes.txt ChangeLog
|
||||
%license LICENSE LICENSE-LGPL
|
||||
%doc README.txt WHY ChangeLog AUTHORS
|
||||
%doc README.fedora
|
||||
%{_bindir}/igdaemon
|
||||
%{_bindir}/igclient
|
||||
%{_bindir}/iguanaIR-rescan
|
||||
%{_libdir}/lib%{name}.so.*
|
||||
%{_libdir}/%{name}/*.so
|
||||
%{_libexecdir}/%{name}/
|
||||
%{_unitdir}/%{name}.service
|
||||
%config(noreplace) /etc/logrotate.d/%{name}
|
||||
/lib/udev/rules.d/80-%{name}.rules
|
||||
%config(noreplace) %{_sysconfdir}/sysconfig/%{name}
|
||||
%config(noreplace) %{_sysconfdir}/tmpfiles.d/%{name}.conf
|
||||
%attr(755, iguanair, iguanair) /run/%{name}
|
||||
%config(noreplace) /etc/sysconfig/%{name}
|
||||
%{_tmpfilesdir}/%{name}.conf
|
||||
%ghost %attr(755, iguanair, iguanair) /run/%{name}
|
||||
%attr(775, iguanair, iguanair) %{_localstatedir}/log/%{name}
|
||||
|
||||
%if 0%{fedora} < 30
|
||||
%{_libdir}/python2.7/*
|
||||
%endif
|
||||
%{_sysusersdir}/iguanair.conf
|
||||
|
||||
%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.
|
||||
|
||||
* Thu Dec 11 2014 Alec Leamas <leamas.alec@gmail.com> - 2:1.1.0-13
|
||||
- Filter away bogus, patched so-name from Requires:
|
||||
|
||||
* Wed Dec 10 2014 Alec Leamas <leamas.alec@gmail.com> - 2:1.1.0-12
|
||||
- Fixes #1159618.
|
||||
- Re-install logrotate file, mysteriously dropped sometime.
|
||||
|
||||
* Wed Sep 10 2014 Alec Leamas <leamas.alec@nowhere.net> - 2:1.1.0-11
|
||||
- Fixed 64-bit provides tweak.
|
||||
|
||||
* Tue Sep 09 2014 Alec Leamas <leamas.alec@nowhere.net> - 2:1.1.0-10
|
||||
- Added 64-bit provides tweak.
|
||||
|
||||
* Wed Sep 03 2014 Alec Leamas <leamas.alec@nowhere.net> - 2:1.1.0-9
|
||||
- Remove needless and circular dependency on lirc.
|
||||
|
||||
* Wed Sep 03 2014 Alec Leamas <leamas.alec@nowhere.net> - 2:1.1.0-8
|
||||
- patch soname + add virtual compatibility Provides:
|
||||
|
||||
* Wed Sep 3 2014 Alec Leamas <leamas.alec@nowhere.net - 2:1.1.0-7
|
||||
- Patch soname on rawhide to avoid unintended bump.
|
||||
|
||||
* Tue Sep 2 2014 Alec Leamas <leamas.alec@nowhere.net - 2:1.1.0-6
|
||||
- Make a new try to sort out deps for 1.1.0
|
||||
|
||||
* Wed Aug 27 2014 Alec Leamas <leamas.alec@nowhere.net - 2:1.0.5-7
|
||||
- Have to re-add sources as well.
|
||||
|
||||
* Wed Aug 27 2014 Alec Leamas <leamas.alec@nowhere.net - 2:1.0.5-6
|
||||
- Backing out 1.1.0 again, broken dependencies problem
|
||||
|
||||
* Thu Aug 21 2014 Alec Leamas <leamas.alec@nowhere.net - 1:1.1.0-5
|
||||
- Fixing typo, bad %%{epoch} requires:
|
||||
|
||||
* Thu Aug 21 2014 Alec Leamas <leamas.alec@nowhere.net> - 1:1.1.0-4
|
||||
- New attempt to introduce 1.1.0 (ABI bump)
|
||||
|
||||
* Wed Aug 20 2014 Alec Leamas <leamas.alec@nowhere.net> - 1:1.0.5-5
|
||||
- Updating dependencies with epoch (sigh...).
|
||||
|
||||
* Tue Aug 19 2014 Alec Leamas <leamas.alec@nowhere.net> - 1:1.0.5-4
|
||||
- Backing out 1.1.0 due to ABI problems.
|
||||
- Purged old changelog dating to 2006, partly outside Fedora.
|
||||
|
||||
* Mon Aug 18 2014 Alec Leamas <leamas.alec@gmail.com> - 1.1.0-3
|
||||
- Add missing patch (how did this ever build?).
|
||||
|
||||
* Sat Aug 16 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.1.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
|
||||
|
||||
* Mon Aug 11 2014 Alec Leamas <leamas.alec@gmail.com> - 1.1.0-1
|
||||
- Updating to latest version
|
||||
- Old patches now upstreamed, new patches for cmake required. LIBDIR handling
|
||||
needs cleanup (not required part in rpath.patch).
|
||||
|
||||
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.5-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||
|
||||
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.5-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||
|
||||
* Sun Apr 21 2013 Alec Leamas <leamas.alec@gmail.com> - 1.0.5-1
|
||||
- Update to latest upstream 1.0.5
|
||||
- Most patches merged upstream.
|
||||
|
|
@ -191,69 +425,3 @@ fi
|
|||
* Wed Jul 21 2010 Jarod Wilson <jarod@redhat.com> 1.0-0.1.pre2
|
||||
- Update to 1.0pre2 snapshot
|
||||
- Revamp spec to be more compliant with Fedora packaging guidelines
|
||||
|
||||
* Sat Jun 27 2008 Joseph Dunn <jdunn@iguanaworks.net> 0.96-1
|
||||
- Bug fix release.
|
||||
|
||||
* Fri Mar 27 2008 Joseph Dunn <jdunn@iguanaworks.net> 0.95-1
|
||||
- Decided to do another release to fix a udev problem.
|
||||
|
||||
* Sun Mar 23 2008 Joseph Dunn <jdunn@iguanaworks.net> 0.94-1
|
||||
- Better windows support, a pile of bugs fixed. Works with newer
|
||||
firmwares (version 0x102) including frequency and channel support
|
||||
with or without LIRC.
|
||||
|
||||
* Sat Mar 10 2007 Joseph Dunn <jdunn@iguanaworks.net> 0.31-1
|
||||
- First release with tentative win32 and darwin support. Darwin needs
|
||||
some work, and windows needs to interface with applications.
|
||||
|
||||
* Thu Feb 1 2007 Joseph Dunn <jdunn@iguanaworks.net> 0.30-1
|
||||
- Added a utility to change the frequency on firmware version 3, and
|
||||
had to make iguanaRemoveData accessible to python code.
|
||||
|
||||
* Sun Jan 21 2007 Joseph Dunn <jdunn@iguanaworks.net> 0.29-1
|
||||
- Last currently known problem in the driver. Using clock_gettime
|
||||
instead of gettimeofday to avoid clock rollbacks.
|
||||
|
||||
* Sun Dec 31 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.26-1
|
||||
- Happy New Years! and a bugfix. Long standing bug that caused the
|
||||
igdaemon to hang is fixed.
|
||||
|
||||
* Sun Dec 10 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.25-1
|
||||
- The socket specification accept a path instead of just an index or
|
||||
label.
|
||||
|
||||
* Wed Dec 6 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.24-1
|
||||
- Fixes bad argument parsing in igdaemon, and the init script *should*
|
||||
work for fedora and debian now.
|
||||
|
||||
* Wed Oct 18 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.19-1
|
||||
- A real release has been made, and we'll try to keep track of version
|
||||
numbers a bit better now.
|
||||
|
||||
* Sat Sep 23 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.10-1
|
||||
- Preparing for a real release.
|
||||
|
||||
* Wed Jul 11 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.9-1
|
||||
- Switch to using udev instead of hotplug.
|
||||
|
||||
* Mon Jul 10 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.8-1
|
||||
- Version number bumps, and added python support and package.
|
||||
|
||||
* Mon Mar 27 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.5-1
|
||||
- Version number bump.
|
||||
|
||||
* Mon Mar 20 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.4-1
|
||||
- Version number bump.
|
||||
|
||||
* Tue Mar 07 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.3-1
|
||||
- Packaged a client library, and header file.
|
||||
|
||||
* Tue Mar 07 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.2-2
|
||||
- Added support for chkconfig
|
||||
|
||||
* Tue Mar 07 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.2-1
|
||||
- Added files for hotplug.
|
||||
|
||||
* Tue Mar 07 2006 Joseph Dunn <jdunn@iguanaworks.net> 0.1-1
|
||||
- Initial RPM spec file.
|
||||
|
|
|
|||
46
patch-soname
Executable file
46
patch-soname
Executable file
|
|
@ -0,0 +1,46 @@
|
|||
#!/bin/bash
|
||||
|
||||
function patch_strings_in_file()
|
||||
{
|
||||
local FILE="$1"
|
||||
local PATTERN="$2"
|
||||
local REPLACEMENT="$3"
|
||||
|
||||
# Find all unique strings in FILE that contain the pattern
|
||||
STRINGS=$(strings ${FILE} | grep ${PATTERN} | sort -u -r)
|
||||
|
||||
if [ "${STRINGS}" != "" ] ; then
|
||||
echo "File '${FILE}' contain strings with '${PATTERN}' in them:"
|
||||
|
||||
for OLD_STRING in ${STRINGS} ; do
|
||||
# Create the new string with a simple bash-replacement
|
||||
NEW_STRING=${OLD_STRING//${PATTERN}/${REPLACEMENT}}
|
||||
|
||||
# Create null terminated ASCII HEX representations of the strings
|
||||
OLD_STRING_HEX="$(echo -n ${OLD_STRING} | xxd -g 0 -u -ps -c 256)00"
|
||||
NEW_STRING_HEX="$(echo -n ${NEW_STRING} | xxd -g 0 -u -ps -c 256)00"
|
||||
|
||||
if [ ${#NEW_STRING_HEX} -le ${#OLD_STRING_HEX} ] ; then
|
||||
# Pad the replacement string with null terminations so the
|
||||
# length matches the original string
|
||||
while [ ${#NEW_STRING_HEX} -lt ${#OLD_STRING_HEX} ] ; do
|
||||
NEW_STRING_HEX="${NEW_STRING_HEX}00"
|
||||
done
|
||||
|
||||
# Now, replace every occurrence of OLD_STRING with NEW_STRING
|
||||
echo -n "Replacing ${OLD_STRING} with ${NEW_STRING}... "
|
||||
hexdump -ve '1/1 "%.2X"' ${FILE} | \
|
||||
sed "s/${OLD_STRING_HEX}/${NEW_STRING_HEX}/g" | \
|
||||
xxd -r -p > ${FILE}.tmp
|
||||
chmod --reference ${FILE} ${FILE}.tmp
|
||||
mv ${FILE}.tmp ${FILE}
|
||||
echo "Done!"
|
||||
else
|
||||
echo "New string '${NEW_STRING}' is longer than old" \
|
||||
"string '${OLD_STRING}'. Skipping."
|
||||
fi
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
patch_strings_in_file $@
|
||||
15
rpath.patch
Normal file
15
rpath.patch
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 6bdf24d..7ca5c4b 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -71,6 +71,9 @@ ElseIf("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
|
||||
Set(DAEMONLIBS pthread dl)
|
||||
EndIf()
|
||||
|
||||
+ Set(CMAKE_SKIP_RPATH True)
|
||||
+ Set(INSTALL_LIBDIR @libdir@)
|
||||
+
|
||||
Set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O2 -Wall -pedantic")
|
||||
|
||||
# see if we have clock_gettime in time.h
|
||||
|
||||
3
sources
3
sources
|
|
@ -1 +1,2 @@
|
|||
fbdf09dbef2aaf6c89804994d17b2440 iguanaIR-1.0.5.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