Index: apps/screens.c
===================================================================
--- apps/screens.c (revision 22816)
+++ apps/screens.c (working copy)
@@ -37,7 +37,7 @@
#if defined(HAVE_USBSTACK)
#include "usb_core.h"
#ifdef USB_ENABLE_HID
-#include "usbstack/usb_hid.h"
+#include "usb_keymaps.h"
#endif
#endif
#include "settings.h"
@@ -94,59 +94,29 @@
#endif
#ifndef SIMULATOR
+
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+int usb_keypad_mode;
+#endif
+
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;
#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
- bool hid_enabled = usb_core_driver_enabled(USB_DRIVER_HID);
-
- if (hid_enabled)
+ if (usb_core_driver_enabled(USB_DRIVER_HID))
{
- int id = HID_CONSUMER_USAGE_UNASSIGNED;
- button = get_action(CONTEXT_USB_HID, HZ/2);
+ button = get_hid_usb_action();
- switch (button)
- {
- 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;
- }
-
- if (id != HID_CONSUMER_USAGE_UNASSIGNED)
- usb_hid_send(HID_USAGE_PAGE_CONSUMER, id);
+ /* On mode change, we need to refresh the screen */
+ if (button == ACTION_USB_HID_MODE)
+ break;
}
else
#endif
@@ -160,7 +130,7 @@
{
case SYS_USB_DISCONNECTED:
usb_acknowledge(SYS_USB_DISCONNECTED_ACK);
- goto Exit;
+ return 1;
case SYS_TIMEOUT:
break;
}
@@ -175,14 +145,12 @@
}
#endif /* STORAGE_MMC */
}
-Exit:
-#ifdef HAVE_TOUCHSCREEN
- touchscreen_set_mode(old_mode);
-#endif
+
return 0;
}
#endif
+#define MODE_NAME_LEN 32
void usb_screen(void)
{
#ifdef USB_NONE
@@ -191,55 +159,107 @@
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
+
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+ usb_keypad_mode = global_settings.usb_keypad_mode;
+#endif
+
+ 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
- {
+ {
+ char mode_name[MODE_NAME_LEN];
+
#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);
+ BMPWIDTH_usblogo, BMPHEIGHT_usblogo);
+
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+ int y, w, h;
+
+ 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 += 3 * h / 2;
+
+ snprintf(mode_name, MODE_NAME_LEN, "%s",
+ str(keypad_mode_name_get()));
+ screens[i].getstringsize(mode_name, &w, &h);
+ screens[i].putsxy((LCD_WIDTH - w) / 2, y, mode_name);
+#endif /* HID */
+#else /* HAVE_LCD_BITMAP */
+ screens[i].double_height(false);
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+ snprintf(mode_name, MODE_NAME_LEN, "[USB Mode; %s]",
+ str(keypad_mode_name_get()));
+ screens[i].puts_scroll(0, 0, mode_name);
#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);
+ screens[i].puts_scroll(0, 0, "[USB Mode]");
+#endif
+ 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 defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+ if (global_settings.usb_keypad_mode != usb_keypad_mode)
+ {
+ global_settings.usb_keypad_mode = usb_keypad_mode;
+ settings_save();
+ }
+#endif
+
+#ifdef HAVE_TOUCHSCREEN
+ touchscreen_set_mode(old_mode);
+#endif
+
#ifdef HAVE_LCD_CHARCELLS
status_set_usb(false);
#endif /* HAVE_LCD_CHARCELLS */
@@ -249,7 +269,7 @@
}
viewportmanager_set_statusbar(old_bars);
send_event(GUI_EVENT_REFRESH, NULL);
-
+
#endif /* USB_NONE */
}
Index: apps/action.h
===================================================================
--- apps/action.h (revision 22816)
+++ apps/action.h (working copy)
@@ -76,6 +76,7 @@
CONTEXT_KEYBOARD,
CONTEXT_FM,
CONTEXT_USB_HID,
+ CONTEXT_USB_HID_MOUSE,
};
@@ -241,14 +242,32 @@
#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_MOUSE_UP,
+ ACTION_USB_HID_MOUSE_UP_REP,
+ ACTION_USB_HID_MOUSE_DOWN,
+ ACTION_USB_HID_MOUSE_DOWN_REP,
+ ACTION_USB_HID_MOUSE_LEFT,
+ ACTION_USB_HID_MOUSE_LEFT_REP,
+ ACTION_USB_HID_MOUSE_RIGHT,
+ ACTION_USB_HID_MOUSE_RIGHT_REP,
+ 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 22816)
+++ apps/lang/english.lang (working copy)
@@ -12654,6 +12654,76 @@
+ 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_MOUSE
+ desc: in settings_menu
+ user: core
+
+ *: "Mouse"
+
+
+ *: "Mouse"
+
+
+ *: "Mouse"
+
+
+
id: LANG_SKIN_RAM_USAGE
desc: how much RAM the skins are using
user: core
Index: apps/settings.h
===================================================================
--- apps/settings.h (revision 22816)
+++ 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 22816)
+++ 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 22816)
+++ 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,mouse",
+ NULL, 3, ID2P(LANG_MULTIMEDIA), ID2P(LANG_PRESENTATION),
+ ID2P(LANG_BROWSER), ID2P(LANG_MOUSE)),
+#endif
+
/* Customizable list */
#ifdef HAVE_LCD_BITMAP
VIEWPORT_SETTING(ui_vp_config, "ui viewport"),
Index: apps/SOURCES
===================================================================
--- apps/SOURCES (revision 22816)
+++ apps/SOURCES (working copy)
@@ -150,6 +150,9 @@
eq_arm.S
#endif
#endif
+#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
+usb_keymaps.c
+#endif
metadata.c
metadata/mp3.c
#if CONFIG_CODEC == SWCODEC
Index: apps/keymaps/keymap-ondavx747.c
===================================================================
--- apps/keymaps/keymap-ondavx747.c (revision 22816)
+++ 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 22816)
+++ 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 22816)
+++ 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 22816)
+++ 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 22816)
+++ apps/keymaps/keymap-e200.c (working copy)
@@ -277,19 +277,41 @@
#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 */
+
+static const struct button_mapping button_context_usb_hid_mouse[] = {
+ { ACTION_USB_HID_MOUSE_UP, BUTTON_UP, BUTTON_NONE },
+ { ACTION_USB_HID_MOUSE_UP_REP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_MOUSE_DOWN, BUTTON_DOWN, BUTTON_NONE },
+ { ACTION_USB_HID_MOUSE_DOWN_REP, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_MOUSE_LEFT, BUTTON_LEFT, BUTTON_NONE },
+ { ACTION_USB_HID_MOUSE_LEFT_REP, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_USB_HID_MOUSE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
+ { ACTION_USB_HID_MOUSE_RIGHT_REP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
+
+ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
+}; /* button_context_usb_hid_mouse */
+
#endif
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
@@ -342,6 +364,8 @@
#ifdef HAVE_USBSTACK
case CONTEXT_USB_HID:
return button_context_usb_hid;
+ case CONTEXT_USB_HID_MOUSE:
+ return button_context_usb_hid_mouse;
#endif
default:
return button_context_standard;
Index: apps/keymaps/keymap-sa9200.c
===================================================================
--- apps/keymaps/keymap-sa9200.c (revision 22816)
+++ 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 22816)
+++ 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 22816)
+++ 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 22816)
+++ 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 22816)
+++ 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 22816)
+++ 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_usage_tables.h
===================================================================
--- firmware/usbstack/usb_hid_usage_tables.h (revision 22816)
+++ firmware/usbstack/usb_hid_usage_tables.h (working copy)
@@ -701,5 +701,20 @@
#define HID_CONSUMER_USAGE_AC_DISRIBUTE_HORIZONTALLY 0x29B
#define HID_CONSUMER_USAGE_AC_DISTRIBUTE_VERTICALLY 0x29C
+/* Mouse defines (custom made - Rockbox specific) */
+#define HID_MOUSE_NONE 0x00
+#define HID_MOUSE_UP 0x01
+#define HID_MOUSE_UP_REP 0x02
+#define HID_MOUSE_DOWN 0x03
+#define HID_MOUSE_DOWN_REP 0x04
+#define HID_MOUSE_LEFT 0x05
+#define HID_MOUSE_LEFT_REP 0x06
+#define HID_MOUSE_RIGHT 0x07
+#define HID_MOUSE_RIGHT_REP 0x08
+#define HID_MOUSE_SCROLL_UP 0x09
+#define HID_MOUSE_SCROLL_DOWN 0x10
+#define HID_MOUSE_CLICK_LEFT 0x11
+#define HID_MOUSE_CLICK_RIGHT 0x12
+#define HID_MOUSE_CLICK_MIDDLE 0x13
+
#endif
-
Index: firmware/usbstack/usb_hid.c
===================================================================
--- firmware/usbstack/usb_hid.c (revision 22816)
+++ firmware/usbstack/usb_hid.c (working copy)
@@ -28,11 +28,6 @@
//#define LOGF_ENABLE
#include "logf.h"
-#define CONCAT(low, high) ((high << 8) | low)
-#define PACK_VAL1(dest, val) *(dest)++ = (val) & 0xff
-#define PACK_VAL2(dest, val) PACK_VAL1((dest), (val)); \
- PACK_VAL1((dest), (val >> 8))
-
/* Documents avaiable here: http://www.usb.org/developers/devclass_docs/ */
#define HID_VER 0x0110 /* 1.1 */
@@ -47,6 +42,7 @@
#define INPUT 0x80
#define OUTPUT 0x90
#define COLLECTION 0xA0
+#define COLLECTION_PHYSICAL 0x00
#define COLLECTION_APPLICATION 0x01
#define END_COLLECTION 0xC0
/* Parts (HID1_11.pdf, page 40) */
@@ -90,24 +86,28 @@
#define HID_BUF_SIZE_MSG 16
#define HID_BUF_SIZE_CMD 16
-#define HID_BUF_SIZE_REPORT 96
+#define HID_BUF_SIZE_REPORT 160
#define HID_NUM_BUFFERS 5
#define SET_REPORT_BUF_LEN 2
+//#ifdef LOGF_ENABLE
#ifdef LOGF_ENABLE
+
#define BUF_DUMP_BUF_LEN HID_BUF_SIZE_REPORT
#define BUF_DUMP_PREFIX_SIZE 5
-#define BUF_DUMP_LINE_SIZE (MAX_LOGF_ENTRY - BUF_DUMP_PREFIX_SIZE)
-#define BUF_DUMP_ITEMS_IN_LINE (BUF_DUMP_LINE_SIZE / 3)
-#define BUF_DUMP_NUM_LINES (BUF_DUMP_BUF_LEN / (BUF_DUMP_LINE_SIZE / 3))
+#define BUF_DUMP_ITEMS_IN_LINE 8
+#define BUF_DUMP_LINE_SIZE (BUF_DUMP_ITEMS_IN_LINE * 3)
+#define BUF_DUMP_NUM_LINES (BUF_DUMP_BUF_LEN / BUF_DUMP_ITEMS_IN_LINE)
#endif
#define HID_BUF_INC(i) do { (i) = ((i) + 1) % HID_NUM_BUFFERS; } while (0)
+#define PACK_VAL(dest, val) *(dest)++ = (val) & 0xff
typedef enum
{
REPORT_ID_KEYBOARD = 1,
REPORT_ID_CONSUMER,
+ REPORT_ID_MOUSE,
REPORT_ID_COUNT,
} report_id_t;
@@ -164,6 +164,7 @@
/* Write the id into the buffer in the appropriate location, and returns the
* buffer length */
uint8_t (*buf_set)(unsigned char *buf, int id);
+ bool (*is_key_released)(int id);
} usb_hid_report_t;
usb_hid_report_t usb_hid_reports[REPORT_ID_COUNT];
@@ -183,7 +184,7 @@
static void usb_hid_try_send_drv(void);
-static void pack_parameter(unsigned char **dest, bool is_signed,
+static void pack_parameter(unsigned char **dest, bool is_signed, bool mark_size,
uint8_t parameter, uint32_t value)
{
uint8_t size_value = 1; /* # of bytes */
@@ -216,7 +217,7 @@
size_value++;
}
- **dest = parameter | size_value;
+ **dest = parameter | (mark_size ? size_value : 0);
(*dest)++;
while (size_value--)
@@ -244,8 +245,7 @@
}
#ifdef LOGF_ENABLE
-static unsigned char
- buf_dump_ar[BUF_DUMP_NUM_LINES][BUF_DUMP_LINE_SIZE + 1]
+static unsigned char buf_dump_ar[BUF_DUMP_NUM_LINES][BUF_DUMP_LINE_SIZE + 1]
USB_DEVBSS_ATTR __attribute__((aligned(32)));
void buf_dump(unsigned char *buf, size_t size)
@@ -277,26 +277,131 @@
#define buf_dump(...)
#endif
+#define BUF_LEN_KEYBOARD 7
static uint8_t buf_set_keyboard(unsigned char *buf, int id)
{
- memset(buf, 0, 7);
+ memset(buf, 0, BUF_LEN_KEYBOARD);
+ 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;
- return 7;
+ id >>= 8;
+ }
+
+ return BUF_LEN_KEYBOARD;
}
+#define BUF_LEN_CONSUMER 4
static uint8_t buf_set_consumer(unsigned char *buf, int id)
{
- memset(buf, 0, 4);
+ memset(buf, 0, BUF_LEN_CONSUMER);
buf[0] = (uint8_t)id;
- return 4;
+ return BUF_LEN_CONSUMER;
}
+#define MOUSE_WHEEL_STEP 1
+#define MOUSE_STEP 8
+#define MOUSE_ACCEL_THRESHOLD 2
+#define MOUSE_ACCEL_FACTOR 1
+#define MOUSE_BUTTON_LEFT 0x1
+#define MOUSE_BUTTON_RIGHT 0x2
+#define MOUSE_BUTTON_MIDDLE 0x4
+#define MOUSE_BUTTON 0
+#define MOUSE_X 1
+#define MOUSE_Y 2
+#define MOUSE_WHEEL 3
+#define BUF_LEN_MOUSE 4
+#define MOUSE_DO(item, step) (buf[(item)] = ((uint8_t)(step)))
+static uint8_t buf_set_mouse(unsigned char *buf, int id)
+{
+ static int count = 0;
+ int step = MOUSE_STEP;
+
+ memset(buf, 0, BUF_LEN_MOUSE);
+
+ switch (id)
+ {
+ case HID_MOUSE_UP:
+ case HID_MOUSE_DOWN:
+ case HID_MOUSE_LEFT:
+ case HID_MOUSE_RIGHT:
+ count = 0;
+ break;
+ case HID_MOUSE_UP_REP:
+ case HID_MOUSE_DOWN_REP:
+ case HID_MOUSE_LEFT_REP:
+ case HID_MOUSE_RIGHT_REP:
+ count++;
+ /* TODO: Find a better mouse accellaration algorithm */
+ step *= 1 + MOUSE_ACCEL_FACTOR * count / MOUSE_ACCEL_THRESHOLD;
+ if (step > 255)
+ step = 255;
+ break;
+ default:
+ break;
+ }
+
+ switch (id)
+ {
+ case HID_MOUSE_UP:
+ case HID_MOUSE_UP_REP:
+ MOUSE_DO(MOUSE_Y, -step);
+ break;
+ case HID_MOUSE_DOWN:
+ case HID_MOUSE_DOWN_REP:
+ MOUSE_DO(MOUSE_Y, step);
+ break;
+ case HID_MOUSE_LEFT:
+ case HID_MOUSE_LEFT_REP:
+ MOUSE_DO(MOUSE_X, -step);
+ break;
+ case HID_MOUSE_RIGHT:
+ case HID_MOUSE_RIGHT_REP:
+ MOUSE_DO(MOUSE_X, step);
+ break;
+ case HID_MOUSE_CLICK_LEFT:
+ MOUSE_DO(MOUSE_BUTTON, MOUSE_BUTTON_LEFT);
+ break;
+ case HID_MOUSE_CLICK_RIGHT:
+ MOUSE_DO(MOUSE_BUTTON, MOUSE_BUTTON_RIGHT);
+ break;
+ case HID_MOUSE_CLICK_MIDDLE:
+ MOUSE_DO(MOUSE_BUTTON, MOUSE_BUTTON_MIDDLE);
+ break;
+ case HID_MOUSE_SCROLL_UP:
+ MOUSE_DO(MOUSE_WHEEL, MOUSE_WHEEL_STEP);
+ break;
+ case HID_MOUSE_SCROLL_DOWN:
+ MOUSE_DO(MOUSE_WHEEL, -MOUSE_WHEEL_STEP);
+ break;
+ default:
+ break;
+ }
+
+ return BUF_LEN_MOUSE;
+}
+
+static bool mouse_is_key_released(int id)
+{
+ switch (id)
+ {
+ case HID_MOUSE_CLICK_LEFT:
+ case HID_MOUSE_CLICK_RIGHT:
+ case HID_MOUSE_CLICK_MIDDLE:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
static size_t descriptor_report_get(unsigned char *dest)
{
unsigned char *report = dest;
@@ -306,60 +411,96 @@
usb_hid_report = &usb_hid_reports[REPORT_ID_KEYBOARD];
usb_hid_report->usage_page = HID_USAGE_PAGE_KEYBOARD_KEYPAD;
usb_hid_report->buf_set = buf_set_keyboard;
+ usb_hid_report->is_key_released = NULL;
- pack_parameter(&report, 0, USAGE_PAGE,
+ pack_parameter(&report, 0, 1, USAGE_PAGE,
HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS);
- PACK_VAL2(report, CONCAT(CONSUMER_USAGE, HID_GENERIC_DESKTOP_KEYBOARD));
- pack_parameter(&report, 0, COLLECTION, COLLECTION_APPLICATION);
- pack_parameter(&report, 0, REPORT_ID, REPORT_ID_KEYBOARD);
- pack_parameter(&report, 0, USAGE_PAGE, HID_GENERIC_DESKTOP_KEYPAD);
- pack_parameter(&report, 0, USAGE_MINIMUM, HID_KEYBOARD_LEFT_CONTROL);
- pack_parameter(&report, 0, USAGE_MAXIMUM, HID_KEYBOARD_RIGHT_GUI);
- pack_parameter(&report, 1, LOGICAL_MINIMUM, 0);
- pack_parameter(&report, 1, LOGICAL_MAXIMUM, 1);
- pack_parameter(&report, 0, REPORT_SIZE, 1);
- pack_parameter(&report, 0, REPORT_COUNT, 8);
- pack_parameter(&report, 0, INPUT, MAIN_ITEM_VARIABLE);
- pack_parameter(&report, 0, REPORT_SIZE, 1);
- pack_parameter(&report, 0, REPORT_COUNT, 5);
- pack_parameter(&report, 0, USAGE_PAGE, HID_USAGE_PAGE_LEDS);
- pack_parameter(&report, 0, USAGE_MINIMUM, HID_LED_NUM_LOCK);
- pack_parameter(&report, 0, USAGE_MAXIMUM, HID_LED_KANA);
- pack_parameter(&report, 0, OUTPUT, MAIN_ITEM_VARIABLE);
- pack_parameter(&report, 0, REPORT_SIZE, 3);
- pack_parameter(&report, 0, REPORT_COUNT, 1);
- pack_parameter(&report, 0, OUTPUT, MAIN_ITEM_CONSTANT);
- pack_parameter(&report, 0, REPORT_SIZE, 8);
- pack_parameter(&report, 0, REPORT_COUNT, 6);
- pack_parameter(&report, 1, LOGICAL_MINIMUM, 0);
- pack_parameter(&report, 1, LOGICAL_MAXIMUM, HID_KEYBOARD_EX_SEL);
- pack_parameter(&report, 0, USAGE_PAGE, HID_USAGE_PAGE_KEYBOARD_KEYPAD);
- pack_parameter(&report, 0, USAGE_MINIMUM, 0);
- pack_parameter(&report, 0, USAGE_MAXIMUM, HID_KEYBOARD_EX_SEL);
- pack_parameter(&report, 0, INPUT, 0);
- PACK_VAL1(report, END_COLLECTION);
+ pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_KEYBOARD);
+ pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_APPLICATION);
+ pack_parameter(&report, 0, 1, REPORT_ID, REPORT_ID_KEYBOARD);
+ pack_parameter(&report, 0, 1, USAGE_PAGE, HID_GENERIC_DESKTOP_KEYPAD);
+ pack_parameter(&report, 0, 1, USAGE_MINIMUM, HID_KEYBOARD_LEFT_CONTROL);
+ pack_parameter(&report, 0, 1, USAGE_MAXIMUM, HID_KEYBOARD_RIGHT_GUI);
+ pack_parameter(&report, 1, 1, LOGICAL_MINIMUM, 0);
+ pack_parameter(&report, 1, 1, LOGICAL_MAXIMUM, 1);
+ pack_parameter(&report, 0, 1, REPORT_SIZE, 1);
+ pack_parameter(&report, 0, 1, REPORT_COUNT, 8);
+ pack_parameter(&report, 0, 1, INPUT, MAIN_ITEM_VARIABLE);
+ pack_parameter(&report, 0, 1, REPORT_SIZE, 1);
+ pack_parameter(&report, 0, 1, REPORT_COUNT, 5);
+ pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_LEDS);
+ pack_parameter(&report, 0, 1, USAGE_MINIMUM, HID_LED_NUM_LOCK);
+ pack_parameter(&report, 0, 1, USAGE_MAXIMUM, HID_LED_KANA);
+ pack_parameter(&report, 0, 1, OUTPUT, MAIN_ITEM_VARIABLE);
+ pack_parameter(&report, 0, 1, REPORT_SIZE, 3);
+ pack_parameter(&report, 0, 1, REPORT_COUNT, 1);
+ pack_parameter(&report, 0, 1, OUTPUT, MAIN_ITEM_CONSTANT);
+ pack_parameter(&report, 0, 1, REPORT_SIZE, 8);
+ pack_parameter(&report, 0, 1, REPORT_COUNT, 6);
+ pack_parameter(&report, 1, 1, LOGICAL_MINIMUM, 0);
+ pack_parameter(&report, 1, 1, LOGICAL_MAXIMUM, HID_KEYBOARD_EX_SEL);
+ pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_KEYBOARD_KEYPAD);
+ pack_parameter(&report, 0, 1, USAGE_MINIMUM, 0);
+ pack_parameter(&report, 0, 1, USAGE_MAXIMUM, HID_KEYBOARD_EX_SEL);
+ pack_parameter(&report, 0, 1, INPUT, 0);
+ PACK_VAL(report, END_COLLECTION);
/* Consumer usage controls - play/pause, stop, etc. */
usb_hid_report = &usb_hid_reports[REPORT_ID_CONSUMER];
usb_hid_report->usage_page = HID_USAGE_PAGE_CONSUMER;
usb_hid_report->buf_set = buf_set_consumer;
+ usb_hid_report->is_key_released = NULL;
- pack_parameter(&report, 0, USAGE_PAGE, HID_USAGE_PAGE_CONSUMER);
- PACK_VAL2(report, CONCAT(CONSUMER_USAGE,
- HID_CONSUMER_USAGE_CONSUMER_CONTROL));
- pack_parameter(&report, 0, COLLECTION, COLLECTION_APPLICATION);
- pack_parameter(&report, 0, REPORT_ID, REPORT_ID_CONSUMER);
- pack_parameter(&report, 0, REPORT_SIZE, 16);
- pack_parameter(&report, 0, REPORT_COUNT, 2);
- pack_parameter(&report, 1, LOGICAL_MINIMUM, 1);
- pack_parameter(&report, 1, LOGICAL_MAXIMUM, 652);
- pack_parameter(&report, 0, USAGE_MINIMUM,
+ pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_CONSUMER);
+ pack_parameter(&report, 0, 0, CONSUMER_USAGE,
HID_CONSUMER_USAGE_CONSUMER_CONTROL);
- pack_parameter(&report, 0, USAGE_MAXIMUM, HID_CONSUMER_USAGE_AC_SEND);
- pack_parameter(&report, 0, INPUT, MAIN_ITEM_NO_PREFERRED |
+ pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_APPLICATION);
+ pack_parameter(&report, 0, 1, REPORT_ID, REPORT_ID_CONSUMER);
+ pack_parameter(&report, 0, 1, REPORT_SIZE, 16);
+ pack_parameter(&report, 0, 1, REPORT_COUNT, 2);
+ pack_parameter(&report, 1, 1, LOGICAL_MINIMUM, 1);
+ pack_parameter(&report, 1, 1, LOGICAL_MAXIMUM, 652);
+ pack_parameter(&report, 0, 1, USAGE_MINIMUM,
+ HID_CONSUMER_USAGE_CONSUMER_CONTROL);
+ pack_parameter(&report, 0, 1, USAGE_MAXIMUM, HID_CONSUMER_USAGE_AC_SEND);
+ pack_parameter(&report, 0, 1, INPUT, MAIN_ITEM_NO_PREFERRED |
MAIN_ITEM_NULL_STATE);
- PACK_VAL1(report, END_COLLECTION);
+ PACK_VAL(report, END_COLLECTION);
+ /* Mouse control */
+ usb_hid_report = &usb_hid_reports[REPORT_ID_MOUSE];
+ usb_hid_report->usage_page = HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS;
+ usb_hid_report->buf_set = buf_set_mouse;
+ usb_hid_report->is_key_released = mouse_is_key_released;
+
+ pack_parameter(&report, 0, 1, USAGE_PAGE,
+ HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS);
+ pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_MOUSE);
+ pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_APPLICATION);
+ pack_parameter(&report, 0, 1, REPORT_ID, REPORT_ID_MOUSE);
+ pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_POINTER);
+ pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_PHYSICAL);
+ pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_BUTTON);
+ pack_parameter(&report, 0, 1, USAGE_MINIMUM, 1);
+ pack_parameter(&report, 0, 1, USAGE_MAXIMUM, 8);
+ pack_parameter(&report, 1, 1, LOGICAL_MINIMUM, 0);
+ pack_parameter(&report, 1, 1, LOGICAL_MAXIMUM, 1);
+ pack_parameter(&report, 0, 1, REPORT_SIZE, 1);
+ pack_parameter(&report, 0, 1, REPORT_COUNT, 8);
+ pack_parameter(&report, 0, 1, INPUT, MAIN_ITEM_VARIABLE);
+ pack_parameter(&report, 0, 1, USAGE_PAGE,
+ HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS);
+ pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_X);
+ pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_Y);
+ pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_WHEEL);
+ pack_parameter(&report, 0, 1, LOGICAL_MINIMUM, -127 & 0xFF);
+ pack_parameter(&report, 0, 1, LOGICAL_MAXIMUM, 127);
+ pack_parameter(&report, 0, 1, REPORT_SIZE, 8);
+ pack_parameter(&report, 0, 1, REPORT_COUNT, 3);
+ pack_parameter(&report, 0, 1, INPUT, MAIN_ITEM_VARIABLE | MAIN_ITEM_RELATIVE);
+ PACK_VAL(report, END_COLLECTION);
+ PACK_VAL(report, END_COLLECTION);
+
return (size_t)((uint32_t)report - (uint32_t)dest);
}
@@ -368,6 +509,9 @@
hid_descriptor.wDescriptorLength0 =
(uint16_t)descriptor_report_get(report_descriptor);
+ logf("hid: desc len %u", hid_descriptor.wDescriptorLength0);
+ buf_dump(report_descriptor, hid_descriptor.wDescriptorLength0);
+
PACK_DATA(*dest, hid_descriptor);
}
@@ -457,8 +601,8 @@
* to the DAP using the host's custom driver */
static int usb_hid_set_report(struct usb_ctrlrequest *req)
{
- static unsigned char buf[SET_REPORT_BUF_LEN]
- USB_DEVBSS_ATTR __attribute__((aligned(32)));
+ static unsigned char buf[SET_REPORT_BUF_LEN] USB_DEVBSS_ATTR
+ __attribute__((aligned(32)));
int length;
int rc = 0;
@@ -640,21 +784,27 @@
return;
}
- logf("Sending cmd 0x%x", id);
+ //logf("Sending cmd 0x%x", id);
buf[0] = report_id;
length = report->buf_set(&buf[1], id) + 1;
- logf("length %u", length);
+ //logf("length %u", length);
+ if (!length)
+ return;
+
/* Key pressed */
buf_dump(buf, length);
usb_hid_queue(buf, length);
- /* Key released */
- memset(buf, 0, length);
- buf[0] = report_id;
+ if (!report->is_key_released || report->is_key_released(id))
+ {
+ /* Key released */
+ memset(buf, 0, length);
+ buf[0] = report_id;
- buf_dump(buf, length);
- usb_hid_queue(buf, length);
+ buf_dump(buf, length);
+ usb_hid_queue(buf, length);
+ }
usb_hid_try_send_drv();
}
Index: manual/platform/e200.tex
===================================================================
--- manual/platform/e200.tex (revision 22816)
+++ 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 22816)
+++ manual/configure_rockbox/system_options.tex (working copy)
@@ -182,3 +182,30 @@
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.
+
+ \item [Mouse: ]This mode emulates a mouse.
+ \end{description}
+}