22 #include "libIBusDaemon.h"
29 #include <linux/input.h>
30 #include <linux/uinput.h>
32 #include "XFCIrKeyCodes.h"
34 #define IR_REMOTE_APP_INIT_STR "IrRemoteApp"
37 #define IOCTL_CALL(fd, keybit, keyvalue) \
38 if (ioctl (fd, keybit, keyvalue) < 0) {\
39 printf("Failed at %d = %d",keyvalue , errno); \
44 struct uinput_user_dev uinp;
45 struct input_event event;
47 static void _evtHandler(
const char *owner, IARM_EventId_t eventId,
void *data,
size_t len);
48 static void KeyProcessHandler(
int,
int);
49 static void IRkeyhandler(
int,
int);
50 static void SendKeyToKernel(
int);
51 static void RegisterDevice();
53 int main(
int argc,
char** argv)
59 char Init_Str[] = IR_REMOTE_APP_INIT_STR;
72 void KeyProcessHandler(
int KeyType,
int KeyCode)
78 printf(
"KET_KEYDOWN\n");
79 IRkeyhandler(KeyType, KeyCode);
99 uinp_fd = open(
"/dev/uinput", O_WRONLY|O_NDELAY);
103 printf(
"Unable to open /dev/uinput\n");
107 memset(&uinp,0,
sizeof(uinp));
109 snprintf(uinp.name, UINPUT_MAX_NAME_SIZE,
"Ir Keyboard");
110 uinp.id.bustype = BUS_USB;
112 uinp.id.vendor = 0x1234;
113 uinp.id.product = 0xfedc;
115 write(uinp_fd, &uinp,
sizeof(uinp));
120 IOCTL_CALL(uinp_fd, UI_SET_EVBIT, EV_KEY);
121 IOCTL_CALL(uinp_fd, UI_SET_EVBIT, EV_SYN);
124 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_H);
125 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_R);
126 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_P);
127 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_U);
128 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_D);
129 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_S);
130 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_F);
131 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_X);
132 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_Z);
133 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_UP);
134 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_DOWN);
135 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_LEFT);
136 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_RIGHT);
137 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_SPACE);
138 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_ESC);
140 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_0);
141 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_1);
142 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_2);
143 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_3);
144 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_4);
145 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_5);
146 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_6);
147 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_7);
148 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_8);
149 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_9);
151 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_VOLUMEUP);
152 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_VOLUMEDOWN);
153 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_MUTE);
155 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_F2);
156 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_F3);
157 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_F5);
159 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_ENTER);
160 IOCTL_CALL(uinp_fd, UI_SET_KEYBIT, KEY_BACKSPACE);
162 IOCTL_CALL(uinp_fd, UI_DEV_CREATE, NULL);
167 void IRkeyhandler(
int KeyType,
int KeyCode)
175 SendKeyToKernel(KEY_H);
178 SendKeyToKernel(KEY_UP);
182 SendKeyToKernel(KEY_DOWN);
186 SendKeyToKernel(KEY_LEFT);
190 SendKeyToKernel(KEY_RIGHT);
193 SendKeyToKernel(KEY_SPACE);
196 SendKeyToKernel(KEY_ESC);
199 SendKeyToKernel(KEY_0);
202 SendKeyToKernel(KEY_1);
205 SendKeyToKernel(KEY_2);
208 SendKeyToKernel(KEY_3);
211 SendKeyToKernel(KEY_4);
214 SendKeyToKernel(KEY_5);
217 SendKeyToKernel(KEY_6);
220 SendKeyToKernel(KEY_7);
223 SendKeyToKernel(KEY_8);
226 SendKeyToKernel(KEY_9);
229 SendKeyToKernel(KEY_U);
231 case KED_CHANNELDOWN :
232 SendKeyToKernel(KEY_D);
235 SendKeyToKernel(KEY_VOLUMEUP);
237 case KED_VOLUMEDOWN :
238 SendKeyToKernel(KEY_VOLUMEDOWN);
241 SendKeyToKernel(KEY_MUTE);
244 SendKeyToKernel(KEY_P);
247 SendKeyToKernel(KEY_P);
250 SendKeyToKernel(KEY_ENTER);
252 case KED_FASTFORWARD:
253 SendKeyToKernel(KEY_F);
256 SendKeyToKernel(KEY_R);
259 SendKeyToKernel(KEY_STOP);
262 SendKeyToKernel(KEY_S);
265 SendKeyToKernel(KEY_Z);
268 SendKeyToKernel(KEY_X);
277 void SendKeyToKernel(
int code)
279 printf(
"Inside SendKeytoKernel\n");
280 memset(&event, 0,
sizeof(event));
287 write(uinp_fd, &event,
sizeof(event));
289 memset(&event, 0,
sizeof(event));
293 write(uinp_fd, &event,
sizeof(event));
296 event.code = SYN_REPORT;
298 write(uinp_fd, &event,
sizeof(event));
300 printf(
"keyevent send to the kernel\n");
305 void _evtHandler(
const char *owner, IARM_EventId_t eventId,
void *data,
size_t len)
315 int keyCode = irEventData->data.irkey.keyCode;
316 int keyType = irEventData->data.irkey.keyType;
317 printf(
"Receiver Get IR KeyCode: %d-",keyCode);
318 KeyProcessHandler(
keyType, keyCode);