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} +}