aboutsummaryrefslogtreecommitdiffstats
path: root/lirc.c
diff options
context:
space:
mode:
Diffstat (limited to 'lirc.c')
-rw-r--r--lirc.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/lirc.c b/lirc.c
new file mode 100644
index 0000000..1428001
--- /dev/null
+++ b/lirc.c
@@ -0,0 +1,60 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <pthread.h>
+
+#include <lirc/lirc_client.h>
+#include "lirc.h"
+
+/*-----------------------------------------------------------------------*/
+
+static int debug = 0;
+static struct lirc_config *config = NULL;
+
+int lirc_fbi_init()
+{
+ int fd;
+ if (-1 == (fd = lirc_init("fbi",debug))) {
+ if (debug)
+ fprintf(stderr,"lirc: no infrared remote support available\n");
+ return -1;
+ }
+ if (0 != lirc_readconfig(NULL,&config,NULL)) {
+ config = NULL;
+ }
+ if (debug)
+ fprintf(stderr, "lirc: ~/.lircrc file %sfound\n",
+ config ? "" : "not ");
+
+ fcntl(fd,F_SETFL,O_NONBLOCK);
+ fcntl(fd,F_SETFD,FD_CLOEXEC);
+ if (debug)
+ fprintf(stderr,"lirc: init ok\n");
+
+ return fd;
+}
+
+int lirc_fbi_havedata(int* rc, char key[11])
+{
+ char *code,*cmd;
+ int ret=-1;
+
+ while (lirc_nextcode(&code) == 0 && code != NULL) {
+ ret = 0;
+ if (config) {
+ /* use ~/.lircrc */
+ while (lirc_code2char(config,code,&cmd)==0 && cmd != NULL) {
+ memset(key,0,11);
+ strncpy(key,cmd,10);
+ *rc = strlen(cmd);
+ if (debug)
+ fprintf(stderr,"lirc: cmd \"%s\"\n", cmd);
+ }
+ }
+ free(code);
+ }
+ return ret;
+}