diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/gui/usb_screen.c | 41 | ||||
-rw-r--r-- | apps/lang/english.lang | 17 | ||||
-rw-r--r-- | apps/menus/settings_menu.c | 2 | ||||
-rw-r--r-- | apps/misc.c | 12 | ||||
-rw-r--r-- | apps/misc.h | 7 | ||||
-rw-r--r-- | apps/screens.c | 12 | ||||
-rw-r--r-- | apps/settings.h | 1 | ||||
-rw-r--r-- | apps/settings_list.c | 2 | ||||
-rw-r--r-- | apps/usb_keymaps.c | 62 |
9 files changed, 101 insertions, 55 deletions
diff --git a/apps/gui/usb_screen.c b/apps/gui/usb_screen.c index f2c25554df..50188274d2 100644 --- a/apps/gui/usb_screen.c +++ b/apps/gui/usb_screen.c | |||
@@ -49,6 +49,7 @@ | |||
49 | 49 | ||
50 | #ifdef USB_ENABLE_HID | 50 | #ifdef USB_ENABLE_HID |
51 | int usb_keypad_mode; | 51 | int usb_keypad_mode; |
52 | static bool usb_hid; | ||
52 | #endif | 53 | #endif |
53 | 54 | ||
54 | #ifndef SIMULATOR | 55 | #ifndef SIMULATOR |
@@ -64,7 +65,7 @@ static int handle_usb_events(void) | |||
64 | { | 65 | { |
65 | int button; | 66 | int button; |
66 | #ifdef USB_ENABLE_HID | 67 | #ifdef USB_ENABLE_HID |
67 | if (usb_core_driver_enabled(USB_DRIVER_HID)) | 68 | if (usb_hid) |
68 | { | 69 | { |
69 | button = get_hid_usb_action(); | 70 | button = get_hid_usb_action(); |
70 | 71 | ||
@@ -157,20 +158,24 @@ static void usb_screen_fix_viewports(struct screen *screen, | |||
157 | logo->height = logo_height; | 158 | logo->height = logo_height; |
158 | 159 | ||
159 | #ifdef USB_ENABLE_HID | 160 | #ifdef USB_ENABLE_HID |
160 | struct viewport *title = &usb_screen_vps->title; | 161 | if (usb_hid) |
161 | int char_height, nb_lines; | 162 | { |
163 | struct viewport *title = &usb_screen_vps->title; | ||
164 | int char_height, nb_lines; | ||
162 | 165 | ||
163 | /* nb_lines only returns the number of fully visible lines, small screens | 166 | /* nb_lines only returns the number of fully visible lines, small |
164 | or really large fonts could cause problems with the calculation below. | 167 | * screens or really large fonts could cause problems with the |
165 | */ | 168 | * calculation below. |
166 | nb_lines = viewport_get_nb_lines(parent); | 169 | */ |
167 | if (nb_lines == 0) | 170 | nb_lines = viewport_get_nb_lines(parent); |
168 | nb_lines++; | 171 | if (nb_lines == 0) |
172 | nb_lines++; | ||
169 | 173 | ||
170 | char_height = parent->height/nb_lines; | 174 | char_height = parent->height/nb_lines; |
171 | 175 | ||
172 | *title = *parent; | 176 | *title = *parent; |
173 | title->y = logo->y + logo->height + char_height; | 177 | title->y = logo->y + logo->height + char_height; |
178 | } | ||
174 | #endif | 179 | #endif |
175 | } | 180 | } |
176 | #endif | 181 | #endif |
@@ -209,9 +214,12 @@ static void usb_screens_draw(struct usb_screen_vps_t *usb_screen_vps_ar) | |||
209 | screen->transparent_bitmap(usblogo, 0, 0, logo->width, | 214 | screen->transparent_bitmap(usblogo, 0, 0, logo->width, |
210 | logo->height); | 215 | logo->height); |
211 | #ifdef USB_ENABLE_HID | 216 | #ifdef USB_ENABLE_HID |
212 | screen->set_viewport(&usb_screen_vps->title); | 217 | if (usb_hid) |
213 | usb_screen_vps->title.flags |= VP_FLAG_ALIGN_CENTER; | 218 | { |
214 | screen->puts_scroll(0, 0, str(keypad_mode_name_get())); | 219 | screen->set_viewport(&usb_screen_vps->title); |
220 | usb_screen_vps->title.flags |= VP_FLAG_ALIGN_CENTER; | ||
221 | screen->puts_scroll(0, 0, str(keypad_mode_name_get())); | ||
222 | } | ||
215 | #endif /* USB_ENABLE_HID */ | 223 | #endif /* USB_ENABLE_HID */ |
216 | } | 224 | } |
217 | screen->set_viewport(parent); | 225 | screen->set_viewport(parent); |
@@ -252,6 +260,7 @@ void gui_usb_screen_run(void) | |||
252 | #endif | 260 | #endif |
253 | 261 | ||
254 | #ifdef USB_ENABLE_HID | 262 | #ifdef USB_ENABLE_HID |
263 | usb_hid = global_settings.usb_hid; | ||
255 | usb_keypad_mode = global_settings.usb_keypad_mode; | 264 | usb_keypad_mode = global_settings.usb_keypad_mode; |
256 | #endif | 265 | #endif |
257 | 266 | ||
@@ -283,7 +292,7 @@ void gui_usb_screen_run(void) | |||
283 | const struct viewport* vp = NULL; | 292 | const struct viewport* vp = NULL; |
284 | 293 | ||
285 | #if defined(HAVE_LCD_BITMAP) && defined(USB_ENABLE_HID) | 294 | #if defined(HAVE_LCD_BITMAP) && defined(USB_ENABLE_HID) |
286 | vp = &usb_screen_vps_ar[i].title; | 295 | vp = usb_hid ? &usb_screen_vps_ar[i].title : NULL; |
287 | #elif !defined(HAVE_LCD_BITMAP) | 296 | #elif !defined(HAVE_LCD_BITMAP) |
288 | vp = &usb_screen_vps_ar[i].parent; | 297 | vp = &usb_screen_vps_ar[i].parent; |
289 | #endif | 298 | #endif |
diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 16fc022af6..d7dba2f3c0 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang | |||
@@ -13165,3 +13165,20 @@ | |||
13165 | remote: "Remote Custom Statusbar" | 13165 | remote: "Remote Custom Statusbar" |
13166 | </voice> | 13166 | </voice> |
13167 | </phrase> | 13167 | </phrase> |
13168 | <phrase> | ||
13169 | id: LANG_USB_HID | ||
13170 | desc: in settings_menu | ||
13171 | user: core | ||
13172 | <source> | ||
13173 | *: none | ||
13174 | usb_hid: "USB HID" | ||
13175 | </source> | ||
13176 | <dest> | ||
13177 | *: none | ||
13178 | usb_hid: "USB HID" | ||
13179 | </dest> | ||
13180 | <voice> | ||
13181 | *: none | ||
13182 | usb_hid: "USB Human Interface Device" | ||
13183 | </voice> | ||
13184 | </phrase> | ||
diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c index 71a6089e68..c11bf0eb3d 100644 --- a/apps/menus/settings_menu.c +++ b/apps/menus/settings_menu.c | |||
@@ -253,6 +253,7 @@ MENUITEM_SETTING(accessory_supply, &global_settings.accessory_supply, NULL); | |||
253 | #endif | 253 | #endif |
254 | MENUITEM_SETTING(start_screen, &global_settings.start_in_screen, NULL); | 254 | MENUITEM_SETTING(start_screen, &global_settings.start_in_screen, NULL); |
255 | #ifdef USB_ENABLE_HID | 255 | #ifdef USB_ENABLE_HID |
256 | MENUITEM_SETTING(usb_hid, &global_settings.usb_hid, NULL); | ||
256 | MENUITEM_SETTING(usb_keypad_mode, &global_settings.usb_keypad_mode, NULL); | 257 | MENUITEM_SETTING(usb_keypad_mode, &global_settings.usb_keypad_mode, NULL); |
257 | #endif | 258 | #endif |
258 | 259 | ||
@@ -304,6 +305,7 @@ MAKE_MENU(system_menu, ID2P(LANG_SYSTEM), | |||
304 | &touchpad_sensitivity, | 305 | &touchpad_sensitivity, |
305 | #endif | 306 | #endif |
306 | #ifdef USB_ENABLE_HID | 307 | #ifdef USB_ENABLE_HID |
308 | &usb_hid, | ||
307 | &usb_keypad_mode, | 309 | &usb_keypad_mode, |
308 | #endif | 310 | #endif |
309 | ); | 311 | ); |
diff --git a/apps/misc.c b/apps/misc.c index 47ebf58080..5af57feb11 100644 --- a/apps/misc.c +++ b/apps/misc.c | |||
@@ -1047,4 +1047,16 @@ err: | |||
1047 | va_end(ap); | 1047 | va_end(ap); |
1048 | return 0; | 1048 | return 0; |
1049 | } | 1049 | } |
1050 | |||
1051 | /* only used in USB HID and set_time screen */ | ||
1052 | #if defined(USB_ENABLE_HID) || (CONFIG_RTC != 0) | ||
1053 | int clamp_value_wrap(int value, int max, int min) | ||
1054 | { | ||
1055 | if (value > max) | ||
1056 | return min; | ||
1057 | if (value < min) | ||
1058 | return max; | ||
1059 | return value; | ||
1060 | } | ||
1061 | #endif | ||
1050 | #endif | 1062 | #endif |
diff --git a/apps/misc.h b/apps/misc.h index a8ed6029a3..857d9ab4da 100644 --- a/apps/misc.h +++ b/apps/misc.h | |||
@@ -92,6 +92,7 @@ bool dir_exists(const char *path); | |||
92 | */ | 92 | */ |
93 | char *strip_extension(char* buffer, int buffer_size, const char *filename); | 93 | char *strip_extension(char* buffer, int buffer_size, const char *filename); |
94 | 94 | ||
95 | #ifdef HAVE_LCD_BITMAP | ||
95 | /* A simplified scanf */ | 96 | /* A simplified scanf */ |
96 | /* | 97 | /* |
97 | * Checks whether the value at position 'position' was really read | 98 | * Checks whether the value at position 'position' was really read |
@@ -103,4 +104,10 @@ char *strip_extension(char* buffer, int buffer_size, const char *filename); | |||
103 | const char* parse_list(const char *fmt, uint32_t *set_vals, | 104 | const char* parse_list(const char *fmt, uint32_t *set_vals, |
104 | const char sep, const char* str, ...); | 105 | const char sep, const char* str, ...); |
105 | 106 | ||
107 | /* only used in USB HID and set_time screen */ | ||
108 | #if defined(USB_ENABLE_HID) || (CONFIG_RTC != 0) | ||
109 | int clamp_value_wrap(int value, int max, int min); | ||
110 | #endif | ||
111 | #endif | ||
112 | |||
106 | #endif /* MISC_H */ | 113 | #endif /* MISC_H */ |
diff --git a/apps/screens.c b/apps/screens.c index ab721a8654..5f84830c00 100644 --- a/apps/screens.c +++ b/apps/screens.c | |||
@@ -60,18 +60,6 @@ | |||
60 | #include "dsp.h" | 60 | #include "dsp.h" |
61 | #endif | 61 | #endif |
62 | 62 | ||
63 | /* only used in set_time screen */ | ||
64 | #if defined(HAVE_LCD_BITMAP) && (CONFIG_RTC != 0) | ||
65 | static int clamp_value_wrap(int value, int max, int min) | ||
66 | { | ||
67 | if (value > max) | ||
68 | return min; | ||
69 | if (value < min) | ||
70 | return max; | ||
71 | return value; | ||
72 | } | ||
73 | #endif | ||
74 | |||
75 | #if (CONFIG_STORAGE & STORAGE_MMC) | 63 | #if (CONFIG_STORAGE & STORAGE_MMC) |
76 | int mmc_remove_request(void) | 64 | int mmc_remove_request(void) |
77 | { | 65 | { |
diff --git a/apps/settings.h b/apps/settings.h index d1179ed5bc..c9ff3f9dd3 100644 --- a/apps/settings.h +++ b/apps/settings.h | |||
@@ -781,6 +781,7 @@ struct user_settings | |||
781 | /* new stuff to be added at the end */ | 781 | /* new stuff to be added at the end */ |
782 | 782 | ||
783 | #ifdef USB_ENABLE_HID | 783 | #ifdef USB_ENABLE_HID |
784 | bool usb_hid; | ||
784 | int usb_keypad_mode; | 785 | int usb_keypad_mode; |
785 | #endif | 786 | #endif |
786 | 787 | ||
diff --git a/apps/settings_list.c b/apps/settings_list.c index 5bfce331cd..5a0e05d7d2 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include "backlight.h" | 31 | #include "backlight.h" |
32 | #include "settings.h" | 32 | #include "settings.h" |
33 | #include "settings_list.h" | 33 | #include "settings_list.h" |
34 | #include "usb.h" | ||
34 | #include "sound.h" | 35 | #include "sound.h" |
35 | #include "dsp.h" | 36 | #include "dsp.h" |
36 | #include "mpeg.h" | 37 | #include "mpeg.h" |
@@ -1623,6 +1624,7 @@ const struct settings_list settings[] = { | |||
1623 | #endif | 1624 | #endif |
1624 | 1625 | ||
1625 | #ifdef USB_ENABLE_HID | 1626 | #ifdef USB_ENABLE_HID |
1627 | OFFON_SETTING(0, usb_hid, LANG_USB_HID, true, "usb hid", usb_set_hid), | ||
1626 | CHOICE_SETTING(0, usb_keypad_mode, LANG_USB_KEYPAD_MODE, 0, | 1628 | CHOICE_SETTING(0, usb_keypad_mode, LANG_USB_KEYPAD_MODE, 0, |
1627 | "usb keypad mode", "multimedia,presentation,browser" | 1629 | "usb keypad mode", "multimedia,presentation,browser" |
1628 | #ifdef HAVE_USB_HID_MOUSE | 1630 | #ifdef HAVE_USB_HID_MOUSE |
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; |