aboutsummaryrefslogtreecommitdiffstats
path: root/src/lirc.c
diff options
context:
space:
mode:
authorThomas Jansen <mithi@mithi.net>2008-11-07 08:16:41 +0100
committerMax Kellermann <max@duempel.org>2008-11-07 08:16:41 +0100
commitd88a1718bbca660e13ad60f8f1aec6084fcf7788 (patch)
tree808e721f1fffeafa4a9fa6e169e5467ae3dd28f3 /src/lirc.c
parent8221502e87f6c1a652b7c3148467248f538970bd (diff)
downloadmpd-d88a1718bbca660e13ad60f8f1aec6084fcf7788.tar.gz
mpd-d88a1718bbca660e13ad60f8f1aec6084fcf7788.tar.xz
mpd-d88a1718bbca660e13ad60f8f1aec6084fcf7788.zip
native LIRC support for ncmpc
The attachment includes the patch and a sample .lircrc config for testing purposes (i. e. only a few commands are mapped to IR events). The config is rather simple to write: For each button add a block like this to ~/.lircrc: begin button = <button name from /etc/lircd.conf> prog = ncmpc config = <command name from src/command.c> end The patch is not finished, there are several problems that still need to be solved: 1. the configure.ac modifications are just for testing purposes and should be made optional with a parameter like --enable-lirc for ./configure. Unfortunately I'm not an expert on autoconfig tools. 2. LIRC example code [1] suggests looping over lirc_code2char, probably to have multiple actions that can be triggered from one button. Perhaps lirc_event(...) should be moved to lirc.c and be heavily modified, no longer being a mere copy of keyboard_event(...).
Diffstat (limited to 'src/lirc.c')
-rw-r--r--src/lirc.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/lirc.c b/src/lirc.c
new file mode 100644
index 000000000..0ad34ca2f
--- /dev/null
+++ b/src/lirc.c
@@ -0,0 +1,41 @@
+#include <lirc/lirc_client.h>
+#include "lirc.h"
+
+static struct lirc_config *lc = NULL;
+static int lirc_socket = 0;
+
+int ncmpc_lirc_open()
+{
+ if ((lirc_socket = lirc_init("ncmpc", 0)) == -1)
+ return -1;
+
+ if (lirc_readconfig(NULL, &lc, NULL)) {
+ lirc_deinit();
+ return -1;
+ }
+
+ return lirc_socket;
+}
+
+void ncmpc_lirc_close()
+{
+ if (lc)
+ lirc_freeconfig(lc);
+ lirc_deinit();
+}
+
+command_t ncmpc_lirc_get_command()
+{
+ char *code = NULL, *cmd = NULL;
+
+ if (lirc_nextcode(&code) != 0)
+ return CMD_NONE;
+
+ if (lirc_code2char(lc, code, &cmd) != 0)
+ return CMD_NONE;
+
+ if (!cmd)
+ return CMD_NONE;
+
+ return get_key_command_from_name(cmd);
+}