diff options
Diffstat (limited to 'apps/usb_keymaps.c')
-rw-r--r-- | apps/usb_keymaps.c | 117 |
1 files changed, 44 insertions, 73 deletions
diff --git a/apps/usb_keymaps.c b/apps/usb_keymaps.c index 41387a1005..f787de692f 100644 --- a/apps/usb_keymaps.c +++ b/apps/usb_keymaps.c | |||
@@ -45,94 +45,66 @@ typedef struct | |||
45 | typedef struct | 45 | typedef struct |
46 | { | 46 | { |
47 | int lang_name; | 47 | int lang_name; |
48 | int context; | ||
48 | usage_page_t usage_page; | 49 | usage_page_t usage_page; |
49 | mapping_t mapping[]; | 50 | mapping_t mapping[]; |
50 | } hid_key_mapping_t; | 51 | } hid_key_mapping_t; |
51 | 52 | ||
52 | static const hid_key_mapping_t hid_key_mapping_multimedia = { | 53 | static const hid_key_mapping_t hid_key_mapping_multimedia = { |
53 | LANG_MULTIMEDIA_MODE, | 54 | LANG_MULTIMEDIA_MODE, |
55 | CONTEXT_USB_HID_MODE_MULTIMEDIA, | ||
54 | HID_USAGE_PAGE_CONSUMER, | 56 | HID_USAGE_PAGE_CONSUMER, |
55 | { | 57 | { |
56 | /* Volume up */ | 58 | { ACTION_USB_HID_MULTIMEDIA_VOLUME_UP, HID_CONSUMER_USAGE_VOLUME_INCREMENT }, |
57 | { ACTION_USB_HID_DEC, HID_CONSUMER_USAGE_VOLUME_DECREMENT }, | 59 | { ACTION_USB_HID_MULTIMEDIA_VOLUME_DOWN, HID_CONSUMER_USAGE_VOLUME_DECREMENT }, |
58 | /* Volume down */ | 60 | { ACTION_USB_HID_MULTIMEDIA_VOLUME_MUTE, HID_CONSUMER_USAGE_MUTE }, |
59 | { ACTION_USB_HID_INC, HID_CONSUMER_USAGE_VOLUME_INCREMENT }, | 61 | { ACTION_USB_HID_MULTIMEDIA_PLAYBACK_PLAY_PAUSE, HID_CONSUMER_USAGE_PLAY_PAUSE }, |
60 | /* Volume mute */ | 62 | { ACTION_USB_HID_MULTIMEDIA_PLAYBACK_STOP, HID_CONSUMER_USAGE_STOP }, |
61 | { ACTION_USB_HID_SELECT, HID_CONSUMER_USAGE_MUTE }, | 63 | { ACTION_USB_HID_MULTIMEDIA_PLAYBACK_TRACK_PREV, HID_CONSUMER_USAGE_SCAN_PREVIOUS_TRACK }, |
62 | /* Playback play / pause */ | 64 | { ACTION_USB_HID_MULTIMEDIA_PLAYBACK_TRACK_NEXT, HID_CONSUMER_USAGE_SCAN_NEXT_TRACK }, |
63 | { ACTION_USB_HID_START, HID_CONSUMER_USAGE_PLAY_PAUSE }, | ||
64 | /* Playback stop */ | ||
65 | { ACTION_USB_HID_QUIT, HID_CONSUMER_USAGE_STOP }, | ||
66 | /* Scan previous track */ | ||
67 | { ACTION_USB_HID_LEFT, HID_CONSUMER_USAGE_SCAN_PREVIOUS_TRACK }, | ||
68 | /* Scan next track */ | ||
69 | { ACTION_USB_HID_RIGHT, HID_CONSUMER_USAGE_SCAN_NEXT_TRACK }, | ||
70 | { 0, 0 }, | 65 | { 0, 0 }, |
71 | } | 66 | } |
72 | }; | 67 | }; |
73 | 68 | ||
74 | static const hid_key_mapping_t hid_key_mapping_presentation = { | 69 | static const hid_key_mapping_t hid_key_mapping_presentation = { |
75 | LANG_PRESENTATION_MODE, | 70 | LANG_PRESENTATION_MODE, |
71 | CONTEXT_USB_HID_MODE_PRESENTATION, | ||
76 | HID_USAGE_PAGE_KEYBOARD_KEYPAD, | 72 | HID_USAGE_PAGE_KEYBOARD_KEYPAD, |
77 | { | 73 | { |
78 | /* Slideshow start */ | 74 | { ACTION_USB_HID_PRESENTATION_SLIDESHOW_START, HID_KEYBOARD_F5 }, |
79 | { ACTION_USB_HID_START, HID_KEYBOARD_F5 }, | 75 | { ACTION_USB_HID_PRESENTATION_SLIDESHOW_LEAVE, HID_KEYBOARD_ESCAPE }, |
80 | /* Slideshow leave */ | 76 | { ACTION_USB_HID_PRESENTATION_SLIDE_PREV, HID_KEYBOARD_P }, |
81 | { ACTION_USB_HID_QUIT, HID_KEYBOARD_ESCAPE }, | 77 | { ACTION_USB_HID_PRESENTATION_SLIDE_NEXT, HID_KEYBOARD_N }, |
82 | /* Slide previous */ | 78 | { ACTION_USB_HID_PRESENTATION_SLIDE_FIRST, HID_KEYBOARD_HOME }, |
83 | { ACTION_USB_HID_LEFT, HID_KEYBOARD_P }, | 79 | { ACTION_USB_HID_PRESENTATION_SLIDE_LAST, HID_KEYBOARD_END }, |
84 | /* Slide next */ | 80 | { ACTION_USB_HID_PRESENTATION_SCREEN_BLACK, HID_KEYBOARD_DOT }, |
85 | { ACTION_USB_HID_RIGHT, HID_KEYBOARD_N }, | 81 | { ACTION_USB_HID_PRESENTATION_SCREEN_WHITE, HID_KEYBOARD_COMMA }, |
86 | /* Slide first */ | 82 | { ACTION_USB_HID_PRESENTATION_LINK_PREV, SHIFT(HID_KEYBOARD_TAB) }, |
87 | { ACTION_USB_HID_LEFT_LONG, HID_KEYBOARD_HOME }, | 83 | { ACTION_USB_HID_PRESENTATION_LINK_NEXT, HID_KEYBOARD_TAB }, |
88 | /* Slide last */ | 84 | { ACTION_USB_HID_PRESENTATION_MOUSE_CLICK, HID_KEYBOARD_RETURN }, |
89 | { ACTION_USB_HID_RIGHT_LONG, HID_KEYBOARD_END }, | 85 | { ACTION_USB_HID_PRESENTATION_MOUSE_OVER, SHIFT(HID_KEYBOARD_RETURN) }, |
90 | /* Screen black */ | ||
91 | { ACTION_USB_HID_MENU, HID_KEYBOARD_DOT }, | ||
92 | /* Screen white*/ | ||
93 | { ACTION_USB_HID_MENU_LONG, HID_KEYBOARD_COMMA }, | ||
94 | /* Link previous */ | ||
95 | { ACTION_USB_HID_DEC, SHIFT(HID_KEYBOARD_TAB) }, | ||
96 | /* Link next */ | ||
97 | { ACTION_USB_HID_INC, HID_KEYBOARD_TAB }, | ||
98 | /* Mouse click */ | ||
99 | { ACTION_USB_HID_SELECT, HID_KEYBOARD_RETURN }, | ||
100 | /* Mouse over */ | ||
101 | { ACTION_USB_HID_SELECT_LONG, SHIFT(HID_KEYBOARD_RETURN) }, | ||
102 | { 0, 0 }, | 86 | { 0, 0 }, |
103 | } | 87 | } |
104 | }; | 88 | }; |
105 | 89 | ||
106 | static const hid_key_mapping_t hid_key_mapping_browser = { | 90 | static const hid_key_mapping_t hid_key_mapping_browser = { |
107 | LANG_BROWSER_MODE, | 91 | LANG_BROWSER_MODE, |
92 | CONTEXT_USB_HID_MODE_BROWSER, | ||
108 | HID_USAGE_PAGE_KEYBOARD_KEYPAD, | 93 | HID_USAGE_PAGE_KEYBOARD_KEYPAD, |
109 | { | 94 | { |
110 | /* Scroll up */ | 95 | { ACTION_USB_HID_BROWSER_SCROLL_UP, HID_KEYBOARD_UP_ARROW }, |
111 | { ACTION_USB_HID_DEC, HID_KEYBOARD_UP_ARROW }, | 96 | { ACTION_USB_HID_BROWSER_SCROLL_DOWN, HID_KEYBOARD_DOWN_ARROW }, |
112 | /* Scroll down */ | 97 | { ACTION_USB_HID_BROWSER_SCROLL_UP, HID_KEYBOARD_PAGE_UP }, |
113 | { ACTION_USB_HID_INC, HID_KEYBOARD_DOWN_ARROW }, | 98 | { ACTION_USB_HID_BROWSER_SCROLL_DOWN, HID_KEYBOARD_PAGE_DOWN }, |
114 | /* Scroll page up */ | 99 | { ACTION_USB_HID_BROWSER_ZOOM_IN, CTRL(HID_KEYPAD_PLUS) }, |
115 | { ACTION_USB_HID_START, HID_KEYBOARD_PAGE_UP }, | 100 | { ACTION_USB_HID_BROWSER_ZOOM_OUT, CTRL(HID_KEYPAD_MINUS) }, |
116 | /* Scroll page down */ | 101 | { ACTION_USB_HID_BROWSER_ZOOM_RESET, CTRL(HID_KEYPAD_0_AND_INSERT) }, |
117 | { ACTION_USB_HID_MENU, HID_KEYBOARD_PAGE_DOWN }, | 102 | { ACTION_USB_HID_BROWSER_TAB_PREV, CTRL(HID_KEYBOARD_PAGE_UP) }, |
118 | /* Zoom in */ | 103 | { ACTION_USB_HID_BROWSER_TAB_NEXT, CTRL(HID_KEYBOARD_PAGE_DOWN) }, |
119 | { ACTION_USB_HID_START_LONG, CTRL(HID_KEYPAD_PLUS) }, | 104 | { ACTION_USB_HID_BROWSER_TAB_CLOSE, CTRL(HID_KEYBOARD_W) }, |
120 | /* Zoom out */ | 105 | { ACTION_USB_HID_BROWSER_HISTORY_BACK, ALT(HID_KEYBOARD_LEFT_ARROW) }, |
121 | { ACTION_USB_HID_MENU_LONG, CTRL(HID_KEYPAD_MINUS) }, | 106 | { ACTION_USB_HID_BROWSER_HISTORY_FORWARD, ALT(HID_KEYBOARD_RIGHT_ARROW) }, |
122 | /* Zoom reset */ | 107 | { ACTION_USB_HID_BROWSER_VIEW_FULL_SCREEN, HID_KEYBOARD_F11 }, |
123 | { ACTION_USB_HID_SELECT_LONG, CTRL(HID_KEYPAD_0_AND_INSERT) }, | ||
124 | /* Tab previous */ | ||
125 | { ACTION_USB_HID_LEFT, CTRL(HID_KEYBOARD_PAGE_UP) }, | ||
126 | /* Tab next */ | ||
127 | { ACTION_USB_HID_RIGHT, CTRL(HID_KEYBOARD_PAGE_DOWN) }, | ||
128 | /* Tab close */ | ||
129 | { ACTION_USB_HID_QUIT_LONG, CTRL(HID_KEYBOARD_W) }, | ||
130 | /* History back */ | ||
131 | { ACTION_USB_HID_LEFT_LONG, ALT(HID_KEYBOARD_LEFT_ARROW) }, | ||
132 | /* History forward */ | ||
133 | { ACTION_USB_HID_RIGHT_LONG, ALT(HID_KEYBOARD_RIGHT_ARROW) }, | ||
134 | /* View full-screen */ | ||
135 | { ACTION_USB_HID_SELECT, HID_KEYBOARD_F11 }, | ||
136 | { 0, 0 }, | 108 | { 0, 0 }, |
137 | } | 109 | } |
138 | }; | 110 | }; |
@@ -140,6 +112,7 @@ static const hid_key_mapping_t hid_key_mapping_browser = { | |||
140 | #ifdef HAVE_USB_HID_MOUSE | 112 | #ifdef HAVE_USB_HID_MOUSE |
141 | static const hid_key_mapping_t hid_key_mapping_mouse = { | 113 | static const hid_key_mapping_t hid_key_mapping_mouse = { |
142 | LANG_MOUSE_MODE, | 114 | LANG_MOUSE_MODE, |
115 | CONTEXT_USB_HID_MODE_MOUSE, | ||
143 | HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, | 116 | HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, |
144 | { | 117 | { |
145 | /* Cursor move up */ | 118 | /* Cursor move up */ |
@@ -201,21 +174,19 @@ extern int usb_keypad_mode; | |||
201 | 174 | ||
202 | int get_hid_usb_action(void) | 175 | int get_hid_usb_action(void) |
203 | { | 176 | { |
204 | int action, context = CONTEXT_USB_HID; | 177 | int action; |
205 | 178 | const hid_key_mapping_t *key_mapping = hid_key_mappings[usb_keypad_mode]; | |
206 | #ifdef HAVE_USB_HID_MOUSE | ||
207 | if (usb_keypad_mode == USB_KEYPAD_MODE_MOUSE) | ||
208 | context = CONTEXT_USB_HID_MOUSE; | ||
209 | #endif | ||
210 | 179 | ||
211 | action = get_action(context, HZ/4); | 180 | action = get_action(key_mapping->context, HZ/4); |
212 | /* Skip key mappings in a cyclic way */ | 181 | /* Skip key mappings in a cyclic way */ |
213 | if (action == ACTION_USB_HID_MODE) | 182 | if (action == ACTION_USB_HID_MODE_SWITCH_NEXT) |
214 | { | 183 | { |
184 | /* TODO: Use clamp_value_wrap() */ | ||
215 | usb_keypad_mode = (usb_keypad_mode + 1) % NUM_KEY_MAPPINGS; | 185 | usb_keypad_mode = (usb_keypad_mode + 1) % NUM_KEY_MAPPINGS; |
216 | } | 186 | } |
217 | else if (action == ACTION_USB_HID_MODE_LONG) | 187 | else if (action == ACTION_USB_HID_MODE_SWITCH_PREV) |
218 | { | 188 | { |
189 | /* TODO: Use clamp_value_wrap() */ | ||
219 | usb_keypad_mode = (usb_keypad_mode - 1) % NUM_KEY_MAPPINGS; | 190 | usb_keypad_mode = (usb_keypad_mode - 1) % NUM_KEY_MAPPINGS; |
220 | } | 191 | } |
221 | else if (action > ACTION_USB_HID_FIRST && action < ACTION_USB_HID_LAST) | 192 | else if (action > ACTION_USB_HID_FIRST && action < ACTION_USB_HID_LAST) |