diff options
Diffstat (limited to 'apps/usb_keymaps.c')
-rw-r--r-- | apps/usb_keymaps.c | 62 |
1 files changed, 35 insertions, 27 deletions
diff --git a/apps/usb_keymaps.c b/apps/usb_keymaps.c index f787de692f..f04fa54c3d 100644 --- a/apps/usb_keymaps.c +++ b/apps/usb_keymaps.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #ifdef USB_ENABLE_HID | 23 | #ifdef USB_ENABLE_HID |
24 | #include "action.h" | 24 | #include "action.h" |
25 | #include "lang.h" | 25 | #include "lang.h" |
26 | #include "misc.h" | ||
26 | #include "usbstack/usb_hid.h" | 27 | #include "usbstack/usb_hid.h" |
27 | //#define LOGF_ENABLE | 28 | //#define LOGF_ENABLE |
28 | #include "logf.h" | 29 | #include "logf.h" |
@@ -174,40 +175,47 @@ extern int usb_keypad_mode; | |||
174 | 175 | ||
175 | int get_hid_usb_action(void) | 176 | int get_hid_usb_action(void) |
176 | { | 177 | { |
177 | int action; | 178 | int action, step; |
178 | const hid_key_mapping_t *key_mapping = hid_key_mappings[usb_keypad_mode]; | 179 | const hid_key_mapping_t *key_mapping = hid_key_mappings[usb_keypad_mode]; |
179 | 180 | ||
181 | step = -1; | ||
180 | action = get_action(key_mapping->context, HZ/4); | 182 | action = get_action(key_mapping->context, HZ/4); |
181 | /* Skip key mappings in a cyclic way */ | 183 | switch (action) |
182 | if (action == ACTION_USB_HID_MODE_SWITCH_NEXT) | ||
183 | { | ||
184 | /* TODO: Use clamp_value_wrap() */ | ||
185 | usb_keypad_mode = (usb_keypad_mode + 1) % NUM_KEY_MAPPINGS; | ||
186 | } | ||
187 | else if (action == ACTION_USB_HID_MODE_SWITCH_PREV) | ||
188 | { | ||
189 | /* TODO: Use clamp_value_wrap() */ | ||
190 | usb_keypad_mode = (usb_keypad_mode - 1) % NUM_KEY_MAPPINGS; | ||
191 | } | ||
192 | else if (action > ACTION_USB_HID_FIRST && action < ACTION_USB_HID_LAST) | ||
193 | { | 184 | { |
194 | const mapping_t *mapping; | 185 | case ACTION_USB_HID_MODE_SWITCH_NEXT: |
195 | const hid_key_mapping_t *key_mapping = | 186 | step = 1; |
196 | hid_key_mappings[usb_keypad_mode]; | 187 | case ACTION_USB_HID_MODE_SWITCH_PREV: |
197 | 188 | /* Switch key mappings in a cyclic way */ | |
198 | for (mapping = key_mapping->mapping; mapping->action; mapping++) | 189 | usb_keypad_mode = clamp_value_wrap(usb_keypad_mode + step, |
199 | { | 190 | NUM_KEY_MAPPINGS - 1, 0); |
200 | if (action == mapping->action) | 191 | break; |
192 | default: | ||
201 | { | 193 | { |
202 | logf("Action %d", action); | 194 | const mapping_t *mapping; |
203 | usb_hid_send(key_mapping->usage_page, mapping->id); | 195 | const hid_key_mapping_t *key_mapping = |
204 | break; | 196 | hid_key_mappings[usb_keypad_mode]; |
205 | } | 197 | |
206 | } | 198 | if (action <= ACTION_USB_HID_FIRST || |
199 | action >= ACTION_USB_HID_LAST) | ||
200 | { | ||
201 | break; | ||
202 | } | ||
203 | |||
204 | for (mapping = key_mapping->mapping; mapping->action; mapping++) | ||
205 | { | ||
206 | if (action == mapping->action) | ||
207 | { | ||
208 | logf("Action %d", action); | ||
209 | usb_hid_send(key_mapping->usage_page, mapping->id); | ||
210 | break; | ||
211 | } | ||
212 | } | ||
207 | #ifdef DEBUG | 213 | #ifdef DEBUG |
208 | if (!mapping->action) | 214 | if (!mapping->action) |
209 | logf("Action %d not found", action); | 215 | logf("Action %d not found", action); |
210 | #endif | 216 | #endif |
217 | break; | ||
218 | } | ||
211 | } | 219 | } |
212 | 220 | ||
213 | return action; | 221 | return action; |