summaryrefslogtreecommitdiff
path: root/apps/usb_keymaps.c
diff options
context:
space:
mode:
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)