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.c62
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
175int get_hid_usb_action(void) 176int 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;