Index: apps/screens.c =================================================================== --- apps/screens.c (revision 20983) +++ apps/screens.c (working copy) @@ -34,6 +34,12 @@ #include "audio.h" #include "mp3_playback.h" #include "usb.h" +#if defined(HAVE_USBSTACK) +#include "usb_core.h" +#ifdef USB_HID +#include "usbstack/usb_hid.h" +#endif +#endif #include "settings.h" #include "status.h" #include "playlist.h" @@ -90,23 +96,63 @@ #endif #ifndef SIMULATOR -static int handle_usb_events(struct event_queue *q) +static int handle_usb_events(void) { - struct queue_event ev; int next_update=0; /* Don't return until we get SYS_USB_DISCONNECTED or SYS_TIMEOUT */ while(1) { - queue_wait_w_tmo(q, &ev, HZ/4); - switch(ev.id) + int button; +#if defined(HAVE_USBSTACK) && defined(USB_HID) + bool hid_enabled = usb_core_driver_enabled(USB_DRIVER_HID); + + if (hid_enabled) { + consumer_usage_page_t cmd = UNASSIGNED; + button = get_action(CONTEXT_USB_HID, HZ/4); + + switch (button) + { + case ACTION_USB_HID_PLAY: + cmd = PLAY_PAUSE; + break; + case ACTION_USB_HID_STOP: + cmd = STOP; + break; + case ACTION_USB_HID_SKIPPREV: + cmd = SCAN_PREVIOUS_TRACK; + break; + case ACTION_USB_HID_SKIPNEXT: + cmd = SCAN_NEXT_TRACK; + break; + case ACTION_USB_HID_VOLDOWN: + cmd = VOLUME_DECREMENT; + break; + case ACTION_USB_HID_VOLUP: + cmd = VOLUME_INCREMENT; + break; + case ACTION_USB_HID_MUTE: + cmd = MUTE; + break; + } + + if (cmd != UNASSIGNED) + usb_hid_send_consumer_usage(cmd); + } + else +#endif + button = button_get_w_tmo(HZ/4); + + switch(button) + { case SYS_USB_DISCONNECTED: usb_acknowledge(SYS_USB_DISCONNECTED_ACK); return 0; case SYS_TIMEOUT: break; } + if(TIME_AFTER(current_tick,next_update)) { if(usb_inserted()) { @@ -172,7 +218,7 @@ while (button_get(true) & BUTTON_REL); #else usb_acknowledge(SYS_USB_CONNECTED_ACK); - while(handle_usb_events(&button_queue)); + while (handle_usb_events()); #endif /* SIMULATOR */ #ifdef HAVE_LCD_CHARCELLS status_set_usb(false); Index: apps/action.h =================================================================== --- apps/action.h (revision 20983) +++ apps/action.h (working copy) @@ -74,6 +74,7 @@ CONTEXT_RECSCREEN, CONTEXT_KEYBOARD, CONTEXT_FM, + CONTEXT_USB_HID, }; @@ -237,6 +238,15 @@ ACTION_TOUCH_REPMODE, #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_MENU, LAST_ACTION_PLACEHOLDER, /* custom actions should be this + something */ }; Index: apps/debug_menu.c =================================================================== --- apps/debug_menu.c (revision 20983) +++ apps/debug_menu.c (working copy) @@ -686,7 +686,7 @@ lcd_update(); while (!(action_userabort(TIMEOUT_BLOCK))); - + #else /* Define this function in your target tree */ return __dbg_hw_info(); @@ -1760,7 +1760,7 @@ /* Conversion disabled */ snprintf(buf, 30, "T Battery: ?"); } - + lcd_puts(0, line++, buf); #elif defined(SANSA_E200) || defined(SANSA_C200) || defined(SANSA_CLIP) const int first = CHARGE_STATE_DISABLED; @@ -1785,7 +1785,7 @@ str ? str : ""); lcd_puts(0, 4, buf); - snprintf(buf, sizeof(buf), "CHARGER: %02X", + snprintf(buf, sizeof(buf), "CHARGER: %02X", ascodec_read(AS3514_CHARGER)); lcd_puts(0, 5, buf); #else @@ -1965,7 +1965,7 @@ } return btn; } -#elif (CONFIG_STORAGE & STORAGE_ATA) +#elif (CONFIG_STORAGE & STORAGE_ATA) static int disk_callback(int btn, struct gui_synclist *lists) { (void)lists; @@ -2119,7 +2119,7 @@ } #endif -#if (CONFIG_STORAGE & STORAGE_ATA) +#if (CONFIG_STORAGE & STORAGE_ATA) static bool dbg_identify_info(void) { int fd = creat("/identify_info.bin"); @@ -2213,9 +2213,9 @@ simplelist_addline(SIMPLELIST_ADD_LINE, "Commit delayed: %s", stat->commit_delayed ? "Yes" : "No"); - simplelist_addline(SIMPLELIST_ADD_LINE, "Queue length: %d", + simplelist_addline(SIMPLELIST_ADD_LINE, "Queue length: %d", stat->queue_length); - + if (synced) { synced = false; @@ -2608,8 +2608,6 @@ #ifdef USB_HID static bool hid_send_cmd(consumer_usage_page_t cmd, char *msg) { - (void)msg; - if (!usb_core_driver_enabled(USB_DRIVER_HID)) { splashf(HZ, "Send failed. Driver is disabled"); return false; @@ -2668,7 +2666,7 @@ struct simplelist_info isp1583; isp1583.scroll_all = true; simplelist_info_init(&isp1583, "ISP1583", dbg_usb_num_items(), NULL); - isp1583.timeout = HZ/100; + isp1583.timeout = HZ/100; isp1583.hide_selection = true; isp1583.get_name = dbg_usb_item; isp1583.action_callback = isp1583_action_callback; @@ -2693,7 +2691,7 @@ struct simplelist_info pic; pic.scroll_all = true; simplelist_info_init(&pic, "PIC", pic_dbg_num_items(), NULL); - pic.timeout = HZ/100; + pic.timeout = HZ/100; pic.hide_selection = true; pic.get_name = pic_dbg_item; pic.action_callback = pic_action_callback; Index: apps/keymaps/keymap-cowond2.c =================================================================== --- apps/keymaps/keymap-cowond2.c (revision 20983) +++ apps/keymaps/keymap-cowond2.c (working copy) @@ -153,6 +153,20 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) }; /* button_context_radio */ +#ifdef HAVE_USBSTACK +static const struct button_mapping button_context_usb_hid[] = { + { ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE }, + { ACTION_USB_HID_VOLUP, BUTTON_MINUS, BUTTON_NONE }, + { ACTION_USB_HID_VOLUP, BUTTON_MINUS|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_PLUS, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_PLUS|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + const struct button_mapping* target_get_context_mapping(int context) { switch (context) @@ -199,6 +213,10 @@ return button_context_pitchscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-m3.c =================================================================== --- apps/keymaps/keymap-m3.c (revision 20983) +++ apps/keymaps/keymap-m3.c (working copy) @@ -385,7 +385,38 @@ LAST_ITEM_IN_LIST }; /* remote_button_context_yesnoscreen */ +#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_PLAY|BUTTON_REPEAT, 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_MODE, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_REC, BUTTON_NONE }, + 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_MODE, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_RC_MENU, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* remote_button_context_usb_hid */ +#endif + static const struct button_mapping* get_context_mapping_remote( int context ) { context ^= CONTEXT_REMOTE; @@ -434,6 +465,11 @@ case CONTEXT_YESNOSCREEN: return remote_button_context_yesnoscreen; + +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return remote_button_context_usb_hid; +#endif } } @@ -487,5 +523,9 @@ case CONTEXT_YESNOSCREEN: return button_context_yesnoscreen; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } } Index: apps/keymaps/keymap-creativezv.c =================================================================== --- apps/keymaps/keymap-creativezv.c (revision 20983) +++ apps/keymaps/keymap-creativezv.c (working copy) @@ -216,6 +216,23 @@ LAST_ITEM_IN_LIST }; /* button_context_keyboard */ +#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_PLAY|BUTTON_REPEAT, 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_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_POWER, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + const struct button_mapping* get_context_mapping(int context) { switch (context&~CONTEXT_REMOTE) @@ -251,6 +268,10 @@ return button_context_pitchscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-h1x0_h3x0.c =================================================================== --- apps/keymaps/keymap-h1x0_h3x0.c (revision 20983) +++ apps/keymaps/keymap-h1x0_h3x0.c (working copy) @@ -722,6 +722,39 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS), }; /* button_context_settings_bmark */ +#ifdef HAVE_USBSTACK +static const struct button_mapping button_context_usb_hid[] = { + { ACTION_USB_HID_PLAY, BUTTON_ON, BUTTON_NONE }, + { ACTION_USB_HID_STOP, BUTTON_OFF, 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_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_MODE, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ + +static const struct button_mapping remote_button_context_usb_hid[] = { + { ACTION_USB_HID_PLAY, BUTTON_RC_ON, BUTTON_NONE }, + { ACTION_USB_HID_STOP, BUTTON_RC_STOP, 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_MENU, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_RC_MODE, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* remote_button_context_usb_hid */ + +#endif + /* the actual used tables */ static const struct button_mapping *remote_btn_ctxt_std = 0, @@ -863,7 +896,6 @@ } } - static const struct button_mapping* get_context_mapping_remote(int context) { if(remote_type() != _remote_type) @@ -912,6 +944,10 @@ return remote_btn_ctxt_keyboard; case CONTEXT_FM: return remote_btn_ctxt_radio; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return remote_button_context_usb_hid; +#endif } return remote_btn_ctxt_std; } @@ -967,6 +1003,10 @@ return button_context_keyboard; case CONTEXT_FM: return button_context_radio; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-ifp7xx.c =================================================================== --- apps/keymaps/keymap-ifp7xx.c (revision 20983) +++ apps/keymaps/keymap-ifp7xx.c (working copy) @@ -152,6 +152,23 @@ LAST_ITEM_IN_LIST }; /* button_context_keyboard */ +#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_EQ, 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_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_MODE, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ const struct button_mapping* get_context_mapping(int context) { @@ -178,6 +195,10 @@ return button_context_pitchscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-iaudio67.c =================================================================== --- apps/keymaps/keymap-iaudio67.c (revision 20983) +++ apps/keymaps/keymap-iaudio67.c (working copy) @@ -271,6 +271,23 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), }; /* button_context_bmark */ +#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_STOP, BUTTON_NONE }, + { ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_USB_HID_VOLUP, BUTTON_VOLUP, BUTTON_NONE }, + { ACTION_USB_HID_VOLUP, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_VOLDOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ const struct button_mapping* get_context_mapping(int context) { @@ -319,7 +336,10 @@ #endif case CONTEXT_KEYBOARD: return button_context_keyboard; - +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif default: return button_context_standard; } Index: apps/keymaps/keymap-player.c =================================================================== --- apps/keymaps/keymap-player.c (revision 20983) +++ apps/keymaps/keymap-player.c (working copy) @@ -120,7 +120,36 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) }; +#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_STOP, BUTTON_NONE }, + { ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_USB_HID_VOLUP, BUTTON_MENU|BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_USB_HID_VOLUP, BUTTON_MENU|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_MENU|BUTTON_LEFT, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_MENU|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_ON, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE }, + 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_STOP, 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 }, + + LAST_ITEM_IN_LIST +}; /* remote_button_context_usb_hid */ +#endif + static const struct button_mapping* get_context_mapping_remote( int context ) { context ^= CONTEXT_REMOTE; @@ -129,6 +158,10 @@ { case CONTEXT_WPS: return remote_button_context_wps; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return remote_button_context_usb_hid; +#endif default: return remote_button_context_standard; @@ -156,6 +189,10 @@ return button_context_tree; case CONTEXT_BOOKMARKSCREEN: return button_context_bmark; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif case CONTEXT_STD: case CONTEXT_LIST: default: Index: apps/keymaps/keymap-creativezvm.c =================================================================== --- apps/keymaps/keymap-creativezvm.c (revision 20983) +++ apps/keymaps/keymap-creativezvm.c (working copy) @@ -215,6 +215,23 @@ LAST_ITEM_IN_LIST }; /* button_context_keyboard */ +#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_PLAY|BUTTON_REPEAT, 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_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_POWER, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + const struct button_mapping* get_context_mapping(int context) { switch (context&~CONTEXT_REMOTE) @@ -250,6 +267,10 @@ return button_context_pitchscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-ondavx747.c =================================================================== --- apps/keymaps/keymap-ondavx747.c (revision 20983) +++ apps/keymaps/keymap-ondavx747.c (working copy) @@ -152,6 +152,21 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) }; /* button_context_keyboard */ +#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_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_MENU|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + const struct button_mapping* target_get_context_mapping(int context) { switch (context) @@ -196,6 +211,10 @@ return button_context_pitchscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-ondavx767.c =================================================================== --- apps/keymaps/keymap-ondavx767.c (revision 20983) +++ apps/keymaps/keymap-ondavx767.c (working copy) @@ -47,7 +47,12 @@ LAST_ITEM_IN_LIST }; /* button_context_wps */ +#ifdef HAVE_USBSTACK +static const struct button_mapping button_context_usb_hid[] = { + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ const struct button_mapping* get_context_mapping(int context) @@ -58,7 +63,10 @@ return button_context_standard; case CONTEXT_WPS: return button_context_wps; - +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif case CONTEXT_TREE: case CONTEXT_LIST: case CONTEXT_MAINMENU: Index: apps/keymaps/keymap-c100.c =================================================================== --- apps/keymaps/keymap-c100.c (revision 20983) +++ apps/keymaps/keymap-c100.c (working copy) @@ -269,6 +269,19 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), }; /* button_context_bmark */ +#ifdef HAVE_USBSTACK +static const struct button_mapping button_context_usb_hid[] = { + { ACTION_USB_HID_PLAY, BUTTON_VOLUP, BUTTON_NONE }, + { ACTION_USB_HID_STOP, BUTTON_VOLUP|BUTTON_REPEAT, 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_MENU, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ const struct button_mapping* get_context_mapping(int context) { @@ -317,7 +330,10 @@ #endif case CONTEXT_KEYBOARD: return button_context_keyboard; - +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif default: return button_context_standard; } Index: apps/keymaps/keymap-gigabeat-s.c =================================================================== --- apps/keymaps/keymap-gigabeat-s.c (revision 20983) +++ apps/keymaps/keymap-gigabeat-s.c (working copy) @@ -464,6 +464,42 @@ LAST_ITEM_IN_LIST }; /* remote_button_context_right_is_inc */ +#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 }, + + 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_POWER, 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 }, + + LAST_ITEM_IN_LIST +}; /* remote_button_context_usb_hid */ +#endif + static const struct button_mapping* get_context_mapping_remote( int context ) { context &= ~CONTEXT_REMOTE; @@ -506,6 +542,10 @@ case CONTEXT_FM: return remote_button_context_radio; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return remote_button_context_usb_hid; +#endif default: return remote_button_context_standard; } @@ -573,6 +613,10 @@ case CONTEXT_FM: return button_context_radio; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif default: return button_context_standard; } Index: apps/keymaps/keymap-gigabeat.c =================================================================== --- apps/keymaps/keymap-gigabeat.c (revision 20983) +++ apps/keymaps/keymap-gigabeat.c (working copy) @@ -316,6 +316,40 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) }; +#ifdef HAVE_USBSTACK +static const struct button_mapping button_context_usb_hid[] = { + { ACTION_USB_HID_PLAY, BUTTON_A, 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 }, + + 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 }, + + LAST_ITEM_IN_LIST +}; /* remote_button_context_usb_hid */ +#endif + static const struct button_mapping* get_context_mapping_remote( int context ) { context ^= CONTEXT_REMOTE; @@ -327,6 +361,10 @@ case CONTEXT_MAINMENU: case CONTEXT_TREE: return remote_button_context_tree; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return remote_button_context_usb_hid; +#endif } return remote_button_context_standard; } @@ -377,6 +415,10 @@ return button_context_pitchscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-c200.c =================================================================== --- apps/keymaps/keymap-c200.c (revision 20983) +++ apps/keymaps/keymap-c200.c (working copy) @@ -281,6 +281,23 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), }; /* button_context_bmark */ +#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_UP|BUTTON_REPEAT, 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_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_POWER, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ const struct button_mapping* get_context_mapping(int context) { @@ -330,7 +347,10 @@ #endif case CONTEXT_KEYBOARD: return button_context_keyboard; - +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif default: return button_context_standard; } Index: apps/keymaps/keymap-recorder.c =================================================================== --- apps/keymaps/keymap-recorder.c (revision 20983) +++ apps/keymaps/keymap-recorder.c (working copy) @@ -247,7 +247,36 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) }; +#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_OFF, 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_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_F2, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_F1, BUTTON_NONE }, + 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_STOP, 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 }, + + LAST_ITEM_IN_LIST +}; /* remote_button_context_usb_hid */ +#endif + static const struct button_mapping* get_context_mapping_remote( int context ) { context ^= CONTEXT_REMOTE; @@ -256,6 +285,10 @@ { case CONTEXT_WPS: return remote_button_context_wps; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return remote_button_context_usb_hid; +#endif default: return remote_button_context_standard; @@ -303,7 +336,10 @@ return button_context_keyboard; case CONTEXT_FM: return button_context_radio; - +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif case CONTEXT_STD: case CONTEXT_LIST: default: Index: apps/keymaps/keymap-e200.c =================================================================== --- apps/keymaps/keymap-e200.c (revision 20983) +++ apps/keymaps/keymap-e200.c (working copy) @@ -271,6 +271,23 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), }; /* button_context_bmark */ +#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 }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ const struct button_mapping* get_context_mapping(int context) { @@ -318,7 +335,10 @@ return button_context_recscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; - +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif default: return button_context_standard; } Index: apps/keymaps/keymap-m200.c =================================================================== --- apps/keymaps/keymap-m200.c (revision 20983) +++ apps/keymaps/keymap-m200.c (working copy) @@ -281,6 +281,23 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), }; /* button_context_bmark */ +#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_UP|BUTTON_REPEAT, 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_POWER, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ const struct button_mapping* get_context_mapping(int context) { @@ -330,6 +347,10 @@ #endif case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif default: return button_context_standard; Index: apps/keymaps/keymap-sa9200.c =================================================================== --- apps/keymaps/keymap-sa9200.c (revision 20983) +++ apps/keymaps/keymap-sa9200.c (working copy) @@ -269,6 +269,27 @@ LAST_ITEM_IN_LIST }; /* button_context_keyboard */ +#ifdef HAVE_USBSTACK +static const struct button_mapping button_context_usb_hid[] = { + { ACTION_USB_HID_PLAY, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE }, + { ACTION_USB_HID_SKIPPREV, BUTTON_REW, BUTTON_NONE }, + { ACTION_USB_HID_SKIPNEXT, BUTTON_FFWD, 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 }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + const struct button_mapping* get_context_mapping(int context) { switch (context) @@ -312,6 +333,10 @@ return button_context_pitchscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-touchscreen.c =================================================================== --- apps/keymaps/keymap-touchscreen.c (revision 20983) +++ apps/keymaps/keymap-touchscreen.c (working copy) @@ -245,6 +245,18 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM2|CONTEXT_FM) }; /* button_context_radio */ +#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 }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + const struct button_mapping* get_context_mapping(int context) { if (context & CONTEXT_CUSTOM2 @@ -297,6 +309,10 @@ return button_context_pitchscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-clip.c =================================================================== --- apps/keymaps/keymap-clip.c (revision 20983) +++ apps/keymaps/keymap-clip.c (working copy) @@ -265,6 +265,23 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), }; /* button_context_bmark */ +#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 }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ const struct button_mapping* get_context_mapping(int context) { @@ -310,7 +327,10 @@ return button_context_recscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; - +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif default: return button_context_standard; } Index: apps/keymaps/keymap-h10.c =================================================================== --- apps/keymaps/keymap-h10.c (revision 20983) +++ apps/keymaps/keymap-h10.c (working copy) @@ -332,6 +332,61 @@ }; + + + + + +static const struct button_mapping remote_button_context_wps[] = { + { ACTION_WPS_PLAY, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, + { ACTION_WPS_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT,BUTTON_RC_PLAY }, + { ACTION_WPS_SKIPPREV, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW}, + { ACTION_WPS_SEEKBACK, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_STOPSEEK, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_REPEAT }, + { ACTION_WPS_SKIPNEXT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, + { ACTION_WPS_SEEKFWD, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_STOPSEEK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_REPEAT }, + + { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, + { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, + { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, + + { ACTION_WPS_PITCHSCREEN, BUTTON_RC_PLAY|BUTTON_LEFT, BUTTON_RC_PLAY }, + { ACTION_WPS_ID3SCREEN, BUTTON_RC_PLAY|BUTTON_RIGHT, BUTTON_RC_PLAY }, + + LAST_ITEM_IN_LIST +}; /* remote_button_context_wps */ + +#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_PLAY|BUTTON_REPEAT, BUTTON_NONE }, + { 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 }, + + 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_SCROLL_UP, BUTTON_NONE }, + { ACTION_USB_HID_VOLUP, BUTTON_RC_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_RC_SCROLL_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_RC_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* remote_button_context_usb_hid */ +#endif + static const struct button_mapping* get_context_mapping_remote( int context ) { context ^= CONTEXT_REMOTE; @@ -361,6 +416,10 @@ return remote_button_context_pitchscreen; case CONTEXT_RECSCREEN: return button_context_recscreen; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return remote_button_context_usb_hid; +#endif default: return remote_button_context_standard; @@ -415,6 +474,10 @@ return button_context_recscreen; case CONTEXT_FM: return button_context_radio; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif default: return button_context_standard; } Index: apps/keymaps/keymap-av300.c =================================================================== --- apps/keymaps/keymap-av300.c (revision 20983) +++ apps/keymaps/keymap-av300.c (working copy) @@ -219,6 +219,23 @@ }; +#ifdef HAVE_USBSTACK +static const struct button_mapping button_context_usb_hid[] = { + { ACTION_USB_HID_PLAY, BUTTON_SELECT, BUTTON_NONE }, + { ACTION_USB_HID_STOP, BUTTON_OFF, 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_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_F2, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_F1, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + const struct button_mapping* get_context_mapping( int context ) { switch( context ) @@ -253,6 +270,10 @@ return button_context_keyboard; case CONTEXT_FM: return button_context_radio; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif case CONTEXT_STD: case CONTEXT_LIST: Index: apps/keymaps/keymap-ipod.c =================================================================== --- apps/keymaps/keymap-ipod.c (revision 20983) +++ apps/keymaps/keymap-ipod.c (working copy) @@ -187,6 +187,23 @@ }; /* button_context_recscreen */ #endif +#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_PLAY|BUTTON_REPEAT, 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_MENU, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + #if BUTTON_REMOTE != 0 /***************************************************************************** * Remote control mappings @@ -219,7 +236,21 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) }; +#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 }, + LAST_ITEM_IN_LIST +}; /* remote_button_context_usb_hid */ +#endif + static const struct button_mapping* get_context_mapping_remote( int context ) { context ^= CONTEXT_REMOTE; @@ -228,7 +259,10 @@ { case CONTEXT_WPS: return remote_button_context_wps; - +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return remote_button_context_usb_hid; +#endif default: return remote_button_context_standard; } @@ -281,6 +315,10 @@ case CONTEXT_RECSCREEN: return button_context_recscreen; #endif +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif default: return button_context_standard; } Index: apps/keymaps/keymap-x5.c =================================================================== --- apps/keymaps/keymap-x5.c (revision 20983) +++ apps/keymaps/keymap-x5.c (working copy) @@ -351,7 +351,38 @@ LAST_ITEM_IN_LIST }; /* remote_button_context_settings_yesnoscreen */ +#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_PLAY|BUTTON_REPEAT, 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_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_REC, BUTTON_NONE }, + 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_MODE, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_RC_MENU, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* remote_button_context_usb_hid */ +#endif + static const struct button_mapping* get_context_mapping_remote( int context ) { context ^= CONTEXT_REMOTE; @@ -388,6 +419,11 @@ case CONTEXT_YESNOSCREEN: return remote_button_context_yesnoscreen; + +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return remote_button_context_usb_hid; +#endif } } @@ -448,5 +484,10 @@ case CONTEXT_YESNOSCREEN: return button_context_yesnoscreen; + +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } } Index: apps/keymaps/keymap-mr100.c =================================================================== --- apps/keymaps/keymap-mr100.c (revision 20983) +++ apps/keymaps/keymap-mr100.c (working copy) @@ -313,6 +313,37 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) }; +#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_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE }, + + 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_UP, BUTTON_NONE }, + { ACTION_USB_HID_VOLUP, BUTTON_RC_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_RC_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_RC_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_RC_FAV, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* remote_button_context_usb_hid */ +#endif + static const struct button_mapping* get_context_mapping_remote( int context ) { context ^= CONTEXT_REMOTE; @@ -324,6 +355,10 @@ case CONTEXT_MAINMENU: case CONTEXT_TREE: return remote_button_context_tree; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return remote_button_context_usb_hid; +#endif } return remote_button_context_standard; } @@ -374,6 +409,10 @@ return button_context_pitchscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-logikdax.c =================================================================== --- apps/keymaps/keymap-logikdax.c (revision 20983) +++ apps/keymaps/keymap-logikdax.c (working copy) @@ -263,6 +263,19 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), }; /* button_context_bmark */ +#ifdef HAVE_USBSTACK +static const struct button_mapping button_context_usb_hid[] = { + { ACTION_USB_HID_PLAY, BUTTON_POWERPLAY, BUTTON_NONE }, + { ACTION_USB_HID_STOP, BUTTON_POWERPLAY|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_MODE, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ const struct button_mapping* get_context_mapping(int context) { @@ -311,6 +324,10 @@ #endif case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif default: return button_context_standard; Index: apps/keymaps/keymap-mr500.c =================================================================== --- apps/keymaps/keymap-mr500.c (revision 20983) +++ apps/keymaps/keymap-mr500.c (working copy) @@ -194,6 +194,24 @@ LAST_ITEM_IN_LIST }; /* button_context_keyboard */ +#ifdef HAVE_USBSTACK +static const struct button_mapping button_context_usb_hid[] = { + { ACTION_USB_HID_PLAY, BUTTON_RC_PLAY, BUTTON_NONE }, + { ACTION_USB_HID_STOP, BUTTON_RC_DOWN, 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_HEART, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_RC_MODE, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_POWER, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + const struct button_mapping* target_get_context_mapping(int context) { switch (context&(~CONTEXT_REMOTE)) @@ -237,6 +255,10 @@ return button_context_pitchscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-meizu-m6sl.c =================================================================== --- apps/keymaps/keymap-meizu-m6sl.c (revision 20983) +++ apps/keymaps/keymap-meizu-m6sl.c (working copy) @@ -256,7 +256,23 @@ LAST_ITEM_IN_LIST }; /* button_context_keyboard */ +#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_PLAY|BUTTON_REPEAT, 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_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE }, + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + const struct button_mapping* get_context_mapping(int context) { switch (context) @@ -300,6 +316,10 @@ return button_context_pitchscreen; case CONTEXT_KEYBOARD: return button_context_keyboard; +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-ondio.c =================================================================== --- apps/keymaps/keymap-ondio.c (revision 20983) +++ apps/keymaps/keymap-ondio.c (working copy) @@ -187,6 +187,22 @@ }; #endif +#ifdef HAVE_USBSTACK +static const struct button_mapping button_context_usb_hid[] = { + { ACTION_USB_HID_PLAY, BUTTON_OFF, BUTTON_NONE }, + { ACTION_USB_HID_STOP, BUTTON_OFF|REPEAT, 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_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + const struct button_mapping* get_context_mapping( int context ) { switch( context ) @@ -226,6 +242,10 @@ case CONTEXT_FM: return button_context_radio; #endif +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif case CONTEXT_LIST: default: return button_context_standard; Index: apps/keymaps/keymap-hdd1630.c =================================================================== --- apps/keymaps/keymap-hdd1630.c (revision 20983) +++ apps/keymaps/keymap-hdd1630.c (working copy) @@ -282,6 +282,27 @@ }; #endif +#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 }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + const struct button_mapping* get_context_mapping(int context) { switch (context) @@ -329,6 +350,10 @@ case CONTEXT_FM: return button_context_radio; #endif +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif } return button_context_standard; } Index: apps/keymaps/keymap-fuze.c =================================================================== --- apps/keymaps/keymap-fuze.c (revision 20983) +++ apps/keymaps/keymap-fuze.c (working copy) @@ -273,6 +273,23 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), }; /* button_context_bmark */ +#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_HOME, 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 }, + + LAST_ITEM_IN_LIST +}; /* button_context_usb_hid */ +#endif + /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ const struct button_mapping* get_context_mapping(int context) { @@ -322,7 +339,10 @@ #endif case CONTEXT_KEYBOARD: return button_context_keyboard; - +#ifdef HAVE_USBSTACK + case CONTEXT_USB_HID: + return button_context_usb_hid; +#endif default: return button_context_standard; } Index: firmware/export/usb_core.h =================================================================== --- firmware/export/usb_core.h (revision 20983) +++ firmware/export/usb_core.h (working copy) @@ -26,7 +26,7 @@ //#define USB_SERIAL #define USB_STORAGE #define USB_CHARGING_ONLY -//#define USB_HID +#define USB_HID #else /* BOOTLOADER */ #define USB_CHARGING_ONLY #endif /* BOOTLOADER */ Index: firmware/target/arm/usb-drv-arc.c =================================================================== --- firmware/target/arm/usb-drv-arc.c (revision 20983) +++ firmware/target/arm/usb-drv-arc.c (working copy) @@ -829,12 +829,10 @@ return -1; } - log_ep(ep_num, ep_dir, "add"); - endpoint->allocated[ep_dir] = 1; endpoint->type[ep_dir] = ep_type; - log_ep(ep_num, ep_dir, "got"); + log_ep(ep_num, ep_dir, "add"); return (ep_num | (dir & USB_ENDPOINT_DIR_MASK)); } @@ -998,13 +996,13 @@ for(ep_num=1;ep_numallocated[DIR_OUT]) { + /* manual: 32.9.5.18 (Caution): Leaving an unconfigured endpoint control + * will cause undefined behavior for the data pid tracking on the active + * endpoint/direction. */ + if (!endpoint->allocated[DIR_OUT]) endpoint->type[DIR_OUT] = USB_ENDPOINT_XFER_BULK; - } - if (!endpoint->allocated[DIR_IN]) { + if (!endpoint->allocated[DIR_IN]) endpoint->type[DIR_IN] = USB_ENDPOINT_XFER_BULK; - } REG_ENDPTCTRL(ep_num) = EPCTRL_RX_DATA_TOGGLE_RST | EPCTRL_RX_ENABLE | Index: firmware/usb.c =================================================================== --- firmware/usb.c (revision 20983) +++ firmware/usb.c (working copy) @@ -568,9 +568,8 @@ queue_init(&usb_queue, true); - usb_thread_entry = create_thread(usb_thread, usb_stack, - sizeof(usb_stack), 0, usb_thread_name - IF_PRIO(, PRIORITY_SYSTEM) IF_COP(, CPU)); + usb_thread_entry = create_thread(usb_thread, usb_stack, sizeof(usb_stack), + 0, usb_thread_name IF_PRIO(, PRIORITY_SYSTEM) IF_COP(, CPU)); #ifndef USB_STATUS_BY_EVENT countdown = -1; Index: firmware/drivers/isp1583.c =================================================================== --- firmware/drivers/isp1583.c (revision 20983) +++ firmware/drivers/isp1583.c (working copy) @@ -19,7 +19,7 @@ * KIND, either express or implied. * ****************************************************************************/ - + #include "config.h" #include "usb_ch9.h" #include "usb_drv.h" @@ -92,8 +92,8 @@ /* Select the endpoint */ ISP1583_DFLOW_EPINDEX = idx; /* The delay time from the Write Endpoint Index register to the Read Data Port register must be at least 190 ns. - * The delay time from the Write Endpoint Index register to the Write Data Port register must be at least 100 ns. - */ + * The delay time from the Write Endpoint Index register to the Write Data Port register must be at least 100 ns. + */ NOP; } @@ -102,26 +102,26 @@ /* Select the endpoint */ ISP1583_DFLOW_EPINDEX = DFLOW_EPINDEX_EP0SETUP; /* The delay time from the Write Endpoint Index register to the Read Data Port register must be at least 190 ns. - * The delay time from the Write Endpoint Index register to the Write Data Port register must be at least 100 ns. - */ + * The delay time from the Write Endpoint Index register to the Write Data Port register must be at least 100 ns. + */ NOP; } static void usb_setup_endpoint(int idx, int max_pkt_size, int type) { - if(epidx_n(idx)!=0) + if(epidx_n(idx)!=EP_CONTROL) { usb_select_endpoint(idx); ISP1583_DFLOW_MAXPKSZ = max_pkt_size & 0x7FF; ISP1583_DFLOW_EPTYPE = (DFLOW_EPTYPE_NOEMPKT | DFLOW_EPTYPE_DBLBUF | (type & 0x3)); - + /* clear buffer ... */ ISP1583_DFLOW_CTRLFUN |= DFLOW_CTRLFUN_CLBUF; /* ... twice because of double buffering */ usb_select_endpoint(idx); ISP1583_DFLOW_CTRLFUN |= DFLOW_CTRLFUN_CLBUF; } - + struct usb_endpoint *ep; ep = &(endpoints[epidx_n(idx)]); ep->halt[epidx_dir(idx)] = 0; @@ -135,7 +135,7 @@ static void usb_enable_endpoint(int idx) { - if(epidx_n(idx)!=0) + if(epidx_n(idx)!=EP_CONTROL) { usb_select_endpoint(idx); /* Enable interrupt */ @@ -143,7 +143,7 @@ /* Enable endpoint */ ISP1583_DFLOW_EPTYPE |= DFLOW_EPTYPE_ENABLE; } - + endpoints[epidx_n(idx)].enabled[epidx_dir(idx)] = 1; } /* @@ -152,7 +152,7 @@ usb_select_endpoint(idx); ISP1583_DFLOW_EPTYPE &= ~DFLOW_EPTYPE_ENABLE; bc_int_value(&ISP1583_INIT_INTEN_A, &ISP1583_INIT_INTEN_B, ISP1583_INIT_INTEN_READ, 1 << (10 + idx)); - + if(set_struct) endpoints[epidx_n(idx)].enabled[epidx_dir(idx)] = 0; } @@ -185,9 +185,9 @@ int len; if (endpoints[n].halt[DIR_RX] - || !endpoints[n].enabled[DIR_RX] - || endpoints[n].in_min_len < 0 - || !endpoints[n].in_ack) + || !endpoints[n].enabled[DIR_RX] + || endpoints[n].in_min_len < 0 + || !endpoints[n].in_ack) return -1; endpoints[n].in_ack = 0; @@ -195,15 +195,17 @@ usb_select_endpoint(ep_index(n, DIR_RX)); len = usb_get_packet(endpoints[n].in_buf + endpoints[n].in_ptr, - endpoints[n].in_max_len - endpoints[n].in_ptr); + endpoints[n].in_max_len - endpoints[n].in_ptr); endpoints[n].in_ptr += len; - + if (endpoints[n].in_ptr >= endpoints[n].in_min_len) { endpoints[n].in_min_len = -1; if (endpoints[n].in_done) + { (*(endpoints[n].in_done))(n, endpoints[n].in_buf, - endpoints[n].in_ptr); + endpoints[n].in_ptr); + } } logf("receive_end"); return 0; @@ -226,8 +228,8 @@ unsigned char *p; if (endpoints[n].halt[DIR_TX] - || !endpoints[n].enabled[DIR_TX] - || !endpoints[n].out_in_progress) + || !endpoints[n].enabled[DIR_TX] + || !endpoints[n].out_in_progress) { logf("NOT SEND TO EP!"); return -1; @@ -237,27 +239,29 @@ { endpoints[n].out_in_progress = 0; if (endpoints[n].out_done) + { (*(endpoints[n].out_done))(n, endpoints[n].out_buf, - endpoints[n].out_len); + endpoints[n].out_len); + } logf("ALREADY SENT TO EP!"); return -1; } - + if (usb_out_buffer_full(n)) { logf("BUFFER FULL!"); return -1; } - + usb_select_endpoint(ep_index(n, DIR_TX)); max_pkt_size = endpoints[n].max_pkt_size[DIR_TX]; len = endpoints[n].out_len - endpoints[n].out_ptr; if (len > max_pkt_size) len = max_pkt_size; - + if(len < max_pkt_size) ISP1583_DFLOW_BUFLEN = len; - + p = endpoints[n].out_buf + endpoints[n].out_ptr; i = 0; while (len - i >= 2) @@ -276,7 +280,7 @@ */ if (endpoints[n].out_ptr == endpoints[n].out_len) endpoints[n].out_ptr = -1; - + logf("send_end"); return 0; } @@ -312,7 +316,7 @@ usb_select_setup_endpoint(); else usb_select_endpoint(ep_index(ep, dir)); - + ISP1583_DFLOW_CTRLFUN |= DFLOW_CTRLFUN_STATUS; } @@ -336,12 +340,12 @@ } else { - usb_drv_stall(0, true, false); - usb_drv_stall(0, true, true); + usb_drv_stall(EP_CONTROL, true, false); + usb_drv_stall(EP_CONTROL, true, true); logf("usb_handle_setup_rx() failed"); return; } - + logf("usb_handle_setup_rx(): %02x %02x %02x %02x %02x %02x %02x %02x", setup_pkt_buf[0], setup_pkt_buf[1], setup_pkt_buf[2], setup_pkt_buf[3], setup_pkt_buf[4], setup_pkt_buf[5], setup_pkt_buf[6], setup_pkt_buf[7]); } @@ -369,25 +373,31 @@ static void setup_endpoints(void) { - usb_setup_endpoint(ep_index(0, DIR_RX), 64, 0); - usb_setup_endpoint(ep_index(0, DIR_TX), 64, 0); - int i; + int max_pkt_size = (high_speed_mode ? 512 : 64); + + usb_setup_endpoint(ep_index(EP_CONTROL, DIR_RX), 64, + USB_ENDPOINT_XFER_CONTROL); + usb_setup_endpoint(ep_index(EP_CONTROL, DIR_TX), 64, + USB_ENDPOINT_XFER_CONTROL); + for(i = 1; i < USB_NUM_ENDPOINTS-1; i++) { - usb_setup_endpoint(ep_index(i, DIR_RX), (high_speed_mode ? 512 : 64), 2); /* 2 = TYPE_BULK */ - usb_setup_endpoint(ep_index(i, DIR_TX), (high_speed_mode ? 512 : 64), 2); + usb_setup_endpoint(ep_index(i, DIR_RX), max_pkt_size, + USB_ENDPOINT_XFER_BULK); + usb_setup_endpoint(ep_index(i, DIR_TX), max_pkt_size, + USB_ENDPOINT_XFER_BULK); } - - usb_enable_endpoint(ep_index(0, DIR_RX)); - usb_enable_endpoint(ep_index(0, DIR_TX)); - + + usb_enable_endpoint(ep_index(EP_CONTROL, DIR_RX)); + usb_enable_endpoint(ep_index(EP_CONTROL, DIR_TX)); + for (i = 1; i < USB_NUM_ENDPOINTS-1; i++) { usb_enable_endpoint(ep_index(i, DIR_RX)); usb_enable_endpoint(ep_index(i, DIR_TX)); } - + ZVM_SPECIFIC; } @@ -414,45 +424,45 @@ sleep(10); /* Enable CLKAON & GLINTENA */ ISP1583_INIT_MODE = STANDARD_INIT_MODE; - + /* Disable all OTG functions */ ISP1583_INIT_OTG = 0; - #ifdef DEBUG +#ifdef DEBUG logf("BUS_CONF/DA0:%d MODE0/DA1: %d MODE1: %d", (bool)(ISP1583_INIT_MODE & INIT_MODE_TEST0), (bool)(ISP1583_INIT_MODE & INIT_MODE_TEST1), (bool)(ISP1583_INIT_MODE & INIT_MODE_TEST2)); logf("Chip ID: 0x%x", ISP1583_GEN_CHIPID); //logf("INV0: 0x% IRQEDGE: 0x%x IRQPORT: 0x%x", IO_GIO_INV0, IO_GIO_IRQEDGE, IO_GIO_IRQPORT); - #endif +#endif /*Set interrupt generation to target-specific mode + - * Set the control pipe to ACK only interrupt + - * Set the IN pipe to ACK only interrupt + - * Set OUT pipe to ACK and NYET interrupt - */ - + * Set the control pipe to ACK only interrupt + + * Set the IN pipe to ACK only interrupt + + * Set OUT pipe to ACK and NYET interrupt + */ + ISP1583_INIT_INTCONF = 0x54 | INT_CONF_TARGET; /* Clear all interrupts */ set_int_value(ISP1583_GEN_INT_A, ISP1583_GEN_INT_B, 0xFFFFFFFF); /* Enable USB interrupts */ set_int_value(ISP1583_INIT_INTEN_A, ISP1583_INIT_INTEN_B, STANDARD_INTEN); - + ZVM_SPECIFIC; - + /* Enable interrupt at CPU level */ EN_INT_CPU_TARGET; - + setup_endpoints(); - + /* Clear device address and disable it */ ISP1583_INIT_ADDRESS = 0; - + /* Turn SoftConnect on */ ISP1583_INIT_MODE |= INIT_MODE_SOFTCT; - + ZVM_SPECIFIC; - + //tick_add_task(usb_helper); - + logf("usb_init_device() finished"); } @@ -460,7 +470,7 @@ { return (int)high_speed_mode; } - + void usb_drv_exit(void) { logf("usb_drv_exit()"); @@ -468,7 +478,7 @@ /* Disable device */ ISP1583_INIT_MODE &= ~INIT_MODE_SOFTCT; ISP1583_INIT_ADDRESS = 0; - + /* Disable interrupts */ set_int_value(ISP1583_INIT_INTEN_A, ISP1583_INIT_INTEN_B, 0); /* and the CPU's one... */ @@ -478,9 +488,9 @@ /* Send usb controller to suspend mode */ ISP1583_INIT_MODE = INIT_MODE_GOSUSP; ISP1583_INIT_MODE = 0; - + //tick_remove_task(usb_helper); - + ZVM_SPECIFIC; } @@ -517,7 +527,7 @@ int usb_drv_recv(int ep, void* ptr, int length) { logf("usb_drv_recv(%d, 0x%x, %d)", ep, (int)ptr, length); - if(ep == 0 && length == 0 && ptr == NULL) + if(ep == EP_CONTROL && length == 0 && ptr == NULL) { usb_status_ack(ep, DIR_TX); return 0; @@ -527,7 +537,7 @@ endpoints[ep].in_max_len = length; endpoints[ep].in_min_len = length; endpoints[ep].in_ptr = 0; - if(ep == 0) + if(ep == EP_CONTROL) { usb_data_stage_enable(ep, DIR_RX); return usb_receive(ep); @@ -560,7 +570,7 @@ int usb_drv_send(int ep, void* ptr, int length) { logf("usb_drv_send_nb(%d, 0x%x, %d)", ep, (int)ptr, length); - if(ep == 0 && length == 0 && ptr == NULL) + if(ep == EP_CONTROL && length == 0 && ptr == NULL) { usb_status_ack(ep, DIR_RX); return 0; @@ -572,7 +582,7 @@ endpoints[ep].out_len = length; endpoints[ep].out_ptr = 0; endpoints[ep].out_in_progress = 1; - if(ep == 0) + if(ep == EP_CONTROL) { int rc = usb_send(ep); usb_data_stage_enable(ep, DIR_TX); @@ -606,6 +616,9 @@ if (type != USB_ENDPOINT_XFER_BULK) return -1; + if (type != USB_ENDPOINT_XFER_BULK) + return -1; + bit=(dir & USB_DIR_IN)? 2:1; for (i=1; i < USB_NUM_ENDPOINTS; i++) { @@ -631,13 +644,13 @@ /* Enable USB interrupts */ ISP1583_INIT_INTCONF = 0x54 | INT_CONF_TARGET; set_int_value(ISP1583_INIT_INTEN_A, ISP1583_INIT_INTEN_B, STANDARD_INTEN); - + /* Disable all OTG functions */ ISP1583_INIT_OTG = 0; - + /* Clear device address and enable it */ ISP1583_INIT_ADDRESS = INIT_ADDRESS_DEVEN; - + ZVM_SPECIFIC; /* Reset endpoints to default */ @@ -651,13 +664,13 @@ { unsigned long ints; ints = ISP1583_GEN_INT_READ & ISP1583_INIT_INTEN_READ; - + if(!ints) return; - + /* Unlock the device's registers */ ISP1583_GEN_UNLCKDEV = ISP1583_UNLOCK_CODE; - + //logf(" handling int [0x%lx & 0x%lx = 0x%x]", ISP1583_GEN_INT_READ, ISP1583_INIT_INTEN_READ, (int)ints); if(ints & INT_IEBRST) /* Bus reset */ @@ -690,7 +703,7 @@ { if(i>25) break; - + if(ep_event & (1 << i)) { logf("EP%d %s interrupt", (i - 10) / 2, i % 2 ? "RX" : "TX"); @@ -718,7 +731,7 @@ } /* Mask all (enabled) interrupts */ set_int_value(ISP1583_GEN_INT_A, ISP1583_GEN_INT_B, ints); - + ZVM_SPECIFIC; } @@ -726,7 +739,7 @@ { logf("usb_drv_set_address(0x%x)", address); ISP1583_INIT_ADDRESS = (address & 0x7F) | INIT_ADDRESS_DEVEN; - + ZVM_SPECIFIC; }