summaryrefslogtreecommitdiff
path: root/apps/usb_keymaps.c
diff options
context:
space:
mode:
authorTomer Shalev <shalev.tomer@gmail.com>2009-10-17 05:39:54 +0000
committerTomer Shalev <shalev.tomer@gmail.com>2009-10-17 05:39:54 +0000
commit4f3d7b5bcb0b025332e128c3856aa9d4cce91898 (patch)
treeac2f783e9585c476fbaa9dfaf3a7a34e826f7ccc /apps/usb_keymaps.c
parent6d4d44caf69e06ea51937da9c74e78af0ac99a62 (diff)
downloadrockbox-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.c117
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
45typedef struct 45typedef 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
52static const hid_key_mapping_t hid_key_mapping_multimedia = { 53static 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
74static const hid_key_mapping_t hid_key_mapping_presentation = { 69static 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
106static const hid_key_mapping_t hid_key_mapping_browser = { 90static 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
141static const hid_key_mapping_t hid_key_mapping_mouse = { 113static 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
202int get_hid_usb_action(void) 175int 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)