[Mplayer-cvslog] CVS: main/input lirc.c,NONE,1.1 lirc.h,NONE,1.1 input.c,1.1,1.2 Makefile,1.1,1.2
Alban Bedel CVS
albeu at mplayer.dev.hu
Thu Jan 31 10:39:13 CET 2002
- Previous message: [Mplayer-cvslog] CVS: main mplayer.c,1.379,1.380
- Next message: [Mplayer-cvslog] CVS: main/libvo video_out.h,1.14,1.15 video_out_internal.h,1.7,1.8 vo_3dfx.c,1.9,1.10 vo_aa.c,1.18,1.19 vo_dga.c,1.37,1.38 vo_directfb.c,1.8,1.9 vo_dxr3.c,1.39,1.40 vo_fbdev.c,1.57,1.58 vo_fsdga.c,1.6,1.7 vo_ggi.c,1.12,1.13 vo_gl.c,1.17,1.18 vo_gl2.c,1.11,1.12 vo_md5.c,1.7,1.8 vo_mga.c,1.20,1.21 vo_mpegpes.c,1.17,1.18 vo_null.c,1.4,1.5 vo_odivx.c,1.8,1.9 vo_pgm.c,1.8,1.9 vo_png.c,1.10,1.11 vo_sdl.c,1.61,1.62 vo_svga.c,1.40,1.41 vo_syncfb.c,1.8,1.9 vo_tdfxfb.c,1.4,1.5 vo_vesa.c,1.58,1.59 vo_x11.c,1.53,1.54 vo_xmga.c,1.41,1.42 vo_xv.c,1.50,1.51 vo_xvidix.c,1.13,1.14 vo_zr.c,1.6,1.7
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/mplayer/main/input
In directory mplayer:/var/tmp.root/cvs-serv12952/input
Modified Files:
input.c Makefile
Added Files:
lirc.c lirc.h
Log Message:
Added lirc support in input
--- NEW FILE ---
#include "../config.h"
#ifdef HAVE_LIRC
#include <lirc/lirc_client.h>
#include <errno.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#include "../mp_msg.h"
#include "../help_mp.h"
static struct lirc_config *lirc_config;
extern char *lirc_configfile;
static int child_pid=0;
static void
mp_input_lirc_process_quit(int sig);
static void
mp_input_lirc_process(int mp_fd);
int
mp_input_lirc_init(void) {
int lirc_flags;
int lirc_sock;
int p[2];
mp_msg(MSGT_LIRC,MSGL_INFO,MSGTR_SettingUpLIRC);
if((lirc_sock=lirc_init("mplayer",1))==-1){
mp_msg(MSGT_LIRC,MSGL_ERR,MSGTR_LIRCopenfailed MSGTR_LIRCdisabled);
return -1;
}
#if 0
fcntl(lirc_sock,F_SETOWN,getpid());
lirc_flags=fcntl(lirc_sock,F_GETFL,0);
if(lirc_flags!=-1) {
fcntl(lirc_sock,F_SETFL,lirc_flags|O_NONBLOCK);
} else {
lirc_deinit();
mp_msg(MSGT_LIRC,MSGL_ERR,MSGTR_LIRCsocketerr MSGTR_LIRCdisabled,strerror(errno));
return -1;
}
#endif
if(lirc_readconfig( lirc_configfile,&lirc_config,NULL )!=0 ){
mp_msg(MSGT_LIRC,MSGL_ERR,MSGTR_LIRCcfgerr MSGTR_LIRCdisabled,
lirc_configfile == NULL ? "~/.lircrc" : lirc_configfile);
lirc_deinit();
return -1;
}
if(pipe(p) != 0) {
mp_msg(MSGT_LIRC,MSGL_ERR,"Can't create lirc pipe : %s\n",strerror(errno));
lirc_deinit();
}
child_pid = fork();
if(child_pid < 0) {
mp_msg(MSGT_LIRC,MSGL_ERR,"Can't fork lirc subprocess : %s\n",strerror(errno));
lirc_deinit();
close(p[0]);
close(p[1]);
return -1;
} else if(child_pid == 0) {// setup child process
close(p[0]);
// put some signal handlers
signal(SIGINT,mp_input_lirc_process_quit);
signal(SIGHUP,mp_input_lirc_process_quit);
signal(SIGQUIT,mp_input_lirc_process_quit);
// start the process
mp_input_lirc_process(p[1]);
}
// free unuseful ressources in parent process
lirc_freeconfig(lirc_config);
close(p[1]);
mp_msg(MSGT_LIRC,MSGL_V,"NEW LIRC init was successful.\n");
return p[0];
}
static void
mp_input_lirc_process_quit(int sig) {
lirc_freeconfig(lirc_config);
lirc_deinit();
exit(sig > 0 ? 0 : -1);
}
static void
mp_input_lirc_process(int mp_fd) {
char *cmd,*code;
int ret;
while(lirc_nextcode(&code)==0) {
if(code==NULL)
continue;
while((ret=lirc_code2char(lirc_config,code,&cmd))==0 && cmd!=NULL) {
int len = strlen(cmd)+1;
char buf[len];
int w=0;
strcpy(buf,cmd);
buf[len-1] = '\n';
while(w < len) {
int r = write(mp_fd,buf,len-w);
if(r < 0) {
if(errno == EINTR)
continue;
mp_msg(MSGT_LIRC,MSGL_V,"LIRC subprocess can't write in input pipe : %s\n",
strerror(errno));
mp_input_lirc_process_quit(-1);
}
w += r;
}
}
free(code);
if(ret==-1)
break;
}
mp_input_lirc_process_quit(-1);
}
void
mp_input_lirc_uninit(void) {
if( kill(child_pid,SIGQUIT) != 0) {
mp_msg(MSGT_LIRC,MSGL_V,"LIRC can't kill subprocess %d : %s\n",
child_pid,strerror(errno));
return;
}
if(waitpid(child_pid,NULL,0) < 0)
mp_msg(MSGT_LIRC,MSGL_V,"LIRC error while waiting subprocess %d : %s\n",
child_pid,strerror(errno));
}
#endif
--- NEW FILE ---
int
mp_input_lirc_init(void);
void
mp_input_lirc_uninit(void);
Index: input.c
===================================================================
RCS file: /cvsroot/mplayer/main/input/input.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- input.c 30 Jan 2002 12:46:03 -0000 1.1
+++ input.c 31 Jan 2002 09:39:11 -0000 1.2
@@ -25,6 +25,10 @@
#include "joystick.h"
#endif
+#ifdef HAVE_LIRC
+#include "lirc.h"
+#endif
+
// If the args field is not NULL, the command will only be passed if
// an argument exist.
@@ -791,6 +795,23 @@
else
mp_input_add_key_fd(fd,1,mp_input_joystick_read,(mp_close_func_t)close);
}
+#endif
+
+#ifdef HAVE_LIRC
+ {
+ int fd = mp_input_lirc_init();
+ if(fd > 0)
+ mp_input_add_cmd_fd(fd,1,NULL,(mp_close_func_t)close);
+ }
+#endif
+
+}
+
+void
+mp_input_uninit(void) {
+
+#ifdef HAVE_LIRC
+ mp_input_lirc_uninit();
#endif
}
Index: Makefile
===================================================================
RCS file: /cvsroot/mplayer/main/input/Makefile,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Makefile 30 Jan 2002 12:46:03 -0000 1.1
+++ Makefile 31 Jan 2002 09:39:11 -0000 1.2
@@ -3,7 +3,7 @@
LIBNAME = libinput.a
-SRCS=input.c joystick.c
+SRCS=input.c joystick.c lirc.c
OBJS=$(SRCS:.c=.o)
CFLAGS = $(OPTFLAGS) -I. -I.. -Wall
- Previous message: [Mplayer-cvslog] CVS: main mplayer.c,1.379,1.380
- Next message: [Mplayer-cvslog] CVS: main/libvo video_out.h,1.14,1.15 video_out_internal.h,1.7,1.8 vo_3dfx.c,1.9,1.10 vo_aa.c,1.18,1.19 vo_dga.c,1.37,1.38 vo_directfb.c,1.8,1.9 vo_dxr3.c,1.39,1.40 vo_fbdev.c,1.57,1.58 vo_fsdga.c,1.6,1.7 vo_ggi.c,1.12,1.13 vo_gl.c,1.17,1.18 vo_gl2.c,1.11,1.12 vo_md5.c,1.7,1.8 vo_mga.c,1.20,1.21 vo_mpegpes.c,1.17,1.18 vo_null.c,1.4,1.5 vo_odivx.c,1.8,1.9 vo_pgm.c,1.8,1.9 vo_png.c,1.10,1.11 vo_sdl.c,1.61,1.62 vo_svga.c,1.40,1.41 vo_syncfb.c,1.8,1.9 vo_tdfxfb.c,1.4,1.5 vo_vesa.c,1.58,1.59 vo_x11.c,1.53,1.54 vo_xmga.c,1.41,1.42 vo_xv.c,1.50,1.51 vo_xvidix.c,1.13,1.14 vo_zr.c,1.6,1.7
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the MPlayer-cvslog
mailing list