plugin: iot-headless: input: Add mapping table for converting keycode string into... 81/309581/1
authorYunhee Seo <yuni.seo@samsung.com>
Thu, 11 Apr 2024 13:27:47 +0000 (22:27 +0900)
committerYunhee Seo <yuni.seo@samsung.com>
Fri, 12 Apr 2024 08:00:23 +0000 (17:00 +0900)
Intuitively, to use the keycode of key/button definitions provided by
linux/input.h, deviced provides key_infos array.

key/button information is treated as a string and a number pair in key_infos array.
Those information will be handled in GHashTable.
While input.conf file is parsed, below structure is used
to pass GHashTable pointer.
struct input_parse_event_action {
struct input_event_unit *ieu;
GHashTable *hash_table_key_infos;
};

Rather than defining the keycode by itself, it is clearly unified into
the key/button definitions defined in linux/input.h
By doing this, the definition of keycode will not be changed or
their meanings mixed up.

Thus, existing below config definition will not be supported.
ex) keycode=power
    keycode=bluetooth

It should be defined like below.
ex) keycode=KEY_POWER
    keycode=KEY_BLUETOOTH

Detailed explanation is added to input-profile-iot-headless conf file.
Also, please refer key_infos array or definitions in linux/input.h

Change-Id: I41bfc91497f8d478e1238f4b363fd437b03c549c
Signed-off-by: Yunhee Seo <yuni.seo@samsung.com>
conf/input-profile-iot-headless.conf
plugins/iot-headless/input/input-config.c
plugins/iot-headless/input/input-config.h

index 1518e1c..93a41ff 100644 (file)
@@ -4,8 +4,10 @@
 #  Enum=integer
 #   - define an integer that represents the event. deviced uses this
 #     integer in broadcasting dbus signal.
-#  Keycode=integer
-#   - define keycode to filter key event
+#  Keycode=string
+#   - define keycode to filter key event.
+#     as support key/button definitions in linux/input.h, put the same string definitions.
+#     For example, keycode=KEY_POWER
 #  DetectionRangeMsec=integer,integer
 #   - define time window in milisecond for filtering key event. -1 means no limit.
 #  TriggerType=level/edge
@@ -20,7 +22,7 @@
 #[EventAction]
 #Name=PWKEY_SHORT_EDGE
 #Enum=1000
-#Keycode=power
+#Keycode=KEY_POWER
 #DetectionRangeMsec=0,2000
 #TriggerType=edge
 #ActionBroadcast=yes
@@ -29,7 +31,7 @@
 #[EventAction]
 #Name=PWKEY_LONG_LEVEL
 #Enum=1001
-#Keycode=power
+#Keycode=KEY_POWER
 #DetectionRangeMsec=2000,-1
 #TriggerType=level
 #ActionBroadcast=yes
@@ -38,7 +40,7 @@
 #[EventAction]
 #Name=PWKEY_LONG_EDGE
 #Enum=1002
-#Keycode=power
+#Keycode=KEY_POWER
 #DetectionRangeMsec=2000,7000
 #TriggerType=edge
 #ActionChangeState=normal,sleep
@@ -47,7 +49,7 @@
 #[EventAction]
 #Name=PWKEY_LONGEST_LEVEL
 #Enum=1003
-#Keycode=power
+#Keycode=KEY_POWER
 #DetectionRangeMsec=7000,-1
 #TriggerType=level
 #ActionBroadcast=yes
@@ -56,7 +58,7 @@
 #[EventAction]
 #Name=PWKEY_LONGEST_EDGE_WO_CHARGER
 #Enum=1004
-#Keycode=power
+#Keycode=KEY_POWER
 #DetectionRangeMsec=7000,-1
 #TriggerType=edge
 #ConditionVconf=memory/sysman/charger_status,int,0
@@ -66,7 +68,7 @@
 #[EventAction]
 #Name=PWKEY_LONGEST_EDGE_W_CHARGER
 #Enum=1004
-#Keycode=power
+#Keycode=KEY_POWER
 #DetectionRangeMsec=7000,-1
 #TriggerType=edge
 #ConditionVconf=memory/sysman/charger_status,int,1
@@ -76,7 +78,7 @@
 #[EventAction]
 #Name=BTKEY_SHORT_EDGE
 #Enum=1005
-#Keycode=bluetooth
+#Keycode=KEY_BLUETOOTH
 #DetectionRangeMsec=0,2000
 #TriggerType=edge
 #ActionBroadcast=yes
@@ -85,7 +87,7 @@
 #[EventAction]
 #Name=BTKEY_LONG_LEVEL
 #Enum=1006
-#Keycode=bluetooth
+#Keycode=KEY_BLUETOOTH
 #DetectionRangeMsec=2000,-1
 #TriggerType=level
 #ActionBroadcast=yes
@@ -94,7 +96,7 @@
 #[EventAction]
 #Name=BTKEY_LONG_EDGE
 #Enum=1007
-#Keycode=bluetooth
+#Keycode=KEY_BLUETOOTH
 #DetectionRangeMsec=2000,7000
 #TriggerType=edge
 #ActionBroadcast=yes
index 4a8715d..1ee72c8 100644 (file)
 
 #define INPUT_CONF_PATH    "/etc/deviced/input.conf"
 
+struct key_info {
+       const char *key_name;
+       int key_number;
+};
+
+static const struct key_info key_infos[] = {
+       {"KEY_RESERVED", KEY_RESERVED},
+       {"KEY_ESC", KEY_ESC},
+       {"KEY_1", KEY_1},
+       {"KEY_2", KEY_2},
+       {"KEY_3", KEY_3},
+       {"KEY_4", KEY_4},
+       {"KEY_5", KEY_5},
+       {"KEY_6", KEY_6},
+       {"KEY_7", KEY_7},
+       {"KEY_8", KEY_8},
+       {"KEY_9", KEY_9},
+       {"KEY_0", KEY_0},
+       {"KEY_MINUS", KEY_MINUS},
+       {"KEY_EQUAL", KEY_EQUAL},
+       {"KEY_BACKSPACE", KEY_BACKSPACE},
+       {"KEY_TAB", KEY_TAB},
+       {"KEY_Q", KEY_Q},
+       {"KEY_W", KEY_W},
+       {"KEY_E", KEY_E},
+       {"KEY_R", KEY_R},
+       {"KEY_T", KEY_T},
+       {"KEY_Y", KEY_Y},
+       {"KEY_U", KEY_U},
+       {"KEY_I", KEY_I},
+       {"KEY_O", KEY_O},
+       {"KEY_P", KEY_P},
+       {"KEY_LEFTBRACE", KEY_LEFTBRACE},
+       {"KEY_RIGHTBRACE", KEY_RIGHTBRACE},
+       {"KEY_ENTER", KEY_ENTER},
+       {"KEY_LEFTCTRL", KEY_LEFTCTRL},
+       {"KEY_A", KEY_A},
+       {"KEY_S", KEY_S},
+       {"KEY_D", KEY_D},
+       {"KEY_F", KEY_F},
+       {"KEY_G", KEY_G},
+       {"KEY_H", KEY_H},
+       {"KEY_J", KEY_J},
+       {"KEY_K", KEY_K},
+       {"KEY_L", KEY_L},
+       {"KEY_SEMICOLON", KEY_SEMICOLON},
+       {"KEY_APOSTROPHE", KEY_APOSTROPHE},
+       {"KEY_GRAVE", KEY_GRAVE},
+       {"KEY_LEFTSHIFT", KEY_LEFTSHIFT},
+       {"KEY_BACKSLASH", KEY_BACKSLASH},
+       {"KEY_Z", KEY_Z},
+       {"KEY_X", KEY_X},
+       {"KEY_C", KEY_C},
+       {"KEY_V", KEY_V},
+       {"KEY_B", KEY_B},
+       {"KEY_N", KEY_N},
+       {"KEY_M", KEY_M},
+       {"KEY_COMMA", KEY_COMMA},
+       {"KEY_DOT", KEY_DOT},
+       {"KEY_SLASH", KEY_SLASH},
+       {"KEY_RIGHTSHIFT", KEY_RIGHTSHIFT},
+       {"KEY_KPASTERISK", KEY_KPASTERISK},
+       {"KEY_LEFTALT", KEY_LEFTALT},
+       {"KEY_SPACE", KEY_SPACE},
+       {"KEY_CAPSLOCK", KEY_CAPSLOCK},
+       {"KEY_F1", KEY_F1},
+       {"KEY_F2", KEY_F2},
+       {"KEY_F3", KEY_F3},
+       {"KEY_F4", KEY_F4},
+       {"KEY_F5", KEY_F5},
+       {"KEY_F6", KEY_F6},
+       {"KEY_F7", KEY_F7},
+       {"KEY_F8", KEY_F8},
+       {"KEY_F9", KEY_F9},
+       {"KEY_F10", KEY_F10},
+       {"KEY_NUMLOCK", KEY_NUMLOCK},
+       {"KEY_SCROLLLOCK", KEY_SCROLLLOCK},
+       {"KEY_KP7", KEY_KP7},
+       {"KEY_KP8", KEY_KP8},
+       {"KEY_KP9", KEY_KP9},
+       {"KEY_KPMINUS", KEY_KPMINUS},
+       {"KEY_KP4", KEY_KP4},
+       {"KEY_KP5", KEY_KP5},
+       {"KEY_KP6", KEY_KP6},
+       {"KEY_KPPLUS", KEY_KPPLUS},
+       {"KEY_KP1", KEY_KP1},
+       {"KEY_KP2", KEY_KP2},
+       {"KEY_KP3", KEY_KP3},
+       {"KEY_KP0", KEY_KP0},
+       {"KEY_KPDOT", KEY_KPDOT},
+       {"KEY_ZENKAKUHANKAKU", KEY_ZENKAKUHANKAKU},
+       {"KEY_102ND", KEY_102ND},
+       {"KEY_F11", KEY_F11},
+       {"KEY_F12", KEY_F12},
+       {"KEY_RO", KEY_RO},
+       {"KEY_KATAKANA", KEY_KATAKANA},
+       {"KEY_HIRAGANA", KEY_HIRAGANA},
+       {"KEY_HENKAN", KEY_HENKAN},
+       {"KEY_KATAKANAHIRAGANA", KEY_KATAKANAHIRAGANA},
+       {"KEY_MUHENKAN", KEY_MUHENKAN},
+       {"KEY_KPJPCOMMA", KEY_KPJPCOMMA},
+       {"KEY_KPENTER", KEY_KPENTER},
+       {"KEY_RIGHTCTRL", KEY_RIGHTCTRL},
+       {"KEY_KPSLASH", KEY_KPSLASH},
+       {"KEY_SYSRQ", KEY_SYSRQ},
+       {"KEY_RIGHTALT", KEY_RIGHTALT},
+       {"KEY_LINEFEED", KEY_LINEFEED},
+       {"KEY_HOME", KEY_HOME},
+       {"KEY_UP", KEY_UP},
+       {"KEY_PAGEUP", KEY_PAGEUP},
+       {"KEY_LEFT", KEY_LEFT},
+       {"KEY_RIGHT", KEY_RIGHT},
+       {"KEY_END", KEY_END},
+       {"KEY_DOWN", KEY_DOWN},
+       {"KEY_PAGEDOWN", KEY_PAGEDOWN},
+       {"KEY_INSERT", KEY_INSERT},
+       {"KEY_DELETE", KEY_DELETE},
+       {"KEY_MACRO", KEY_MACRO},
+       {"KEY_MUTE", KEY_MUTE},
+       {"KEY_VOLUMEDOWN", KEY_VOLUMEDOWN},
+       {"KEY_VOLUMEUP", KEY_VOLUMEUP},
+       {"KEY_POWER", KEY_POWER},
+       {"KEY_KPEQUAL", KEY_KPEQUAL},
+       {"KEY_KPPLUSMINUS", KEY_KPPLUSMINUS},
+       {"KEY_PAUSE", KEY_PAUSE},
+       {"KEY_SCALE", KEY_SCALE},
+       {"KEY_KPCOMMA", KEY_KPCOMMA},
+       {"KEY_HANGEUL", KEY_HANGEUL},
+       {"KEY_HANGUEL", KEY_HANGUEL},
+       {"KEY_HANJA", KEY_HANJA},
+       {"KEY_YEN", KEY_YEN},
+       {"KEY_LEFTMETA", KEY_LEFTMETA},
+       {"KEY_RIGHTMETA", KEY_RIGHTMETA},
+       {"KEY_COMPOSE", KEY_COMPOSE},
+       {"KEY_STOP", KEY_STOP},
+       {"KEY_AGAIN", KEY_AGAIN},
+       {"KEY_PROPS", KEY_PROPS},
+       {"KEY_UNDO", KEY_UNDO},
+       {"KEY_FRONT", KEY_FRONT},
+       {"KEY_COPY", KEY_COPY},
+       {"KEY_OPEN", KEY_OPEN},
+       {"KEY_PASTE", KEY_PASTE},
+       {"KEY_FIND", KEY_FIND},
+       {"KEY_CUT", KEY_CUT},
+       {"KEY_HELP", KEY_HELP},
+       {"KEY_MENU", KEY_MENU},
+       {"KEY_CALC", KEY_CALC},
+       {"KEY_SETUP", KEY_SETUP},
+       {"KEY_SLEEP", KEY_SLEEP},
+       {"KEY_WAKEUP", KEY_WAKEUP},
+       {"KEY_FILE", KEY_FILE},
+       {"KEY_SENDFILE", KEY_SENDFILE},
+       {"KEY_DELETEFILE", KEY_DELETEFILE},
+       {"KEY_XFER", KEY_XFER},
+       {"KEY_PROG1", KEY_PROG1},
+       {"KEY_PROG2", KEY_PROG2},
+       {"KEY_WWW", KEY_WWW},
+       {"KEY_MSDOS", KEY_MSDOS},
+       {"KEY_COFFEE", KEY_COFFEE},
+       {"KEY_SCREENLOCK", KEY_SCREENLOCK},
+       {"KEY_DIRECTION", KEY_DIRECTION},
+       {"KEY_CYCLEWINDOWS", KEY_CYCLEWINDOWS},
+       {"KEY_MAIL", KEY_MAIL},
+       {"KEY_BOOKMARKS", KEY_BOOKMARKS},
+       {"KEY_COMPUTER", KEY_COMPUTER},
+       {"KEY_BACK", KEY_BACK},
+       {"KEY_FORWARD", KEY_FORWARD},
+       {"KEY_CLOSECD", KEY_CLOSECD},
+       {"KEY_EJECTCD", KEY_EJECTCD},
+       {"KEY_EJECTCLOSECD", KEY_EJECTCLOSECD},
+       {"KEY_NEXTSONG", KEY_NEXTSONG},
+       {"KEY_PLAYPAUSE", KEY_PLAYPAUSE},
+       {"KEY_PREVIOUSSONG", KEY_PREVIOUSSONG},
+       {"KEY_STOPCD", KEY_STOPCD},
+       {"KEY_RECORD", KEY_RECORD},
+       {"KEY_REWIND", KEY_REWIND},
+       {"KEY_PHONE", KEY_PHONE},
+       {"KEY_ISO", KEY_ISO},
+       {"KEY_CONFIG", KEY_CONFIG},
+       {"KEY_HOMEPAGE", KEY_HOMEPAGE},
+       {"KEY_REFRESH", KEY_REFRESH},
+       {"KEY_EXIT", KEY_EXIT},
+       {"KEY_MOVE", KEY_MOVE},
+       {"KEY_EDIT", KEY_EDIT},
+       {"KEY_SCROLLUP", KEY_SCROLLUP},
+       {"KEY_SCROLLDOWN", KEY_SCROLLDOWN},
+       {"KEY_KPLEFTPAREN", KEY_KPLEFTPAREN},
+       {"KEY_KPRIGHTPAREN", KEY_KPRIGHTPAREN},
+       {"KEY_NEW", KEY_NEW},
+       {"KEY_REDO", KEY_REDO},
+       {"KEY_F13", KEY_F13},
+       {"KEY_F14", KEY_F14},
+       {"KEY_F15", KEY_F15},
+       {"KEY_F16", KEY_F16},
+       {"KEY_F17", KEY_F17},
+       {"KEY_F18", KEY_F18},
+       {"KEY_F19", KEY_F19},
+       {"KEY_F20", KEY_F20},
+       {"KEY_F21", KEY_F21},
+       {"KEY_F22", KEY_F22},
+       {"KEY_F23", KEY_F23},
+       {"KEY_F24", KEY_F24},
+       {"KEY_PLAYCD", KEY_PLAYCD},
+       {"KEY_PAUSECD", KEY_PAUSECD},
+       {"KEY_PROG3", KEY_PROG3},
+       {"KEY_PROG4", KEY_PROG4},
+       {"KEY_DASHBOARD", KEY_DASHBOARD},
+       {"KEY_SUSPEND", KEY_SUSPEND},
+       {"KEY_CLOSE", KEY_CLOSE},
+       {"KEY_PLAY", KEY_PLAY},
+       {"KEY_FASTFORWARD", KEY_FASTFORWARD},
+       {"KEY_BASSBOOST", KEY_BASSBOOST},
+       {"KEY_PRINT", KEY_PRINT},
+       {"KEY_HP", KEY_HP},
+       {"KEY_CAMERA", KEY_CAMERA},
+       {"KEY_SOUND", KEY_SOUND},
+       {"KEY_QUESTION", KEY_QUESTION},
+       {"KEY_EMAIL", KEY_EMAIL},
+       {"KEY_CHAT", KEY_CHAT},
+       {"KEY_SEARCH", KEY_SEARCH},
+       {"KEY_CONNECT", KEY_CONNECT},
+       {"KEY_FINANCE", KEY_FINANCE},
+       {"KEY_SPORT", KEY_SPORT},
+       {"KEY_SHOP", KEY_SHOP},
+       {"KEY_ALTERASE", KEY_ALTERASE},
+       {"KEY_CANCEL", KEY_CANCEL},
+       {"KEY_BRIGHTNESSDOWN", KEY_BRIGHTNESSDOWN},
+       {"KEY_BRIGHTNESSUP", KEY_BRIGHTNESSUP},
+       {"KEY_MEDIA", KEY_MEDIA},
+       {"KEY_SWITCHVIDEOMODE", KEY_SWITCHVIDEOMODE},
+       {"KEY_KBDILLUMTOGGLE", KEY_KBDILLUMTOGGLE},
+       {"KEY_KBDILLUMDOWN", KEY_KBDILLUMDOWN},
+       {"KEY_KBDILLUMUP", KEY_KBDILLUMUP},
+       {"KEY_SEND", KEY_SEND},
+       {"KEY_REPLY", KEY_REPLY},
+       {"KEY_FORWARDMAIL", KEY_FORWARDMAIL},
+       {"KEY_SAVE", KEY_SAVE},
+       {"KEY_DOCUMENTS", KEY_DOCUMENTS},
+       {"KEY_BATTERY", KEY_BATTERY},
+       {"KEY_BLUETOOTH", KEY_BLUETOOTH},
+       {"KEY_WLAN", KEY_WLAN},
+       {"KEY_UWB", KEY_UWB},
+       {"KEY_UNKNOWN", KEY_UNKNOWN},
+       {"KEY_VIDEO_NEXT", KEY_VIDEO_NEXT},
+       {"KEY_VIDEO_PREV", KEY_VIDEO_PREV},
+       {"KEY_BRIGHTNESS_CYCLE", KEY_BRIGHTNESS_CYCLE},
+       {"KEY_BRIGHTNESS_ZERO", KEY_BRIGHTNESS_ZERO},
+       {"KEY_DISPLAY_OFF", KEY_DISPLAY_OFF},
+       {"KEY_WIMAX", KEY_WIMAX},
+       {"KEY_RFKILL", KEY_RFKILL},
+       {"KEY_MICMUTE", KEY_MICMUTE},
+       {"BTN_MISC", BTN_MISC},
+       {"BTN_0", BTN_0},
+       {"BTN_1", BTN_1},
+       {"BTN_2", BTN_2},
+       {"BTN_3", BTN_3},
+       {"BTN_4", BTN_4},
+       {"BTN_5", BTN_5},
+       {"BTN_6", BTN_6},
+       {"BTN_7", BTN_7},
+       {"BTN_8", BTN_8},
+       {"BTN_9", BTN_9},
+       {"BTN_MOUSE", BTN_MOUSE},
+       {"BTN_LEFT", BTN_LEFT},
+       {"BTN_RIGHT", BTN_RIGHT},
+       {"BTN_MIDDLE", BTN_MIDDLE},
+       {"BTN_SIDE", BTN_SIDE},
+       {"BTN_EXTRA", BTN_EXTRA},
+       {"BTN_FORWARD", BTN_FORWARD},
+       {"BTN_BACK", BTN_BACK},
+       {"BTN_TASK", BTN_TASK},
+       {"BTN_JOYSTICK", BTN_JOYSTICK},
+       {"BTN_TRIGGER", BTN_TRIGGER},
+       {"BTN_THUMB", BTN_THUMB},
+       {"BTN_THUMB2", BTN_THUMB2},
+       {"BTN_TOP", BTN_TOP},
+       {"BTN_TOP2", BTN_TOP2},
+       {"BTN_PINKIE", BTN_PINKIE},
+       {"BTN_BASE", BTN_BASE},
+       {"BTN_BASE2", BTN_BASE2},
+       {"BTN_BASE3", BTN_BASE3},
+       {"BTN_BASE4", BTN_BASE4},
+       {"BTN_BASE5", BTN_BASE5},
+       {"BTN_BASE6", BTN_BASE6},
+       {"BTN_DEAD", BTN_DEAD},
+       {"BTN_GAMEPAD", BTN_GAMEPAD},
+       {"BTN_A", BTN_A},
+       {"BTN_B", BTN_B},
+       {"BTN_C", BTN_C},
+       {"BTN_X", BTN_X},
+       {"BTN_Y", BTN_Y},
+       {"BTN_Z", BTN_Z},
+       {"BTN_TL", BTN_TL},
+       {"BTN_TR", BTN_TR},
+       {"BTN_TL2", BTN_TL2},
+       {"BTN_TR2", BTN_TR2},
+       {"BTN_SELECT", BTN_SELECT},
+       {"BTN_START", BTN_START},
+       {"BTN_MODE", BTN_MODE},
+       {"BTN_THUMBL", BTN_THUMBL},
+       {"BTN_THUMBR", BTN_THUMBR},
+       {"BTN_DIGI", BTN_DIGI},
+       {"BTN_TOOL_PEN", BTN_TOOL_PEN},
+       {"BTN_TOOL_RUBBER", BTN_TOOL_RUBBER},
+       {"BTN_TOOL_BRUSH", BTN_TOOL_BRUSH},
+       {"BTN_TOOL_PENCIL", BTN_TOOL_PENCIL},
+       {"BTN_TOOL_AIRBRUSH", BTN_TOOL_AIRBRUSH},
+       {"BTN_TOOL_FINGER", BTN_TOOL_FINGER},
+       {"BTN_TOOL_MOUSE", BTN_TOOL_MOUSE},
+       {"BTN_TOOL_LENS", BTN_TOOL_LENS},
+       {"BTN_TOOL_QUINTTAP", BTN_TOOL_QUINTTAP},
+       {"BTN_TOUCH", BTN_TOUCH},
+       {"BTN_STYLUS", BTN_STYLUS},
+       {"BTN_STYLUS2", BTN_STYLUS2},
+       {"BTN_TOOL_DOUBLETAP", BTN_TOOL_DOUBLETAP},
+       {"BTN_TOOL_TRIPLETAP", BTN_TOOL_TRIPLETAP},
+       {"BTN_TOOL_QUADTAP", BTN_TOOL_QUADTAP},
+       {"BTN_WHEEL", BTN_WHEEL},
+       {"BTN_GEAR_DOWN", BTN_GEAR_DOWN},
+       {"BTN_GEAR_UP", BTN_GEAR_UP},
+       {"KEY_OK", KEY_OK},
+       {"KEY_SELECT", KEY_SELECT},
+       {"KEY_GOTO", KEY_GOTO},
+       {"KEY_CLEAR", KEY_CLEAR},
+       {"KEY_POWER2", KEY_POWER2},
+       {"KEY_OPTION", KEY_OPTION},
+       {"KEY_INFO", KEY_INFO},
+       {"KEY_TIME", KEY_TIME},
+       {"KEY_VENDOR", KEY_VENDOR},
+       {"KEY_ARCHIVE", KEY_ARCHIVE},
+       {"KEY_PROGRAM", KEY_PROGRAM},
+       {"KEY_CHANNEL", KEY_CHANNEL},
+       {"KEY_FAVORITES", KEY_FAVORITES},
+       {"KEY_EPG", KEY_EPG},
+       {"KEY_PVR", KEY_PVR},
+       {"KEY_MHP", KEY_MHP},
+       {"KEY_LANGUAGE", KEY_LANGUAGE},
+       {"KEY_TITLE", KEY_TITLE},
+       {"KEY_SUBTITLE", KEY_SUBTITLE},
+       {"KEY_ANGLE", KEY_ANGLE},
+       {"KEY_ZOOM", KEY_ZOOM},
+       {"KEY_MODE", KEY_MODE},
+       {"KEY_KEYBOARD", KEY_KEYBOARD},
+       {"KEY_SCREEN", KEY_SCREEN},
+       {"KEY_PC", KEY_PC},
+       {"KEY_TV", KEY_TV},
+       {"KEY_TV2", KEY_TV2},
+       {"KEY_VCR", KEY_VCR},
+       {"KEY_VCR2", KEY_VCR2},
+       {"KEY_SAT", KEY_SAT},
+       {"KEY_SAT2", KEY_SAT2},
+       {"KEY_CD", KEY_CD},
+       {"KEY_TAPE", KEY_TAPE},
+       {"KEY_RADIO", KEY_RADIO},
+       {"KEY_TUNER", KEY_TUNER},
+       {"KEY_PLAYER", KEY_PLAYER},
+       {"KEY_TEXT", KEY_TEXT},
+       {"KEY_DVD", KEY_DVD},
+       {"KEY_AUX", KEY_AUX},
+       {"KEY_MP3", KEY_MP3},
+       {"KEY_AUDIO", KEY_AUDIO},
+       {"KEY_VIDEO", KEY_VIDEO},
+       {"KEY_DIRECTORY", KEY_DIRECTORY},
+       {"KEY_LIST", KEY_LIST},
+       {"KEY_MEMO", KEY_MEMO},
+       {"KEY_CALENDAR", KEY_CALENDAR},
+       {"KEY_RED", KEY_RED},
+       {"KEY_GREEN", KEY_GREEN},
+       {"KEY_YELLOW", KEY_YELLOW},
+       {"KEY_BLUE", KEY_BLUE},
+       {"KEY_CHANNELUP", KEY_CHANNELUP},
+       {"KEY_CHANNELDOWN", KEY_CHANNELDOWN},
+       {"KEY_FIRST", KEY_FIRST},
+       {"KEY_LAST", KEY_LAST},
+       {"KEY_AB", KEY_AB},
+       {"KEY_NEXT", KEY_NEXT},
+       {"KEY_RESTART", KEY_RESTART},
+       {"KEY_SLOW", KEY_SLOW},
+       {"KEY_SHUFFLE", KEY_SHUFFLE},
+       {"KEY_BREAK", KEY_BREAK},
+       {"KEY_PREVIOUS", KEY_PREVIOUS},
+       {"KEY_DIGITS", KEY_DIGITS},
+       {"KEY_TEEN", KEY_TEEN},
+       {"KEY_TWEN", KEY_TWEN},
+       {"KEY_VIDEOPHONE", KEY_VIDEOPHONE},
+       {"KEY_GAMES", KEY_GAMES},
+       {"KEY_ZOOMIN", KEY_ZOOMIN},
+       {"KEY_ZOOMOUT", KEY_ZOOMOUT},
+       {"KEY_ZOOMRESET", KEY_ZOOMRESET},
+       {"KEY_WORDPROCESSOR", KEY_WORDPROCESSOR},
+       {"KEY_EDITOR", KEY_EDITOR},
+       {"KEY_SPREADSHEET", KEY_SPREADSHEET},
+       {"KEY_GRAPHICSEDITOR", KEY_GRAPHICSEDITOR},
+       {"KEY_PRESENTATION", KEY_PRESENTATION},
+       {"KEY_DATABASE", KEY_DATABASE},
+       {"KEY_NEWS", KEY_NEWS},
+       {"KEY_VOICEMAIL", KEY_VOICEMAIL},
+       {"KEY_ADDRESSBOOK", KEY_ADDRESSBOOK},
+       {"KEY_MESSENGER", KEY_MESSENGER},
+       {"KEY_DISPLAYTOGGLE", KEY_DISPLAYTOGGLE},
+       {"KEY_SPELLCHECK", KEY_SPELLCHECK},
+       {"KEY_LOGOFF", KEY_LOGOFF},
+       {"KEY_DOLLAR", KEY_DOLLAR},
+       {"KEY_EURO", KEY_EURO},
+       {"KEY_FRAMEBACK", KEY_FRAMEBACK},
+       {"KEY_FRAMEFORWARD", KEY_FRAMEFORWARD},
+       {"KEY_CONTEXT_MENU", KEY_CONTEXT_MENU},
+       {"KEY_MEDIA_REPEAT", KEY_MEDIA_REPEAT},
+       {"KEY_10CHANNELSUP", KEY_10CHANNELSUP},
+       {"KEY_10CHANNELSDOWN", KEY_10CHANNELSDOWN},
+       {"KEY_IMAGES", KEY_IMAGES},
+       {"KEY_DEL_EOL", KEY_DEL_EOL},
+       {"KEY_DEL_EOS", KEY_DEL_EOS},
+       {"KEY_INS_LINE", KEY_INS_LINE},
+       {"KEY_DEL_LINE", KEY_DEL_LINE},
+       {"KEY_FN", KEY_FN},
+       {"KEY_FN_ESC", KEY_FN_ESC},
+       {"KEY_FN_F1", KEY_FN_F1},
+       {"KEY_FN_F2", KEY_FN_F2},
+       {"KEY_FN_F3", KEY_FN_F3},
+       {"KEY_FN_F4", KEY_FN_F4},
+       {"KEY_FN_F5", KEY_FN_F5},
+       {"KEY_FN_F6", KEY_FN_F6},
+       {"KEY_FN_F7", KEY_FN_F7},
+       {"KEY_FN_F8", KEY_FN_F8},
+       {"KEY_FN_F9", KEY_FN_F9},
+       {"KEY_FN_F10", KEY_FN_F10},
+       {"KEY_FN_F11", KEY_FN_F11},
+       {"KEY_FN_F12", KEY_FN_F12},
+       {"KEY_FN_1", KEY_FN_1},
+       {"KEY_FN_2", KEY_FN_2},
+       {"KEY_FN_D", KEY_FN_D},
+       {"KEY_FN_E", KEY_FN_E},
+       {"KEY_FN_F", KEY_FN_F},
+       {"KEY_FN_S", KEY_FN_S},
+       {"KEY_FN_B", KEY_FN_B},
+       {"KEY_BRL_DOT1", KEY_BRL_DOT1},
+       {"KEY_BRL_DOT2", KEY_BRL_DOT2},
+       {"KEY_BRL_DOT3", KEY_BRL_DOT3},
+       {"KEY_BRL_DOT4", KEY_BRL_DOT4},
+       {"KEY_BRL_DOT5", KEY_BRL_DOT5},
+       {"KEY_BRL_DOT6", KEY_BRL_DOT6},
+       {"KEY_BRL_DOT7", KEY_BRL_DOT7},
+       {"KEY_BRL_DOT8", KEY_BRL_DOT8},
+       {"KEY_BRL_DOT9", KEY_BRL_DOT9},
+       {"KEY_BRL_DOT10", KEY_BRL_DOT10},
+       {"KEY_NUMERIC_0", KEY_NUMERIC_0},
+       {"KEY_NUMERIC_1", KEY_NUMERIC_1},
+       {"KEY_NUMERIC_2", KEY_NUMERIC_2},
+       {"KEY_NUMERIC_3", KEY_NUMERIC_3},
+       {"KEY_NUMERIC_4", KEY_NUMERIC_4},
+       {"KEY_NUMERIC_5", KEY_NUMERIC_5},
+       {"KEY_NUMERIC_6", KEY_NUMERIC_6},
+       {"KEY_NUMERIC_7", KEY_NUMERIC_7},
+       {"KEY_NUMERIC_8", KEY_NUMERIC_8},
+       {"KEY_NUMERIC_9", KEY_NUMERIC_9},
+       {"KEY_NUMERIC_STAR", KEY_NUMERIC_STAR},
+       {"KEY_NUMERIC_POUND", KEY_NUMERIC_POUND},
+       {"KEY_CAMERA_FOCUS", KEY_CAMERA_FOCUS},
+       {"KEY_WPS_BUTTON", KEY_WPS_BUTTON},
+       {"KEY_TOUCHPAD_TOGGLE", KEY_TOUCHPAD_TOGGLE},
+       {"KEY_TOUCHPAD_ON", KEY_TOUCHPAD_ON},
+       {"KEY_TOUCHPAD_OFF", KEY_TOUCHPAD_OFF},
+       {"KEY_CAMERA_ZOOMIN", KEY_CAMERA_ZOOMIN},
+       {"KEY_CAMERA_ZOOMOUT", KEY_CAMERA_ZOOMOUT},
+       {"KEY_CAMERA_UP", KEY_CAMERA_UP},
+       {"KEY_CAMERA_DOWN", KEY_CAMERA_DOWN},
+       {"KEY_CAMERA_LEFT", KEY_CAMERA_LEFT},
+       {"KEY_CAMERA_RIGHT", KEY_CAMERA_RIGHT},
+       {"KEY_ATTENDANT_ON", KEY_ATTENDANT_ON},
+       {"KEY_ATTENDANT_OFF", KEY_ATTENDANT_OFF},
+       {"KEY_ATTENDANT_TOGGLE", KEY_ATTENDANT_TOGGLE},
+       {"KEY_LIGHTS_TOGGLE", KEY_LIGHTS_TOGGLE},
+       {"BTN_TRIGGER_HAPPY", BTN_TRIGGER_HAPPY},
+       {"BTN_TRIGGER_HAPPY1", BTN_TRIGGER_HAPPY1},
+       {"BTN_TRIGGER_HAPPY2", BTN_TRIGGER_HAPPY2},
+       {"BTN_TRIGGER_HAPPY3", BTN_TRIGGER_HAPPY3},
+       {"BTN_TRIGGER_HAPPY4", BTN_TRIGGER_HAPPY4},
+       {"BTN_TRIGGER_HAPPY5", BTN_TRIGGER_HAPPY5},
+       {"BTN_TRIGGER_HAPPY6", BTN_TRIGGER_HAPPY6},
+       {"BTN_TRIGGER_HAPPY7", BTN_TRIGGER_HAPPY7},
+       {"BTN_TRIGGER_HAPPY8", BTN_TRIGGER_HAPPY8},
+       {"BTN_TRIGGER_HAPPY9", BTN_TRIGGER_HAPPY9},
+       {"BTN_TRIGGER_HAPPY10", BTN_TRIGGER_HAPPY10},
+       {"BTN_TRIGGER_HAPPY11", BTN_TRIGGER_HAPPY11},
+       {"BTN_TRIGGER_HAPPY12", BTN_TRIGGER_HAPPY12},
+       {"BTN_TRIGGER_HAPPY13", BTN_TRIGGER_HAPPY13},
+       {"BTN_TRIGGER_HAPPY14", BTN_TRIGGER_HAPPY14},
+       {"BTN_TRIGGER_HAPPY15", BTN_TRIGGER_HAPPY15},
+       {"BTN_TRIGGER_HAPPY16", BTN_TRIGGER_HAPPY16},
+       {"BTN_TRIGGER_HAPPY17", BTN_TRIGGER_HAPPY17},
+       {"BTN_TRIGGER_HAPPY18", BTN_TRIGGER_HAPPY18},
+       {"BTN_TRIGGER_HAPPY19", BTN_TRIGGER_HAPPY19},
+       {"BTN_TRIGGER_HAPPY20", BTN_TRIGGER_HAPPY20},
+       {"BTN_TRIGGER_HAPPY21", BTN_TRIGGER_HAPPY21},
+       {"BTN_TRIGGER_HAPPY22", BTN_TRIGGER_HAPPY22},
+       {"BTN_TRIGGER_HAPPY23", BTN_TRIGGER_HAPPY23},
+       {"BTN_TRIGGER_HAPPY24", BTN_TRIGGER_HAPPY24},
+       {"BTN_TRIGGER_HAPPY25", BTN_TRIGGER_HAPPY25},
+       {"BTN_TRIGGER_HAPPY26", BTN_TRIGGER_HAPPY26},
+       {"BTN_TRIGGER_HAPPY27", BTN_TRIGGER_HAPPY27},
+       {"BTN_TRIGGER_HAPPY28", BTN_TRIGGER_HAPPY28},
+       {"BTN_TRIGGER_HAPPY29", BTN_TRIGGER_HAPPY29},
+       {"BTN_TRIGGER_HAPPY30", BTN_TRIGGER_HAPPY30},
+       {"BTN_TRIGGER_HAPPY31", BTN_TRIGGER_HAPPY31},
+       {"BTN_TRIGGER_HAPPY32", BTN_TRIGGER_HAPPY32},
+       {"BTN_TRIGGER_HAPPY33", BTN_TRIGGER_HAPPY33},
+       {"BTN_TRIGGER_HAPPY34", BTN_TRIGGER_HAPPY34},
+       {"BTN_TRIGGER_HAPPY35", BTN_TRIGGER_HAPPY35},
+       {"BTN_TRIGGER_HAPPY36", BTN_TRIGGER_HAPPY36},
+       {"BTN_TRIGGER_HAPPY37", BTN_TRIGGER_HAPPY37},
+       {"BTN_TRIGGER_HAPPY38", BTN_TRIGGER_HAPPY38},
+       {"BTN_TRIGGER_HAPPY39", BTN_TRIGGER_HAPPY39},
+       {"BTN_TRIGGER_HAPPY40", BTN_TRIGGER_HAPPY40},
+       {"KEY_MIN_INTERESTING", KEY_MIN_INTERESTING},
+       {"KEY_MAX", KEY_MAX},
+};
+
 /* input config list */
 static GList *input_config_list;
 
@@ -48,13 +566,10 @@ struct input_config *find_input_config(int keycode)
        return NULL;
 }
 
-static void parse_keycode(struct input_event_unit *ieu, const char *keycode)
+static void parse_keycode(struct input_event_unit *ieu, const char *keycode, GHashTable *hash_table)
 {
-       if (MATCH(keycode, "power"))
-               ieu->keycode = KEY_POWER;
-       else if (MATCH(keycode, "bluetooth"))
-               ieu->keycode = KEY_BLUETOOTH;
-       /* add keycode list here */
+       if (g_hash_table_contains(hash_table, keycode))
+               ieu->keycode = *(int *)g_hash_table_lookup(hash_table, keycode);
 }
 
 static void parse_duration(struct input_event_unit *ieu, const char *duration)
@@ -160,38 +675,39 @@ static void parse_change_state(struct input_event_unit *ieu, const char *action)
 static void parse_event_action_property(gpointer data, gpointer user_data)
 {
        struct section_property *prop = (struct section_property *) data;
-       struct input_event_unit *ieu = (struct input_event_unit *) user_data;
+       struct input_parse_event_action *input_parse_event = (struct input_parse_event_action *) user_data;
 
-       if (!prop || !ieu)
+       if (!prop || !input_parse_event->ieu)
                return;
 
        _D("Key=%s, Value=%s", prop->key, prop->value);
 
        if (MATCH(prop->key, "Name")) {
-               ieu->name = strndup(prop->value, 32);
+               input_parse_event->ieu->name = strndup(prop->value, 32);
        } else if (MATCH(prop->key, "Enum")) {
-               sscanf(prop->value, "%d", &ieu->id);
+               sscanf(prop->value, "%d", &input_parse_event->ieu->id);
        } else if (MATCH(prop->key, "Keycode")) {
-               parse_keycode(ieu, prop->value);
+               parse_keycode(input_parse_event->ieu, prop->value, input_parse_event->hash_table_key_infos);
        } else if (MATCH(prop->key, "DetectionRangeMsec")) {
-               parse_duration(ieu, prop->value);
+               parse_duration(input_parse_event->ieu, prop->value);
        } else if (MATCH(prop->key, "TriggerType")) {
-               parse_trigger_type(ieu, prop->value);
+               parse_trigger_type(input_parse_event->ieu, prop->value);
        } else if (MATCH(prop->key, "ConditionVconf")) {
-               parse_condition_vconf(ieu, prop->value);
+               parse_condition_vconf(input_parse_event->ieu, prop->value);
        } else if (MATCH(prop->key, "ActionChangeState")) {
-               parse_change_state(ieu, prop->value);
+               parse_change_state(input_parse_event->ieu, prop->value);
        } else if (MATCH(prop->key, "ActionBroadcast")) {
-               ieu->broadcast = MATCH(prop->value, "yes");
+               input_parse_event->ieu->broadcast = MATCH(prop->value, "yes");
        } else if (MATCH(prop->key, "WakeLockDurationSec")) {
-               sscanf(prop->value, "%d", &ieu->wakelock_duration);
+               sscanf(prop->value, "%d", &input_parse_event->ieu->wakelock_duration);
        }
 }
 
 static int parse_event_action(const struct parse_result *result, void *data)
 {
        struct input_config *ic;
-       struct input_event_unit *ieu;
+       struct input_parse_event_action *input_event_action;
+       GHashTable *hash_table = (GHashTable *) data;
 
        if (!result || !result->props)
                return 0;
@@ -201,21 +717,26 @@ static int parse_event_action(const struct parse_result *result, void *data)
 
        _D("Input section=%s", result->section);
 
-       ieu = calloc(1, sizeof(struct input_event_unit));
-       if (!ieu)
+       input_event_action = calloc(1, sizeof(struct input_parse_event_action));
+       if (!input_event_action)
                return 0;
 
-       g_list_foreach(result->props, parse_event_action_property, ieu);
+       input_event_action->ieu = calloc(1, sizeof(struct input_event_unit));
+       if (!input_event_action->ieu)
+               return 0;
 
-       ic = find_input_config(ieu->keycode);
+       input_event_action->hash_table_key_infos = hash_table;
+       g_list_foreach(result->props, parse_event_action_property, input_event_action);
+
+       ic = find_input_config(input_event_action->ieu->keycode);
        if (!ic) {
                ic = calloc(1, sizeof(struct input_config));
                if (!ic)
                        return -ENOMEM;
-               ic->keycode = ieu->keycode;
+               ic->keycode = input_event_action->ieu->keycode;
                SYS_G_LIST_APPEND(input_config_list, ic);
        }
-       SYS_G_LIST_APPEND(ic->event_list, ieu);
+       SYS_G_LIST_APPEND(ic->event_list, input_event_action->ieu);
 
        return 0;
 }
@@ -287,7 +808,19 @@ int check_input_event_condition(const struct input_event_unit *ieu)
        return ret;
 }
 
+void init_hash_table_with_key_infos(GHashTable *hash_table)
+{
+       int num_key_infos = sizeof(key_infos)/sizeof(*key_infos);
+
+       for (int i = 0; i < num_key_infos; i++)
+               g_hash_table_insert(hash_table, (gpointer)key_infos[i].key_name, (gpointer)&key_infos[i].key_number);
+}
+
 void init_input_config(void)
 {
-       libsys_config_parse_by_section(INPUT_CONF_PATH, parse_event_action, NULL);
+       GHashTable *hash_table_key_infos = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);
+
+       init_hash_table_with_key_infos(hash_table_key_infos);
+       libsys_config_parse_by_section(INPUT_CONF_PATH, parse_event_action, hash_table_key_infos);
+       g_hash_table_destroy(g_steal_pointer(&hash_table_key_infos));
 }
index 4f03f30..3d9fb6f 100644 (file)
@@ -19,6 +19,8 @@
 #ifndef __INPUT_CONFIG_H__
 #define __INPUT_CONFIG_H__
 
+#include <glib.h>
+
 #include <vconf.h>
 #include "shared/device-notifier.h"
 
@@ -71,6 +73,11 @@ struct input_config {
        unsigned long start;   /* input incoming time in milisecond */
 };
 
+struct input_parse_event_action {
+       struct input_event_unit *ieu;
+       GHashTable *hash_table_key_infos;
+};
+
 void init_input_config(void);
 struct input_config *find_input_config(int keycode);
 int check_input_event_condition(const struct input_event_unit *ieu);