📄 kbd_lirc.c
字号:
{0, "9", '9', '(', '9', '9'}, {0, "0", '0', ')', '*', '*'}, {0, "-", '-', '_', 0, 0}, {0, "=", '=', '+', 0, 0}, {0, "BACKSPACE", MWKEY_BACKSPACE, MWKEY_BACKSPACE, MWKEY_BACKSPACE, 0},// Row 3 {0, "TAB", MWKEY_TAB, MWKEY_TAB, MWKEY_TAB, 0}, {0, "q", 'q', 'Q', 0, 0}, {0, "w", 'w', 'W', 0, 0}, {0, "e", 'e', 'E', 0, 0}, {0, "r", 'r', 'R', 0, 0}, {0, "t", 't', 'T', 0, 0}, {0, "y", 'y', 'Y', 0, 0}, {0, "u", 'u', 'U', '4', '4'}, {0, "i", 'i', 'I', '5', '5'}, {0, "o", 'o', 'O', '6', '6'}, {0, "p", 'p', 'P', '-', '-'}, {0, "[", '[', '{', 0, 0}, {0, "]", ']', '}', 0, 0}, {0, "\\", '\\', '\\', 0, 0},// Row 4 {0, "CAPSLOCK", MWKEY_CAPSLOCK, MWKEY_CAPSLOCK, MWKEY_CAPSLOCK, MWKEY_CAPSLOCK}, {0, "a", 'a', 'A', 0, 0}, {0, "s", 's', 'S', 0, 0}, {0, "d", 'd', 'D', 0, 0}, {0, "f", 'f', 'F', 0, 0}, {0, "g", 'g', 'G', 0, 0}, {0, "h", 'h', 'H', 0, 0}, {0, "j", 'j', 'J', '1', '1'}, {0, "k", 'k', 'K', '2', '2'}, {0, "l", 'l', 'L', '3', '3'}, {0, ";", ';', ':', '+', '+'}, {0, "'", '\'', '"', 0, 0}, {0, "ENTER", MWKEY_ENTER, MWKEY_ENTER, MWKEY_ENTER, 0},// Row 5 {0, "LSHIFT", MWKEY_LSHIFT, MWKEY_LSHIFT, MWKEY_LSHIFT, MWKEY_LSHIFT}, {0, "z", 'z', 'Z', 0, 0}, {0, "x", 'x', 'X', 0, 0}, {0, "c", 'c', 'C', 0, 0}, {0, "v", 'v', 'V', 0, 0}, {0, "b", 'b', 'B', 0, 0}, {0, "n", 'n', 'N', 0, 0}, {0, "m", 'm', 'M', '0', '0'}, {0, ",", ',', '<', 0, 0}, {0, ".", '.', '>', 0, 0}, {0, "RSHIFT", MWKEY_RSHIFT, MWKEY_RSHIFT, MWKEY_RSHIFT, MWKEY_RSHIFT}, {0, "UP", MWKEY_UP, MWKEY_UP, MWKEY_UP, MWKEY_PAGEUP}, {0, "/", '/', '?', 0, 0},// Row 6 {0, "LCTRL", MWKEY_LCTRL, MWKEY_LCTRL, MWKEY_LCTRL, MWKEY_LCTRL}, {0, "LMETA", MWKEY_LMETA, MWKEY_LMETA, MWKEY_LMETA, MWKEY_LMETA}, {0, "LALT", MWKEY_LALT, MWKEY_LALT, MWKEY_LALT, MWKEY_LALT}, {0, "SPACE", ' ', ' ', ' ', 0}, {0, "`", '`', '~', 0, 0}, {0, "RALT", MWKEY_RALT, MWKEY_RALT, MWKEY_RALT, MWKEY_RALT}, {0, "RMETA", MWKEY_RMETA, MWKEY_RMETA, MWKEY_RMETA, MWKEY_RMETA}, {0, "LEFT", MWKEY_LEFT, MWKEY_LEFT, MWKEY_LEFT, MWKEY_HOME}, {0, "DOWN", MWKEY_DOWN, MWKEY_DOWN, MWKEY_DOWN, MWKEY_PAGEDOWN}, {0, "RIGHT", MWKEY_RIGHT, MWKEY_RIGHT, MWKEY_RIGHT, MWKEY_END},// End of table marker {0, NULL, 0, 0, 0, 0}};static int LIRC_fn = 0;static intremoteKeyboardHandler(mwlirc_keystroke * event, MWKEY * kbuf, MWSCANCODE * pscancode){ MWKEY ch; MWSCANCODE scan; keyboardKey_t *k; MWBOOL isDown; unsigned len = strlen(event->name); if (len < 2) { printf("LIRC_Read() - Invalid key '%s' - too short. (Must be at least 2 characters!)\n", event->name); return 0; } len--; switch (event->name[len]) { case '\\': isDown = 1; break; case '^': isDown = 0; break; default: printf("LIRC_Read() - Invalid key '%s' - no up/down (^ or \\) indicator\n", event->name); return 0; } event->name[len] = '\0'; if (0 == strcmp(event->name, "fn")) { LIRC_fn = isDown; return 0; /* Silent key */ } k = keyboardKeys; while (0 != strcmp(k->name, event->name)) { k++; if (NULL == k->name) { printf("LIRC_Read() - Unrecognized key '%s'\n", event->name); return 0; /* Unrecognized - treat as 'No data' */ } } if (isDown == k->isDown) return 0; /* No change */ k->isDown = isDown; scan = k->normal; ch = ((LIRC_fn) ? k->fn : ((LIRC_keymod & MWKMOD_NUM) ? k->num : ((LIRC_keymod & MWKMOD_SHIFT) ? k->shift : (k->normal)))); if (ch == 0) return 0; /* Ignore key */ if (LIRC_keymod & MWKMOD_CAPS) { /* If it's a letter, flip the case. */ if ((ch >= 'a') && (ch <= 'z')) { ch -= 'a' - 'A'; } else if ((ch >= 'A') && (ch <= 'Z')) { ch += 'a' - 'A'; } } LIRC_UpdateKeyState(isDown, ch); /*printf("LIRC_Read() - Got key '%s', char '%c', code 0x%x\n", k->name, ch, scan);*/ *kbuf = ch; *pscancode = scan; return (isDown ? 1 /* press */ : 2 /* release */ );}/* ************************************************************************ *//* * End of IR keyboard driver * *//* ************************************************************************ *//* ************************************************************************ *//* * Start of IR remote driver * *//* ************************************************************************ *//* * To use this driver, you must follow the following conventions * when allocating key names in LIRC. * * Key names can be: * - A single ASCII character * - One of the strings defined in remoteKeys. * * The name of this remote is "remote" */typedef struct remoteKey_t_{ int code; const char *name;}remoteKey_t;static const remoteKey_t remoteKeys[] = { {MWKEY_ACCEPT, "ACCEPT"}, {MWKEY_BACKSPACE, "BACKSPACE"}, {MWKEY_BALANCE_LEFT, "BALANCE_LEFT"}, {MWKEY_BALANCE_RIGHT, "BALANCE_RIGHT"}, {MWKEY_BASS_BOOST_DOWN, "BASS_BOOST_DOWN"}, {MWKEY_BASS_BOOST_UP, "BASS_BOOST_UP"}, {MWKEY_CANCEL, "CANCEL"}, {MWKEY_CHANNEL_DOWN, "CHANNEL_DOWN"}, {MWKEY_CHANNEL_UP, "CHANNEL_UP"}, {MWKEY_CLEAR_FAVORITE_0, "CLEAR_FAVORITE_0"}, {MWKEY_CLEAR_FAVORITE_1, "CLEAR_FAVORITE_1"}, {MWKEY_CLEAR_FAVORITE_2, "CLEAR_FAVORITE_2"}, {MWKEY_CLEAR_FAVORITE_3, "CLEAR_FAVORITE_3"}, {MWKEY_COLORED_KEY_0, "COLORED_KEY_0"}, {MWKEY_COLORED_KEY_1, "COLORED_KEY_1"}, {MWKEY_COLORED_KEY_2, "COLORED_KEY_2"}, {MWKEY_COLORED_KEY_3, "COLORED_KEY_3"}, {MWKEY_COLORED_KEY_4, "COLORED_KEY_4"}, {MWKEY_COLORED_KEY_5, "COLORED_KEY_5"}, {MWKEY_DELETE, "DELETE"}, {MWKEY_DOWN, "DOWN"}, {MWKEY_DIMMER, "DIMMER"}, {MWKEY_DISPLAY_SWAP, "DISPLAY_SWAP"}, {MWKEY_EJECT_TOGGLE, "EJECT_TOGGLE"}, {MWKEY_END, "END"}, {MWKEY_ENTER, "ENTER"}, {MWKEY_ESCAPE, "ESCAPE"}, {MWKEY_F1, "F1"}, {MWKEY_F2, "F2"}, {MWKEY_F3, "F3"}, {MWKEY_F4, "F4"}, {MWKEY_F5, "F5"}, {MWKEY_F6, "F6"}, {MWKEY_F7, "F7"}, {MWKEY_F8, "F8"}, {MWKEY_F9, "F9"}, {MWKEY_F10, "F10"}, {MWKEY_F11, "F11"}, {MWKEY_F12, "F12"}, {MWKEY_FADER_FRONT, "FADER_FRONT"}, {MWKEY_FADER_REAR, "FADER_REAR"}, {MWKEY_FAST_FWD, "FAST_FWD"}, {MWKEY_GO_TO_END, "GO_TO_END"}, {MWKEY_GO_TO_START, "GO_TO_START"}, {MWKEY_GUIDE, "GUIDE"}, {MWKEY_HOME, "HOME"}, {MWKEY_INFO, "INFO"},// {MWKEY_INSERT, "INSERT"}, {MWKEY_LEFT, "LEFT"}, {MWKEY_MUTE, "MUTE"}, {MWKEY_PAGEDOWN, "PAGEDOWN"}, {MWKEY_PAGEUP, "PAGEUP"}, {MWKEY_PAUSE, "PAUSE"}, {MWKEY_PINP_TOGGLE, "PINP_TOGGLE"}, {MWKEY_PLAY, "PLAY"}, {MWKEY_PLAY_SPEED_DOWN, "PLAY_SPEED_DOWN"}, {MWKEY_PLAY_SPEED_RESET, "PLAY_SPEED_RESET"}, {MWKEY_PLAY_SPEED_UP, "PLAY_SPEED_UP"}, {MWKEY_POWER, "POWER"}, {MWKEY_PRINT, "PRINT"}, {MWKEY_RANDOM_TOGGLE, "RANDOM_TOGGLE"}, {MWKEY_RECALL_FAVORITE_0, "RECALL_FAVORITE_0"}, {MWKEY_RECALL_FAVORITE_1, "RECALL_FAVORITE_1"}, {MWKEY_RECALL_FAVORITE_2, "RECALL_FAVORITE_2"}, {MWKEY_RECALL_FAVORITE_3, "RECALL_FAVORITE_3"}, {MWKEY_RECORD, "RECORD"}, {MWKEY_RECORD_SPEED_NEXT, "RECORD_SPEED_NEXT"}, {MWKEY_REWIND, "REWIND"}, {MWKEY_RIGHT, "RIGHT"}, {MWKEY_SCAN_CHANNELS_TOGGLE,"SCAN_CHANNELS_TOGGLE"}, {MWKEY_SCREEN_MODE_NEXT, "SCREEN_MODE_NEXT"},// { MWKEY_SCROLLOCK, "SCROLLOCK"}, {' ', "SPACE"}, {MWKEY_SPLIT_SCREEN_TOGGLE, "SPLIT_SCREEN_TOGGLE"}, {MWKEY_STOP, "STOP"}, {MWKEY_STORE_FAVORITE_0, "STORE_FAVORITE_0"}, {MWKEY_STORE_FAVORITE_1, "STORE_FAVORITE_1"}, {MWKEY_STORE_FAVORITE_2, "STORE_FAVORITE_2"}, {MWKEY_STORE_FAVORITE_3, "STORE_FAVORITE_3"}, {MWKEY_SUBTITLE, "SUBTITLE"}, {MWKEY_SURROUND_MODE_NEXT, "SURROUND_MODE_NEXT"}, {MWKEY_TAB, "TAB"}, {MWKEY_TELETEXT, "TELETEXT"}, {MWKEY_TRACK_NEXT, "TRACK_NEXT"}, {MWKEY_TRACK_PREV, "TRACK_PREV"}, {MWKEY_UP, "UP"}, {MWKEY_VIDEO_MODE_NEXT, "VIDEO_MODE_NEXT"}, {MWKEY_VOLUME_DOWN, "VOLUME_DOWN"}, {MWKEY_VOLUME_UP, "VOLUME_UP"}, {MWKEY_WINK, "WINK"}, {0, NULL}};static intremoteControlHandler(mwlirc_keystroke * event, MWKEY * kbuf, MWSCANCODE * pscancode){ MWKEY ch; unsigned len = strlen(event->name); if (len == 1) { /* Should be a digit. */ ch = event->name[0]; /*printf("LIRC_Read() - Got key '%c', char '%c', code 0x%x\n", ch, ch, ch);*/ } else { /* FIXME: This is a linear search, should use a binary search instead (faster). */ const remoteKey_t *k = remoteKeys; while (0 != strcmp(k->name, event->name)) { k++; if (NULL == k->name) { printf("LIRC_Read() - Unrecognized key '%s'\n", event->name); return 0; /* Unrecognized - treat as 'No data' */ } } ch = k->code; /*printf("LIRC_Read() - Got key '%s', no char, code 0x%x\n", k->name, ch);*/ } *kbuf = ch; *pscancode = ch; /* send keypress, queue keyrelease. */ LIRC_pending_keyrelease_ch = ch; LIRC_pending_keyrelease_scan = ch; return 1;}/* ************************************************************************ *//* * End of IR remote driver * *//* ************************************************************************ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -