From 6e977735f0fb4380093ee40c0328d0ce91733e2a Mon Sep 17 00:00:00 2001 From: hklein Date: Mon, 17 Jan 2000 08:23:48 +0000 Subject: [PATCH] *** empty log message *** --- server/drivers/Makefile.am | 2 +- server/drivers/lcd.c | 7 +++ server/drivers/lircin.c | 120 +++++++++++++++++++++++++++++++++++++ server/drivers/lircin.h | 12 ++++ 4 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 server/drivers/lircin.c create mode 100644 server/drivers/lircin.h diff --git a/server/drivers/Makefile.am b/server/drivers/Makefile.am index 4e41658..71f6b1c 100644 --- a/server/drivers/Makefile.am +++ b/server/drivers/Makefile.am @@ -3,6 +3,6 @@ libLCDdrivers_a_SOURCES = lcd.c lcd.h drv_base.c EXTRA_libLCDdrivers_a_SOURCES = MtxOrb.c MtxOrb.h text.c text.h \ curses_drv.c curses_drv.h drv_base.c drv_base.h \ hd44780.c hd44780.h port.h joy.c joy.h irmanin.c irmanin.h \ - CFontz.c CFontz.h debug.h + CFontz.c CFontz.h lircin.c lircin.h debug.h libLCDdrivers_a_DEPENDENCIES = @DRIVERS@ libLCDdrivers_a_LIBADD = @DRIVERS@ diff --git a/server/drivers/lcd.c b/server/drivers/lcd.c index 1e18900..cd9e0d3 100644 --- a/server/drivers/lcd.c +++ b/server/drivers/lcd.c @@ -52,6 +52,10 @@ #include "irmanin.h" #endif +#ifdef LIRCIN_DRV +#include "lircin.h" +#endif + // TODO: Make a Windows server, and clients...? @@ -86,6 +90,9 @@ lcd_physical_driver drivers[] = #endif #ifdef IRMANIN_DRV { "irmanin", irmanin_init, }, +#endif +#ifdef LIRCIN_DRV + { "lircin", lircin_init, }, #endif { NULL, NULL, }, diff --git a/server/drivers/lircin.c b/server/drivers/lircin.c new file mode 100644 index 0000000..18db9eb --- /dev/null +++ b/server/drivers/lircin.c @@ -0,0 +1,120 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define __u32 unsigned int +#define __u8 unsigned char + + +#include "../../shared/debug.h" +#include "../../shared/str.h" + +#define NAME_LENGTH 128 + +#include "lcd.h" +#include "lircin.h" + + +char *progname = "lircin"; + +int fd; +char buf[256]; +struct sockaddr_un addr; + +static struct lirc_config *config; + + +////////////////////////////////////////////////////////////////////////// +////////////////////// Base "class" to derive from /////////////////////// +////////////////////////////////////////////////////////////////////////// + +lcd_logical_driver *lircin; + +//void sigterm(int sig) +//{ +// ir_free_commands(); +// ir_finish(); +// raise(sig); +//} + +void lircin_close() +{ +} + + +////////////////////////////////////////////////////////////////////// +// Tries to read a character from an input device... +// +// Return 0 for "nothing available". +// +char lircin_getkey() +{ + char key; + char *ir,*cmd; + + if (!(ir = lirc_nextir())) + { + return 0; + } else + { + if (!(cmd = lirc_ir2char(config,ir))) return 0; + + printf("lirc: \"%s\"\n", cmd); + sscanf(cmd,"%c",&key); + printf("\n%c\n",key); + free(ir); + return key; + } + + return 0; +} + + +//////////////////////////////////////////////////////////// +// init() should set up any device-specific stuff, and +// point all the function pointers. +int lircin_init(struct lcd_logical_driver *driver, char *args) +{ + +/* assign funktions */ + + lircin = driver; + + driver->getkey = lircin_getkey; + driver->close = lircin_close; + +/* open socket to lirc */ + + + if (-1 == (fd = lirc_init("lcdd",1))) { + fprintf(stderr,"no infrared remote support available\n"); + return -1; + } + + if (0 != lirc_readconfig(NULL,&config,NULL)) { + lirc_deinit(); + return -1; + } + fcntl(fd,F_SETFL,O_NONBLOCK); + fcntl(fd,F_SETFD,FD_CLOEXEC); + +/* socket shouldn block lcdd */ + + fcntl(fd,F_SETFL,O_NONBLOCK); + fcntl(fd,F_SETFD,FD_CLOEXEC); + + return 1; // 200 is arbitrary. (must be 1 or more) +} + diff --git a/server/drivers/lircin.h b/server/drivers/lircin.h new file mode 100644 index 0000000..5f68c41 --- /dev/null +++ b/server/drivers/lircin.h @@ -0,0 +1,12 @@ +#ifndef LCD_LIRCIN_H +#define LCD_LIRCIN_H + + +extern lcd_logical_driver *lircin; + +int lircin_init(struct lcd_logical_driver *driver, char *args); +void lircin_close(); +char lircin_getkey(); + + +#endif