summaryrefslogtreecommitdiff
authorZan Peng <zan.peng@amlogic.com>2017-11-27 02:59:51 (GMT)
committer Zan Peng <zan.peng@amlogic.com>2017-11-27 03:07:58 (GMT)
commitd74bb8406b6268951f6bea7d580de77f944603cc (patch)
tree681b7813941edfdcb292d82d3fb7be96af6fe46b
parent084faa5796494109c664669596ff00597dc4de1a (diff)
downloadir_tools-d74bb8406b6268951f6bea7d580de77f944603cc.zip
ir_tools-d74bb8406b6268951f6bea7d580de77f944603cc.tar.gz
ir_tools-d74bb8406b6268951f6bea7d580de77f944603cc.tar.bz2
PD#154561: ir-tools: add remotecfg v1.1.0
ir-tools: add remotecfg v1.1.0 1. finish setting keymap 2. finish setting remote mouse 3. finish setting config file Usage: remotecfg -t remote.tab -d -c remote.cfg -t add (scancode, keycode)keymap -d enable debug -c add remote config(set protocol release time...) Change-Id: I17f62e2be3d4add7963fc470cd5834a0b7bf9b99 Signed-off-by: Zan Peng <zan.peng@amlogic.com>
Diffstat
-rw-r--r--remotecfg/Android.mk19
-rw-r--r--remotecfg/Makefile25
-rw-r--r--remotecfg/common.h64
-rw-r--r--remotecfg/device.c103
-rw-r--r--remotecfg/keydefine.h529
-rw-r--r--remotecfg/main.c205
-rw-r--r--remotecfg/parse.c183
-rw-r--r--remotecfg/rc_common.h80
-rw-r--r--remotecfg/remote-mouse.tab71
-rw-r--r--remotecfg/remote.cfg16
-rw-r--r--remotecfg/remote.tab64
11 files changed, 1359 insertions, 0 deletions
diff --git a/remotecfg/Android.mk b/remotecfg/Android.mk
new file mode 100644
index 0000000..1b71b2d
--- a/dev/null
+++ b/remotecfg/Android.mk
@@ -0,0 +1,19 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES:= \
+ main.c \
+ parse.c \
+ device.c \
+
+LOCAL_SHARED_LIBRARIES:= \
+ libcutils \
+ libc \
+ liblog \
+
+LOCAL_C_INCLUDES += \
+ bionic/libc/include \
+
+LOCAL_MODULE:= remotecfg
+
+include $(BUILD_EXECUTABLE) \ No newline at end of file
diff --git a/remotecfg/Makefile b/remotecfg/Makefile
new file mode 100644
index 0000000..d8f11fe
--- a/dev/null
+++ b/remotecfg/Makefile
@@ -0,0 +1,25 @@
+DEPS = rc_common.h keydefine.h
+OBJ = main.o device.o parse.o
+
+%.o: %.c $(DEPS)
+ $(CC) -c -o $@ $< $(CFLAGS)
+
+remotecfg: $(OBJ)
+ $(CC) -o $@ $^ $(CFLAGS)
+
+.PHONY: clean
+
+clean:
+ rm -f *.o *~ remotecfg
+
+.PHONY: install
+
+install:
+ cp -f remotecfg $(TARGET_DIR)/usr/bin/
+ cp -f remote.tab $(TARGET_DIR)/etc
+ cp -f remote-mouse.tab $(TARGET_DIR)/etc
+
+.PHONY: uninstall
+
+uninstall:
+ rm -f $(TARGET_DIR)/usr/bin/remotecfg
diff --git a/remotecfg/common.h b/remotecfg/common.h
new file mode 100644
index 0000000..8498889
--- a/dev/null
+++ b/remotecfg/common.h
@@ -0,0 +1,64 @@
+#ifndef _COMMON_H_
+#define _COMMON_H_
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <strings.h>
+#include "keydefine.h"
+#include "rc_common.h"
+
+#define MAX_LINE_LEN 1024
+
+#define MAPCODE(scancode, keycode)\
+ ((((scancode) & 0xFFFF)<<16) | ((keycode) & 0xFFFF))
+
+#define MATCH(s,d) (strcasecmp(s, d) == 0)
+
+#define IS_NULL(s) (strlen(s) == 0)
+
+extern unsigned char dbg_flag;
+
+#define prDbg(fmt, ...) \
+{ \
+ if (dbg_flag) \
+ fprintf(stdout, fmt, ##__VA_ARGS__); \
+}
+
+enum {
+ SUCC = 0,
+ FAIL = -1,
+};
+
+enum {
+ CONFIG_LEVEL,
+ KEYMAP_LEVEL,
+ MOUSEMAP_LEVEL,
+ ADCMAP_LEVEL,
+};
+
+typedef int (*pfileHandle)(char *, char *, void *);
+
+typedef struct {
+ struct ir_map_tab tab;
+}S_TAB_FILE_T;
+
+typedef struct {
+ unsigned int workMode;
+ unsigned int repeatEnable;
+ unsigned int debugEnable;
+ /*software decode*/
+ struct ir_sw_decode_para sw_data;
+} S_CFG_FILE_T;
+
+
+int SetTabPara(int devFd, S_TAB_FILE_T *tabFile);
+int SetCfgPara(int devFd, const char *sysDir, S_CFG_FILE_T *cfgFile);
+int ParseFile(const char *file, pfileHandle handler, void *data);
+int CheckVersion(int fd);
+int OpenDevice(char *filename);
+int CloseDevice(int fd);
+
+
+
+#endif
diff --git a/remotecfg/device.c b/remotecfg/device.c
new file mode 100644
index 0000000..000cb6e
--- a/dev/null
+++ b/remotecfg/device.c
@@ -0,0 +1,103 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include "common.h"
+
+int CheckVersion(int fd)
+{
+ char verBuf[64];
+
+ if (ioctl(fd, REMOTE_IOC_GET_DATA_VERSION, verBuf) < 0) {
+ fprintf(stderr, "get driver version error=%s\n",
+ strerror(errno));
+ return FAIL;
+ }
+ /*check share data version info*/
+ if (0 != strcasecmp(verBuf, SHARE_DATA_VERSION)) {
+ fprintf(stderr, "interface version not match:"\
+ "user[%s] unequal to kernel[%s]\n",
+ SHARE_DATA_VERSION, verBuf);
+ return FAIL;
+ }
+ return SUCC;
+}
+
+static int WriteSysFile(const char *dir, const char *fileName, unsigned int val)
+{
+ int fd;
+ int len;
+ char fileBuf[MAX_LINE_LEN];
+ char wBuf[32];
+
+ snprintf(fileBuf, MAX_LINE_LEN, "%s%s", dir, fileName);
+ if ((fd = open(fileBuf, O_RDWR)) < 0) {
+ fprintf(stderr, "open %s: %s\n", fileBuf, strerror(errno));
+ return FAIL;
+ }
+
+ len = snprintf(wBuf, 32, "%u", val);
+ if (write(fd, (void *)wBuf, len+1) < 0) {
+ fprintf(stderr, "write %s: %s\n", fileBuf, strerror(errno));
+ close(fd);
+ return FAIL;
+ }
+
+ close(fd);
+ return SUCC;
+}
+
+int SetCfgPara(int devFd, const char *sysDir, S_CFG_FILE_T *cfgFile)
+{
+ WriteSysFile(sysDir, "protocol", cfgFile->workMode);
+ WriteSysFile(sysDir, "repeat_enable", cfgFile->repeatEnable);
+ WriteSysFile(sysDir, "debug_enable", cfgFile->debugEnable);
+
+ if (ioctl(devFd, REMOTE_IOC_SET_SW_DECODE_PARA,
+ &cfgFile->sw_data) < 0) {
+ fprintf(stderr, "failed to set software decode paras: %s\n",
+ strerror(errno));
+ return FAIL;
+ }
+
+ return SUCC;
+}
+
+int SetTabPara(int devFd, S_TAB_FILE_T *tabFile)
+{
+ if (ioctl(devFd, REMOTE_IOC_SET_KEY_NUMBER,
+ &tabFile->tab.map_size) < 0 ) {
+ fprintf(stderr, "failed to set key number: %s\n",
+ strerror(errno));
+ return FAIL;
+ }
+
+ if (ioctl(devFd, REMOTE_IOC_SET_KEY_MAPPING_TAB,
+ &tabFile->tab) < 0 ) {
+ fprintf(stderr, "failed to set map table: %s\n",
+ strerror(errno));
+ return FAIL;
+ }
+
+ return SUCC;
+}
+
+int OpenDevice(char *filename)
+{
+ int fd;
+
+ if ((fd = open(filename, O_RDWR)) < 0)
+ fprintf(stderr, "open %s:%s\n", filename, strerror(errno));
+ return fd;
+}
+
+int CloseDevice(int fd)
+{
+ if (fd >= 0)
+ close(fd);
+ return 0;
+}
diff --git a/remotecfg/keydefine.h b/remotecfg/keydefine.h
new file mode 100644
index 0000000..378dcf2
--- a/dev/null
+++ b/remotecfg/keydefine.h
@@ -0,0 +1,529 @@
+#ifndef _KEY_DEFINE_H
+#define _KEY_DEFINE_H
+
+#define KEY_RESERVED 0
+#define KEY_ESC 1
+#define KEY_1 2
+#define KEY_2 3
+#define KEY_3 4
+#define KEY_4 5
+#define KEY_5 6
+#define KEY_6 7
+#define KEY_7 8
+#define KEY_8 9
+#define KEY_9 10
+#define KEY_0 11
+#define KEY_MINUS 12
+#define KEY_EQUAL 13
+#define KEY_BACKSPACE 14
+#define KEY_TAB 15
+#define KEY_Q 16
+#define KEY_W 17
+#define KEY_E 18
+#define KEY_R 19
+#define KEY_T 20
+#define KEY_Y 21
+#define KEY_U 22
+#define KEY_I 23
+#define KEY_O 24
+#define KEY_P 25
+#define KEY_LEFTBRACE 26
+#define KEY_RIGHTBRACE 27
+#define KEY_ENTER 28
+#define KEY_LEFTCTRL 29
+#define KEY_A 30
+#define KEY_S 31
+#define KEY_D 32
+#define KEY_F 33
+#define KEY_G 34
+#define KEY_H 35
+#define KEY_J 36
+#define KEY_K 37
+#define KEY_L 38
+#define KEY_SEMICOLON 39
+#define KEY_APOSTROPHE 40
+#define KEY_GRAVE 41
+#define KEY_LEFTSHIFT 42
+#define KEY_BACKSLASH 43
+#define KEY_Z 44
+#define KEY_X 45
+#define KEY_C 46
+#define KEY_V 47
+#define KEY_B 48
+#define KEY_N 49
+#define KEY_M 50
+#define KEY_COMMA 51
+#define KEY_DOT 52
+#define KEY_SLASH 53
+#define KEY_RIGHTSHIFT 54
+#define KEY_KPASTERISK 55
+#define KEY_LEFTALT 56
+#define KEY_SPACE 57
+#define KEY_CAPSLOCK 58
+#define KEY_F1 59
+#define KEY_F2 60
+#define KEY_F3 61
+#define KEY_F4 62
+#define KEY_F5 63
+#define KEY_F6 64
+#define KEY_F7 65
+#define KEY_F8 66
+#define KEY_F9 67
+#define KEY_F10 68
+#define KEY_NUMLOCK 69
+#define KEY_SCROLLLOCK 70
+#define KEY_KP7 71
+#define KEY_KP8 72
+#define KEY_KP9 73
+#define KEY_KPMINUS 74
+#define KEY_KP4 75
+#define KEY_KP5 76
+#define KEY_KP6 77
+#define KEY_KPPLUS 78
+#define KEY_KP1 79
+#define KEY_KP2 80
+#define KEY_KP3 81
+#define KEY_KP0 82
+#define KEY_KPDOT 83
+
+#define KEY_ZENKAKUHANKAKU 85
+#define KEY_102ND 86
+#define KEY_F11 87
+#define KEY_F12 88
+#define KEY_RO 89
+#define KEY_KATAKANA 90
+#define KEY_HIRAGANA 91
+#define KEY_HENKAN 92
+#define KEY_KATAKANAHIRAGANA 93
+#define KEY_MUHENKAN 94
+#define KEY_KPJPCOMMA 95
+#define KEY_KPENTER 96
+#define KEY_RIGHTCTRL 97
+#define KEY_KPSLASH 98
+#define KEY_SYSRQ 99
+#define KEY_RIGHTALT 100
+#define KEY_LINEFEED 101
+#define KEY_HOME 102
+#define KEY_UP 103
+#define KEY_PAGEUP 104
+#define KEY_LEFT 105
+#define KEY_RIGHT 106
+#define KEY_END 107
+#define KEY_DOWN 108
+#define KEY_PAGEDOWN 109
+#define KEY_INSERT 110
+#define KEY_DELETE 111
+#define KEY_MACRO 112
+#define KEY_MUTE 113
+#define KEY_VOLUMEDOWN 114
+#define KEY_VOLUMEUP 115
+#define KEY_POWER 116 /* SC System Power Down */
+#define KEY_KPEQUAL 117
+#define KEY_KPPLUSMINUS 118
+#define KEY_PAUSE 119
+#define KEY_SCALE 120 /* AL Compiz Scale (Expose) */
+
+#define KEY_KPCOMMA 121
+#define KEY_HANGEUL 122
+#define KEY_HANGUEL KEY_HANGEUL
+#define KEY_HANJA 123
+#define KEY_YEN 124
+#define KEY_LEFTMETA 125
+#define KEY_RIGHTMETA 126
+#define KEY_COMPOSE 127
+
+#define KEY_STOP 128 /* AC Stop */
+#define KEY_AGAIN 129
+#define KEY_PROPS 130 /* AC Properties */
+#define KEY_UNDO 131 /* AC Undo */
+#define KEY_FRONT 132
+#define KEY_COPY 133 /* AC Copy */
+#define KEY_OPEN 134 /* AC Open */
+#define KEY_PASTE 135 /* AC Paste */
+#define KEY_FIND 136 /* AC Search */
+#define KEY_CUT 137 /* AC Cut */
+#define KEY_HELP 138 /* AL Integrated Help Center */
+#define KEY_MENU 139 /* Menu (show menu) */
+#define KEY_CALC 140 /* AL Calculator */
+#define KEY_SETUP 141
+#define KEY_SLEEP 142 /* SC System Sleep */
+#define KEY_WAKEUP 143 /* System Wake Up */
+#define KEY_FILE 144 /* AL Local Machine Browser */
+#define KEY_SENDFILE 145
+#define KEY_DELETEFILE 146
+#define KEY_XFER 147
+#define KEY_PROG1 148
+#define KEY_PROG2 149
+#define KEY_WWW 150 /* AL Internet Browser */
+#define KEY_MSDOS 151
+#define KEY_COFFEE 152 /* AL Terminal Lock/Screensaver */
+#define KEY_SCREENLOCK KEY_COFFEE
+#define KEY_DIRECTION 153
+#define KEY_CYCLEWINDOWS 154
+#define KEY_MAIL 155
+#define KEY_BOOKMARKS 156 /* AC Bookmarks */
+#define KEY_COMPUTER 157
+#define KEY_BACK 158 /* AC Back */
+#define KEY_FORWARD 159 /* AC Forward */
+#define KEY_CLOSECD 160
+#define KEY_EJECTCD 161
+#define KEY_EJECTCLOSECD 162
+#define KEY_NEXTSONG 163
+#define KEY_PLAYPAUSE 164
+#define KEY_PREVIOUSSONG 165
+#define KEY_STOPCD 166
+#define KEY_RECORD 167
+#define KEY_REWIND 168
+#define KEY_PHONE 169 /* Media Select Telephone */
+#define KEY_ISO 170
+#define KEY_CONFIG 171 /* AL Consumer Control Configuration */
+#define KEY_HOMEPAGE 172 /* AC Home */
+#define KEY_REFRESH 173 /* AC Refresh */
+#define KEY_EXIT 174 /* AC Exit */
+#define KEY_MOVE 175
+#define KEY_EDIT 176
+#define KEY_SCROLLUP 177
+#define KEY_SCROLLDOWN 178
+#define KEY_KPLEFTPAREN 179
+#define KEY_KPRIGHTPAREN 180
+#define KEY_NEW 181 /* AC New */
+#define KEY_REDO 182 /* AC Redo/Repeat */
+
+#define KEY_F13 183
+#define KEY_F14 184
+#define KEY_F15 185
+#define KEY_F16 186
+#define KEY_F17 187
+#define KEY_F18 188
+#define KEY_F19 189
+#define KEY_F20 190
+#define KEY_F21 191
+#define KEY_F22 192
+#define KEY_F23 193
+#define KEY_F24 194
+
+#define KEY_PLAYCD 200
+#define KEY_PAUSECD 201
+#define KEY_PROG3 202
+#define KEY_PROG4 203
+#define KEY_DASHBOARD 204 /* AL Dashboard */
+#define KEY_SUSPEND 205
+#define KEY_CLOSE 206 /* AC Close */
+#define KEY_PLAY 207
+#define KEY_FASTFORWARD 208
+#define KEY_BASSBOOST 209
+#define KEY_PRINT 210 /* AC Print */
+#define KEY_HP 211
+#define KEY_CAMERA 212
+#define KEY_SOUND 213
+#define KEY_QUESTION 214
+#define KEY_EMAIL 215
+#define KEY_CHAT 216
+#define KEY_SEARCH 217
+#define KEY_CONNECT 218
+#define KEY_FINANCE 219 /* AL Checkbook/Finance */
+#define KEY_SPORT 220
+#define KEY_SHOP 221
+#define KEY_ALTERASE 222
+#define KEY_CANCEL 223 /* AC Cancel */
+#define KEY_BRIGHTNESSDOWN 224
+#define KEY_BRIGHTNESSUP 225
+#define KEY_MEDIA 226
+
+#define KEY_SWITCHVIDEOMODE 227 /* Cycle between available video
+ outputs (Monitor/LCD/TV-out/etc) */
+#define KEY_KBDILLUMTOGGLE 228
+#define KEY_KBDILLUMDOWN 229
+#define KEY_KBDILLUMUP 230
+
+#define KEY_SEND 231 /* AC Send */
+#define KEY_REPLY 232 /* AC Reply */
+#define KEY_FORWARDMAIL 233 /* AC Forward Msg */
+#define KEY_SAVE 234 /* AC Save */
+#define KEY_DOCUMENTS 235
+
+#define KEY_BATTERY 236
+
+#define KEY_BLUETOOTH 237
+#define KEY_WLAN 238
+#define KEY_UWB 239
+
+#define KEY_UNKNOWN 240
+
+#define KEY_VIDEO_NEXT 241 /* drive next video source */
+#define KEY_VIDEO_PREV 242 /* drive previous video source */
+#define KEY_BRIGHTNESS_CYCLE 243 /* brightness up, after max is min */
+#define KEY_BRIGHTNESS_ZERO 244 /* brightness off, use ambient */
+#define KEY_DISPLAY_OFF 245 /* display device to off state */
+
+#define KEY_WIMAX 246
+#define KEY_RFKILL 247 /* Key that controls all radios */
+
+/* Code 255 is reserved for special needs of AT keyboard driver */
+
+#define BTN_MISC 0x100
+#define BTN_0 0x100
+#define BTN_1 0x101
+#define BTN_2 0x102
+#define BTN_3 0x103
+#define BTN_4 0x104
+#define BTN_5 0x105
+#define BTN_6 0x106
+#define BTN_7 0x107
+#define BTN_8 0x108
+#define BTN_9 0x109
+
+#define BTN_MOUSE 0x110
+#define BTN_LEFT 0x110
+#define BTN_RIGHT 0x111
+#define BTN_MIDDLE 0x112
+#define BTN_SIDE 0x113
+#define BTN_EXTRA 0x114
+#define BTN_FORWARD 0x115
+#define BTN_BACK 0x116
+#define BTN_TASK 0x117
+
+#define BTN_JOYSTICK 0x120
+#define BTN_TRIGGER 0x120
+#define BTN_THUMB 0x121
+#define BTN_THUMB2 0x122
+#define BTN_TOP 0x123
+#define BTN_TOP2 0x124
+#define BTN_PINKIE 0x125
+#define BTN_BASE 0x126
+#define BTN_BASE2 0x127
+#define BTN_BASE3 0x128
+#define BTN_BASE4 0x129
+#define BTN_BASE5 0x12a
+#define BTN_BASE6 0x12b
+#define BTN_DEAD 0x12f
+
+#define BTN_GAMEPAD 0x130
+#define BTN_A 0x130
+#define BTN_B 0x131
+#define BTN_C 0x132
+#define BTN_X 0x133
+#define BTN_Y 0x134
+#define BTN_Z 0x135
+#define BTN_TL 0x136
+#define BTN_TR 0x137
+#define BTN_TL2 0x138
+#define BTN_TR2 0x139
+#define BTN_SELECT 0x13a
+#define BTN_START 0x13b
+#define BTN_MODE 0x13c
+#define BTN_THUMBL 0x13d
+#define BTN_THUMBR 0x13e
+
+#define BTN_DIGI 0x140
+#define BTN_TOOL_PEN 0x140
+#define BTN_TOOL_RUBBER 0x141
+#define BTN_TOOL_BRUSH 0x142
+#define BTN_TOOL_PENCIL 0x143
+#define BTN_TOOL_AIRBRUSH 0x144
+#define BTN_TOOL_FINGER 0x145
+#define BTN_TOOL_MOUSE 0x146
+#define BTN_TOOL_LENS 0x147
+#define BTN_TOUCH 0x14a
+#define BTN_STYLUS 0x14b
+#define BTN_STYLUS2 0x14c
+#define BTN_TOOL_DOUBLETAP 0x14d
+#define BTN_TOOL_TRIPLETAP 0x14e
+#define BTN_TOOL_QUADTAP 0x14f /* Four fingers on trackpad */
+
+#define BTN_WHEEL 0x150
+#define BTN_GEAR_DOWN 0x150
+#define BTN_GEAR_UP 0x151
+
+#define KEY_OK 0x160
+#define KEY_SELECT 0x161
+#define KEY_GOTO 0x162
+#define KEY_CLEAR 0x163
+#define KEY_POWER2 0x164
+#define KEY_OPTION 0x165
+#define KEY_INFO 0x166 /* AL OEM Features/Tips/Tutorial */
+#define KEY_TIME 0x167
+#define KEY_VENDOR 0x168
+#define KEY_ARCHIVE 0x169
+#define KEY_PROGRAM 0x16a /* Media Select Program Guide */
+#define KEY_CHANNEL 0x16b
+#define KEY_FAVORITES 0x16c
+#define KEY_EPG 0x16d
+#define KEY_PVR 0x16e /* Media Select Home */
+#define KEY_MHP 0x16f
+#define KEY_LANGUAGE 0x170
+#define KEY_TITLE 0x171
+#define KEY_SUBTITLE 0x172
+#define KEY_ANGLE 0x173
+#define KEY_ZOOM 0x174
+#define KEY_MODE 0x175
+#define KEY_KEYBOARD 0x176
+#define KEY_SCREEN 0x177
+#define KEY_PC 0x178 /* Media Select Computer */
+#define KEY_TV 0x179 /* Media Select TV */
+#define KEY_TV2 0x17a /* Media Select Cable */
+#define KEY_VCR 0x17b /* Media Select VCR */
+#define KEY_VCR2 0x17c /* VCR Plus */
+#define KEY_SAT 0x17d /* Media Select Satellite */
+#define KEY_SAT2 0x17e
+#define KEY_CD 0x17f /* Media Select CD */
+#define KEY_TAPE 0x180 /* Media Select Tape */
+#define KEY_RADIO 0x181
+#define KEY_TUNER 0x182 /* Media Select Tuner */
+#define KEY_PLAYER 0x183
+#define KEY_TEXT 0x184
+#define KEY_DVD 0x185 /* Media Select DVD */
+#define KEY_AUX 0x186
+#define KEY_MP3 0x187
+#define KEY_AUDIO 0x188
+#define KEY_VIDEO 0x189
+#define KEY_DIRECTORY 0x18a
+#define KEY_LIST 0x18b
+#define KEY_MEMO 0x18c /* Media Select Messages */
+#define KEY_CALENDAR 0x18d
+#define KEY_RED 0x18e
+#define KEY_GREEN 0x18f
+#define KEY_YELLOW 0x190
+#define KEY_BLUE 0x191
+#define KEY_CHANNELUP 0x192 /* Channel Increment */
+#define KEY_CHANNELDOWN 0x193 /* Channel Decrement */
+#define KEY_FIRST 0x194
+#define KEY_LAST 0x195 /* Recall Last */
+#define KEY_AB 0x196
+#define KEY_NEXT 0x197
+#define KEY_RESTART 0x198
+#define KEY_SLOW 0x199
+#define KEY_SHUFFLE 0x19a
+#define KEY_BREAK 0x19b
+#define KEY_PREVIOUS 0x19c
+#define KEY_DIGITS 0x19d
+#define KEY_TEEN 0x19e
+#define KEY_TWEN 0x19f
+#define KEY_VIDEOPHONE 0x1a0 /* Media Select Video Phone */
+#define KEY_GAMES 0x1a1 /* Media Select Games */
+#define KEY_ZOOMIN 0x1a2 /* AC Zoom In */
+#define KEY_ZOOMOUT 0x1a3 /* AC Zoom Out */
+#define KEY_ZOOMRESET 0x1a4 /* AC Zoom */
+#define KEY_WORDPROCESSOR 0x1a5 /* AL Word Processor */
+#define KEY_EDITOR 0x1a6 /* AL Text Editor */
+#define KEY_SPREADSHEET 0x1a7 /* AL Spreadsheet */
+#define KEY_GRAPHICSEDITOR 0x1a8 /* AL Graphics Editor */
+#define KEY_PRESENTATION 0x1a9 /* AL Presentation App */
+#define KEY_DATABASE 0x1aa /* AL Database App */
+#define KEY_NEWS 0x1ab /* AL Newsreader */
+#define KEY_VOICEMAIL 0x1ac /* AL Voicemail */
+#define KEY_ADDRESSBOOK 0x1ad /* AL Contacts/Address Book */
+#define KEY_MESSENGER 0x1ae /* AL Instant Messaging */
+#define KEY_DISPLAYTOGGLE 0x1af /* Turn display (LCD) on and off */
+#define KEY_SPELLCHECK 0x1b0 /* AL Spell Check */
+#define KEY_LOGOFF 0x1b1 /* AL Logoff */
+
+#define KEY_DOLLAR 0x1b2
+#define KEY_EURO 0x1b3
+
+#define KEY_FRAMEBACK 0x1b4 /* Consumer - transport controls */
+#define KEY_FRAMEFORWARD 0x1b5
+#define KEY_CONTEXT_MENU 0x1b6 /* GenDesc - system context menu */
+#define KEY_MEDIA_REPEAT 0x1b7 /* Consumer - transport control */
+
+#define KEY_DEL_EOL 0x1c0
+#define KEY_DEL_EOS 0x1c1
+#define KEY_INS_LINE 0x1c2
+#define KEY_DEL_LINE 0x1c3
+
+#define KEY_FN 0x1d0
+#define KEY_FN_ESC 0x1d1
+#define KEY_FN_F1 0x1d2
+#define KEY_FN_F2 0x1d3
+#define KEY_FN_F3 0x1d4
+#define KEY_FN_F4 0x1d5
+#define KEY_FN_F5 0x1d6
+#define KEY_FN_F6 0x1d7
+#define KEY_FN_F7 0x1d8
+#define KEY_FN_F8 0x1d9
+#define KEY_FN_F9 0x1da
+#define KEY_FN_F10 0x1db
+#define KEY_FN_F11 0x1dc
+#define KEY_FN_F12 0x1dd
+#define KEY_FN_1 0x1de
+#define KEY_FN_2 0x1df
+#define KEY_FN_D 0x1e0
+#define KEY_FN_E 0x1e1
+#define KEY_FN_F 0x1e2
+#define KEY_FN_S 0x1e3
+#define KEY_FN_B 0x1e4
+
+#define KEY_BRL_DOT1 0x1f1
+#define KEY_BRL_DOT2 0x1f2
+#define KEY_BRL_DOT3 0x1f3
+#define KEY_BRL_DOT4 0x1f4
+#define KEY_BRL_DOT5 0x1f5
+#define KEY_BRL_DOT6 0x1f6
+#define KEY_BRL_DOT7 0x1f7
+#define KEY_BRL_DOT8 0x1f8
+#define KEY_BRL_DOT9 0x1f9
+#define KEY_BRL_DOT10 0x1fa
+
+#define KEY_NUMERIC_0 0x200 /* used by phones, remote controls, */
+#define KEY_NUMERIC_1 0x201 /* and other keypads */
+#define KEY_NUMERIC_2 0x202
+#define KEY_NUMERIC_3 0x203
+#define KEY_NUMERIC_4 0x204
+#define KEY_NUMERIC_5 0x205
+#define KEY_NUMERIC_6 0x206
+#define KEY_NUMERIC_7 0x207
+#define KEY_NUMERIC_8 0x208
+#define KEY_NUMERIC_9 0x209
+#define KEY_NUMERIC_STAR 0x20a
+#define KEY_NUMERIC_POUND 0x20b
+
+#define KEY_CAMERA_FOCUS 0x210
+#define KEY_WPS_BUTTON 0x211 /* WiFi Protected Setup key */
+
+#define BTN_TRIGGER_HAPPY 0x2c0
+#define BTN_TRIGGER_HAPPY1 0x2c0
+#define BTN_TRIGGER_HAPPY2 0x2c1
+#define BTN_TRIGGER_HAPPY3 0x2c2
+#define BTN_TRIGGER_HAPPY4 0x2c3
+#define BTN_TRIGGER_HAPPY5 0x2c4
+#define BTN_TRIGGER_HAPPY6 0x2c5
+#define BTN_TRIGGER_HAPPY7 0x2c6
+#define BTN_TRIGGER_HAPPY8 0x2c7
+#define BTN_TRIGGER_HAPPY9 0x2c8
+#define BTN_TRIGGER_HAPPY10 0x2c9
+#define BTN_TRIGGER_HAPPY11 0x2ca
+#define BTN_TRIGGER_HAPPY12 0x2cb
+#define BTN_TRIGGER_HAPPY13 0x2cc
+#define BTN_TRIGGER_HAPPY14 0x2cd
+#define BTN_TRIGGER_HAPPY15 0x2ce
+#define BTN_TRIGGER_HAPPY16 0x2cf
+#define BTN_TRIGGER_HAPPY17 0x2d0
+#define BTN_TRIGGER_HAPPY18 0x2d1
+#define BTN_TRIGGER_HAPPY19 0x2d2
+#define BTN_TRIGGER_HAPPY20 0x2d3
+#define BTN_TRIGGER_HAPPY21 0x2d4
+#define BTN_TRIGGER_HAPPY22 0x2d5
+#define BTN_TRIGGER_HAPPY23 0x2d6
+#define BTN_TRIGGER_HAPPY24 0x2d7
+#define BTN_TRIGGER_HAPPY25 0x2d8
+#define BTN_TRIGGER_HAPPY26 0x2d9
+#define BTN_TRIGGER_HAPPY27 0x2da
+#define BTN_TRIGGER_HAPPY28 0x2db
+#define BTN_TRIGGER_HAPPY29 0x2dc
+#define BTN_TRIGGER_HAPPY30 0x2dd
+#define BTN_TRIGGER_HAPPY31 0x2de
+#define BTN_TRIGGER_HAPPY32 0x2df
+#define BTN_TRIGGER_HAPPY33 0x2e0
+#define BTN_TRIGGER_HAPPY34 0x2e1
+#define BTN_TRIGGER_HAPPY35 0x2e2
+#define BTN_TRIGGER_HAPPY36 0x2e3
+#define BTN_TRIGGER_HAPPY37 0x2e4
+#define BTN_TRIGGER_HAPPY38 0x2e5
+#define BTN_TRIGGER_HAPPY39 0x2e6
+#define BTN_TRIGGER_HAPPY40 0x2e7
+
+/* We avoid low common keys in module aliases so they don't get huge. */
+#define KEY_MIN_INTERESTING KEY_MUTE
+#define KEY_MAX 0x2ff
+
+#endif
diff --git a/remotecfg/main.c b/remotecfg/main.c
new file mode 100644
index 0000000..799bcd6
--- a/dev/null
+++ b/remotecfg/main.c
@@ -0,0 +1,205 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <libgen.h>
+
+#include "common.h"
+
+#define DEVICE_FILE "/dev/amremote"
+#define SYSDIR "/sys/class/remote/amremote/"
+
+unsigned char dbg_flag = 0;
+
+static void usage(char *name)
+{
+ fprintf(stderr,"Usage: %s [-c cfg_file] [-t tab_file] [-d]\n", name);
+ exit(EXIT_FAILURE);
+}
+
+static void printTabFile(S_TAB_FILE_T *tabFile)
+{
+ int i;
+
+ prDbg("custom_name = %s\n", tabFile->tab.custom_name);
+ prDbg("fn_key_scancode = 0x%x\n", tabFile->tab.cursor_code.fn_key_scancode);
+ prDbg("cursor_left_scancode = 0x%x\n", tabFile->tab.cursor_code.cursor_left_scancode);
+ prDbg("cursor_right_scancode = 0x%x\n", tabFile->tab.cursor_code.cursor_right_scancode);
+ prDbg("cursor_up_scancode = 0x%x\n", tabFile->tab.cursor_code.cursor_up_scancode);
+ prDbg("cursor_down_scancode = 0x%x\n", tabFile->tab.cursor_code.cursor_down_scancode);
+ prDbg("cursor_ok_scancode = 0x%x\n", tabFile->tab.cursor_code.cursor_ok_scancode);
+ prDbg("custom_code = 0x%x\n", tabFile->tab.custom_code);
+ prDbg("release_delay = %d\n", tabFile->tab.release_delay);
+ prDbg("map_size = %d\n", tabFile->tab.map_size);
+ for (i = 0; i < tabFile->tab.map_size; i++)
+ prDbg("key[%d] = 0x%x\n", i, tabFile->tab.codemap[i].code);
+
+}
+
+static void printCfgFile(S_CFG_FILE_T *cfgFile)
+{
+ prDbg("work_mode = %d\n", cfgFile->workMode);
+ prDbg("repeat_enable = %d\n", cfgFile->repeatEnable);
+ prDbg("debug_enable = %d\n", cfgFile->debugEnable);
+ prDbg("max_frame_time = %d\n", cfgFile->sw_data.max_frame_time);
+}
+
+static int handleCfgFile(char *name, char *val, void *data)
+{
+ S_CFG_FILE_T *cfgFile = (S_CFG_FILE_T *)data;
+
+ if (MATCH("work_mode", name))
+ cfgFile->workMode = strtoul(val, NULL, 0);
+ else if (MATCH("repeat_enable", name))
+ cfgFile->repeatEnable = strtoul(val, NULL, 0);
+ else if (MATCH("debug_enable", name))
+ cfgFile->debugEnable = strtoul(val, NULL, 0);
+ else if (MATCH("max_frame_time", name))
+ cfgFile->sw_data.max_frame_time = strtoul(val, NULL, 0);
+ else
+ return FAIL;
+
+ return SUCC;
+
+}
+
+static int handleTabFile(char *name, char *val, void *data)
+{
+ S_TAB_FILE_T *tabFile = (S_TAB_FILE_T *)data;
+
+ if (MATCH("custom_name", name))
+ strncpy(tabFile->tab.custom_name, val, CUSTOM_NAME_LEN);
+ else if (MATCH("fn_key_scancode", name))
+ tabFile->tab.cursor_code.fn_key_scancode = strtoul(val, NULL, 0);
+ else if (MATCH("cursor_left_scancode", name))
+ tabFile->tab.cursor_code.cursor_left_scancode = strtoul(val, NULL, 0);
+ else if (MATCH("cursor_right_scancode", name))
+ tabFile->tab.cursor_code.cursor_right_scancode = strtoul(val, NULL, 0);
+ else if (MATCH("cursor_up_scancode", name))
+ tabFile->tab.cursor_code.cursor_up_scancode = strtoul(val, NULL, 0);
+ else if (MATCH("cursor_down_scancode", name))
+ tabFile->tab.cursor_code.cursor_down_scancode = strtoul(val, NULL, 0);
+ else if (MATCH("cursor_ok_scancode", name))
+ tabFile->tab.cursor_code.cursor_ok_scancode = strtoul(val, NULL, 0);
+ else if (MATCH("custom_code", name))
+ tabFile->tab.custom_code = strtoul(val, NULL, 0);
+ else if (MATCH("release_delay", name))
+ tabFile->tab.release_delay = strtoul(val, NULL, 0);
+ else if (MATCH("mapcode", name)) {
+ tabFile->tab.codemap[tabFile->tab.map_size].code = atoi(val);
+ tabFile->tab.map_size ++;
+ }
+ else
+ return FAIL;
+
+ return SUCC;
+}
+
+int SetConfigFile(int devfd, char *cfgdir)
+{
+ int ret = 0;
+ S_CFG_FILE_T *cfgFile = NULL;
+
+ prDbg("cfgdir = %s\n", cfgdir);
+ cfgFile = malloc(sizeof(S_CFG_FILE_T));
+ if (!cfgFile) {
+ fprintf(stderr, "failed to allocate memory: %s\n",
+ strerror(errno));
+ ret = -1;
+ goto err;
+ }
+ memset(cfgFile, 0, sizeof(S_CFG_FILE_T));
+ if (ParseFile((const char *)cfgdir,
+ handleCfgFile, (void *)cfgFile) < 0) {
+ fprintf(stderr, "failed to parse file: %s\n", cfgdir);
+ ret = -1;
+ goto err;
+ }
+ printCfgFile(cfgFile);
+ SetCfgPara(devfd, SYSDIR, cfgFile);
+ free(cfgFile);
+err:
+ if (cfgFile)
+ free(cfgFile);
+ return ret;
+}
+
+int SetTabFile(int devfd, char *tabdir)
+{
+ int ret = 0;
+ S_TAB_FILE_T *tabFile = NULL;
+
+ prDbg("tabdir = %s\n", tabdir);
+ tabFile = (S_TAB_FILE_T *)malloc(sizeof(S_TAB_FILE_T) + (MAX_KEYMAP_SIZE << 2));
+ if (!tabFile)
+ {
+ fprintf(stderr, "failed to allocate memory: %s\n", strerror(errno));
+ ret = -1;
+ goto err;
+ }
+ memset(tabFile, 0, sizeof(S_TAB_FILE_T) + (MAX_KEYMAP_SIZE << 2));
+ memset(&tabFile->tab.cursor_code, 0xff, sizeof(struct cursor_codemap));
+ if (ParseFile((const char *)tabdir, handleTabFile, (void *)tabFile) < 0)
+ {
+ fprintf(stderr, "failed to parse file: %s\n", tabdir);
+ ret = -1;
+ goto err;
+ }
+ printTabFile(tabFile);
+ SetTabPara(devfd, tabFile);
+err:
+ if (tabFile)
+ free(tabFile);
+ return ret;
+}
+
+int main(int argc, char *argv[])
+{
+ int ch;
+ int devfd = -1;
+ int ret;
+ char *cfgfile = NULL;
+ char *tabfile = NULL;
+
+ opterr = 0; /*disable the 'getopt' debug info*/
+ while ((ch = getopt(argc, argv, "dc:t:")) != -1) {
+ switch (ch) {
+ case 'd':
+ dbg_flag = 1;
+ break;
+ case 'c':
+ cfgfile = optarg;
+ break;
+ case 't':
+ tabfile = optarg;
+ break;
+ case '?':
+ usage(basename(argv[0]));
+ break;
+ }
+
+ }
+
+ devfd = OpenDevice(DEVICE_FILE);
+ if (devfd< 0)
+ return FAIL;
+
+ if (CheckVersion(devfd) < 0)
+ goto err;
+
+ if (cfgfile)
+ if (SetConfigFile(devfd, cfgfile))
+ goto err;
+
+ if (tabfile)
+ if (SetTabFile(devfd, tabfile))
+ goto err;
+err:
+ CloseDevice(devfd);
+ return 0;
+}
diff --git a/remotecfg/parse.c b/remotecfg/parse.c
new file mode 100644
index 0000000..fdeb31c
--- a/dev/null
+++ b/remotecfg/parse.c
@@ -0,0 +1,183 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include "common.h"
+
+/*
+remove head and tail blank in string
+*/
+static void StrTrim(char **s)
+{
+ int i;
+ int len = strlen(*s);
+
+ for (i = len - 1; i >= 0; i--) {
+ if ((*s)[i] <= ' ')
+ (*s)[i] = 0;
+ else
+ break;
+ }
+
+ while (**s) {
+ if (**s <= ' ')
+ (*s)++;
+ else
+ break;
+ }
+}
+
+static void StrLineTrim(char *line, int length)
+{
+ char *tmp_ptr = line;
+
+ if (line == NULL)
+ return;
+ /*trim comment string*/
+ while (*tmp_ptr && ((tmp_ptr - line) <= length)) {
+ if (*tmp_ptr == '#' || *tmp_ptr == ';') {
+ *tmp_ptr = '\0';
+ break;
+ }
+ tmp_ptr++;
+ }
+}
+
+static int StrEmpty(char *str)
+{
+ int len = strlen(str);
+ return (len == 0);
+}
+
+/*
+Mapcode in file:
+key_begin
+ 0x47 11
+ 0x13 2
+ ......
+key_end
+*/
+static int GetMapCode(char *line, int *code)
+{
+ char *p2;
+ char *p1 = line;
+ int ircode;
+
+ /*remove head and tail blank in string*/
+ StrTrim(&line);
+
+ /*get second data point in line*/
+ p2 = strchr(line, ' ');
+ if (p2) {
+ *p2++ = 0;
+ StrTrim(&p2);
+ }
+ if (!p2 || !*p2)
+ return -1;
+ StrTrim(&p1);
+ if (!*p1)
+ return -1;
+ ircode = strtoul(p1, NULL, 0);
+ if (ircode > 0xff) {
+ fprintf(stderr, "invalid ircode: 0x%x\n", ircode);
+ return -1;
+ }
+
+ *code = MAPCODE(ircode, strtoul(p2, NULL, 0));
+ return 0;
+}
+
+int GetKeyValue(char *line, char **key, char **value)
+{
+ char *p1, *p2;
+
+ p1 = line;
+ p2 = strchr(line, '=');
+ if (p2) {
+ *p2++ = 0;
+ StrTrim(&p2);
+ }
+ if (!p2 || !*p2)
+ return -1;
+ StrTrim(&p1);
+ if (!p1 || !*p1)
+ return -1;
+ *value = p2;
+ *key = p1;
+ return 0;
+}
+
+static int ReadFile(FILE *fp, pfileHandle handler, void *data)
+{
+ char *key;
+ char *value;
+ unsigned int mapcode;
+ unsigned char parse_flag = CONFIG_LEVEL;
+ char *line;
+ char *savep;
+ int ret;
+
+ line = (char*)malloc(MAX_LINE_LEN + 1);
+ if (!line) {
+ fprintf(stderr, "malloc line failed\n");
+ return -1;
+ }
+ savep = line;
+ while (fgets(savep, MAX_LINE_LEN, fp)) {
+ line = savep;
+ StrLineTrim(line, MAX_LINE_LEN); /*jump comment*/
+ if (StrEmpty(line))
+ continue;
+ StrTrim(&line);
+ switch (parse_flag) {
+ case CONFIG_LEVEL:
+ if ((strcasecmp(line, "key_begin")) == 0) {
+ parse_flag = KEYMAP_LEVEL;
+ continue;
+ }
+ if (!!GetKeyValue(line, &key, &value))
+ continue;
+ if ((*handler)(key, value, data) < 0) {
+ fprintf(stderr, "invalid line:%s=%s\n",
+ line, value);
+ continue;
+ }
+ break;
+ case KEYMAP_LEVEL:
+ if ((strcasecmp(line, "key_end")) == 0) {
+ parse_flag = CONFIG_LEVEL;
+ continue;
+ }
+ if (!!GetMapCode(line, &mapcode))
+ continue;
+ snprintf(line, 128, "%u", mapcode);
+ if ((*handler)("mapcode", line, data) < 0) {
+ fprintf(stderr, "invalid line:%s=%s\n",
+ "mapcode", line);
+ continue;
+ }
+ break;
+ }
+
+ }
+ if (savep)
+ free(savep);
+ return 0;
+}
+
+
+int ParseFile(const char *file, pfileHandle handler, void *data)
+{
+ FILE *cfgFp;
+
+ if (NULL == (cfgFp = fopen(file, "r"))) {
+ fprintf(stderr, "fopen %s: %s\n", file, strerror(errno));
+ return FAIL;
+ }
+
+ ReadFile(cfgFp, handler, data);
+ fclose(cfgFp);
+ return SUCC;
+}
diff --git a/remotecfg/rc_common.h b/remotecfg/rc_common.h
new file mode 100644
index 0000000..991f163
--- a/dev/null
+++ b/remotecfg/rc_common.h
@@ -0,0 +1,80 @@
+/*
+ * include/uapi/linux/rc_common.h from the kernel directory, but it can be used
+ * in kernel and user space.
+ *
+ * Written by Amlogic
+ *
+ */
+#ifndef _UAPI_RC_COMMON_H_
+#define _UAPI_RC_COMMON_H_
+
+#include <linux/types.h>
+
+#define MAX_KEYMAP_SIZE 256
+#define CUSTOM_NAME_LEN 64
+
+/*to ensure kernel and user spase use the same header file*/
+#define SHARE_DATA_VERSION "v1.1.0"
+
+union _codemap {
+ struct ir_key_map {
+ __u16 keycode;
+ __u16 scancode;
+ } map;
+ __u32 code;
+};
+
+/*
+ *struct cursor_codemap - codemap for mouse mode
+ *
+ *@fn_key_scancode: scancode of fn key which used to swith mode
+ *@cursor_left_scancode: scancode of left key
+ *@cursor_right_scancode: scancode of right key
+ *@cursor_up_scancode: scancode of up key
+ *@cursor_down_scancode: scancode of down key
+ *@cursor_ok_scancode: scancode of ok key
+ */
+struct cursor_codemap {
+ __u16 fn_key_scancode;
+ __u16 cursor_left_scancode;
+ __u16 cursor_right_scancode;
+ __u16 cursor_up_scancode;
+ __u16 cursor_down_scancode;
+ __u16 cursor_ok_scancode;
+};
+
+/**
+ *struct ir_map_table - the IR key map table for different remote-control
+ *
+ *@custom_name: table name
+ *@cursor_code: mouse mode need
+ *@map_size: number of IR key
+ *@custom_code: custom code, identify different key mapping table
+ *@release_delay: release delay time
+ *@codemap[0]: code for IR key
+ */
+struct ir_map_tab {
+ char custom_name[CUSTOM_NAME_LEN];
+ struct cursor_codemap cursor_code;
+ __u16 map_size;
+ __u32 custom_code;
+ __u32 release_delay;
+ union _codemap codemap[0];
+};
+
+/**
+ *struct ir_sw_decode_para - configuration parameters for software decode
+ *
+ *@max_frame_time: maximum frame time
+ */
+struct ir_sw_decode_para {
+ unsigned int max_frame_time;
+};
+
+/*IOCTL commands*/
+#define REMOTE_IOC_SET_KEY_NUMBER _IOW('I', 3, __u32)
+#define REMOTE_IOC_SET_KEY_MAPPING_TAB _IOW('I', 4, __u32)
+#define REMOTE_IOC_SET_SW_DECODE_PARA _IOW('I', 5, __u32)
+#define REMOTE_IOC_GET_DATA_VERSION _IOR('I', 121, __u32)
+
+#endif
diff --git a/remotecfg/remote-mouse.tab b/remotecfg/remote-mouse.tab
new file mode 100644
index 0000000..5ea29c7
--- a/dev/null
+++ b/remotecfg/remote-mouse.tab
@@ -0,0 +1,71 @@
+#*********************************************************************************************************
+#this file is used to store key map table
+# custom_name: name of map table
+# custom_code: custom code for remote device
+# release_delay unit:ms.release will report from kernel to user layer after this period of time
+# from press or repeat triggered.
+###PARAS FOR MOUSE MODE:
+# fn_key_scancode: scancode of fn key which used to swith mode
+# cursor_left_scancode: scancode of left key
+# cursor_right_scancode: scancode of right key
+# cursor_up_scancode: scancode of up key
+# cursor_down_scancode: scancode of down key
+# cursor_ok_scancode: scancode of ok key
+#*************************************************************************************************************
+custom_name = nec-cursor-test
+custom_code = 0xfb04
+release_delay = 80
+
+fn_key_scancode = 0x15
+cursor_left_scancode = 0x1c
+cursor_right_scancode = 0x48
+cursor_up_scancode = 0x44
+cursor_down_scancode = 0x1d
+cursor_ok_scancode = 0x5c
+
+key_begin
+ 0x47 11
+ 0x13 2
+ 0x10 3
+ 0x11 4
+ 0x0F 5
+ 0x0C 6
+ 0x0D 7
+ 0x0B 8
+ 0x08 9
+ 0x09 10
+ 0x5C 97
+ 0x51 65
+ 0x49 14
+ 0x06 130
+ 0x14 131
+ 0x44 103
+ 0x1D 108
+ 0x1C 105
+ 0x48 106
+ 0x53 125
+ 0x45 104
+ 0x19 109
+ 0x16 102
+ 0x52 119
+ 0x05 122
+ 0x59 123
+ 0x1b 120
+ 0x04 121
+ 0x1A 116
+ 0x0A 15
+ 0x0e 113
+ 0x15 63
+ 0x1F 102
+ 0x1e 132
+ 0x07 133
+ 0x12 134
+ 0x54 135
+ 0x02 136
+ 0x4f 30
+ 0x42 48
+ 0x5d 46
+ 0x4c 32
+ 0x58 137
+ 0x55 140
+key_end
diff --git a/remotecfg/remote.cfg b/remotecfg/remote.cfg
new file mode 100644
index 0000000..1e1f9ba
--- a/dev/null
+++ b/remotecfg/remote.cfg
@@ -0,0 +1,16 @@
+#*********************************************************************************************************
+#this file is used to config the remote driver
+# work_mode: set work mode for IR, refer to the include/dt-bindings/input/meson_rc.h
+# debug_enable: 0 :disable 1:enable
+# repeat_enable: 0 :disable 1:enable
+#
+# SW MODE:
+# max_frame_time maximum frame time
+
+#*************************************************************************************************************
+work_mode = 0x1
+repeat_enable = 0
+debug_enable = 0
+
+#sw decode parameters
+max_frame_time = 1000
diff --git a/remotecfg/remote.tab b/remotecfg/remote.tab
new file mode 100644
index 0000000..e8a542a
--- a/dev/null
+++ b/remotecfg/remote.tab
@@ -0,0 +1,64 @@
+#*********************************************************************************************************
+#this file is used to store key map table
+# custom_name: name of map table
+# custom_code: custom code for remote device
+# release_delay unit:ms.release will report from kernel to user layer after this period of time
+# from press or repeat triggered.
+###PARAS FOR MOUSE MODE:
+# fn_key_scancode: scancode of fn key which used to swith mode
+# cursor_left_scancode: scancode of left key
+# cursor_right_scancode: scancode of right key
+# cursor_up_scancode: scancode of up key
+# cursor_down_scancode: scancode of down key
+# cursor_ok_scancode: scancode of ok key
+#*************************************************************************************************************
+custom_name = nec-test
+custom_code = 0xfb04
+release_delay = 80
+
+key_begin
+ 0x47 11
+ 0x13 2
+ 0x10 3
+ 0x11 4
+ 0x0F 5
+ 0x0C 6
+ 0x0D 7
+ 0x0B 8
+ 0x08 9
+ 0x09 10
+ 0x5C 97
+ 0x51 65
+ 0x49 14
+ 0x06 130
+ 0x14 131
+ 0x44 103
+ 0x1D 108
+ 0x1C 105
+ 0x48 106
+ 0x53 125
+ 0x45 104
+ 0x19 109
+ 0x16 102
+ 0x52 119
+ 0x05 122
+ 0x59 123
+ 0x1b 120
+ 0x04 121
+ 0x1A 116
+ 0x0A 15
+ 0x0e 113
+ 0x15 63
+ 0x1F 102
+ 0x1e 132
+ 0x07 133
+ 0x12 134
+ 0x54 135
+ 0x02 136
+ 0x4f 30
+ 0x42 48
+ 0x5d 46
+ 0x4c 32
+ 0x58 137
+ 0x55 140
+key_end