diff options
author | Tomer Shalev <shalev.tomer@gmail.com> | 2009-10-17 05:39:54 +0000 |
---|---|---|
committer | Tomer Shalev <shalev.tomer@gmail.com> | 2009-10-17 05:39:54 +0000 |
commit | 4f3d7b5bcb0b025332e128c3856aa9d4cce91898 (patch) | |
tree | ac2f783e9585c476fbaa9dfaf3a7a34e826f7ccc /apps/usb_keymaps.c | |
parent | 6d4d44caf69e06ea51937da9c74e78af0ac99a62 (diff) | |
download | rockbox-4f3d7b5bcb0b025332e128c3856aa9d4cce91898.tar.gz rockbox-4f3d7b5bcb0b025332e128c3856aa9d4cce91898.zip |
USB HID: Use different context for each mode; Use constant for each action;
Rework keymaps
This commit makes the code neater and more readable. It makes it easier to
modify keymap assignments and new keypad modes.
Some platforms had their keypad mappings reworked.
The manual is updated to reflect all these changes.
H10 remote control mapping dropped.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23219 a1c6a512-1295-4272-9138-f99709370657
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) |