Index: apps/screens.c
===================================================================
--- apps/screens.c (revision 22761)
+++ apps/screens.c (working copy)
@@ -94,73 +94,172 @@
#endif
#ifndef SIMULATOR
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+typedef struct {
+ int action;
+ int id;
+} mapping_t;
+typedef struct
+{
+ int lang_name;
+ usage_page_t usage_page;
+ mapping_t mapping[];
+} hid_key_mapping_t;
+
+#define MODIFIER(modifier, key) ((key) | (modifier << 8))
+
+#define ALT(key) MODIFIER(HID_KEYBOARD_LEFT_ALT, key)
+#define CTRL(key) MODIFIER(HID_KEYBOARD_LEFT_CONTROL, key)
+#define SHIFT(key) MODIFIER(HID_KEYBOARD_LEFT_SHIFT, key)
+
+static const hid_key_mapping_t hid_key_mapping_multimedia = {
+ LANG_MULTIMEDIA,
+ HID_USAGE_PAGE_CONSUMER,
+ {
+ { ACTION_USB_HID_DEC, HID_CONSUMER_USAGE_VOLUME_DECREMENT },
+ { ACTION_USB_HID_INC, HID_CONSUMER_USAGE_VOLUME_INCREMENT },
+ { ACTION_USB_HID_START, HID_CONSUMER_USAGE_PLAY_PAUSE },
+ { ACTION_USB_HID_QUIT, HID_CONSUMER_USAGE_STOP },
+ { ACTION_USB_HID_LEFT, HID_CONSUMER_USAGE_SCAN_PREVIOUS_TRACK },
+ { ACTION_USB_HID_RIGHT, HID_CONSUMER_USAGE_SCAN_NEXT_TRACK },
+ { ACTION_USB_HID_SELECT, HID_CONSUMER_USAGE_MUTE },
+ { 0, 0 },
+ }
+};
+
+static const hid_key_mapping_t hid_key_mapping_presentation = {
+ LANG_PRESENTATION,
+ HID_USAGE_PAGE_KEYBOARD_KEYPAD,
+ {
+ /* Previous link */
+ { ACTION_USB_HID_DEC, SHIFT(HID_KEYBOARD_TAB) },
+ /* Next link */
+ { ACTION_USB_HID_INC, HID_KEYBOARD_TAB },
+ /* Start slideshow */
+ { ACTION_USB_HID_START, HID_KEYBOARD_F5 },
+ /* Leave slideshow */
+ { ACTION_USB_HID_QUIT, HID_KEYBOARD_ESCAPE },
+ /* Previous slide */
+ { ACTION_USB_HID_LEFT, HID_KEYBOARD_P },
+ /* First slide */
+ { ACTION_USB_HID_LEFT_LONG, HID_KEYBOARD_HOME },
+ /* Next slide */
+ { ACTION_USB_HID_RIGHT, HID_KEYBOARD_N },
+ /* Last slide */
+ { ACTION_USB_HID_RIGHT_LONG, HID_KEYBOARD_END },
+ /* Perform a 'Mouse click' */
+ { ACTION_USB_HID_SELECT, HID_KEYBOARD_RETURN },
+ /* Perform a 'Mouse over' */
+ { ACTION_USB_HID_SELECT_LONG, SHIFT(HID_KEYBOARD_RETURN) },
+ /* Black screen */
+ { ACTION_USB_HID_MENU, HID_KEYBOARD_DOT },
+ /* White screen */
+ { ACTION_USB_HID_MENU_LONG, HID_KEYBOARD_COMMA },
+ { 0, 0 },
+ }
+};
+
+static const hid_key_mapping_t hid_key_mapping_browser = {
+ LANG_BROWSER,
+ HID_USAGE_PAGE_KEYBOARD_KEYPAD,
+ {
+ /* Scroll up*/
+ { ACTION_USB_HID_DEC, HID_KEYBOARD_UP_ARROW },
+ /* Scroll down */
+ { ACTION_USB_HID_INC, HID_KEYBOARD_DOWN_ARROW },
+ /* Previous screen */
+ { ACTION_USB_HID_START, HID_KEYBOARD_PAGE_UP },
+ /* Zoom in */
+ { ACTION_USB_HID_START_LONG, CTRL(HID_KEYPAD_PLUS) },
+ /* Close tab */
+ { ACTION_USB_HID_QUIT_LONG, CTRL(HID_KEYBOARD_W) },
+ /* Previous tab */
+ { ACTION_USB_HID_LEFT, CTRL(HID_KEYBOARD_PAGE_UP) },
+ /* Back */
+ { ACTION_USB_HID_LEFT_LONG, ALT(HID_KEYBOARD_LEFT_ARROW) },
+ /* Next tab */
+ { ACTION_USB_HID_RIGHT, CTRL(HID_KEYBOARD_PAGE_DOWN) },
+ /* Forward */
+ { ACTION_USB_HID_RIGHT_LONG, ALT(HID_KEYBOARD_RIGHT_ARROW) },
+ /* Full-Screen */
+ { ACTION_USB_HID_SELECT, HID_KEYBOARD_F11 },
+ /* Zoom reset */
+ { ACTION_USB_HID_SELECT_LONG, CTRL(HID_KEYPAD_0_AND_INSERT) },
+ /* Next screen / */
+ { ACTION_USB_HID_MENU, HID_KEYBOARD_PAGE_DOWN },
+ /* Zoom out */
+ { ACTION_USB_HID_MENU_LONG, CTRL(HID_KEYPAD_MINUS) },
+ { 0, 0 },
+ }
+};
+
+static const hid_key_mapping_t *hid_key_mappings[] =
+{
+ &hid_key_mapping_multimedia,
+ &hid_key_mapping_presentation,
+ &hid_key_mapping_browser,
+};
+
+#define NUM_KEY_MAPPINGS (sizeof(hid_key_mappings) / \
+ sizeof(hid_key_mappings[0]))
+#endif
+
+static int usb_keypad_mode;
+
static int handle_usb_events(void)
{
#if (CONFIG_STORAGE & STORAGE_MMC)
int next_update=0;
#endif /* STORAGE_MMC */
-#ifdef HAVE_TOUCHSCREEN
- enum touchscreen_mode old_mode = touchscreen_get_mode();
-
- /* TODO: Paint buttons on screens OR switch to point mode and use
- * touchscreen as a touchpad to move the host's mouse cursor */
- touchscreen_set_mode(TOUCHSCREEN_BUTTON);
-#endif
-
/* Don't return until we get SYS_USB_DISCONNECTED or SYS_TIMEOUT */
while(1)
{
- int button;
+ int action;
#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
bool hid_enabled = usb_core_driver_enabled(USB_DRIVER_HID);
if (hid_enabled)
{
- int id = HID_CONSUMER_USAGE_UNASSIGNED;
- button = get_action(CONTEXT_USB_HID, HZ/2);
+ action = get_action(CONTEXT_USB_HID, HZ/2);
- switch (button)
+ if (action == ACTION_USB_HID_MODE)
{
- case ACTION_USB_HID_PLAY:
- id = HID_CONSUMER_USAGE_PLAY_PAUSE;
- break;
- case ACTION_USB_HID_STOP:
- id = HID_CONSUMER_USAGE_STOP;
- break;
- case ACTION_USB_HID_SKIPPREV:
- id = HID_CONSUMER_USAGE_SCAN_PREVIOUS_TRACK;
- break;
- case ACTION_USB_HID_SKIPNEXT:
- id = HID_CONSUMER_USAGE_SCAN_NEXT_TRACK;
- break;
- case ACTION_USB_HID_VOLDOWN:
- id = HID_CONSUMER_USAGE_VOLUME_DECREMENT;
- break;
- case ACTION_USB_HID_VOLUP:
- id = HID_CONSUMER_USAGE_VOLUME_INCREMENT;
- break;
- case ACTION_USB_HID_MUTE:
- id = HID_CONSUMER_USAGE_MUTE;
- break;
+ /* Skip to the next key mapping in a cyclic way */
+ usb_keypad_mode = (usb_keypad_mode + 1) % NUM_KEY_MAPPINGS;
+
+ return 0;
}
+ else if (action > ACTION_USB_HID_FIRST && action < ACTION_USB_HID_LAST)
+ {
+ const mapping_t *mapping;
+ const hid_key_mapping_t *key_mapping =
+ hid_key_mappings[usb_keypad_mode];
- if (id != HID_CONSUMER_USAGE_UNASSIGNED)
- usb_hid_send(HID_USAGE_PAGE_CONSUMER, id);
+ for (mapping = key_mapping->mapping; mapping->action; mapping++)
+ {
+ if (action == mapping->action)
+ {
+ usb_hid_send(key_mapping->usage_page, mapping->id);
+ break;
+ }
+ }
+ }
+
}
else
#endif
{
- button = button_get_w_tmo(HZ/2);
+ action = button_get_w_tmo(HZ/2);
/* hid emits the event in get_action */
send_event(GUI_EVENT_ACTIONUPDATE, NULL);
}
- switch(button)
+ switch(action)
{
case SYS_USB_DISCONNECTED:
usb_acknowledge(SYS_USB_DISCONNECTED_ACK);
- goto Exit;
+ return 1;
case SYS_TIMEOUT:
break;
}
@@ -175,10 +274,7 @@
}
#endif /* STORAGE_MMC */
}
-Exit:
-#ifdef HAVE_TOUCHSCREEN
- touchscreen_set_mode(old_mode);
-#endif
+
return 0;
}
#endif
@@ -191,55 +287,97 @@
int i;
int usb_bars = VP_SB_ALLSCREENS; /* force statusbars */
int old_bars = viewportmanager_get_statusbar();
+#if defined HAVE_TOUCHSCREEN
+ enum touchscreen_mode old_mode = touchscreen_get_mode();
- FOR_NB_SCREENS(i)
+ /* TODO: Paint buttons on screens OR switch to point mode and use
+ * touchscreen as a touchpad to move the host's mouse cursor */
+ touchscreen_set_mode(TOUCHSCREEN_BUTTON);
+#endif
+
+#ifndef SIMULATOR
+ usb_acknowledge(SYS_USB_CONNECTED_ACK);
+#endif
+
+ usb_keypad_mode = global_settings.usb_keypad_mode;
+
+ while (1)
{
- screens[i].backdrop_show(BACKDROP_MAIN);
- screens[i].backlight_on();
- screens[i].clear_display();
+ FOR_NB_SCREENS(i)
+ {
+ screens[i].backdrop_show(BACKDROP_MAIN);
+ screens[i].backlight_on();
+ screens[i].clear_display();
+
#ifdef HAVE_REMOTE_LCD
- if (i == SCREEN_REMOTE)
- {
- screens[i].bitmap(remote_usblogo,
- (LCD_REMOTE_WIDTH-BMPWIDTH_remote_usblogo),
- (LCD_REMOTE_HEIGHT-BMPHEIGHT_remote_usblogo)/2,
- BMPWIDTH_remote_usblogo, BMPHEIGHT_remote_usblogo);
- }
- else
+ if (i == SCREEN_REMOTE)
+ {
+ screens[i].bitmap(remote_usblogo,
+ (LCD_REMOTE_WIDTH-BMPWIDTH_remote_usblogo),
+ (LCD_REMOTE_HEIGHT-BMPHEIGHT_remote_usblogo)/2,
+ BMPWIDTH_remote_usblogo, BMPHEIGHT_remote_usblogo);
+ }
+ else
#endif
- {
+ {
#ifdef HAVE_LCD_BITMAP
- screens[i].transparent_bitmap(usblogo,
+ screens[i].transparent_bitmap(usblogo,
(LCD_WIDTH-BMPWIDTH_usblogo),
(LCD_HEIGHT-BMPHEIGHT_usblogo)/2,
- BMPWIDTH_usblogo, BMPHEIGHT_usblogo);
-#else
- screens[i].double_height(false);
- screens[i].puts_scroll(0, 0, "[USB Mode]");
- status_set_param(false);
- status_set_audio(false);
- status_set_usb(true);
+ BMPWIDTH_usblogo, BMPHEIGHT_usblogo);
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+ char msg[16];
+ int y, w, h;
+ const hid_key_mapping_t *key_mapping =
+ hid_key_mappings[usb_keypad_mode];
+
+ screens[i].getstringsize(str(LANG_USB_KEYPAD_MODE), &w, &h);
+
+ y = (LCD_HEIGHT - BMPHEIGHT_usblogo) / 2 + BMPHEIGHT_usblogo + h;
+ screens[i].putsxy((LCD_WIDTH - w) / 2, y, str(LANG_USB_KEYPAD_MODE));
+ y += 2 * h;
+
+ snprintf(msg, 16, "%s", str(key_mapping->lang_name));
+ screens[i].getstringsize(msg, &w, &h);
+ screens[i].putsxy((LCD_WIDTH - w) / 2, y, msg);
+#endif /* HID */
+#else /* HAVE_LCD_BITMAP */
+ screens[i].double_height(false);
+ screens[i].puts_scroll(0, 0, "[USB Mode]");
+ status_set_param(false);
+ status_set_audio(false);
+ status_set_usb(true);
#endif /* HAVE_LCD_BITMAP */
+ }
+ screens[i].update();
+
+ /* force statusbar by ignoring the setting */
+ usb_bars |= VP_SB_IGNORE_SETTING(i);
}
- screens[i].update();
- /* force statusbar by ignoring the setting */
- usb_bars |= VP_SB_IGNORE_SETTING(i);
- }
+ viewportmanager_set_statusbar(usb_bars);
- viewportmanager_set_statusbar(usb_bars);
-
#ifdef SIMULATOR
- while (1)
- {
if (button_get_w_tmo(HZ/2))
break;
+
send_event(GUI_EVENT_ACTIONUPDATE, NULL);
- }
#else
- usb_acknowledge(SYS_USB_CONNECTED_ACK);
- while (handle_usb_events());
+ if (handle_usb_events())
+ break;
#endif /* SIMULATOR */
+ }
+
+ if (global_settings.usb_keypad_mode != usb_keypad_mode)
+ {
+ global_settings.usb_keypad_mode = usb_keypad_mode;
+ settings_save();
+ }
+
+#ifdef HAVE_TOUCHSCREEN
+ touchscreen_set_mode(old_mode);
+#endif
+
#ifdef HAVE_LCD_CHARCELLS
status_set_usb(false);
#endif /* HAVE_LCD_CHARCELLS */
@@ -249,7 +387,7 @@
}
viewportmanager_set_statusbar(old_bars);
send_event(GUI_EVENT_REFRESH, NULL);
-
+
#endif /* USB_NONE */
}
Index: apps/action.h
===================================================================
--- apps/action.h (revision 22761)
+++ apps/action.h (working copy)
@@ -241,14 +241,24 @@
#endif
/* USB HID codes */
- ACTION_USB_HID_PLAY,
- ACTION_USB_HID_STOP,
- ACTION_USB_HID_SKIPPREV,
- ACTION_USB_HID_SKIPNEXT,
- ACTION_USB_HID_VOLDOWN,
- ACTION_USB_HID_VOLUP,
- ACTION_USB_HID_MUTE,
+ ACTION_USB_HID_FIRST, /* Place holder */
+ ACTION_USB_HID_DEC,
+ ACTION_USB_HID_INC,
+ ACTION_USB_HID_START,
+ ACTION_USB_HID_START_LONG,
+ ACTION_USB_HID_QUIT,
+ ACTION_USB_HID_QUIT_LONG,
+ ACTION_USB_HID_LEFT,
+ ACTION_USB_HID_LEFT_LONG,
+ ACTION_USB_HID_RIGHT,
+ ACTION_USB_HID_RIGHT_LONG,
+ ACTION_USB_HID_SELECT,
+ ACTION_USB_HID_SELECT_LONG,
ACTION_USB_HID_MENU,
+ ACTION_USB_HID_MENU_LONG,
+ ACTION_USB_HID_MODE,
+ ACTION_USB_HID_MODE_LONG,
+ ACTION_USB_HID_LAST, /* Place holder */
LAST_ACTION_PLACEHOLDER, /* custom actions should be this + something */
};
Index: apps/lang/english.lang
===================================================================
--- apps/lang/english.lang (revision 22761)
+++ apps/lang/english.lang (working copy)
@@ -12654,6 +12654,62 @@
+ id: LANG_USB_KEYPAD_MODE
+ desc: in settings_menu
+ user: core
+
+ *: "USB Keypad Mode"
+
+
+ *: "USB Keypad Mode"
+
+
+ *: "USB Keypad Mode"
+
+
+
+ id: LANG_MULTIMEDIA
+ desc: in settings_menu
+ user: core
+
+ *: "Multimedia"
+
+
+ *: "Multimedia"
+
+
+ *: "Multimedia"
+
+
+
+ id: LANG_PRESENTATION
+ desc: in settings_menu
+ user: core
+
+ *: "Presentation"
+
+
+ *: "Presentation"
+
+
+ *: "Presentation"
+
+
+
+ id: LANG_BROWSER
+ desc: in settings_menu
+ user: core
+
+ *: "Browser"
+
+
+ *: "Browser"
+
+
+ *: "Browser"
+
+
+
id: LANG_SKIN_RAM_USAGE
desc: how much RAM the skins are using
user: core
Index: apps/settings.h
===================================================================
--- apps/settings.h (revision 22761)
+++ apps/settings.h (working copy)
@@ -768,6 +768,10 @@
/* If values are just added to the end, no need to bump plugin API
version. */
/* new stuff to be added at the end */
+
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+ int usb_keypad_mode;
+#endif
#ifdef HAVE_LCD_BITMAP
unsigned char ui_vp_config[64]; /* viewport string for the lists */
Index: apps/menus/settings_menu.c
===================================================================
--- apps/menus/settings_menu.c (revision 22761)
+++ apps/menus/settings_menu.c (working copy)
@@ -252,6 +252,9 @@
MENUITEM_SETTING(accessory_supply, &global_settings.accessory_supply, NULL);
#endif
MENUITEM_SETTING(start_screen, &global_settings.start_in_screen, NULL);
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+MENUITEM_SETTING(usb_keypad_mode, &global_settings.usb_keypad_mode, NULL);
+#endif
#ifdef HAVE_BUTTON_LIGHT
MENUITEM_SETTING(buttonlight_timeout, &global_settings.buttonlight_timeout, NULL);
@@ -300,6 +303,9 @@
#ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
&touchpad_sensitivity,
#endif
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+ &usb_keypad_mode,
+#endif
);
/* SYSTEM MENU */
Index: apps/settings_list.c
===================================================================
--- apps/settings_list.c (revision 22761)
+++ apps/settings_list.c (working copy)
@@ -1566,6 +1566,13 @@
#endif
#endif
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+ CHOICE_SETTING(0, usb_keypad_mode, LANG_USB_KEYPAD_MODE, 0,
+ "usb keypad mode", "multimedia,presentation,browser",
+ NULL, 3, ID2P(LANG_MULTIMEDIA), ID2P(LANG_PRESENTATION),
+ ID2P(LANG_BROWSER)),
+#endif
+
/* Customizable list */
#ifdef HAVE_LCD_BITMAP
VIEWPORT_SETTING(ui_vp_config, "ui viewport"),
Index: apps/keymaps/keymap-ondavx747.c
===================================================================
--- apps/keymaps/keymap-ondavx747.c (revision 22761)
+++ apps/keymaps/keymap-ondavx747.c (working copy)
@@ -169,12 +169,14 @@
#ifdef HAVE_USBSTACK
static const struct button_mapping button_context_usb_hid[] = {
- { ACTION_USB_HID_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_MUTE, BUTTON_POWER, BUTTON_NONE },
- { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOL_UP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_QUIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_SELECT },
+ { ACTION_USB_HID_SELECT, BUTTON_POWER|BUTTON_REL, BUTTON_SELECT },
+ { ACTION_USB_HID_MENU, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
+ { ACTION_USB_HID_MODE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
LAST_ITEM_IN_LIST
}; /* button_context_usb_hid */
Index: apps/keymaps/keymap-c100.c
===================================================================
--- apps/keymaps/keymap-c100.c (revision 22761)
+++ apps/keymaps/keymap-c100.c (working copy)
@@ -234,12 +234,17 @@
#ifdef HAVE_USBSTACK
static const struct button_mapping button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_UP, BUTTON_NONE },
- { ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
- { ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
- { ACTION_USB_HID_MUTE, BUTTON_VOLDOWN, BUTTON_NONE },
- { ACTION_USB_HID_MENU, BUTTON_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOLUP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOLDOWN, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_START, BUTTON_UP, BUTTON_NONE },
+ { ACTION_USB_HID_QUIT, BUTTON_POWER, BUTTON_NONE },
+ { ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
+ { ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
+ { ACTION_USB_HID_SELECT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
+ { ACTION_USB_HID_MENU, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
+ { ACTION_USB_HID_MODE, BUTTON_DOWN|BUTTON_REL, BUTTON_DOWN },
LAST_ITEM_IN_LIST
}; /* button_context_usb_hid */
Index: apps/keymaps/keymap-gigabeat-s.c
===================================================================
--- apps/keymaps/keymap-gigabeat-s.c (revision 22761)
+++ apps/keymaps/keymap-gigabeat-s.c (working copy)
@@ -470,35 +470,40 @@
#ifdef HAVE_USBSTACK
static const struct button_mapping button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_PLAY, BUTTON_NONE },
- { ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
- { ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE },
- { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOL_UP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_START, BUTTON_PLAY|BUTTON_REL, BUTTON_START },
+ { ACTION_USB_HID_START_LONG, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_START },
+ { ACTION_USB_HID_QUIT, BUTTON_POWER|BUTTON_REL, BUTTON_QUIT },
+ { ACTION_USB_HID_QUIT_LONG, BUTTON_POWER|BUTTON_REPEAT, BUTTON_QUIT },
+ { ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
+ { ACTION_USB_HID_LEFT_LONG, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
+ { ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
+ { ACTION_USB_HID_RIGHT_LONG, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
+ { ACTION_USB_HID_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
+ { ACTION_USB_HID_SELECT_LONG, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
+ { ACTION_USB_HID_MENU, BUTTON_DOWN|BUTTON_REL, BUTTON_DOWN },
+ { ACTION_USB_HID_MENU_LONG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
+ { ACTION_USB_HID_MODE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
+ { ACTION_USB_HID_MODE_LONG, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
LAST_ITEM_IN_LIST
}; /* button_context_usb_hid */
static const struct button_mapping remote_button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_RC_PLAY, BUTTON_NONE },
- { ACTION_USB_HID_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPPREV, BUTTON_RC_REW, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_RC_FF, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_MUTE, BUTTON_RC_DSP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_MENU, BUTTON_RC_DSP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_RC_VOL_UP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_START, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
+ { ACTION_USB_HID_QUIT, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
+ { ACTION_USB_HID_LEFT, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW },
+ { ACTION_USB_HID_RIGHT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF},
+ { ACTION_USB_HID_SELECT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_RC_FF },
+ { ACTION_USB_HID_MENU, BUTTON_RC_DSP|BUTTON_REPEAT, BUTTON_RC_DSP },
+ { ACTION_USB_HID_MODE, BUTTON_RC_DSP|BUTTON_REL, BUTTON_RC_DSP },
LAST_ITEM_IN_LIST
}; /* remote_button_context_usb_hid */
Index: apps/keymaps/keymap-c200.c
===================================================================
--- apps/keymaps/keymap-c200.c (revision 22761)
+++ apps/keymaps/keymap-c200.c (working copy)
@@ -266,16 +266,20 @@
#ifdef HAVE_USBSTACK
static const struct button_mapping button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_UP|BUTTON_REL, BUTTON_UP },
- { ACTION_USB_HID_STOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
- { ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_MUTE, BUTTON_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_MENU, BUTTON_POWER, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOL_UP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_START, BUTTON_UP|BUTTON_REL, BUTTON_UP },
+ { ACTION_USB_HID_QUIT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
+ { ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
+ { ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
+ { ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
+ { ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
+ { ACTION_USB_HID_SELECT, BUTTON_DOWN|BUTTON_REL, BUTTON_SELECT },
+ { ACTION_USB_HID_SELECT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_SELECT },
+ { ACTION_USB_HID_MENU, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER },
+ { ACTION_USB_HID_MODE, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
LAST_ITEM_IN_LIST
}; /* button_context_usb_hid */
Index: apps/keymaps/keymap-e200.c
===================================================================
--- apps/keymaps/keymap-e200.c (revision 22761)
+++ apps/keymaps/keymap-e200.c (working copy)
@@ -277,16 +277,24 @@
#ifdef HAVE_USBSTACK
static const struct button_mapping button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_UP, BUTTON_NONE },
- { ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
- { ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_SCROLL_FWD, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_SCROLL_BACK, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE },
- { ACTION_USB_HID_MENU, BUTTON_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_SCROLL_FWD|BUTTON_REL, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_SCROLL_BACK|BUTTON_REL, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_START, BUTTON_UP|BUTTON_REL, BUTTON_UP },
+ { ACTION_USB_HID_START_LONG, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
+ { ACTION_USB_HID_QUIT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
+ { ACTION_USB_HID_QUIT_LONG, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER },
+ { ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
+ { ACTION_USB_HID_LEFT_LONG, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
+ { ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
+ { ACTION_USB_HID_RIGHT_LONG, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
+ { ACTION_USB_HID_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
+ { ACTION_USB_HID_SELECT_LONG, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
+ { ACTION_USB_HID_MENU, BUTTON_DOWN|BUTTON_REL, BUTTON_DOWN },
+ { ACTION_USB_HID_MENU_LONG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
+ { ACTION_USB_HID_MODE, BUTTON_REC|BUTTON_REL, BUTTON_REC },
+ { ACTION_USB_HID_MODE_LONG, BUTTON_REC|BUTTON_REPEAT, BUTTON_REC },
LAST_ITEM_IN_LIST
}; /* button_context_usb_hid */
Index: apps/keymaps/keymap-sa9200.c
===================================================================
--- apps/keymaps/keymap-sa9200.c (revision 22761)
+++ apps/keymaps/keymap-sa9200.c (working copy)
@@ -278,26 +278,29 @@
#ifdef HAVE_USBSTACK
static const struct button_mapping button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_PLAY, BUTTON_NONE },
- { ACTION_USB_HID_STOP, BUTTON_PREV, BUTTON_NONE },
- { ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_UP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOL_UP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_START, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
+ { ACTION_USB_HID_START_LONG, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
+ { ACTION_USB_HID_QUIT, BUTTON_PREV|BUTTON_REL, BUTTON_PREV },
+ { ACTION_USB_HID_QUIT_LONG, BUTTON_PREV|BUTTON_REPEAT, BUTTON_PREV },
+ { ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
+ { ACTION_USB_HID_LEFT_LONG, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
+ { ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
+ { ACTION_USB_HID_RIGHT_LONG, BUTTON_RIGHT|BUTTON_REPEAT BUTTON_RIGHT },
+ { ACTION_USB_HID_SELECT, BUTTON_NEXT|BUTTON_REL, BUTTON_SELECT },
+ { ACTION_USB_HID_SELECT_LONG, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_SELECT },
+ { ACTION_USB_HID_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
+ { ACTION_USB_HID_MENU_LONG, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
+ { ACTION_USB_HID_MODE, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
+ { ACTION_USB_HID_MODE_LONG, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER },
- { ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
-
- { ACTION_USB_HID_VOLUP, BUTTON_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
-
- { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
-
- { ACTION_USB_HID_MUTE, BUTTON_NEXT, BUTTON_NONE },
- { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE },
-
LAST_ITEM_IN_LIST
}; /* button_context_usb_hid */
#endif
Index: apps/keymaps/keymap-touchscreen.c
===================================================================
--- apps/keymaps/keymap-touchscreen.c (revision 22761)
+++ apps/keymaps/keymap-touchscreen.c (working copy)
@@ -253,11 +253,24 @@
#ifdef HAVE_USBSTACK
static const struct button_mapping button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_TOPRIGHT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPPREV, BUTTON_MIDLEFT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_MIDRIGHT, BUTTON_NONE },
- { ACTION_USB_HID_MUTE, BUTTON_CENTER, BUTTON_NONE },
- { ACTION_USB_HID_MENU, BUTTON_TOPLEFT, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_BOTTOMRIGHT|BUTTON_REL, BUTTON_BOTTOMRIGHT },
+ { ACTION_USB_HID_INC, BUTTON_BOTTOMRIGHT|BUTTON_REPEAT, BUTTON_BOTTOMRIGHT },
+ { ACTION_USB_HID_DEC, BUTTON_BOTTOMMIDDLE|BUTTON_REL, BUTTON_BOTTOMMIDDLE },
+ { ACTION_USB_HID_DEC, BUTTON_BOTTOMMIDDLE|BUTTON_REPEAT, BUTTON_BOTTOMMIDDLE },
+ { ACTION_USB_HID_START, BUTTON_TOPMIDDLE|BUTTON_REL, BUTTON_TOPMIDDLE },
+ { ACTION_USB_HID_START_LONG, BUTTON_TOPMIDDLE|BUTTON_REPEAT, BUTTON_TOPMIDDLE },
+ { ACTION_USB_HID_QUIT, BUTTON_BOTTOMLEFT|BUTTON_REL, BUTTON_BOTTOMLEFT },
+ { ACTION_USB_HID_QUIT_LONG, BUTTON_BOTTOMLEFT|BUTTON_REPEAT, BUTTON_BOTTOMLEFT },
+ { ACTION_USB_HID_LEFT, BUTTON_MIDLEFT|BUTTON_REL, BUTTON_MIDLEFT },
+ { ACTION_USB_HID_LEFT_LONG, BUTTON_MIDLEFT|BUTTON_REPEAT, BUTTON_MIDLEFT },
+ { ACTION_USB_HID_RIGHT, BUTTON_MIDRIGHT|BUTTON_REL, BUTTON_MIDRIGHT },
+ { ACTION_USB_HID_RIGHT_LONG, BUTTON_MIDRIGHT|BUTTON_REPEAT, BUTTON_MIDRIGHT },
+ { ACTION_USB_HID_SELECT, BUTTON_CENTER|BUTTON_REL, BUTTON_CENTER },
+ { ACTION_USB_HID_SELECT_LONG, BUTTON_CENTER|BUTTON_REPEAT, BUTTON_CENTER },
+ { ACTION_USB_HID_MENU, BUTTON_TOPRIGHT|BUTTON_REL, BUTTON_TOPRIGHT },
+ { ACTION_USB_HID_MENU_LONG, BUTTON_TOPRIGHT|BUTTON_REPEAT, BUTTON_TOPRIGHT },
+ { ACTION_USB_HID_MODE, BUTTON_TOPLEFT|BUTTON_REL, BUTTON_TOPLEFT },
+ { ACTION_USB_HID_MODE_LONG, BUTTON_TOPLEFT|BUTTON_REPEAT, BUTTON_TOPLEFT },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM2|CONTEXT_USB_HID)
}; /* button_context_usb_hid */
Index: apps/keymaps/keymap-clip.c
===================================================================
--- apps/keymaps/keymap-clip.c (revision 22761)
+++ apps/keymaps/keymap-clip.c (working copy)
@@ -275,16 +275,24 @@
#ifdef HAVE_USBSTACK
static const struct button_mapping button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_UP, BUTTON_NONE },
- { ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
- { ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE },
- { ACTION_USB_HID_MENU, BUTTON_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOL_UP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_START, BUTTON_UP|BUTTON_REL, BUTTON_UP },
+ { ACTION_USB_HID_START, BUTTON_UP|BOTTOM_REPEAT, BUTTON_UP },
+ { ACTION_USB_HID_QUIT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
+ { ACTION_USB_HID_QUIT_LONG, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER },
+ { ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
+ { ACTION_USB_HID_LEFT_LONG, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
+ { ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
+ { ACTION_USB_HID_RIGHT_LONG, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
+ { ACTION_USB_HID_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
+ { ACTION_USB_HID_SELECT_LONG, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
+ { ACTION_USB_HID_MENU, BUTTON_DOWN|BUTTON_REL, BUTTON_DOWN },
+ { ACTION_USB_HID_MENU_LONG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
+ { ACTION_USB_HID_MODE, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
+ { ACTION_USB_HID_MODE_LONG, BUTTON_HOME|BUTTON_REPEAT, BUTTON_HOME },
LAST_ITEM_IN_LIST
}; /* button_context_usb_hid */
Index: apps/keymaps/keymap-h10.c
===================================================================
--- apps/keymaps/keymap-h10.c (revision 22761)
+++ apps/keymaps/keymap-h10.c (working copy)
@@ -339,28 +339,33 @@
#ifdef HAVE_USBSTACK
static const struct button_mapping button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
- { ACTION_USB_HID_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
- { ACTION_USB_HID_SKIPPREV, BUTTON_REW, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_FF, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_SCROLL_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_SCROLL_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_MENU, BUTTON_POWER, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_SCROLL_UP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_SCROLL_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_START, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
+ { ACTION_USB_HID_QUIT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
+ { ACTION_USB_HID_LEFT, BUTTON_REW|BUTTON_REL, BUTTON_REW },
+ { ACTION_USB_HID_LEFT_LONG, BUTTON_REW|BUTTON_REPEAT, BUTTON_REW },
+ { ACTION_USB_HID_RIGHT, BUTTON_FF|BUTTON_REL, BUTTON_FF },
+ { ACTION_USB_HID_RIGHT_LONG, BUTTON_FF|BUTTON_REPEAT, BUTTON_FF },
+ { ACTION_USB_HID_MENU, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER },
+ { ACTION_USB_HID_MODE, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
LAST_ITEM_IN_LIST
}; /* button_context_usb_hid */
static const struct button_mapping remote_button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_RC_PLAY, BUTTON_NONE },
- { ACTION_USB_HID_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPPREV, BUTTON_RC_REW, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_RC_FF, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_RC_VOL_UP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_START, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
+ { ACTION_USB_HID_QUIT, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
+ { ACTION_USB_HID_LEFT, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW },
+ { ACTION_USB_HID_LEFT_LONG, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_RC_REW },
+ { ACTION_USB_HID_RIGHT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF },
+ { ACTION_USB_HID_RIGHT_LONG, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_RC_FF },
LAST_ITEM_IN_LIST
}; /* remote_button_context_usb_hid */
Index: apps/keymaps/keymap-ipod.c
===================================================================
--- apps/keymaps/keymap-ipod.c (revision 22761)
+++ apps/keymaps/keymap-ipod.c (working copy)
@@ -195,16 +195,20 @@
#ifdef HAVE_USBSTACK
static const struct button_mapping button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
- { ACTION_USB_HID_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
- { ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_SCROLL_FWD, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_SCROLL_BACK, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE },
- { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_SCROLL_FWD, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_SCROLL_BACK, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_START, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
+ { ACTION_USB_HID_QUIT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
+ { ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
+ { ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
+ { ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
+ { ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
+ { ACTION_USB_HID_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
+ { ACTION_USB_HID_SELECT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
+ { ACTION_USB_HID_MENU, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
+ { ACTION_USB_HID_MODE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
LAST_ITEM_IN_LIST
}; /* button_context_usb_hid */
@@ -244,14 +248,16 @@
#ifdef HAVE_USBSTACK
static const struct button_mapping remote_button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_RC_PLAY, BUTTON_NONE },
- { ACTION_USB_HID_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPPREV, BUTTON_RC_LEFT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_RC_RIGHT, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_RC_VOL_UP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_START, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
+ { ACTION_USB_HID_QUIT, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
+ { ACTION_USB_HID_LEFT, BUTTON_RC_LEFT|BUTTON_REL, BUTTON_RC_LEFT },
+ { ACTION_USB_HID_LEFT_LONG, BUTTON_RC_LEFT|BUTTON_REPEAT, BUTTON_RC_LEFT },
+ { ACTION_USB_HID_RIGHT, BUTTON_RC_RIGHT|BUTTON_REL, BUTTON_RC_RIGHT },
+ { ACTION_USB_HID_RIGHT_LONG, BUTTON_RC_RIGHT|BUTTON_REPEAT, BUTTON_RC_RIGHT },
LAST_ITEM_IN_LIST
}; /* remote_button_context_usb_hid */
Index: apps/keymaps/keymap-hdd1630.c
===================================================================
--- apps/keymaps/keymap-hdd1630.c (revision 22761)
+++ apps/keymaps/keymap-hdd1630.c (working copy)
@@ -286,20 +286,24 @@
#ifdef HAVE_USBSTACK
static const struct button_mapping button_context_usb_hid[] = {
- { ACTION_USB_HID_PLAY, BUTTON_VIEW, BUTTON_NONE },
- { ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
- { ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
- { ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
- { ACTION_USB_HID_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
- { ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE },
- { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOL_UP, BUTTON_NONE },
+ { ACTION_USB_HID_INC, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_DEC, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_START, BUTTON_UP|BUTTON_REL, BUTTON_UP },
+ { ACTION_USB_HID_START_LONG, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
+ { ACTION_USB_HID_QUIT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
+ { ACTION_USB_HID_QUIT_LONG, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER },
+ { ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
+ { ACTION_USB_HID_LEFT_LONG, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
+ { ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
+ { ACTION_USB_HID_RIGHT_LONG, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
+ { ACTION_USB_HID_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
+ { ACTION_USB_HID_SELECT_LONG, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
+ { ACTION_USB_HID_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
+ { ACTION_USB_HID_MENU_LONG, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
+ { ACTION_USB_HID_MODE, BUTTON_VIEW|BUTTON_REL, BUTTON_VIEW },
+ { ACTION_USB_HID_MODE_LONG, BUTTON_VIEW|BUTTON_REPEAT, BUTTON_VIEW },
LAST_ITEM_IN_LIST
}; /* button_context_usb_hid */
Index: firmware/usbstack/usb_hid.c
===================================================================
--- firmware/usbstack/usb_hid.c (revision 22761)
+++ firmware/usbstack/usb_hid.c (working copy)
@@ -280,12 +280,20 @@
static uint8_t buf_set_keyboard(unsigned char *buf, int id)
{
memset(buf, 0, 7);
+ int key, i = 1;
- if (HID_KEYBOARD_LEFT_CONTROL <= id && id <= HID_KEYBOARD_RIGHT_GUI)
- buf[0] = (1 << (id - HID_KEYBOARD_LEFT_CONTROL));
- else
- buf[1] = (uint8_t)id;
+ /* Each key is a word in id (up to 4 keys supported) */
+ while ((key = id & 0xff))
+ {
+ /* Each modifier key is a bit in the first byte */
+ if (HID_KEYBOARD_LEFT_CONTROL <= key && key <= HID_KEYBOARD_RIGHT_GUI)
+ buf[0] |= (1 << (key - HID_KEYBOARD_LEFT_CONTROL));
+ else /* Any other key should be set in a separate byte */
+ buf[i++] = (uint8_t)key;
+ id >>= 8;
+ }
+
return 7;
}
Index: manual/platform/e200.tex
===================================================================
--- manual/platform/e200.tex (revision 22761)
+++ manual/platform/e200.tex (working copy)
@@ -5,6 +5,7 @@
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
\edef\UseOption{\UseOption,HAVE_BUTTON_LIGHTS}
+\edef\UseOption{\UseOption,USB_ENABLE_HID}
\edef\UseOption{\UseOption,sansa}
\newcommand{\playerman}{Sansa}
Index: manual/configure_rockbox/system_options.tex
===================================================================
--- manual/configure_rockbox/system_options.tex (revision 22761)
+++ manual/configure_rockbox/system_options.tex (working copy)
@@ -182,3 +182,28 @@
Changes the brightness of the button lights.
}
}
+
+\opt{USB_ENABLE_HID}{
+ \subsection{USB keypad Mode}
+ This setting control the keypad mode when the \dap{} is attached to a
+ computer through USB. The \dap{} registers itself as a USB keyboard (in
+ addition to being identified as a mass-storage device). Pressing a button
+ on the \dap{} sends a keystroke the computer the \dap{} is attached to,
+ according to the mapping set by the keypad mode.
+ The \dap{}'s keys can be mapped in different sets (modes) to achieve
+ different functionality. The following modes are available:
+ \begin{description}
+ \item [Multimedia: ]This mode lets you control the volume, playback, and
+ skips tracks on the host computer. It is equivalent for the multimedia
+ keys found on top of some multimedia keyboards.
+
+ \item [Presentation: ]This mode lets you control a presentation program
+ (e.g. OpenOffice Impress, and some other popular application), making the
+ \dap{} a wired remote control device. This mode is can be useful for
+ lecturers who does not have a wireless remote control for this purpose.
+
+ \item [Browser: ]This mode lets you control a web browser (e.g. Firefox).
+ It uses the \dap{}'s keys to navigate through the web page and
+ different tabs, navigate through history, and to control zoom.
+ \end{description}
+}