Index: apps/screens.c
===================================================================
--- apps/screens.c (revision 22061)
+++ apps/screens.c (working copy)
@@ -96,62 +96,134 @@
#endif
#ifndef SIMULATOR
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+#define KEYMAP_MODE "Keymap Mode:"
+#define FIRST_ACTION ACTION_USB_HID_DEC
+#define LAST_ACTION ACTION_USB_HID_MENU_LONG
+
+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 CTRL(key) ((key) | (HID_KEYBOARD_LEFT_CONTROL << 8))
+#define SHIFT(key) ((key) | (HID_KEYBOARD_LEFT_SHIFT << 8))
+
+static 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 hid_key_mapping_t hid_key_mapping_powerpoint = {
+ LANG_POWERPOINT,
+ HID_USAGE_PAGE_KEYBOARD_KEYPAD,
+ {
+ { ACTION_USB_HID_DEC, SHIFT(HID_KEYBOARD_TAB) }, /* Previous link */
+ { ACTION_USB_HID_INC, HID_KEYBOARD_TAB }, /* Next link */
+ { ACTION_USB_HID_START, HID_KEYBOARD_F5 }, /* Start slideshow */
+ { ACTION_USB_HID_QUIT, HID_KEYBOARD_ESCAPE }, /* Leave slideshow */
+ { ACTION_USB_HID_LEFT, HID_KEYBOARD_P }, /* Previous slide */
+ { ACTION_USB_HID_LEFT_LONG, HID_KEYBOARD_HOME }, /* First slide */
+ { ACTION_USB_HID_RIGHT, HID_KEYBOARD_N }, /* Next slide */
+ { ACTION_USB_HID_RIGHT_LONG, HID_KEYBOARD_END }, /* Last slide */
+ { ACTION_USB_HID_SELECT, HID_KEYBOARD_RETURN }, /* Perform a 'Mouse click' */
+ { ACTION_USB_HID_SELECT_LONG, SHIFT(HID_KEYBOARD_RETURN) }, /* Perform a 'Mouse over' */
+ { ACTION_USB_HID_MENU, HID_KEYBOARD_DOT }, /* Black screen */
+ { ACTION_USB_HID_MENU_LONG, HID_KEYBOARD_COMMA }, /* White screen */
+ { 0, 0 },
+ }
+};
+
+static hid_key_mapping_t hid_key_mapping_acrobat_reader = {
+ LANG_ACROBAT_READER,
+ HID_USAGE_PAGE_KEYBOARD_KEYPAD,
+ {
+ { ACTION_USB_HID_DEC, HID_KEYBOARD_UP_ARROW }, /* Scroll up*/
+ { ACTION_USB_HID_INC, HID_KEYBOARD_DOWN_ARROW }, /* Scroll down */
+ { ACTION_USB_HID_START, HID_KEYBOARD_PAGE_UP }, /* Previous screen */
+ { ACTION_USB_HID_LEFT, HID_KEYBOARD_LEFT_ARROW }, /* Previous page */
+ { ACTION_USB_HID_LEFT_LONG, HID_KEYBOARD_HOME }, /* First page */
+ { ACTION_USB_HID_RIGHT, HID_KEYBOARD_RIGHT_ARROW }, /* Next page */
+ { ACTION_USB_HID_RIGHT_LONG, HID_KEYBOARD_END }, /* Last page */
+ { ACTION_USB_HID_SELECT, CTRL(HID_KEYBOARD_L) }, /* Full-Screen */
+ { ACTION_USB_HID_MENU, HID_KEYBOARD_PAGE_DOWN }, /* Next screen */
+ { 0, 0 },
+ }
+};
+
+static hid_key_mapping_t *hid_key_mappings[] =
+{
+ &hid_key_mapping_multimedia,
+ &hid_key_mapping_powerpoint,
+ &hid_key_mapping_acrobat_reader,
+};
+
+#define NUM_KEY_MAPPINGS (sizeof(hid_key_mappings) / \
+ sizeof(hid_key_mappings[0]))
+#endif
+
static int handle_usb_events(void)
{
int next_update=0;
-#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/4);
+ action = get_action(CONTEXT_USB_HID, HZ/4);
- 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 */
+ global_settings.usb_keypad_mode =
+ (global_settings.usb_keypad_mode + 1) % NUM_KEY_MAPPINGS;
+ settings_save();
+
+ return 1;
}
+ else if (action >= FIRST_ACTION && action <= LAST_ACTION)
+ {
+ mapping_t *mapping;
+ hid_key_mapping_t *key_mapping =
+ hid_key_mappings[global_settings.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/4);
+ action = button_get_w_tmo(HZ/4);
- switch(button)
+ switch(action)
{
case SYS_USB_DISCONNECTED:
usb_acknowledge(SYS_USB_DISCONNECTED_ACK);
@@ -172,9 +244,6 @@
}
}
Exit:
-#ifdef HAVE_TOUCHSCREEN
- touchscreen_set_mode(old_mode);
-#endif
return 0;
}
#endif
@@ -187,50 +256,89 @@
int i;
bool statusbar = global_settings.statusbar; /* force the statusbar */
global_settings.statusbar = true;
+#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
+
+#ifndef SIMULATOR
+ usb_acknowledge(SYS_USB_CONNECTED_ACK);
+#endif
+
+ do {
+ gui_syncstatusbar_draw(&statusbars, true);
#if LCD_DEPTH > 1
- show_main_backdrop();
+ show_main_backdrop();
#endif
#if defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1
- show_remote_main_backdrop();
+ show_remote_main_backdrop();
#endif
- FOR_NB_SCREENS(i)
- {
- screens[i].backlight_on();
- screens[i].clear_display();
-#if NB_SCREENS > 1
- if (i == SCREEN_REMOTE)
+ FOR_NB_SCREENS(i)
{
- 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
- {
+ struct screen *screen = &screens[SCREEN_MAIN];
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+ char msg[16];
+ int y, w, h;
+ hid_key_mapping_t *key_mapping =
+ hid_key_mappings[global_settings.usb_keypad_mode];
#endif
+
+ screen->backlight_on();
+ screen->clear_display();
+ gui_statusbar_draw(&(statusbars.statusbars[i]), true);
+
+#if NB_SCREENS > 1
+ if (i == SCREEN_REMOTE)
+ {
+ screen->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,
+ screen->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)
+ screen->getstringsize(KEYMAP_MODE, &w, &h);
+
+ y = (LCD_HEIGHT - BMPHEIGHT_usblogo) / 2 + BMPHEIGHT_usblogo + h;
+ screen->putsxy((LCD_WIDTH - w) / 2, y, KEYMAP_MODE);
+ y += 2 * h;
+
+ snprintf(msg, 16, "%s", str(key_mapping->lang_name));
+ screen->getstringsize(msg, &w, &h);
+ screen->putsxy((LCD_WIDTH - w) / 2, y, msg);
+#endif /* HID */
+#else /* HAVE_LCD_BITMAP */
+ screen->double_height(false);
+ screen->puts_scroll(0, 0, "[USB Mode]");
+ status_set_param(false);
+ status_set_audio(false);
+ status_set_usb(true);
#endif /* HAVE_LCD_BITMAP */
#if NB_SCREENS > 1
+ }
+#endif
+ screen->update();
}
-#endif
- screens[i].update();
}
-
#ifdef SIMULATOR
while (button_get(true) & BUTTON_REL);
#else
- usb_acknowledge(SYS_USB_CONNECTED_ACK);
while (handle_usb_events());
+
+#ifdef HAVE_TOUCHSCREEN
+ touchscreen_set_mode(old_mode);
+#endif
+
#endif /* SIMULATOR */
#ifdef HAVE_LCD_CHARCELLS
status_set_usb(false);
Index: apps/action.h
===================================================================
--- apps/action.h (revision 22061)
+++ apps/action.h (working copy)
@@ -243,14 +243,22 @@
#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_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,
LAST_ACTION_PLACEHOLDER, /* custom actions should be this + something */
};
Index: apps/lang/english.lang
===================================================================
--- apps/lang/english.lang (revision 22061)
+++ apps/lang/english.lang (working copy)
@@ -12655,3 +12655,59 @@
pitchscreen: "Rate"
+
+ 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_POWERPOINT
+ desc: in settings_menu
+ user: core
+
+ *: "PowerPoint"
+
+
+ *: "PowerPoint"
+
+
+ *: "PowerPoint"
+
+
+
+ id: LANG_ACROBAT_READER
+ desc: in settings_menu
+ user: core
+
+ *: "Acrobat Reader"
+
+
+ *: "Acrobat Reader"
+
+
+ *: "Acrobat Reader"
+
+
Index: apps/settings.h
===================================================================
--- apps/settings.h (revision 22061)
+++ apps/settings.h (working copy)
@@ -749,6 +749,9 @@
/* 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
};
/** global variables **/
Index: apps/menus/settings_menu.c
===================================================================
--- apps/menus/settings_menu.c (revision 22061)
+++ 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 22061)
+++ apps/settings_list.c (working copy)
@@ -1537,6 +1537,12 @@
#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,powerpoint,acrobat reader",
+ NULL, 3, ID2P(LANG_MULTIMEDIA), ID2P(LANG_POWERPOINT),
+ ID2P(LANG_ACROBAT_READER)),
+#endif
};
const int nb_settings = sizeof(settings)/sizeof(*settings);
Index: apps/keymaps/keymap-ondavx747.c
===================================================================
--- apps/keymaps/keymap-ondavx747.c (revision 22061)
+++ 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 22061)
+++ 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 22061)
+++ 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 22061)
+++ apps/keymaps/keymap-c200.c (working copy)
@@ -262,16 +262,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 22061)
+++ apps/keymaps/keymap-e200.c (working copy)
@@ -276,16 +276,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 22061)
+++ 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 22061)
+++ apps/keymaps/keymap-touchscreen.c (working copy)
@@ -250,11 +250,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 22061)
+++ 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 22061)
+++ 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 22061)
+++ apps/keymaps/keymap-ipod.c (working copy)
@@ -193,16 +193,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 */
@@ -242,14 +246,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 22061)
+++ 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 22061)
+++ firmware/usbstack/usb_hid.c (working copy)
@@ -280,12 +280,20 @@
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 22061)
+++ 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 22061)
+++ manual/configure_rockbox/system_options.tex (working copy)
@@ -182,3 +182,29 @@
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 [PowerPoint: ]This mode lets you control a PowerPoint presentetion,
+ making the \dap{} a PowerPoint wired remove control device. This mode
+ is can be useful for lecturers who doesn't have a wireless remote
+ control for this purpose.
+
+ \item [Acrobat Reader: ]This mode lets you control reading of a PDF
+ document in the Acrobat Reader aplication. It uses the \dap{}'s keys to
+ navigating through the document, and to control zoom. This mode can be
+ useful for lecturers who show a PDF document to an audience.
+ \end{description}
+}