Mercurial > mplayer.hg
annotate lirc_mp.c @ 1974:1b6a82059df3
*** empty log message ***
author | gabucino |
---|---|
date | Wed, 26 Sep 2001 22:24:14 +0000 |
parents | 5216f108cb4f |
children | 7858bc1b360d |
rev | line source |
---|---|
1 | 1 /* |
2 | |
3 lirc support for MPLayer (see www.lirc.org) | |
4 | |
5 v0.1 | |
6 | |
7 written 15/2/2001 by Andreas Ackermann (acki@acki-netz.de) | |
8 | |
9 file comes without warranty and all | |
10 | |
11 */ | |
12 | |
13 // hack, will be remove later when ./configure fixed... | |
14 #include "config.h" | |
15 #ifdef HAVE_LIRC | |
16 | |
17 // start of LIRC support | |
18 | |
19 #include <lirc/lirc_client.h> | |
20 #include <errno.h> | |
21 #include <stdio.h> | |
22 #include <sys/ioctl.h> | |
23 #include <string.h> | |
24 #include <fcntl.h> | |
25 #include "linux/keycodes.h" | |
26 | |
27 // global stuff ---------------------------------------------------- | |
28 | |
29 static struct lirc_config *lirc_config; | |
30 static int lirc_is_setup = 0; | |
1149
6a0f937b52e6
- new config option -lircconfig (config file for lirc)
acki2
parents:
593
diff
changeset
|
31 char *lirc_configfile = NULL; |
1 | 32 |
33 // setup routine --------------------------------------------------- | |
34 | |
35 void lirc_mp_setup(void){ | |
36 | |
37 int lirc_flags; | |
38 int lirc_sock; | |
39 | |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1167
diff
changeset
|
40 mp_msg(MSGT_LIRC,MSGL_INFO,MSGTR_SettingUpLIRC); |
1 | 41 if((lirc_sock=lirc_init("mplayer_lirc",1))==-1){ |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1167
diff
changeset
|
42 mp_msg(MSGT_LIRC,MSGL_ERR,MSGTR_LIRCopenfailed MSGTR_LIRCdisabled); |
1 | 43 return; |
44 } | |
45 | |
46 fcntl(lirc_sock,F_SETOWN,getpid()); | |
47 lirc_flags=fcntl(lirc_sock,F_GETFL,0); | |
48 if(lirc_flags!=-1) | |
49 { | |
50 fcntl(lirc_sock,F_SETFL,lirc_flags|O_NONBLOCK); | |
51 }else{ | |
52 lirc_deinit(); | |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1167
diff
changeset
|
53 mp_msg(MSGT_LIRC,MSGL_ERR,MSGTR_LIRCsocketerr MSGTR_LIRCdisabled,strerror(errno)); |
1 | 54 return; |
55 } | |
56 | |
57 | |
1149
6a0f937b52e6
- new config option -lircconfig (config file for lirc)
acki2
parents:
593
diff
changeset
|
58 if(lirc_readconfig( lirc_configfile,&lirc_config,NULL )!=0 ){ |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1167
diff
changeset
|
59 mp_msg(MSGT_LIRC,MSGL_ERR,MSGTR_LIRCcfgerr MSGTR_LIRCdisabled, |
1149
6a0f937b52e6
- new config option -lircconfig (config file for lirc)
acki2
parents:
593
diff
changeset
|
60 lirc_configfile == NULL ? "~/.lircrc" : lirc_configfile); |
1 | 61 lirc_deinit(); |
62 return; | |
63 } | |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1167
diff
changeset
|
64 mp_msg(MSGT_LIRC,MSGL_V,"LIRC init was successful.\n"); |
1 | 65 lirc_is_setup = 1; |
66 } | |
67 | |
68 // cleanup routine ------------------------------------------- | |
69 | |
70 void lirc_mp_cleanup(void){ | |
71 if(lirc_is_setup != 0){ | |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1167
diff
changeset
|
72 mp_msg(MSGT_LIRC,MSGL_V,"Cleaning up lirc stuff.\n"); |
1 | 73 lirc_mp_getinput(NULL); |
74 lirc_freeconfig(lirc_config); | |
75 lirc_deinit(); | |
76 lirc_is_setup = 0; | |
77 } | |
78 } | |
79 | |
80 // get some events ------------------------------------------- | |
81 | |
82 | |
83 struct lirc_cmd { | |
84 unsigned char *lc_lirccmd; | |
85 int mplayer_cmd; | |
86 }; | |
87 | |
88 int lirc_mp_getinput(){ | |
89 | |
90 static struct lirc_cmd lirc_cmd[] = { | |
91 {"QUIT", KEY_ESC}, | |
92 {"FWD" , KEY_RIGHT}, | |
93 {"FFWD" , KEY_UP}, | |
94 {"RWND" , KEY_LEFT}, | |
95 {"FRWND" , KEY_DOWN}, | |
462 | 96 {"PAUSE", 'p'}, |
97 {"INCVOL", '*'}, | |
98 {"DECVOL", '/'}, | |
593 | 99 {"MASTER", 'm'}, |
1167
37d6e98cb645
ASYNC +- patch applied by Olli Sulopuisto <dst@iki.fi>
arpi_esp
parents:
1149
diff
changeset
|
100 {"ASYNC-", '-'}, |
37d6e98cb645
ASYNC +- patch applied by Olli Sulopuisto <dst@iki.fi>
arpi_esp
parents:
1149
diff
changeset
|
101 {"ASYNC+", '+'}, |
593 | 102 {"OSD", 'o'} |
1 | 103 }; |
104 | |
105 char *code; | |
106 char *c; | |
107 int ret; | |
108 int i; | |
109 int retval = 0; | |
110 | |
111 if( lirc_is_setup == 0)return 0; | |
112 | |
113 if(lirc_config == NULL ){ | |
114 // do some cleanupstuff like freeing memory or the like | |
115 // (if we ever should do it the right way and loop over all | |
116 // all strings delivered by lirc_code2char() ) | |
117 }else{ | |
118 | |
119 if(lirc_nextcode(&code)==0){ | |
120 if(code!=NULL){ | |
121 // this should be a while loop | |
122 // but we would have to introduce state since we need to keep | |
123 // code | |
124 if((ret=lirc_code2char(lirc_config,code,&c))==0 && c!=NULL){ | |
125 fprintf(stderr, "LIRC: Got string \"%s\"",c); | |
126 for(i=0; i< (sizeof(lirc_cmd)/sizeof(struct lirc_cmd)); i++){ | |
127 if(!(strcmp(lirc_cmd[i].lc_lirccmd, c))){ | |
128 retval = lirc_cmd[i].mplayer_cmd; | |
129 break; | |
130 } | |
131 | |
132 } | |
133 } | |
134 free(code); | |
135 if(ret==-1){ | |
1973
5216f108cb4f
all error/warn/info messages moved to help_mp-en.h for translation
arpi
parents:
1167
diff
changeset
|
136 mp_msg(MSGT_LIRC,MSGL_V,"LIRC: lirc_code2char() returned an error!\n"); |
1 | 137 } |
138 } | |
139 } | |
140 } | |
141 return retval; | |
142 } | |
143 | |
144 // end lirc support | |
145 | |
146 #endif // HAVE_LIRC | |
147 |