forked from len0rd/rockbox
Commit "FS#10468 - USB HID: Show keypad mode on screen"
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22852 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
d7f4f9ff75
commit
8c5141b32e
54 changed files with 1651 additions and 344 deletions
|
@ -150,6 +150,9 @@ dsp_arm.S
|
||||||
eq_arm.S
|
eq_arm.S
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USB_ENABLE_HID
|
||||||
|
usb_keymaps.c
|
||||||
|
#endif
|
||||||
metadata.c
|
metadata.c
|
||||||
metadata/mp3.c
|
metadata/mp3.c
|
||||||
#if CONFIG_CODEC == SWCODEC
|
#if CONFIG_CODEC == SWCODEC
|
||||||
|
|
|
@ -76,6 +76,7 @@ enum {
|
||||||
CONTEXT_KEYBOARD,
|
CONTEXT_KEYBOARD,
|
||||||
CONTEXT_FM,
|
CONTEXT_FM,
|
||||||
CONTEXT_USB_HID,
|
CONTEXT_USB_HID,
|
||||||
|
CONTEXT_USB_HID_MOUSE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -241,14 +242,52 @@ enum {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* USB HID codes */
|
/* USB HID codes */
|
||||||
ACTION_USB_HID_PLAY,
|
ACTION_USB_HID_FIRST, /* Place holder */
|
||||||
ACTION_USB_HID_STOP,
|
ACTION_USB_HID_DEC,
|
||||||
ACTION_USB_HID_SKIPPREV,
|
ACTION_USB_HID_INC,
|
||||||
ACTION_USB_HID_SKIPNEXT,
|
ACTION_USB_HID_START,
|
||||||
ACTION_USB_HID_VOLDOWN,
|
ACTION_USB_HID_START_LONG,
|
||||||
ACTION_USB_HID_VOLUP,
|
ACTION_USB_HID_QUIT,
|
||||||
ACTION_USB_HID_MUTE,
|
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,
|
||||||
|
ACTION_USB_HID_MENU_LONG,
|
||||||
|
ACTION_USB_HID_MODE,
|
||||||
|
ACTION_USB_HID_MODE_LONG,
|
||||||
|
ACTION_USB_HID_MOUSE_UP,
|
||||||
|
ACTION_USB_HID_MOUSE_UP_REP,
|
||||||
|
ACTION_USB_HID_MOUSE_DOWN,
|
||||||
|
ACTION_USB_HID_MOUSE_DOWN_REP,
|
||||||
|
ACTION_USB_HID_MOUSE_LEFT,
|
||||||
|
ACTION_USB_HID_MOUSE_LEFT_REP,
|
||||||
|
ACTION_USB_HID_MOUSE_RIGHT,
|
||||||
|
ACTION_USB_HID_MOUSE_RIGHT_REP,
|
||||||
|
ACTION_USB_HID_MOUSE_LDRAG_UP,
|
||||||
|
ACTION_USB_HID_MOUSE_LDRAG_UP_REP,
|
||||||
|
ACTION_USB_HID_MOUSE_LDRAG_DOWN,
|
||||||
|
ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP,
|
||||||
|
ACTION_USB_HID_MOUSE_LDRAG_LEFT,
|
||||||
|
ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP,
|
||||||
|
ACTION_USB_HID_MOUSE_LDRAG_RIGHT,
|
||||||
|
ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP,
|
||||||
|
ACTION_USB_HID_MOUSE_RDRAG_UP,
|
||||||
|
ACTION_USB_HID_MOUSE_RDRAG_UP_REP,
|
||||||
|
ACTION_USB_HID_MOUSE_RDRAG_DOWN,
|
||||||
|
ACTION_USB_HID_MOUSE_RDRAG_DOWN_REP,
|
||||||
|
ACTION_USB_HID_MOUSE_RDRAG_LEFT,
|
||||||
|
ACTION_USB_HID_MOUSE_RDRAG_LEFT_REP,
|
||||||
|
ACTION_USB_HID_MOUSE_RDRAG_RIGHT,
|
||||||
|
ACTION_USB_HID_MOUSE_RDRAG_RIGHT_REP,
|
||||||
|
ACTION_USB_HID_MOUSE_BUTTON_LEFT,
|
||||||
|
ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL,
|
||||||
|
ACTION_USB_HID_MOUSE_BUTTON_RIGHT,
|
||||||
|
ACTION_USB_HID_MOUSE_BUTTON_RIGHT_REL,
|
||||||
|
ACTION_USB_HID_LAST, /* Place holder */
|
||||||
|
|
||||||
LAST_ACTION_PLACEHOLDER, /* custom actions should be this + something */
|
LAST_ACTION_PLACEHOLDER, /* custom actions should be this + something */
|
||||||
};
|
};
|
||||||
|
|
|
@ -232,17 +232,60 @@ static const struct button_mapping button_context_bmark[] = {
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
|
||||||
}; /* button_context_bmark */
|
}; /* button_context_bmark */
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
{ ACTION_USB_HID_PLAY, BUTTON_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_VOLUP, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOLDOWN, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_MUTE, BUTTON_VOLDOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_START, BUTTON_UP|BUTTON_REL, BUTTON_UP },
|
||||||
{ ACTION_USB_HID_MENU, BUTTON_DOWN, BUTTON_NONE },
|
{ 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_REPEAT, BUTTON_DOWN },
|
||||||
|
{ ACTION_USB_HID_MODE, BUTTON_DOWN|BUTTON_REL, BUTTON_DOWN },
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST
|
LAST_ITEM_IN_LIST
|
||||||
}; /* button_context_usb_hid */
|
}; /* button_context_usb_hid */
|
||||||
|
|
||||||
|
static const struct button_mapping button_context_usb_hid_mouse[] = {
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP, BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP_REP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN, BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN_REP, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT, BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT_REP, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT_REP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP, BUTTON_SELECT|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP_REP, BUTTON_SELECT|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN, BUTTON_SELECT|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP, BUTTON_SELECT|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT, BUTTON_SELECT|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP, BUTTON_SELECT|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT, BUTTON_SELECT|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP, BUTTON_SELECT|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP, BUTTON_POWER|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP_REP, BUTTON_POWER|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN, BUTTON_POWER|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN_REP, BUTTON_POWER|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT, BUTTON_POWER|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT_REP, BUTTON_POWER|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT, BUTTON_POWER|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT_REP, BUTTON_POWER|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT, BUTTON_SELECT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT, BUTTON_POWER, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT_REL, BUTTON_POWER|BUTTON_REL, BUTTON_NONE },
|
||||||
|
|
||||||
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
|
||||||
|
}; /* button_context_usb_hid_mouse */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
|
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
|
||||||
|
@ -293,9 +336,11 @@ const struct button_mapping* get_context_mapping(int context)
|
||||||
#endif
|
#endif
|
||||||
case CONTEXT_KEYBOARD:
|
case CONTEXT_KEYBOARD:
|
||||||
return button_context_keyboard;
|
return button_context_keyboard;
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return button_context_usb_hid;
|
return button_context_usb_hid;
|
||||||
|
case CONTEXT_USB_HID_MOUSE:
|
||||||
|
return button_context_usb_hid_mouse;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
return button_context_standard;
|
return button_context_standard;
|
||||||
|
|
|
@ -264,21 +264,62 @@ static const struct button_mapping button_context_bmark[] = {
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
|
||||||
}; /* button_context_bmark */
|
}; /* button_context_bmark */
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
{ ACTION_USB_HID_PLAY, BUTTON_UP|BUTTON_REL, BUTTON_UP },
|
{ ACTION_USB_HID_INC, BUTTON_VOL_UP, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
|
{ ACTION_USB_HID_INC, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_START, BUTTON_UP|BUTTON_REL, BUTTON_UP },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_START_LONG, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT_LONG, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER },
|
||||||
{ ACTION_USB_HID_MUTE, BUTTON_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
|
||||||
{ ACTION_USB_HID_MENU, BUTTON_POWER, BUTTON_NONE },
|
{ 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
|
LAST_ITEM_IN_LIST
|
||||||
}; /* button_context_usb_hid */
|
}; /* button_context_usb_hid */
|
||||||
|
|
||||||
|
static const struct button_mapping button_context_usb_hid_mouse[] = {
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP, BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP_REP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN, BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN_REP, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT, BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT_REP, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT_REP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP, BUTTON_SELECT|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP_REP, BUTTON_SELECT|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN, BUTTON_SELECT|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP, BUTTON_SELECT|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT, BUTTON_SELECT|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP, BUTTON_SELECT|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT, BUTTON_SELECT|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP, BUTTON_SELECT|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP, BUTTON_POWER|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP_REP, BUTTON_POWER|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN, BUTTON_POWER|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN_REP, BUTTON_POWER|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT, BUTTON_POWER|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT_REP, BUTTON_POWER|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT, BUTTON_POWER|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT_REP, BUTTON_POWER|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT, BUTTON_SELECT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT, BUTTON_POWER, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT_REL, BUTTON_POWER|BUTTON_REL, BUTTON_NONE },
|
||||||
|
|
||||||
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
|
||||||
|
}; /* button_context_usb_hid_mouse */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
|
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
|
||||||
|
@ -327,9 +368,11 @@ const struct button_mapping* get_context_mapping(int context)
|
||||||
#endif
|
#endif
|
||||||
case CONTEXT_KEYBOARD:
|
case CONTEXT_KEYBOARD:
|
||||||
return button_context_keyboard;
|
return button_context_keyboard;
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return button_context_usb_hid;
|
return button_context_usb_hid;
|
||||||
|
case CONTEXT_USB_HID_MOUSE:
|
||||||
|
return button_context_usb_hid_mouse;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
return button_context_standard;
|
return button_context_standard;
|
||||||
|
|
|
@ -273,21 +273,62 @@ static const struct button_mapping button_context_bmark[] = {
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
|
||||||
}; /* button_context_bmark */
|
}; /* button_context_bmark */
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
{ ACTION_USB_HID_PLAY, BUTTON_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_VOL_UP, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_START, BUTTON_UP|BUTTON_REL, BUTTON_UP },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_START_LONG, BUTTON_UP|BOTTOM_REPEAT, BUTTON_UP },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT, BUTTON_HOME|BUTTON_REL, BUTTON_HOME },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT_LONG, BUTTON_HOME|BUTTON_REPEAT, BUTTON_HOME },
|
||||||
{ ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
|
||||||
{ ACTION_USB_HID_MENU, BUTTON_DOWN, BUTTON_NONE },
|
{ 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_POWER|BUTTON_REL, BUTTON_POWER },
|
||||||
|
{ ACTION_USB_HID_MODE_LONG, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER },
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST
|
LAST_ITEM_IN_LIST
|
||||||
}; /* button_context_usb_hid */
|
}; /* button_context_usb_hid */
|
||||||
|
|
||||||
|
static const struct button_mapping button_context_usb_hid_mouse[] = {
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP, BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP_REP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN, BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN_REP, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT, BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT_REP, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT_REP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP, BUTTON_SELECT|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP_REP, BUTTON_SELECT|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN, BUTTON_SELECT|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP, BUTTON_SELECT|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT, BUTTON_SELECT|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP, BUTTON_SELECT|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT, BUTTON_SELECT|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP, BUTTON_SELECT|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP, BUTTON_HOME|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP_REP, BUTTON_HOME|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN, BUTTON_HOME|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN_REP, BUTTON_HOME|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT, BUTTON_HOME|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT_REP, BUTTON_HOME|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT, BUTTON_HOME|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT_REP, BUTTON_HOME|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT, BUTTON_SELECT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT, BUTTON_HOME, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT_REL, BUTTON_HOME|BUTTON_REL, BUTTON_NONE },
|
||||||
|
|
||||||
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
|
||||||
|
}; /* button_context_usb_hid_mouse */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
|
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
|
||||||
|
@ -337,9 +378,11 @@ const struct button_mapping* get_context_mapping(int context)
|
||||||
#endif
|
#endif
|
||||||
case CONTEXT_KEYBOARD:
|
case CONTEXT_KEYBOARD:
|
||||||
return button_context_keyboard;
|
return button_context_keyboard;
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return button_context_usb_hid;
|
return button_context_usb_hid;
|
||||||
|
case CONTEXT_USB_HID_MOUSE:
|
||||||
|
return button_context_usb_hid_mouse;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
return button_context_standard;
|
return button_context_standard;
|
||||||
|
|
|
@ -275,21 +275,62 @@ static const struct button_mapping button_context_bmark[] = {
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
|
||||||
}; /* button_context_bmark */
|
}; /* button_context_bmark */
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
{ ACTION_USB_HID_PLAY, BUTTON_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_SCROLL_FWD, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_SCROLL_BACK, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_SCROLL_FWD, BUTTON_NONE },
|
{ ACTION_USB_HID_START, BUTTON_UP|BUTTON_REL, BUTTON_UP },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_START_LONG, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_SCROLL_BACK, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT_LONG, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER },
|
||||||
{ ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
|
||||||
{ ACTION_USB_HID_MENU, BUTTON_DOWN, BUTTON_NONE },
|
{ 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
|
LAST_ITEM_IN_LIST
|
||||||
}; /* button_context_usb_hid */
|
}; /* button_context_usb_hid */
|
||||||
|
|
||||||
|
static const struct button_mapping button_context_usb_hid_mouse[] = {
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP, BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP_REP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN, BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN_REP, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT, BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT_REP, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT_REP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP, BUTTON_SELECT|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP_REP, BUTTON_SELECT|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN, BUTTON_SELECT|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP, BUTTON_SELECT|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT, BUTTON_SELECT|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP, BUTTON_SELECT|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT, BUTTON_SELECT|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP, BUTTON_SELECT|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP, BUTTON_POWER|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP_REP, BUTTON_POWER|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN, BUTTON_POWER|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN_REP, BUTTON_POWER|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT, BUTTON_POWER|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT_REP, BUTTON_POWER|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT, BUTTON_POWER|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT_REP, BUTTON_POWER|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT, BUTTON_SELECT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT, BUTTON_POWER, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT_REL, BUTTON_POWER|BUTTON_REL, BUTTON_NONE },
|
||||||
|
|
||||||
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
|
||||||
|
}; /* button_context_usb_hid_mouse */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
|
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
|
||||||
|
@ -339,9 +380,11 @@ const struct button_mapping* get_context_mapping(int context)
|
||||||
return button_context_recscreen;
|
return button_context_recscreen;
|
||||||
case CONTEXT_KEYBOARD:
|
case CONTEXT_KEYBOARD:
|
||||||
return button_context_keyboard;
|
return button_context_keyboard;
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return button_context_usb_hid;
|
return button_context_usb_hid;
|
||||||
|
case CONTEXT_USB_HID_MOUSE:
|
||||||
|
return button_context_usb_hid_mouse;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
return button_context_standard;
|
return button_context_standard;
|
||||||
|
|
|
@ -468,40 +468,91 @@ static const struct button_mapping remote_button_context_right_is_inc[] = {
|
||||||
LAST_ITEM_IN_LIST
|
LAST_ITEM_IN_LIST
|
||||||
}; /* remote_button_context_right_is_inc */
|
}; /* remote_button_context_right_is_inc */
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
{ ACTION_USB_HID_PLAY, BUTTON_PLAY, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_VOL_UP, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_START, BUTTON_PLAY|BUTTON_REL, BUTTON_START },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_START_LONG, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_START },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT_LONG, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT_LONG, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_RIGHT_LONG, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
|
||||||
{ ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE },
|
{ ACTION_USB_HID_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
|
||||||
{ ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE },
|
{ ACTION_USB_HID_SELECT, BUTTON_BACK|BUTTON_REL, BUTTON_BACK },
|
||||||
|
{ ACTION_USB_HID_SELECT_LONG, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
|
||||||
|
{ ACTION_USB_HID_SELECT_LONG, BUTTON_BACK|BUTTON_REPEAT, BUTTON_BACK },
|
||||||
|
{ 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_POWER|BUTTON_REL, BUTTON_POWER },
|
||||||
|
{ ACTION_USB_HID_MODE_LONG, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER },
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST
|
LAST_ITEM_IN_LIST
|
||||||
}; /* button_context_usb_hid */
|
}; /* button_context_usb_hid */
|
||||||
|
|
||||||
static const struct button_mapping remote_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_INC, BUTTON_RC_VOL_UP, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPPREV, BUTTON_RC_REW, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_RC_FF, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_START, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_RIGHT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF},
|
||||||
{ ACTION_USB_HID_MUTE, BUTTON_RC_DSP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_SELECT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_RC_FF },
|
||||||
{ ACTION_USB_HID_MENU, BUTTON_RC_DSP, BUTTON_NONE },
|
{ ACTION_USB_HID_SELECT_LONG, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_RC_REW },
|
||||||
|
{ 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
|
LAST_ITEM_IN_LIST
|
||||||
}; /* remote_button_context_usb_hid */
|
}; /* remote_button_context_usb_hid */
|
||||||
|
|
||||||
|
static const struct button_mapping button_context_usb_hid_mouse[] = {
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP, BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP_REP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN, BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN_REP, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT, BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT_REP, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT_REP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP, BUTTON_SELECT|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP, BUTTON_BACK|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP_REP, BUTTON_SELECT|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP_REP, BUTTON_BACK|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN, BUTTON_SELECT|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN, BUTTON_BACK|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP, BUTTON_SELECT|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP, BUTTON_BACK|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT, BUTTON_SELECT|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT, BUTTON_BACK|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP, BUTTON_SELECT|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP, BUTTON_BACK|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT, BUTTON_SELECT|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT, BUTTON_BACK|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP, BUTTON_SELECT|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP, BUTTON_BACK|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP, BUTTON_MENU|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP_REP, BUTTON_MENU|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN, BUTTON_MENU|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN_REP, BUTTON_MENU|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT, BUTTON_MENU|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT_REP, BUTTON_MENU|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT, BUTTON_MENU|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT_REP, BUTTON_MENU|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT, BUTTON_SELECT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT, BUTTON_BACK, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL, BUTTON_BACK|BUTTON_REL, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT, BUTTON_MENU, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT_REL, BUTTON_MENU|BUTTON_REL, BUTTON_NONE },
|
||||||
|
|
||||||
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
|
||||||
|
}; /* button_context_usb_hid_mouse */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const struct button_mapping* get_context_mapping_remote( int context )
|
static const struct button_mapping* get_context_mapping_remote( int context )
|
||||||
|
@ -546,7 +597,7 @@ static const struct button_mapping* get_context_mapping_remote( int context )
|
||||||
case CONTEXT_FM:
|
case CONTEXT_FM:
|
||||||
return remote_button_context_radio;
|
return remote_button_context_radio;
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return remote_button_context_usb_hid;
|
return remote_button_context_usb_hid;
|
||||||
#endif
|
#endif
|
||||||
|
@ -617,9 +668,11 @@ const struct button_mapping* get_context_mapping(int context)
|
||||||
case CONTEXT_FM:
|
case CONTEXT_FM:
|
||||||
return button_context_radio;
|
return button_context_radio;
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return button_context_usb_hid;
|
return button_context_usb_hid;
|
||||||
|
case CONTEXT_USB_HID_MOUSE:
|
||||||
|
return button_context_usb_hid_mouse;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
return button_context_standard;
|
return button_context_standard;
|
||||||
|
|
|
@ -337,30 +337,37 @@ static const struct button_mapping button_context_radio[] = {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
{ ACTION_USB_HID_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
|
{ ACTION_USB_HID_INC, BUTTON_SCROLL_UP, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
|
{ ACTION_USB_HID_INC, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPPREV, BUTTON_REW, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_SCROLL_DOWN, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_FF, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_SCROLL_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_START, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_START_LONG, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_SCROLL_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT, BUTTON_REW|BUTTON_REL, BUTTON_REW },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
|
||||||
{ ACTION_USB_HID_MENU, BUTTON_POWER, BUTTON_NONE },
|
{ 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_FF|BUTTON_REL, BUTTON_FF },
|
||||||
|
{ ACTION_USB_HID_MENU, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
|
||||||
|
{ ACTION_USB_HID_MODE, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER },
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST
|
LAST_ITEM_IN_LIST
|
||||||
}; /* button_context_usb_hid */
|
}; /* button_context_usb_hid */
|
||||||
|
|
||||||
static const struct button_mapping remote_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_INC, BUTTON_RC_VOL_UP, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPPREV, BUTTON_RC_REW, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_RC_FF, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_START, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ 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
|
LAST_ITEM_IN_LIST
|
||||||
}; /* remote_button_context_usb_hid */
|
}; /* remote_button_context_usb_hid */
|
||||||
|
@ -395,7 +402,7 @@ static const struct button_mapping* get_context_mapping_remote( int context )
|
||||||
return remote_button_context_pitchscreen;
|
return remote_button_context_pitchscreen;
|
||||||
case CONTEXT_RECSCREEN:
|
case CONTEXT_RECSCREEN:
|
||||||
return button_context_recscreen;
|
return button_context_recscreen;
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return remote_button_context_usb_hid;
|
return remote_button_context_usb_hid;
|
||||||
#endif
|
#endif
|
||||||
|
@ -453,7 +460,7 @@ const struct button_mapping* get_context_mapping(int context)
|
||||||
return button_context_recscreen;
|
return button_context_recscreen;
|
||||||
case CONTEXT_FM:
|
case CONTEXT_FM:
|
||||||
return button_context_radio;
|
return button_context_radio;
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return button_context_usb_hid;
|
return button_context_usb_hid;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -284,25 +284,62 @@ static const struct button_mapping button_context_radio[] = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
{ ACTION_USB_HID_PLAY, BUTTON_VIEW, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_VOL_UP, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_START, BUTTON_UP|BUTTON_REL, BUTTON_UP },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_START_LONG, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT_LONG, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT_LONG, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_RIGHT_LONG, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
|
||||||
{ ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE },
|
{ ACTION_USB_HID_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
|
||||||
{ ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE },
|
{ 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
|
LAST_ITEM_IN_LIST
|
||||||
}; /* button_context_usb_hid */
|
}; /* button_context_usb_hid */
|
||||||
|
|
||||||
|
static const struct button_mapping button_context_usb_hid_mouse[] = {
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP, BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP_REP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN, BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN_REP, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT, BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT_REP, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT_REP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP, BUTTON_SELECT|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP_REP, BUTTON_SELECT|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN, BUTTON_SELECT|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP, BUTTON_SELECT|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT, BUTTON_SELECT|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP, BUTTON_SELECT|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT, BUTTON_SELECT|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP, BUTTON_SELECT|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP, BUTTON_POWER|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP_REP, BUTTON_POWER|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN, BUTTON_POWER|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN_REP, BUTTON_POWER|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT, BUTTON_POWER|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT_REP, BUTTON_POWER|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT, BUTTON_POWER|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT_REP, BUTTON_POWER|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT, BUTTON_SELECT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT, BUTTON_POWER, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT_REL, BUTTON_POWER|BUTTON_REL, BUTTON_NONE },
|
||||||
|
|
||||||
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
|
||||||
|
}; /* button_context_usb_hid_mouse */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const struct button_mapping* get_context_mapping(int context)
|
const struct button_mapping* get_context_mapping(int context)
|
||||||
|
@ -352,9 +389,11 @@ const struct button_mapping* get_context_mapping(int context)
|
||||||
case CONTEXT_FM:
|
case CONTEXT_FM:
|
||||||
return button_context_radio;
|
return button_context_radio;
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return button_context_usb_hid;
|
return button_context_usb_hid;
|
||||||
|
case CONTEXT_USB_HID_MOUSE:
|
||||||
|
return button_context_usb_hid_mouse;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return button_context_standard;
|
return button_context_standard;
|
||||||
|
|
|
@ -193,21 +193,48 @@ const struct button_mapping button_context_recscreen[] = {
|
||||||
}; /* button_context_recscreen */
|
}; /* button_context_recscreen */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
{ ACTION_USB_HID_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
|
{ ACTION_USB_HID_INC, BUTTON_SCROLL_FWD, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
|
{ ACTION_USB_HID_INC, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_SCROLL_BACK, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_SCROLL_FWD, BUTTON_NONE },
|
{ ACTION_USB_HID_START, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_SCROLL_BACK, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT_LONG, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
|
||||||
{ ACTION_USB_HID_MUTE, BUTTON_SELECT, BUTTON_NONE },
|
{ ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
|
||||||
{ ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE },
|
{ 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_MODE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST
|
LAST_ITEM_IN_LIST
|
||||||
}; /* button_context_usb_hid */
|
}; /* button_context_usb_hid */
|
||||||
|
|
||||||
|
static const struct button_mapping button_context_usb_hid_mouse[] = {
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP, BUTTON_MENU, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP_REP, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN, BUTTON_PLAY, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN_REP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT, BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT_REP, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT_REP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP, BUTTON_SELECT|BUTTON_MENU, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP_REP, BUTTON_SELECT|BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN, BUTTON_SELECT|BUTTON_PLAY, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP, BUTTON_SELECT|BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT, BUTTON_SELECT|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP, BUTTON_SELECT|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT, BUTTON_SELECT|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP, BUTTON_SELECT|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT, BUTTON_SELECT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE },
|
||||||
|
|
||||||
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
|
||||||
|
}; /* button_context_usb_hid_mouse */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if BUTTON_REMOTE != 0
|
#if BUTTON_REMOTE != 0
|
||||||
|
@ -242,16 +269,18 @@ static const struct button_mapping remote_button_context_wps[] = {
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping remote_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_INC, BUTTON_RC_VOL_UP, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPPREV, BUTTON_RC_LEFT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_RC_RIGHT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_START, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT, BUTTON_RC_LEFT|BUTTON_REL, BUTTON_RC_LEFT },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ 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
|
LAST_ITEM_IN_LIST
|
||||||
}; /* remote_button_context_usb_hid */
|
}; /* remote_button_context_usb_hid */
|
||||||
|
@ -265,7 +294,7 @@ static const struct button_mapping* get_context_mapping_remote( int context )
|
||||||
{
|
{
|
||||||
case CONTEXT_WPS:
|
case CONTEXT_WPS:
|
||||||
return remote_button_context_wps;
|
return remote_button_context_wps;
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return remote_button_context_usb_hid;
|
return remote_button_context_usb_hid;
|
||||||
#endif
|
#endif
|
||||||
|
@ -321,9 +350,11 @@ const struct button_mapping* get_context_mapping(int context)
|
||||||
case CONTEXT_RECSCREEN:
|
case CONTEXT_RECSCREEN:
|
||||||
return button_context_recscreen;
|
return button_context_recscreen;
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return button_context_usb_hid;
|
return button_context_usb_hid;
|
||||||
|
case CONTEXT_USB_HID_MOUSE:
|
||||||
|
return button_context_usb_hid_mouse;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
return button_context_standard;
|
return button_context_standard;
|
||||||
|
|
|
@ -315,7 +315,7 @@ static const struct button_mapping remote_button_context_tree[] = {
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
{ ACTION_USB_HID_PLAY, BUTTON_PLAY, BUTTON_NONE },
|
{ ACTION_USB_HID_PLAY, BUTTON_PLAY, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
|
{ ACTION_USB_HID_STOP, BUTTON_POWER, BUTTON_NONE },
|
||||||
|
@ -357,7 +357,7 @@ static const struct button_mapping* get_context_mapping_remote( int context )
|
||||||
case CONTEXT_MAINMENU:
|
case CONTEXT_MAINMENU:
|
||||||
case CONTEXT_TREE:
|
case CONTEXT_TREE:
|
||||||
return remote_button_context_tree;
|
return remote_button_context_tree;
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return remote_button_context_usb_hid;
|
return remote_button_context_usb_hid;
|
||||||
#endif
|
#endif
|
||||||
|
@ -411,7 +411,7 @@ const struct button_mapping* get_context_mapping(int context)
|
||||||
return button_context_pitchscreen;
|
return button_context_pitchscreen;
|
||||||
case CONTEXT_KEYBOARD:
|
case CONTEXT_KEYBOARD:
|
||||||
return button_context_keyboard;
|
return button_context_keyboard;
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return button_context_usb_hid;
|
return button_context_usb_hid;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -167,14 +167,16 @@ static const struct button_mapping button_context_keyboard[] = {
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
||||||
}; /* button_context_keyboard */
|
}; /* button_context_keyboard */
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_VOL_UP, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_MUTE, BUTTON_POWER, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_SELECT },
|
||||||
{ ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE },
|
{ 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
|
LAST_ITEM_IN_LIST
|
||||||
}; /* button_context_usb_hid */
|
}; /* button_context_usb_hid */
|
||||||
|
|
|
@ -110,7 +110,7 @@ static const struct button_mapping button_context_keyboard[] = {
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
||||||
}; /* button_context_keyboard */
|
}; /* button_context_keyboard */
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
LAST_ITEM_IN_LIST
|
LAST_ITEM_IN_LIST
|
||||||
}; /* button_context_usb_hid */
|
}; /* button_context_usb_hid */
|
||||||
|
@ -162,7 +162,7 @@ const struct button_mapping* target_get_context_mapping(int context)
|
||||||
return button_context_pitchscreen;
|
return button_context_pitchscreen;
|
||||||
case CONTEXT_KEYBOARD:
|
case CONTEXT_KEYBOARD:
|
||||||
return button_context_keyboard;
|
return button_context_keyboard;
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return button_context_usb_hid;
|
return button_context_usb_hid;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -276,30 +276,66 @@ static const struct button_mapping button_context_keyboard[] = {
|
||||||
LAST_ITEM_IN_LIST
|
LAST_ITEM_IN_LIST
|
||||||
}; /* button_context_keyboard */
|
}; /* button_context_keyboard */
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
{ ACTION_USB_HID_PLAY, BUTTON_PLAY, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_UP, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, BUTTON_PREV, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_STOP, 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_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_DOWN, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_START, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
|
{ ACTION_USB_HID_START_LONG, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
|
||||||
{ ACTION_USB_HID_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_QUIT, BUTTON_PREV|BUTTON_REL, BUTTON_PREV },
|
||||||
|
{ ACTION_USB_HID_QUIT_LONG, BUTTON_PREV|BUTTON_REPEAT, BUTTON_PREV },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_LEFT_LONG, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
|
{ ACTION_USB_HID_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
|
||||||
{ ACTION_USB_HID_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
{ ACTION_USB_HID_RIGHT_LONG, BUTTON_RIGHT|BUTTON_REPEAT BUTTON_RIGHT },
|
||||||
|
{ ACTION_USB_HID_SELECT, BUTTON_NEXT|BUTTON_REL, BUTTON_NEXT },
|
||||||
{ ACTION_USB_HID_MUTE, BUTTON_NEXT, BUTTON_NONE },
|
{ ACTION_USB_HID_SELECT_LONG, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NEXT },
|
||||||
{ ACTION_USB_HID_MENU, BUTTON_MENU, BUTTON_NONE },
|
{ 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 },
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST
|
LAST_ITEM_IN_LIST
|
||||||
}; /* button_context_usb_hid */
|
}; /* button_context_usb_hid */
|
||||||
|
|
||||||
|
static const struct button_mapping button_context_usb_hid_mouse[] = {
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP, BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP_REP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN, BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN_REP, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT, BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT_REP, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT_REP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP, BUTTON_PREV|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP_REP, BUTTON_PREV|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN, BUTTON_PREV|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP, BUTTON_PREV|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT, BUTTON_PREV|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP, BUTTON_PREV|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT, BUTTON_PREV|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP, BUTTON_PREV|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP, BUTTON_NEXT|BUTTON_UP, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP_REP, BUTTON_NEXT|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN, BUTTON_NEXT|BUTTON_DOWN, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN_REP, BUTTON_NEXT|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT, BUTTON_NEXT|BUTTON_LEFT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT_REP, BUTTON_NEXT|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT, BUTTON_NEXT|BUTTON_RIGHT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT_REP, BUTTON_NEXT|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT, BUTTON_PREV, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL, BUTTON_PREV|BUTTON_REL, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT, BUTTON_NEXT, BUTTON_NONE },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT_REL, BUTTON_NEXT|BUTTON_REL, BUTTON_NONE },
|
||||||
|
|
||||||
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID)
|
||||||
|
}; /* button_context_usb_hid_mouse */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const struct button_mapping* get_context_mapping(int context)
|
const struct button_mapping* get_context_mapping(int context)
|
||||||
|
@ -349,9 +385,11 @@ const struct button_mapping* get_context_mapping(int context)
|
||||||
case CONTEXT_KEYBOARD:
|
case CONTEXT_KEYBOARD:
|
||||||
return button_context_keyboard;
|
return button_context_keyboard;
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return button_context_usb_hid;
|
return button_context_usb_hid;
|
||||||
|
case CONTEXT_USB_HID_MOUSE:
|
||||||
|
return button_context_usb_hid_mouse;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return button_context_standard;
|
return button_context_standard;
|
||||||
|
|
|
@ -251,13 +251,26 @@ static const struct button_mapping button_context_radio[] = {
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM2|CONTEXT_FM)
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM2|CONTEXT_FM)
|
||||||
}; /* button_context_radio */
|
}; /* button_context_radio */
|
||||||
|
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
static const struct button_mapping button_context_usb_hid[] = {
|
static const struct button_mapping button_context_usb_hid[] = {
|
||||||
{ ACTION_USB_HID_PLAY, BUTTON_TOPRIGHT, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_BOTTOMRIGHT|BUTTON_REL, BUTTON_BOTTOMRIGHT },
|
||||||
{ ACTION_USB_HID_SKIPPREV, BUTTON_MIDLEFT, BUTTON_NONE },
|
{ ACTION_USB_HID_INC, BUTTON_BOTTOMRIGHT|BUTTON_REPEAT, BUTTON_BOTTOMRIGHT },
|
||||||
{ ACTION_USB_HID_SKIPNEXT, BUTTON_MIDRIGHT, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_BOTTOMMIDDLE|BUTTON_REL, BUTTON_BOTTOMMIDDLE },
|
||||||
{ ACTION_USB_HID_MUTE, BUTTON_CENTER, BUTTON_NONE },
|
{ ACTION_USB_HID_DEC, BUTTON_BOTTOMMIDDLE|BUTTON_REPEAT, BUTTON_BOTTOMMIDDLE },
|
||||||
{ ACTION_USB_HID_MENU, BUTTON_TOPLEFT, BUTTON_NONE },
|
{ 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)
|
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM2|CONTEXT_USB_HID)
|
||||||
}; /* button_context_usb_hid */
|
}; /* button_context_usb_hid */
|
||||||
|
@ -315,7 +328,7 @@ const struct button_mapping* get_context_mapping(int context)
|
||||||
return button_context_pitchscreen;
|
return button_context_pitchscreen;
|
||||||
case CONTEXT_KEYBOARD:
|
case CONTEXT_KEYBOARD:
|
||||||
return button_context_keyboard;
|
return button_context_keyboard;
|
||||||
#ifdef HAVE_USBSTACK
|
#ifdef USB_ENABLE_HID
|
||||||
case CONTEXT_USB_HID:
|
case CONTEXT_USB_HID:
|
||||||
return button_context_usb_hid;
|
return button_context_usb_hid;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -12653,6 +12653,76 @@
|
||||||
pitchscreen: "Rate"
|
pitchscreen: "Rate"
|
||||||
</voice>
|
</voice>
|
||||||
</phrase>
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: LANG_USB_KEYPAD_MODE
|
||||||
|
desc: in settings_menu
|
||||||
|
user: core
|
||||||
|
<source>
|
||||||
|
*: "USB Keypad Mode:"
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: "USB Keypad Mode:"
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: "USB Keypad Mode"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: LANG_MULTIMEDIA
|
||||||
|
desc: in settings_menu
|
||||||
|
user: core
|
||||||
|
<source>
|
||||||
|
*: "Multimedia"
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: "Multimedia"
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: "Multimedia"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: LANG_PRESENTATION
|
||||||
|
desc: in settings_menu
|
||||||
|
user: core
|
||||||
|
<source>
|
||||||
|
*: "Presentation"
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: "Presentation"
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: "Presentation"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: LANG_BROWSER
|
||||||
|
desc: in settings_menu
|
||||||
|
user: core
|
||||||
|
<source>
|
||||||
|
*: "Browser"
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: "Browser"
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: "Browser"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
|
<phrase>
|
||||||
|
id: LANG_MOUSE
|
||||||
|
desc: in settings_menu
|
||||||
|
user: core
|
||||||
|
<source>
|
||||||
|
*: "Mouse"
|
||||||
|
</source>
|
||||||
|
<dest>
|
||||||
|
*: "Mouse"
|
||||||
|
</dest>
|
||||||
|
<voice>
|
||||||
|
*: "Mouse"
|
||||||
|
</voice>
|
||||||
|
</phrase>
|
||||||
<phrase>
|
<phrase>
|
||||||
id: LANG_SKIN_RAM_USAGE
|
id: LANG_SKIN_RAM_USAGE
|
||||||
desc: how much RAM the skins are using
|
desc: how much RAM the skins are using
|
||||||
|
|
|
@ -252,6 +252,9 @@ MENUITEM_SETTING(serial_bitrate, &global_settings.serial_bitrate, NULL);
|
||||||
MENUITEM_SETTING(accessory_supply, &global_settings.accessory_supply, NULL);
|
MENUITEM_SETTING(accessory_supply, &global_settings.accessory_supply, NULL);
|
||||||
#endif
|
#endif
|
||||||
MENUITEM_SETTING(start_screen, &global_settings.start_in_screen, NULL);
|
MENUITEM_SETTING(start_screen, &global_settings.start_in_screen, NULL);
|
||||||
|
#ifdef USB_ENABLE_HID
|
||||||
|
MENUITEM_SETTING(usb_keypad_mode, &global_settings.usb_keypad_mode, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_BUTTON_LIGHT
|
#ifdef HAVE_BUTTON_LIGHT
|
||||||
MENUITEM_SETTING(buttonlight_timeout, &global_settings.buttonlight_timeout, NULL);
|
MENUITEM_SETTING(buttonlight_timeout, &global_settings.buttonlight_timeout, NULL);
|
||||||
|
@ -299,6 +302,9 @@ MAKE_MENU(system_menu, ID2P(LANG_SYSTEM),
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
|
#ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING
|
||||||
&touchpad_sensitivity,
|
&touchpad_sensitivity,
|
||||||
|
#endif
|
||||||
|
#ifdef USB_ENABLE_HID
|
||||||
|
&usb_keypad_mode,
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
#include "bidi.h"
|
#include "bidi.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
|
#ifdef USB_ENABLE_HID
|
||||||
#include "usbstack/usb_hid.h"
|
#include "usbstack/usb_hid.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -367,7 +367,7 @@ static const struct plugin_api rockbox_api = {
|
||||||
queue_reply,
|
queue_reply,
|
||||||
#endif
|
#endif
|
||||||
usb_acknowledge,
|
usb_acknowledge,
|
||||||
#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
|
#ifdef USB_ENABLE_HID
|
||||||
usb_hid_send,
|
usb_hid_send,
|
||||||
#endif
|
#endif
|
||||||
#ifdef RB_PROFILE
|
#ifdef RB_PROFILE
|
||||||
|
|
|
@ -105,7 +105,7 @@ void* plugin_get_buffer(size_t *buffer_size);
|
||||||
|
|
||||||
#include "yesno.h"
|
#include "yesno.h"
|
||||||
|
|
||||||
#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
|
#ifdef USB_ENABLE_HID
|
||||||
#include "usbstack/usb_hid_usage_tables.h"
|
#include "usbstack/usb_hid_usage_tables.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -491,7 +491,7 @@ struct plugin_api {
|
||||||
#endif /* CONFIG_CODEC == SWCODEC */
|
#endif /* CONFIG_CODEC == SWCODEC */
|
||||||
|
|
||||||
void (*usb_acknowledge)(long id);
|
void (*usb_acknowledge)(long id);
|
||||||
#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
|
#ifdef USB_ENABLE_HID
|
||||||
void (*usb_hid_send)(usage_page_t usage_page, int id);
|
void (*usb_hid_send)(usage_page_t usage_page, int id);
|
||||||
#endif
|
#endif
|
||||||
#ifdef RB_PROFILE
|
#ifdef RB_PROFILE
|
||||||
|
|
|
@ -169,6 +169,6 @@ md5sum.c
|
||||||
lua.c
|
lua.c
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
|
#ifdef USB_ENABLE_HID
|
||||||
remote_control.c
|
remote_control.c
|
||||||
#endif
|
#endif
|
||||||
|
|
123
apps/screens.c
123
apps/screens.c
|
@ -37,7 +37,7 @@
|
||||||
#if defined(HAVE_USBSTACK)
|
#if defined(HAVE_USBSTACK)
|
||||||
#include "usb_core.h"
|
#include "usb_core.h"
|
||||||
#ifdef USB_ENABLE_HID
|
#ifdef USB_ENABLE_HID
|
||||||
#include "usbstack/usb_hid.h"
|
#include "usb_keymaps.h"
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
@ -93,59 +93,32 @@ static int clamp_value_wrap(int value, int max, int min)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef SIMULATOR
|
#ifndef SIMULATOR
|
||||||
|
|
||||||
|
#ifdef USB_ENABLE_HID
|
||||||
|
int usb_keypad_mode;
|
||||||
|
#endif
|
||||||
|
|
||||||
static int handle_usb_events(void)
|
static int handle_usb_events(void)
|
||||||
{
|
{
|
||||||
#if (CONFIG_STORAGE & STORAGE_MMC)
|
#if (CONFIG_STORAGE & STORAGE_MMC)
|
||||||
int next_update=0;
|
int next_update=0;
|
||||||
#endif /* STORAGE_MMC */
|
#endif /* STORAGE_MMC */
|
||||||
|
|
||||||
#ifdef HAVE_TOUCHSCREEN
|
|
||||||
enum touchscreen_mode old_mode = touchscreen_get_mode();
|
|
||||||
|
|
||||||
/* TODO: Paint buttons on screens OR switch to point mode and use
|
|
||||||
* touchscreen as a touchpad to move the host's mouse cursor */
|
|
||||||
touchscreen_set_mode(TOUCHSCREEN_BUTTON);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Don't return until we get SYS_USB_DISCONNECTED or SYS_TIMEOUT */
|
/* Don't return until we get SYS_USB_DISCONNECTED or SYS_TIMEOUT */
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
int button;
|
int button;
|
||||||
#if defined(HAVE_USBSTACK) && defined(USB_ENABLE_HID)
|
#ifdef USB_ENABLE_HID
|
||||||
bool hid_enabled = usb_core_driver_enabled(USB_DRIVER_HID);
|
if (usb_core_driver_enabled(USB_DRIVER_HID))
|
||||||
|
|
||||||
if (hid_enabled)
|
|
||||||
{
|
{
|
||||||
int id = HID_CONSUMER_USAGE_UNASSIGNED;
|
button = get_hid_usb_action();
|
||||||
button = get_action(CONTEXT_USB_HID, HZ/2);
|
|
||||||
|
|
||||||
switch (button)
|
/* On mode change, we need to refresh the screen */
|
||||||
|
if (button == ACTION_USB_HID_MODE ||
|
||||||
|
button == ACTION_USB_HID_MODE_LONG)
|
||||||
{
|
{
|
||||||
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id != HID_CONSUMER_USAGE_UNASSIGNED)
|
|
||||||
usb_hid_send(HID_USAGE_PAGE_CONSUMER, id);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -159,7 +132,7 @@ static int handle_usb_events(void)
|
||||||
{
|
{
|
||||||
case SYS_USB_DISCONNECTED:
|
case SYS_USB_DISCONNECTED:
|
||||||
usb_acknowledge(SYS_USB_DISCONNECTED_ACK);
|
usb_acknowledge(SYS_USB_DISCONNECTED_ACK);
|
||||||
goto Exit;
|
return 1;
|
||||||
case SYS_TIMEOUT:
|
case SYS_TIMEOUT:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -174,14 +147,12 @@ static int handle_usb_events(void)
|
||||||
}
|
}
|
||||||
#endif /* STORAGE_MMC */
|
#endif /* STORAGE_MMC */
|
||||||
}
|
}
|
||||||
Exit:
|
|
||||||
#ifdef HAVE_TOUCHSCREEN
|
|
||||||
touchscreen_set_mode(old_mode);
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define MODE_NAME_LEN 32
|
||||||
void usb_screen(void)
|
void usb_screen(void)
|
||||||
{
|
{
|
||||||
#ifdef USB_NONE
|
#ifdef USB_NONE
|
||||||
|
@ -190,7 +161,24 @@ void usb_screen(void)
|
||||||
int i;
|
int i;
|
||||||
int usb_bars = VP_SB_ALLSCREENS; /* force statusbars */
|
int usb_bars = VP_SB_ALLSCREENS; /* force statusbars */
|
||||||
int old_bars = viewportmanager_get_statusbar();
|
int old_bars = viewportmanager_get_statusbar();
|
||||||
|
#if defined 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
|
||||||
|
|
||||||
|
#ifdef USB_ENABLE_HID
|
||||||
|
usb_keypad_mode = global_settings.usb_keypad_mode;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
FOR_NB_SCREENS(i)
|
FOR_NB_SCREENS(i)
|
||||||
{
|
{
|
||||||
screens[i].backdrop_show(BACKDROP_MAIN);
|
screens[i].backdrop_show(BACKDROP_MAIN);
|
||||||
|
@ -207,14 +195,38 @@ void usb_screen(void)
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
char mode_name[MODE_NAME_LEN];
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
screens[i].transparent_bitmap(usblogo,
|
screens[i].transparent_bitmap(usblogo,
|
||||||
(LCD_WIDTH-BMPWIDTH_usblogo),
|
(LCD_WIDTH-BMPWIDTH_usblogo),
|
||||||
(LCD_HEIGHT-BMPHEIGHT_usblogo)/2,
|
(LCD_HEIGHT-BMPHEIGHT_usblogo)/2,
|
||||||
BMPWIDTH_usblogo, BMPHEIGHT_usblogo);
|
BMPWIDTH_usblogo, BMPHEIGHT_usblogo);
|
||||||
#else
|
|
||||||
|
#ifdef USB_ENABLE_HID
|
||||||
|
int y, w, h;
|
||||||
|
|
||||||
|
screens[i].getstringsize(str(LANG_USB_KEYPAD_MODE), &w, &h);
|
||||||
|
|
||||||
|
y = (LCD_HEIGHT - BMPHEIGHT_usblogo) / 2 + BMPHEIGHT_usblogo + h;
|
||||||
|
screens[i].putsxy((LCD_WIDTH - w) / 2, y,
|
||||||
|
str(LANG_USB_KEYPAD_MODE));
|
||||||
|
y += 3 * h / 2;
|
||||||
|
|
||||||
|
snprintf(mode_name, MODE_NAME_LEN, "%s",
|
||||||
|
str(keypad_mode_name_get()));
|
||||||
|
screens[i].getstringsize(mode_name, &w, &h);
|
||||||
|
screens[i].putsxy((LCD_WIDTH - w) / 2, y, mode_name);
|
||||||
|
#endif /* HID */
|
||||||
|
#else /* HAVE_LCD_BITMAP */
|
||||||
screens[i].double_height(false);
|
screens[i].double_height(false);
|
||||||
|
#ifdef USB_ENABLE_HID
|
||||||
|
snprintf(mode_name, MODE_NAME_LEN, "[USB Mode; %s]",
|
||||||
|
str(keypad_mode_name_get()));
|
||||||
|
screens[i].puts_scroll(0, 0, mode_name);
|
||||||
|
#else
|
||||||
screens[i].puts_scroll(0, 0, "[USB Mode]");
|
screens[i].puts_scroll(0, 0, "[USB Mode]");
|
||||||
|
#endif
|
||||||
status_set_param(false);
|
status_set_param(false);
|
||||||
status_set_audio(false);
|
status_set_audio(false);
|
||||||
status_set_usb(true);
|
status_set_usb(true);
|
||||||
|
@ -229,16 +241,27 @@ void usb_screen(void)
|
||||||
viewportmanager_set_statusbar(usb_bars);
|
viewportmanager_set_statusbar(usb_bars);
|
||||||
|
|
||||||
#ifdef SIMULATOR
|
#ifdef SIMULATOR
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
if (button_get_w_tmo(HZ/2))
|
if (button_get_w_tmo(HZ/2))
|
||||||
break;
|
break;
|
||||||
send_event(GUI_EVENT_ACTIONUPDATE, NULL);
|
send_event(GUI_EVENT_ACTIONUPDATE, NULL);
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
usb_acknowledge(SYS_USB_CONNECTED_ACK);
|
if (handle_usb_events())
|
||||||
while (handle_usb_events());
|
break;
|
||||||
#endif /* SIMULATOR */
|
#endif /* SIMULATOR */
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USB_ENABLE_HID
|
||||||
|
if (global_settings.usb_keypad_mode != usb_keypad_mode)
|
||||||
|
{
|
||||||
|
global_settings.usb_keypad_mode = usb_keypad_mode;
|
||||||
|
settings_save();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_TOUCHSCREEN
|
||||||
|
touchscreen_set_mode(old_mode);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_LCD_CHARCELLS
|
#ifdef HAVE_LCD_CHARCELLS
|
||||||
status_set_usb(false);
|
status_set_usb(false);
|
||||||
#endif /* HAVE_LCD_CHARCELLS */
|
#endif /* HAVE_LCD_CHARCELLS */
|
||||||
|
|
|
@ -769,6 +769,10 @@ struct user_settings
|
||||||
version. */
|
version. */
|
||||||
/* new stuff to be added at the end */
|
/* new stuff to be added at the end */
|
||||||
|
|
||||||
|
#ifdef USB_ENABLE_HID
|
||||||
|
int usb_keypad_mode;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
unsigned char ui_vp_config[64]; /* viewport string for the lists */
|
unsigned char ui_vp_config[64]; /* viewport string for the lists */
|
||||||
#ifdef HAVE_REMOTE_LCD
|
#ifdef HAVE_REMOTE_LCD
|
||||||
|
|
|
@ -1613,6 +1613,13 @@ const struct settings_list settings[] = {
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USB_ENABLE_HID
|
||||||
|
CHOICE_SETTING(0, usb_keypad_mode, LANG_USB_KEYPAD_MODE, 0,
|
||||||
|
"usb keypad mode", "multimedia,presentation,browser,mouse",
|
||||||
|
NULL, 3, ID2P(LANG_MULTIMEDIA), ID2P(LANG_PRESENTATION),
|
||||||
|
ID2P(LANG_BROWSER), ID2P(LANG_MOUSE)),
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Customizable list */
|
/* Customizable list */
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
VIEWPORT_SETTING(ui_vp_config, "ui viewport"),
|
VIEWPORT_SETTING(ui_vp_config, "ui viewport"),
|
||||||
|
|
249
apps/usb_keymaps.c
Normal file
249
apps/usb_keymaps.c
Normal file
|
@ -0,0 +1,249 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* __________ __ ___.
|
||||||
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||||
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||||
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||||
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||||
|
* \/ \/ \/ \/ \/
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Tomer Shalev
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifdef USB_ENABLE_HID
|
||||||
|
#include "action.h"
|
||||||
|
#include "lang.h"
|
||||||
|
#include "usbstack/usb_hid.h"
|
||||||
|
//#define LOGF_ENABLE
|
||||||
|
#include "logf.h"
|
||||||
|
|
||||||
|
#define MODIFIER(modifier, key) ((key) | (modifier << 8))
|
||||||
|
|
||||||
|
#define ALT(key) MODIFIER(HID_KEYBOARD_LEFT_ALT, key)
|
||||||
|
#define CTRL(key) MODIFIER(HID_KEYBOARD_LEFT_CONTROL, key)
|
||||||
|
#define SHIFT(key) MODIFIER(HID_KEYBOARD_LEFT_SHIFT, key)
|
||||||
|
|
||||||
|
#define NUM_KEY_MAPPINGS (sizeof(hid_key_mappings) / \
|
||||||
|
sizeof(hid_key_mappings[0]))
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
static const hid_key_mapping_t hid_key_mapping_multimedia = {
|
||||||
|
LANG_MULTIMEDIA,
|
||||||
|
HID_USAGE_PAGE_CONSUMER,
|
||||||
|
{
|
||||||
|
/* Volume up */
|
||||||
|
{ ACTION_USB_HID_DEC, HID_CONSUMER_USAGE_VOLUME_DECREMENT },
|
||||||
|
/* Volume down */
|
||||||
|
{ ACTION_USB_HID_INC, HID_CONSUMER_USAGE_VOLUME_INCREMENT },
|
||||||
|
/* Volume mute */
|
||||||
|
{ ACTION_USB_HID_SELECT, HID_CONSUMER_USAGE_MUTE },
|
||||||
|
/* Play / pause */
|
||||||
|
{ ACTION_USB_HID_START, HID_CONSUMER_USAGE_PLAY_PAUSE },
|
||||||
|
/* Stop */
|
||||||
|
{ ACTION_USB_HID_QUIT, HID_CONSUMER_USAGE_STOP },
|
||||||
|
/* Scan previous track */
|
||||||
|
{ ACTION_USB_HID_LEFT, HID_CONSUMER_USAGE_SCAN_PREVIOUS_TRACK },
|
||||||
|
/* Scan next track */
|
||||||
|
{ ACTION_USB_HID_RIGHT, HID_CONSUMER_USAGE_SCAN_NEXT_TRACK },
|
||||||
|
{ 0, 0 },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const hid_key_mapping_t hid_key_mapping_presentation = {
|
||||||
|
LANG_PRESENTATION,
|
||||||
|
HID_USAGE_PAGE_KEYBOARD_KEYPAD,
|
||||||
|
{
|
||||||
|
/* Slideshow start */
|
||||||
|
{ ACTION_USB_HID_START, HID_KEYBOARD_F5 },
|
||||||
|
/* Slideshow leave */
|
||||||
|
{ ACTION_USB_HID_QUIT, HID_KEYBOARD_ESCAPE },
|
||||||
|
/* Slide previous */
|
||||||
|
{ ACTION_USB_HID_LEFT, HID_KEYBOARD_P },
|
||||||
|
/* Slide next */
|
||||||
|
{ ACTION_USB_HID_RIGHT, HID_KEYBOARD_N },
|
||||||
|
/* Slide first */
|
||||||
|
{ ACTION_USB_HID_LEFT_LONG, HID_KEYBOARD_HOME },
|
||||||
|
/* Slide Last */
|
||||||
|
{ ACTION_USB_HID_RIGHT_LONG, HID_KEYBOARD_END },
|
||||||
|
/* Black screen */
|
||||||
|
{ ACTION_USB_HID_MENU, HID_KEYBOARD_DOT },
|
||||||
|
/* White screen */
|
||||||
|
{ ACTION_USB_HID_MENU_LONG, HID_KEYBOARD_COMMA },
|
||||||
|
/* Link previous */
|
||||||
|
{ ACTION_USB_HID_DEC, SHIFT(HID_KEYBOARD_TAB) },
|
||||||
|
/* Link next */
|
||||||
|
{ ACTION_USB_HID_INC, HID_KEYBOARD_TAB },
|
||||||
|
/* 'Mouse click' */
|
||||||
|
{ ACTION_USB_HID_SELECT, HID_KEYBOARD_RETURN },
|
||||||
|
/* 'Mouse over' */
|
||||||
|
{ ACTION_USB_HID_SELECT_LONG, SHIFT(HID_KEYBOARD_RETURN) },
|
||||||
|
{ 0, 0 },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const hid_key_mapping_t hid_key_mapping_browser = {
|
||||||
|
LANG_BROWSER,
|
||||||
|
HID_USAGE_PAGE_KEYBOARD_KEYPAD,
|
||||||
|
{
|
||||||
|
/* Scroll up */
|
||||||
|
{ ACTION_USB_HID_DEC, HID_KEYBOARD_UP_ARROW },
|
||||||
|
/* Scroll down */
|
||||||
|
{ ACTION_USB_HID_INC, HID_KEYBOARD_DOWN_ARROW },
|
||||||
|
/* Scroll page up */
|
||||||
|
{ ACTION_USB_HID_START, HID_KEYBOARD_PAGE_UP },
|
||||||
|
/* Scroll page down */
|
||||||
|
{ ACTION_USB_HID_MENU, HID_KEYBOARD_PAGE_DOWN },
|
||||||
|
/* Zoom in */
|
||||||
|
{ ACTION_USB_HID_START_LONG, CTRL(HID_KEYPAD_PLUS) },
|
||||||
|
/* Zoom out */
|
||||||
|
{ ACTION_USB_HID_MENU_LONG, CTRL(HID_KEYPAD_MINUS) },
|
||||||
|
/* Zoom reset */
|
||||||
|
{ ACTION_USB_HID_SELECT_LONG, CTRL(HID_KEYPAD_0_AND_INSERT) },
|
||||||
|
/* Tab previous */
|
||||||
|
{ ACTION_USB_HID_LEFT, CTRL(HID_KEYBOARD_PAGE_UP) },
|
||||||
|
/* Tab next */
|
||||||
|
{ ACTION_USB_HID_RIGHT, CTRL(HID_KEYBOARD_PAGE_DOWN) },
|
||||||
|
/* Tab close */
|
||||||
|
{ ACTION_USB_HID_QUIT_LONG, CTRL(HID_KEYBOARD_W) },
|
||||||
|
/* History back */
|
||||||
|
{ ACTION_USB_HID_LEFT_LONG, ALT(HID_KEYBOARD_LEFT_ARROW) },
|
||||||
|
/* History forward */
|
||||||
|
{ ACTION_USB_HID_RIGHT_LONG, ALT(HID_KEYBOARD_RIGHT_ARROW) },
|
||||||
|
/* Full-Screen */
|
||||||
|
{ ACTION_USB_HID_SELECT, HID_KEYBOARD_F11 },
|
||||||
|
{ 0, 0 },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_USB_HID_MOUSE
|
||||||
|
static const hid_key_mapping_t hid_key_mapping_mouse = {
|
||||||
|
LANG_MOUSE,
|
||||||
|
HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,
|
||||||
|
{
|
||||||
|
/* Mouse up */
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP, HID_MOUSE_UP },
|
||||||
|
{ ACTION_USB_HID_MOUSE_UP_REP, HID_MOUSE_UP_REP },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP, HID_MOUSE_LDRAG_UP },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_UP_REP, HID_MOUSE_LDRAG_UP_REP },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP, HID_MOUSE_RDRAG_UP },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_UP_REP, HID_MOUSE_RDRAG_UP_REP },
|
||||||
|
/* Mouse down */
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN, HID_MOUSE_DOWN },
|
||||||
|
{ ACTION_USB_HID_MOUSE_DOWN_REP, HID_MOUSE_DOWN_REP },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN, HID_MOUSE_LDRAG_DOWN },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_DOWN_REP, HID_MOUSE_LDRAG_DOWN_REP },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN, HID_MOUSE_RDRAG_DOWN },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_DOWN_REP, HID_MOUSE_RDRAG_DOWN_REP },
|
||||||
|
/* Mouse left */
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT, HID_MOUSE_LEFT },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LEFT_REP, HID_MOUSE_LEFT_REP },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT, HID_MOUSE_LDRAG_LEFT },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_LEFT_REP, HID_MOUSE_LDRAG_LEFT_REP },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT, HID_MOUSE_RDRAG_LEFT },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_LEFT_REP, HID_MOUSE_RDRAG_LEFT_REP },
|
||||||
|
/* Mouse right */
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT, HID_MOUSE_RIGHT },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RIGHT_REP, HID_MOUSE_RIGHT_REP },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT, HID_MOUSE_LDRAG_RIGHT },
|
||||||
|
{ ACTION_USB_HID_MOUSE_LDRAG_RIGHT_REP, HID_MOUSE_LDRAG_RIGHT_REP },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT, HID_MOUSE_RDRAG_RIGHT },
|
||||||
|
{ ACTION_USB_HID_MOUSE_RDRAG_RIGHT_REP, HID_MOUSE_RDRAG_RIGHT_REP },
|
||||||
|
/* Mouse buttons */
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT, HID_MOUSE_BUTTON_LEFT },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL, HID_MOUSE_BUTTON_LEFT_REL },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT, HID_MOUSE_BUTTON_RIGHT },
|
||||||
|
{ ACTION_USB_HID_MOUSE_BUTTON_RIGHT_REL, HID_MOUSE_BUTTON_RIGHT_REL },
|
||||||
|
/* Mouse wheel scroll up */
|
||||||
|
{ ACTION_USB_HID_DEC, HID_MOUSE_SCROLL_UP },
|
||||||
|
/* Mouse wheel scroll down */
|
||||||
|
{ ACTION_USB_HID_INC, HID_MOUSE_SCROLL_DOWN },
|
||||||
|
{ 0, 0 },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#define USB_KEYPAD_MODE_MOUSE 3 /* Value of the mouse setting (hard-coded) */
|
||||||
|
#endif /* HAVE_USB_HID_MOUSE */
|
||||||
|
|
||||||
|
static const hid_key_mapping_t *hid_key_mappings[] =
|
||||||
|
{
|
||||||
|
&hid_key_mapping_multimedia,
|
||||||
|
&hid_key_mapping_presentation,
|
||||||
|
&hid_key_mapping_browser,
|
||||||
|
#ifdef HAVE_USB_HID_MOUSE
|
||||||
|
&hid_key_mapping_mouse,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
extern int usb_keypad_mode;
|
||||||
|
|
||||||
|
int get_hid_usb_action(void)
|
||||||
|
{
|
||||||
|
int action, context = CONTEXT_USB_HID;
|
||||||
|
|
||||||
|
#ifdef HAVE_USB_HID_MOUSE
|
||||||
|
if (usb_keypad_mode == USB_KEYPAD_MODE_MOUSE)
|
||||||
|
context = CONTEXT_USB_HID_MOUSE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
action = get_action(context, HZ/4);
|
||||||
|
/* Skip key mappings in a cyclic way */
|
||||||
|
if (action == ACTION_USB_HID_MODE)
|
||||||
|
{
|
||||||
|
usb_keypad_mode = (usb_keypad_mode + 1) % NUM_KEY_MAPPINGS;
|
||||||
|
}
|
||||||
|
else if (action == ACTION_USB_HID_MODE_LONG)
|
||||||
|
{
|
||||||
|
usb_keypad_mode = (usb_keypad_mode - 1) % NUM_KEY_MAPPINGS;
|
||||||
|
}
|
||||||
|
else if (action > ACTION_USB_HID_FIRST && action < ACTION_USB_HID_LAST)
|
||||||
|
{
|
||||||
|
const mapping_t *mapping;
|
||||||
|
const hid_key_mapping_t *key_mapping =
|
||||||
|
hid_key_mappings[usb_keypad_mode];
|
||||||
|
|
||||||
|
for (mapping = key_mapping->mapping; mapping->action; mapping++)
|
||||||
|
{
|
||||||
|
if (action == mapping->action)
|
||||||
|
{
|
||||||
|
logf("Action %d", action);
|
||||||
|
usb_hid_send(key_mapping->usage_page, mapping->id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (!mapping->action)
|
||||||
|
logf("Action %d not found", action);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
int keypad_mode_name_get(void)
|
||||||
|
{
|
||||||
|
return hid_key_mappings[usb_keypad_mode]->lang_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
28
apps/usb_keymaps.h
Normal file
28
apps/usb_keymaps.h
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* __________ __ ___.
|
||||||
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||||
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||||
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||||
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||||
|
* \/ \/ \/ \/ \/
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Tomer Shalev
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
* KIND, either express or implied.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
#ifndef _USB_KEYMAPS_H_
|
||||||
|
#define _USB_KEYMAPS_H_
|
||||||
|
|
||||||
|
int get_hid_usb_action(void);
|
||||||
|
|
||||||
|
int keypad_mode_name_get(void);
|
||||||
|
|
||||||
|
#endif
|
|
@ -190,6 +190,7 @@
|
||||||
#define USE_ROCKBOX_USB
|
#define USE_ROCKBOX_USB
|
||||||
#define USB_VENDOR_ID 0x0781
|
#define USB_VENDOR_ID 0x0781
|
||||||
#define USB_PRODUCT_ID 0x7451
|
#define USB_PRODUCT_ID 0x7451
|
||||||
|
#define HAVE_USB_HID_MOUSE
|
||||||
|
|
||||||
/* Define this if you have adjustable CPU frequency */
|
/* Define this if you have adjustable CPU frequency */
|
||||||
#define HAVE_ADJUSTABLE_CPU_FREQ
|
#define HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
|
|
@ -184,7 +184,7 @@
|
||||||
#define USE_ROCKBOX_USB
|
#define USE_ROCKBOX_USB
|
||||||
#define USB_VENDOR_ID 0x0781
|
#define USB_VENDOR_ID 0x0781
|
||||||
#define USB_PRODUCT_ID 0x7421
|
#define USB_PRODUCT_ID 0x7421
|
||||||
|
#define HAVE_USB_HID_MOUSE
|
||||||
|
|
||||||
/* Define this if you have adjustable CPU frequency */
|
/* Define this if you have adjustable CPU frequency */
|
||||||
#define HAVE_ADJUSTABLE_CPU_FREQ
|
#define HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
|
|
@ -187,6 +187,7 @@
|
||||||
#define USB_PORTSCX_PHY_TYPE PORTSCX_PTS_ULPI
|
#define USB_PORTSCX_PHY_TYPE PORTSCX_PTS_ULPI
|
||||||
#define USB_VENDOR_ID 0x0930
|
#define USB_VENDOR_ID 0x0930
|
||||||
#define USB_PRODUCT_ID 0x0010
|
#define USB_PRODUCT_ID 0x0010
|
||||||
|
#define HAVE_USB_HID_MOUSE
|
||||||
|
|
||||||
/* Define this if you have ATA power-off control */
|
/* Define this if you have ATA power-off control */
|
||||||
#define HAVE_ATA_POWER_OFF
|
#define HAVE_ATA_POWER_OFF
|
||||||
|
|
|
@ -187,6 +187,7 @@
|
||||||
#define USE_ROCKBOX_USB
|
#define USE_ROCKBOX_USB
|
||||||
#define USB_VENDOR_ID 0x0471
|
#define USB_VENDOR_ID 0x0471
|
||||||
#define USB_PRODUCT_ID 0x014C
|
#define USB_PRODUCT_ID 0x014C
|
||||||
|
#define HAVE_USB_HID_MOUSE
|
||||||
|
|
||||||
/* Define this if you have adjustable CPU frequency */
|
/* Define this if you have adjustable CPU frequency */
|
||||||
#define HAVE_ADJUSTABLE_CPU_FREQ
|
#define HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
|
|
@ -183,6 +183,7 @@
|
||||||
#define USE_ROCKBOX_USB
|
#define USE_ROCKBOX_USB
|
||||||
#define USB_VENDOR_ID 0x05ac
|
#define USB_VENDOR_ID 0x05ac
|
||||||
#define USB_PRODUCT_ID 0x1203
|
#define USB_PRODUCT_ID 0x1203
|
||||||
|
#define HAVE_USB_HID_MOUSE
|
||||||
|
|
||||||
/* Virtual LED (icon) */
|
/* Virtual LED (icon) */
|
||||||
#define CONFIG_LED LED_VIRTUAL
|
#define CONFIG_LED LED_VIRTUAL
|
||||||
|
|
|
@ -160,6 +160,7 @@
|
||||||
#define USE_ROCKBOX_USB
|
#define USE_ROCKBOX_USB
|
||||||
#define USB_VENDOR_ID 0x05ac
|
#define USB_VENDOR_ID 0x05ac
|
||||||
#define USB_PRODUCT_ID 0x1204
|
#define USB_PRODUCT_ID 0x1204
|
||||||
|
#define HAVE_USB_HID_MOUSE
|
||||||
|
|
||||||
/* Define this if you have adjustable CPU frequency */
|
/* Define this if you have adjustable CPU frequency */
|
||||||
#define HAVE_ADJUSTABLE_CPU_FREQ
|
#define HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
|
|
@ -179,6 +179,7 @@
|
||||||
#define USE_ROCKBOX_USB
|
#define USE_ROCKBOX_USB
|
||||||
#define USB_VENDOR_ID 0x05ac
|
#define USB_VENDOR_ID 0x05ac
|
||||||
#define USB_PRODUCT_ID 0x1205
|
#define USB_PRODUCT_ID 0x1205
|
||||||
|
#define HAVE_USB_HID_MOUSE
|
||||||
|
|
||||||
/* Define this if you have adjustable CPU frequency */
|
/* Define this if you have adjustable CPU frequency */
|
||||||
#define HAVE_ADJUSTABLE_CPU_FREQ
|
#define HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
|
|
@ -186,6 +186,7 @@
|
||||||
#define USE_ROCKBOX_USB
|
#define USE_ROCKBOX_USB
|
||||||
#define USB_VENDOR_ID 0x05ac
|
#define USB_VENDOR_ID 0x05ac
|
||||||
#define USB_PRODUCT_ID 0x1205
|
#define USB_PRODUCT_ID 0x1205
|
||||||
|
#define HAVE_USB_HID_MOUSE
|
||||||
|
|
||||||
/* Define this if you have adjustable CPU frequency */
|
/* Define this if you have adjustable CPU frequency */
|
||||||
#define HAVE_ADJUSTABLE_CPU_FREQ
|
#define HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
|
|
@ -170,6 +170,7 @@
|
||||||
#define USE_ROCKBOX_USB
|
#define USE_ROCKBOX_USB
|
||||||
#define USB_VENDOR_ID 0x05ac
|
#define USB_VENDOR_ID 0x05ac
|
||||||
#define USB_PRODUCT_ID 0x120a
|
#define USB_PRODUCT_ID 0x120a
|
||||||
|
#define HAVE_USB_HID_MOUSE
|
||||||
|
|
||||||
/* Define this if you have adjustable CPU frequency */
|
/* Define this if you have adjustable CPU frequency */
|
||||||
#define HAVE_ADJUSTABLE_CPU_FREQ
|
#define HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
|
|
@ -194,6 +194,7 @@
|
||||||
#define USE_ROCKBOX_USB
|
#define USE_ROCKBOX_USB
|
||||||
#define USB_VENDOR_ID 0x05ac
|
#define USB_VENDOR_ID 0x05ac
|
||||||
#define USB_PRODUCT_ID 0x1209
|
#define USB_PRODUCT_ID 0x1209
|
||||||
|
#define HAVE_USB_HID_MOUSE
|
||||||
|
|
||||||
/* Virtual LED (icon) */
|
/* Virtual LED (icon) */
|
||||||
#define CONFIG_LED LED_VIRTUAL
|
#define CONFIG_LED LED_VIRTUAL
|
||||||
|
|
|
@ -171,6 +171,7 @@
|
||||||
#define USE_ROCKBOX_USB
|
#define USE_ROCKBOX_USB
|
||||||
#define USB_VENDOR_ID 0x0471
|
#define USB_VENDOR_ID 0x0471
|
||||||
#define USB_PRODUCT_ID 0x014f
|
#define USB_PRODUCT_ID 0x014f
|
||||||
|
#define HAVE_USB_HID_MOUSE
|
||||||
|
|
||||||
/* WARNING! Enable Rockbox USB mass storage. */
|
/* WARNING! Enable Rockbox USB mass storage. */
|
||||||
#ifndef BOOTLOADER
|
#ifndef BOOTLOADER
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
#include "usb_charging_only.h"
|
#include "usb_charging_only.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USB_ENABLE_HID)
|
#ifdef USB_ENABLE_HID
|
||||||
#include "usb_hid.h"
|
#include "usb_hid.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -28,11 +28,6 @@
|
||||||
//#define LOGF_ENABLE
|
//#define LOGF_ENABLE
|
||||||
#include "logf.h"
|
#include "logf.h"
|
||||||
|
|
||||||
#define CONCAT(low, high) ((high << 8) | low)
|
|
||||||
#define PACK_VAL1(dest, val) *(dest)++ = (val) & 0xff
|
|
||||||
#define PACK_VAL2(dest, val) PACK_VAL1((dest), (val)); \
|
|
||||||
PACK_VAL1((dest), (val >> 8))
|
|
||||||
|
|
||||||
/* Documents avaiable here: http://www.usb.org/developers/devclass_docs/ */
|
/* Documents avaiable here: http://www.usb.org/developers/devclass_docs/ */
|
||||||
|
|
||||||
#define HID_VER 0x0110 /* 1.1 */
|
#define HID_VER 0x0110 /* 1.1 */
|
||||||
|
@ -47,6 +42,7 @@
|
||||||
#define INPUT 0x80
|
#define INPUT 0x80
|
||||||
#define OUTPUT 0x90
|
#define OUTPUT 0x90
|
||||||
#define COLLECTION 0xA0
|
#define COLLECTION 0xA0
|
||||||
|
#define COLLECTION_PHYSICAL 0x00
|
||||||
#define COLLECTION_APPLICATION 0x01
|
#define COLLECTION_APPLICATION 0x01
|
||||||
#define END_COLLECTION 0xC0
|
#define END_COLLECTION 0xC0
|
||||||
/* Parts (HID1_11.pdf, page 40) */
|
/* Parts (HID1_11.pdf, page 40) */
|
||||||
|
@ -90,24 +86,30 @@
|
||||||
|
|
||||||
#define HID_BUF_SIZE_MSG 16
|
#define HID_BUF_SIZE_MSG 16
|
||||||
#define HID_BUF_SIZE_CMD 16
|
#define HID_BUF_SIZE_CMD 16
|
||||||
#define HID_BUF_SIZE_REPORT 96
|
#define HID_BUF_SIZE_REPORT 160
|
||||||
#define HID_NUM_BUFFERS 5
|
#define HID_NUM_BUFFERS 5
|
||||||
#define SET_REPORT_BUF_LEN 2
|
#define SET_REPORT_BUF_LEN 2
|
||||||
|
|
||||||
|
//#ifdef LOGF_ENABLE
|
||||||
#ifdef LOGF_ENABLE
|
#ifdef LOGF_ENABLE
|
||||||
|
|
||||||
#define BUF_DUMP_BUF_LEN HID_BUF_SIZE_REPORT
|
#define BUF_DUMP_BUF_LEN HID_BUF_SIZE_REPORT
|
||||||
#define BUF_DUMP_PREFIX_SIZE 5
|
#define BUF_DUMP_PREFIX_SIZE 5
|
||||||
#define BUF_DUMP_LINE_SIZE (MAX_LOGF_ENTRY - BUF_DUMP_PREFIX_SIZE)
|
#define BUF_DUMP_ITEMS_IN_LINE 8
|
||||||
#define BUF_DUMP_ITEMS_IN_LINE (BUF_DUMP_LINE_SIZE / 3)
|
#define BUF_DUMP_LINE_SIZE (BUF_DUMP_ITEMS_IN_LINE * 3)
|
||||||
#define BUF_DUMP_NUM_LINES (BUF_DUMP_BUF_LEN / (BUF_DUMP_LINE_SIZE / 3))
|
#define BUF_DUMP_NUM_LINES (BUF_DUMP_BUF_LEN / BUF_DUMP_ITEMS_IN_LINE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define HID_BUF_INC(i) do { (i) = ((i) + 1) % HID_NUM_BUFFERS; } while (0)
|
#define HID_BUF_INC(i) do { (i) = ((i) + 1) % HID_NUM_BUFFERS; } while (0)
|
||||||
|
#define PACK_VAL(dest, val) *(dest)++ = (val) & 0xff
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
REPORT_ID_KEYBOARD = 1,
|
REPORT_ID_KEYBOARD = 1,
|
||||||
REPORT_ID_CONSUMER,
|
REPORT_ID_CONSUMER,
|
||||||
|
#ifdef HAVE_USB_HID_MOUSE
|
||||||
|
REPORT_ID_MOUSE,
|
||||||
|
#endif
|
||||||
REPORT_ID_COUNT,
|
REPORT_ID_COUNT,
|
||||||
} report_id_t;
|
} report_id_t;
|
||||||
|
|
||||||
|
@ -164,6 +166,7 @@ typedef struct
|
||||||
/* Write the id into the buffer in the appropriate location, and returns the
|
/* Write the id into the buffer in the appropriate location, and returns the
|
||||||
* buffer length */
|
* buffer length */
|
||||||
uint8_t (*buf_set)(unsigned char *buf, int id);
|
uint8_t (*buf_set)(unsigned char *buf, int id);
|
||||||
|
bool is_key_released;
|
||||||
} usb_hid_report_t;
|
} usb_hid_report_t;
|
||||||
|
|
||||||
usb_hid_report_t usb_hid_reports[REPORT_ID_COUNT];
|
usb_hid_report_t usb_hid_reports[REPORT_ID_COUNT];
|
||||||
|
@ -183,7 +186,7 @@ static int usb_interface;
|
||||||
|
|
||||||
static void usb_hid_try_send_drv(void);
|
static void usb_hid_try_send_drv(void);
|
||||||
|
|
||||||
static void pack_parameter(unsigned char **dest, bool is_signed,
|
static void pack_parameter(unsigned char **dest, bool is_signed, bool mark_size,
|
||||||
uint8_t parameter, uint32_t value)
|
uint8_t parameter, uint32_t value)
|
||||||
{
|
{
|
||||||
uint8_t size_value = 1; /* # of bytes */
|
uint8_t size_value = 1; /* # of bytes */
|
||||||
|
@ -216,7 +219,7 @@ static void pack_parameter(unsigned char **dest, bool is_signed,
|
||||||
size_value++;
|
size_value++;
|
||||||
}
|
}
|
||||||
|
|
||||||
**dest = parameter | size_value;
|
**dest = parameter | (mark_size ? size_value : 0);
|
||||||
(*dest)++;
|
(*dest)++;
|
||||||
|
|
||||||
while (size_value--)
|
while (size_value--)
|
||||||
|
@ -244,11 +247,10 @@ int usb_hid_set_first_interface(int interface)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef LOGF_ENABLE
|
#ifdef LOGF_ENABLE
|
||||||
static unsigned char
|
static unsigned char buf_dump_ar[BUF_DUMP_NUM_LINES][BUF_DUMP_LINE_SIZE + 1]
|
||||||
buf_dump_ar[BUF_DUMP_NUM_LINES][BUF_DUMP_LINE_SIZE + 1]
|
|
||||||
USB_DEVBSS_ATTR __attribute__((aligned(32)));
|
USB_DEVBSS_ATTR __attribute__((aligned(32)));
|
||||||
|
|
||||||
void buf_dump(unsigned char *buf, size_t size)
|
void buf_dump(unsigned char *buf, size_t size, char *msg)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
int line;
|
int line;
|
||||||
|
@ -269,7 +271,7 @@ void buf_dump(unsigned char *buf, size_t size)
|
||||||
*b = 0;
|
*b = 0;
|
||||||
|
|
||||||
/* Prefix must be of len BUF_DUMP_PREFIX_SIZE */
|
/* Prefix must be of len BUF_DUMP_PREFIX_SIZE */
|
||||||
logf("%03d: %s", i0, buf_dump_ar[line]);
|
logf("%03d: %s %s", i0, buf_dump_ar[line], msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -277,26 +279,178 @@ void buf_dump(unsigned char *buf, size_t size)
|
||||||
#define buf_dump(...)
|
#define buf_dump(...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define BUF_LEN_KEYBOARD 7
|
||||||
static uint8_t buf_set_keyboard(unsigned char *buf, int id)
|
static uint8_t buf_set_keyboard(unsigned char *buf, int id)
|
||||||
{
|
{
|
||||||
memset(buf, 0, 7);
|
memset(buf, 0, BUF_LEN_KEYBOARD);
|
||||||
|
int key, i = 1;
|
||||||
|
|
||||||
if (HID_KEYBOARD_LEFT_CONTROL <= id && id <= HID_KEYBOARD_RIGHT_GUI)
|
/* Each key is a word in id (up to 4 keys supported) */
|
||||||
buf[0] = (1 << (id - HID_KEYBOARD_LEFT_CONTROL));
|
while ((key = id & 0xff))
|
||||||
else
|
{
|
||||||
buf[1] = (uint8_t)id;
|
/* Each modifier key is a bit in the first byte */
|
||||||
|
if (HID_KEYBOARD_LEFT_CONTROL <= key && key <= HID_KEYBOARD_RIGHT_GUI)
|
||||||
|
buf[0] |= (1 << (key - HID_KEYBOARD_LEFT_CONTROL));
|
||||||
|
else /* Any other key should be set in a separate byte */
|
||||||
|
buf[i++] = (uint8_t)key;
|
||||||
|
|
||||||
return 7;
|
id >>= 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return BUF_LEN_KEYBOARD;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define BUF_LEN_CONSUMER 4
|
||||||
static uint8_t buf_set_consumer(unsigned char *buf, int id)
|
static uint8_t buf_set_consumer(unsigned char *buf, int id)
|
||||||
{
|
{
|
||||||
memset(buf, 0, 4);
|
memset(buf, 0, BUF_LEN_CONSUMER);
|
||||||
buf[0] = (uint8_t)id;
|
buf[0] = (uint8_t)id;
|
||||||
|
|
||||||
return 4;
|
return BUF_LEN_CONSUMER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_USB_HID_MOUSE
|
||||||
|
#define MOUSE_WHEEL_STEP 1
|
||||||
|
#define MOUSE_STEP 8
|
||||||
|
#define MOUSE_BUTTON_LEFT 0x1
|
||||||
|
#define MOUSE_BUTTON_RIGHT 0x2
|
||||||
|
//#define MOUSE_BUTTON_MIDDLE 0x4
|
||||||
|
#define MOUSE_BUTTON 0
|
||||||
|
#define MOUSE_X 1
|
||||||
|
#define MOUSE_Y 2
|
||||||
|
#define MOUSE_WHEEL 3
|
||||||
|
#define BUF_LEN_MOUSE 4
|
||||||
|
#define MOUSE_ACCEL_FACTOR(count) ((count) / 2)
|
||||||
|
#define MOUSE_DO(item, step) (buf[(item)] = ((uint8_t)(step)))
|
||||||
|
|
||||||
|
static uint8_t buf_set_mouse(unsigned char *buf, int id)
|
||||||
|
{
|
||||||
|
static int count = 0;
|
||||||
|
int step = MOUSE_STEP;
|
||||||
|
|
||||||
|
memset(buf, 0, BUF_LEN_MOUSE);
|
||||||
|
|
||||||
|
/* Set proper button */
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
case HID_MOUSE_BUTTON_LEFT:
|
||||||
|
case HID_MOUSE_LDRAG_UP:
|
||||||
|
case HID_MOUSE_LDRAG_UP_REP:
|
||||||
|
case HID_MOUSE_LDRAG_DOWN:
|
||||||
|
case HID_MOUSE_LDRAG_DOWN_REP:
|
||||||
|
case HID_MOUSE_LDRAG_LEFT:
|
||||||
|
case HID_MOUSE_LDRAG_LEFT_REP:
|
||||||
|
case HID_MOUSE_LDRAG_RIGHT:
|
||||||
|
case HID_MOUSE_LDRAG_RIGHT_REP:
|
||||||
|
MOUSE_DO(MOUSE_BUTTON, MOUSE_BUTTON_LEFT);
|
||||||
|
break;
|
||||||
|
case HID_MOUSE_BUTTON_RIGHT:
|
||||||
|
case HID_MOUSE_RDRAG_UP:
|
||||||
|
case HID_MOUSE_RDRAG_UP_REP:
|
||||||
|
case HID_MOUSE_RDRAG_DOWN:
|
||||||
|
case HID_MOUSE_RDRAG_DOWN_REP:
|
||||||
|
case HID_MOUSE_RDRAG_LEFT:
|
||||||
|
case HID_MOUSE_RDRAG_LEFT_REP:
|
||||||
|
case HID_MOUSE_RDRAG_RIGHT:
|
||||||
|
case HID_MOUSE_RDRAG_RIGHT_REP:
|
||||||
|
MOUSE_DO(MOUSE_BUTTON, MOUSE_BUTTON_RIGHT);
|
||||||
|
break;
|
||||||
|
case HID_MOUSE_BUTTON_LEFT_REL:
|
||||||
|
case HID_MOUSE_BUTTON_RIGHT_REL:
|
||||||
|
/* Keep buf empty, to mark mouse button release */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle mouse accelarated movement */
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
case HID_MOUSE_UP:
|
||||||
|
case HID_MOUSE_DOWN:
|
||||||
|
case HID_MOUSE_LEFT:
|
||||||
|
case HID_MOUSE_RIGHT:
|
||||||
|
case HID_MOUSE_LDRAG_UP:
|
||||||
|
case HID_MOUSE_LDRAG_DOWN:
|
||||||
|
case HID_MOUSE_LDRAG_LEFT:
|
||||||
|
case HID_MOUSE_LDRAG_RIGHT:
|
||||||
|
case HID_MOUSE_RDRAG_UP:
|
||||||
|
case HID_MOUSE_RDRAG_DOWN:
|
||||||
|
case HID_MOUSE_RDRAG_LEFT:
|
||||||
|
case HID_MOUSE_RDRAG_RIGHT:
|
||||||
|
count = 0;
|
||||||
|
break;
|
||||||
|
case HID_MOUSE_UP_REP:
|
||||||
|
case HID_MOUSE_DOWN_REP:
|
||||||
|
case HID_MOUSE_LEFT_REP:
|
||||||
|
case HID_MOUSE_RIGHT_REP:
|
||||||
|
case HID_MOUSE_LDRAG_UP_REP:
|
||||||
|
case HID_MOUSE_LDRAG_DOWN_REP:
|
||||||
|
case HID_MOUSE_LDRAG_LEFT_REP:
|
||||||
|
case HID_MOUSE_LDRAG_RIGHT_REP:
|
||||||
|
case HID_MOUSE_RDRAG_UP_REP:
|
||||||
|
case HID_MOUSE_RDRAG_DOWN_REP:
|
||||||
|
case HID_MOUSE_RDRAG_LEFT_REP:
|
||||||
|
case HID_MOUSE_RDRAG_RIGHT_REP:
|
||||||
|
count++;
|
||||||
|
/* TODO: Find a better mouse accellaration algorithm */
|
||||||
|
step *= 1 + MOUSE_ACCEL_FACTOR(count);
|
||||||
|
if (step > 255)
|
||||||
|
step = 255;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Move/scroll mouse */
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
case HID_MOUSE_UP:
|
||||||
|
case HID_MOUSE_UP_REP:
|
||||||
|
case HID_MOUSE_LDRAG_UP:
|
||||||
|
case HID_MOUSE_LDRAG_UP_REP:
|
||||||
|
case HID_MOUSE_RDRAG_UP:
|
||||||
|
case HID_MOUSE_RDRAG_UP_REP:
|
||||||
|
MOUSE_DO(MOUSE_Y, -step);
|
||||||
|
break;
|
||||||
|
case HID_MOUSE_DOWN:
|
||||||
|
case HID_MOUSE_DOWN_REP:
|
||||||
|
case HID_MOUSE_LDRAG_DOWN:
|
||||||
|
case HID_MOUSE_LDRAG_DOWN_REP:
|
||||||
|
case HID_MOUSE_RDRAG_DOWN:
|
||||||
|
case HID_MOUSE_RDRAG_DOWN_REP:
|
||||||
|
MOUSE_DO(MOUSE_Y, step);
|
||||||
|
break;
|
||||||
|
case HID_MOUSE_LEFT:
|
||||||
|
case HID_MOUSE_LEFT_REP:
|
||||||
|
case HID_MOUSE_LDRAG_LEFT:
|
||||||
|
case HID_MOUSE_LDRAG_LEFT_REP:
|
||||||
|
case HID_MOUSE_RDRAG_LEFT:
|
||||||
|
case HID_MOUSE_RDRAG_LEFT_REP:
|
||||||
|
MOUSE_DO(MOUSE_X, -step);
|
||||||
|
break;
|
||||||
|
case HID_MOUSE_RIGHT:
|
||||||
|
case HID_MOUSE_RIGHT_REP:
|
||||||
|
case HID_MOUSE_LDRAG_RIGHT:
|
||||||
|
case HID_MOUSE_LDRAG_RIGHT_REP:
|
||||||
|
case HID_MOUSE_RDRAG_RIGHT:
|
||||||
|
case HID_MOUSE_RDRAG_RIGHT_REP:
|
||||||
|
MOUSE_DO(MOUSE_X, step);
|
||||||
|
break;
|
||||||
|
case HID_MOUSE_SCROLL_UP:
|
||||||
|
MOUSE_DO(MOUSE_WHEEL, MOUSE_WHEEL_STEP);
|
||||||
|
break;
|
||||||
|
case HID_MOUSE_SCROLL_DOWN:
|
||||||
|
MOUSE_DO(MOUSE_WHEEL, -MOUSE_WHEEL_STEP);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return BUF_LEN_MOUSE;
|
||||||
|
}
|
||||||
|
#endif /* HAVE_USB_HID_MOUSE */
|
||||||
|
|
||||||
static size_t descriptor_report_get(unsigned char *dest)
|
static size_t descriptor_report_get(unsigned char *dest)
|
||||||
{
|
{
|
||||||
unsigned char *report = dest;
|
unsigned char *report = dest;
|
||||||
|
@ -306,59 +460,97 @@ static size_t descriptor_report_get(unsigned char *dest)
|
||||||
usb_hid_report = &usb_hid_reports[REPORT_ID_KEYBOARD];
|
usb_hid_report = &usb_hid_reports[REPORT_ID_KEYBOARD];
|
||||||
usb_hid_report->usage_page = HID_USAGE_PAGE_KEYBOARD_KEYPAD;
|
usb_hid_report->usage_page = HID_USAGE_PAGE_KEYBOARD_KEYPAD;
|
||||||
usb_hid_report->buf_set = buf_set_keyboard;
|
usb_hid_report->buf_set = buf_set_keyboard;
|
||||||
|
usb_hid_report->is_key_released = 1;
|
||||||
|
|
||||||
pack_parameter(&report, 0, USAGE_PAGE,
|
pack_parameter(&report, 0, 1, USAGE_PAGE,
|
||||||
HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS);
|
HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS);
|
||||||
PACK_VAL2(report, CONCAT(CONSUMER_USAGE, HID_GENERIC_DESKTOP_KEYBOARD));
|
pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_KEYBOARD);
|
||||||
pack_parameter(&report, 0, COLLECTION, COLLECTION_APPLICATION);
|
pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_APPLICATION);
|
||||||
pack_parameter(&report, 0, REPORT_ID, REPORT_ID_KEYBOARD);
|
pack_parameter(&report, 0, 1, REPORT_ID, REPORT_ID_KEYBOARD);
|
||||||
pack_parameter(&report, 0, USAGE_PAGE, HID_GENERIC_DESKTOP_KEYPAD);
|
pack_parameter(&report, 0, 1, USAGE_PAGE, HID_GENERIC_DESKTOP_KEYPAD);
|
||||||
pack_parameter(&report, 0, USAGE_MINIMUM, HID_KEYBOARD_LEFT_CONTROL);
|
pack_parameter(&report, 0, 1, USAGE_MINIMUM, HID_KEYBOARD_LEFT_CONTROL);
|
||||||
pack_parameter(&report, 0, USAGE_MAXIMUM, HID_KEYBOARD_RIGHT_GUI);
|
pack_parameter(&report, 0, 1, USAGE_MAXIMUM, HID_KEYBOARD_RIGHT_GUI);
|
||||||
pack_parameter(&report, 1, LOGICAL_MINIMUM, 0);
|
pack_parameter(&report, 1, 1, LOGICAL_MINIMUM, 0);
|
||||||
pack_parameter(&report, 1, LOGICAL_MAXIMUM, 1);
|
pack_parameter(&report, 1, 1, LOGICAL_MAXIMUM, 1);
|
||||||
pack_parameter(&report, 0, REPORT_SIZE, 1);
|
pack_parameter(&report, 0, 1, REPORT_SIZE, 1);
|
||||||
pack_parameter(&report, 0, REPORT_COUNT, 8);
|
pack_parameter(&report, 0, 1, REPORT_COUNT, 8);
|
||||||
pack_parameter(&report, 0, INPUT, MAIN_ITEM_VARIABLE);
|
pack_parameter(&report, 0, 1, INPUT, MAIN_ITEM_VARIABLE);
|
||||||
pack_parameter(&report, 0, REPORT_SIZE, 1);
|
pack_parameter(&report, 0, 1, REPORT_SIZE, 1);
|
||||||
pack_parameter(&report, 0, REPORT_COUNT, 5);
|
pack_parameter(&report, 0, 1, REPORT_COUNT, 5);
|
||||||
pack_parameter(&report, 0, USAGE_PAGE, HID_USAGE_PAGE_LEDS);
|
pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_LEDS);
|
||||||
pack_parameter(&report, 0, USAGE_MINIMUM, HID_LED_NUM_LOCK);
|
pack_parameter(&report, 0, 1, USAGE_MINIMUM, HID_LED_NUM_LOCK);
|
||||||
pack_parameter(&report, 0, USAGE_MAXIMUM, HID_LED_KANA);
|
pack_parameter(&report, 0, 1, USAGE_MAXIMUM, HID_LED_KANA);
|
||||||
pack_parameter(&report, 0, OUTPUT, MAIN_ITEM_VARIABLE);
|
pack_parameter(&report, 0, 1, OUTPUT, MAIN_ITEM_VARIABLE);
|
||||||
pack_parameter(&report, 0, REPORT_SIZE, 3);
|
pack_parameter(&report, 0, 1, REPORT_SIZE, 3);
|
||||||
pack_parameter(&report, 0, REPORT_COUNT, 1);
|
pack_parameter(&report, 0, 1, REPORT_COUNT, 1);
|
||||||
pack_parameter(&report, 0, OUTPUT, MAIN_ITEM_CONSTANT);
|
pack_parameter(&report, 0, 1, OUTPUT, MAIN_ITEM_CONSTANT);
|
||||||
pack_parameter(&report, 0, REPORT_SIZE, 8);
|
pack_parameter(&report, 0, 1, REPORT_SIZE, 8);
|
||||||
pack_parameter(&report, 0, REPORT_COUNT, 6);
|
pack_parameter(&report, 0, 1, REPORT_COUNT, 6);
|
||||||
pack_parameter(&report, 1, LOGICAL_MINIMUM, 0);
|
pack_parameter(&report, 1, 1, LOGICAL_MINIMUM, 0);
|
||||||
pack_parameter(&report, 1, LOGICAL_MAXIMUM, HID_KEYBOARD_EX_SEL);
|
pack_parameter(&report, 1, 1, LOGICAL_MAXIMUM, HID_KEYBOARD_EX_SEL);
|
||||||
pack_parameter(&report, 0, USAGE_PAGE, HID_USAGE_PAGE_KEYBOARD_KEYPAD);
|
pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_KEYBOARD_KEYPAD);
|
||||||
pack_parameter(&report, 0, USAGE_MINIMUM, 0);
|
pack_parameter(&report, 0, 1, USAGE_MINIMUM, 0);
|
||||||
pack_parameter(&report, 0, USAGE_MAXIMUM, HID_KEYBOARD_EX_SEL);
|
pack_parameter(&report, 0, 1, USAGE_MAXIMUM, HID_KEYBOARD_EX_SEL);
|
||||||
pack_parameter(&report, 0, INPUT, 0);
|
pack_parameter(&report, 0, 1, INPUT, 0);
|
||||||
PACK_VAL1(report, END_COLLECTION);
|
PACK_VAL(report, END_COLLECTION);
|
||||||
|
|
||||||
/* Consumer usage controls - play/pause, stop, etc. */
|
/* Consumer usage controls - play/pause, stop, etc. */
|
||||||
usb_hid_report = &usb_hid_reports[REPORT_ID_CONSUMER];
|
usb_hid_report = &usb_hid_reports[REPORT_ID_CONSUMER];
|
||||||
usb_hid_report->usage_page = HID_USAGE_PAGE_CONSUMER;
|
usb_hid_report->usage_page = HID_USAGE_PAGE_CONSUMER;
|
||||||
usb_hid_report->buf_set = buf_set_consumer;
|
usb_hid_report->buf_set = buf_set_consumer;
|
||||||
|
usb_hid_report->is_key_released = 1;
|
||||||
|
|
||||||
pack_parameter(&report, 0, USAGE_PAGE, HID_USAGE_PAGE_CONSUMER);
|
pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_CONSUMER);
|
||||||
PACK_VAL2(report, CONCAT(CONSUMER_USAGE,
|
pack_parameter(&report, 0, 0, CONSUMER_USAGE,
|
||||||
HID_CONSUMER_USAGE_CONSUMER_CONTROL));
|
|
||||||
pack_parameter(&report, 0, COLLECTION, COLLECTION_APPLICATION);
|
|
||||||
pack_parameter(&report, 0, REPORT_ID, REPORT_ID_CONSUMER);
|
|
||||||
pack_parameter(&report, 0, REPORT_SIZE, 16);
|
|
||||||
pack_parameter(&report, 0, REPORT_COUNT, 2);
|
|
||||||
pack_parameter(&report, 1, LOGICAL_MINIMUM, 1);
|
|
||||||
pack_parameter(&report, 1, LOGICAL_MAXIMUM, 652);
|
|
||||||
pack_parameter(&report, 0, USAGE_MINIMUM,
|
|
||||||
HID_CONSUMER_USAGE_CONSUMER_CONTROL);
|
HID_CONSUMER_USAGE_CONSUMER_CONTROL);
|
||||||
pack_parameter(&report, 0, USAGE_MAXIMUM, HID_CONSUMER_USAGE_AC_SEND);
|
pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_APPLICATION);
|
||||||
pack_parameter(&report, 0, INPUT, MAIN_ITEM_NO_PREFERRED |
|
pack_parameter(&report, 0, 1, REPORT_ID, REPORT_ID_CONSUMER);
|
||||||
|
pack_parameter(&report, 0, 1, REPORT_SIZE, 16);
|
||||||
|
pack_parameter(&report, 0, 1, REPORT_COUNT, 2);
|
||||||
|
pack_parameter(&report, 1, 1, LOGICAL_MINIMUM, 1);
|
||||||
|
pack_parameter(&report, 1, 1, LOGICAL_MAXIMUM, 652);
|
||||||
|
pack_parameter(&report, 0, 1, USAGE_MINIMUM,
|
||||||
|
HID_CONSUMER_USAGE_CONSUMER_CONTROL);
|
||||||
|
pack_parameter(&report, 0, 1, USAGE_MAXIMUM, HID_CONSUMER_USAGE_AC_SEND);
|
||||||
|
pack_parameter(&report, 0, 1, INPUT, MAIN_ITEM_NO_PREFERRED |
|
||||||
MAIN_ITEM_NULL_STATE);
|
MAIN_ITEM_NULL_STATE);
|
||||||
PACK_VAL1(report, END_COLLECTION);
|
PACK_VAL(report, END_COLLECTION);
|
||||||
|
|
||||||
|
#ifdef HAVE_USB_HID_MOUSE
|
||||||
|
/* Mouse control */
|
||||||
|
usb_hid_report = &usb_hid_reports[REPORT_ID_MOUSE];
|
||||||
|
usb_hid_report->usage_page = HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS;
|
||||||
|
usb_hid_report->buf_set = buf_set_mouse;
|
||||||
|
usb_hid_report->is_key_released = 0;
|
||||||
|
|
||||||
|
pack_parameter(&report, 0, 1, USAGE_PAGE,
|
||||||
|
HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS);
|
||||||
|
pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_MOUSE);
|
||||||
|
pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_APPLICATION);
|
||||||
|
pack_parameter(&report, 0, 1, REPORT_ID, REPORT_ID_MOUSE);
|
||||||
|
pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_POINTER);
|
||||||
|
pack_parameter(&report, 0, 1, COLLECTION, COLLECTION_PHYSICAL);
|
||||||
|
pack_parameter(&report, 0, 1, USAGE_PAGE, HID_USAGE_PAGE_BUTTON);
|
||||||
|
pack_parameter(&report, 0, 1, USAGE_MINIMUM, 1);
|
||||||
|
pack_parameter(&report, 0, 1, USAGE_MAXIMUM, 8);
|
||||||
|
pack_parameter(&report, 1, 1, LOGICAL_MINIMUM, 0);
|
||||||
|
pack_parameter(&report, 1, 1, LOGICAL_MAXIMUM, 1);
|
||||||
|
pack_parameter(&report, 0, 1, REPORT_SIZE, 1);
|
||||||
|
pack_parameter(&report, 0, 1, REPORT_COUNT, 8);
|
||||||
|
pack_parameter(&report, 0, 1, INPUT, MAIN_ITEM_VARIABLE);
|
||||||
|
pack_parameter(&report, 0, 1, USAGE_PAGE,
|
||||||
|
HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS);
|
||||||
|
pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_X);
|
||||||
|
pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_Y);
|
||||||
|
pack_parameter(&report, 0, 0, CONSUMER_USAGE, HID_GENERIC_DESKTOP_WHEEL);
|
||||||
|
pack_parameter(&report, 0, 1, LOGICAL_MINIMUM, -127 & 0xFF);
|
||||||
|
pack_parameter(&report, 0, 1, LOGICAL_MAXIMUM, 127);
|
||||||
|
pack_parameter(&report, 0, 1, REPORT_SIZE, 8);
|
||||||
|
pack_parameter(&report, 0, 1, REPORT_COUNT, 3);
|
||||||
|
pack_parameter(&report, 0, 1, INPUT, MAIN_ITEM_VARIABLE | MAIN_ITEM_RELATIVE);
|
||||||
|
PACK_VAL(report, END_COLLECTION);
|
||||||
|
PACK_VAL(report, END_COLLECTION);
|
||||||
|
#endif /* HAVE_USB_HID_MOUSE */
|
||||||
|
|
||||||
return (size_t)((uint32_t)report - (uint32_t)dest);
|
return (size_t)((uint32_t)report - (uint32_t)dest);
|
||||||
}
|
}
|
||||||
|
@ -368,6 +560,9 @@ static void descriptor_hid_get(unsigned char **dest)
|
||||||
hid_descriptor.wDescriptorLength0 =
|
hid_descriptor.wDescriptorLength0 =
|
||||||
(uint16_t)descriptor_report_get(report_descriptor);
|
(uint16_t)descriptor_report_get(report_descriptor);
|
||||||
|
|
||||||
|
logf("hid: desc len %u", hid_descriptor.wDescriptorLength0);
|
||||||
|
buf_dump(report_descriptor, hid_descriptor.wDescriptorLength0, "desc");
|
||||||
|
|
||||||
PACK_DATA(*dest, hid_descriptor);
|
PACK_DATA(*dest, hid_descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -457,8 +652,8 @@ void usb_hid_transfer_complete(int ep, int dir, int status, int length)
|
||||||
* to the DAP using the host's custom driver */
|
* to the DAP using the host's custom driver */
|
||||||
static int usb_hid_set_report(struct usb_ctrlrequest *req)
|
static int usb_hid_set_report(struct usb_ctrlrequest *req)
|
||||||
{
|
{
|
||||||
static unsigned char buf[SET_REPORT_BUF_LEN]
|
static unsigned char buf[SET_REPORT_BUF_LEN] USB_DEVBSS_ATTR
|
||||||
USB_DEVBSS_ATTR __attribute__((aligned(32)));
|
__attribute__((aligned(32)));
|
||||||
int length;
|
int length;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
|
@ -645,16 +840,22 @@ void usb_hid_send(usage_page_t usage_page, int id)
|
||||||
length = report->buf_set(&buf[1], id) + 1;
|
length = report->buf_set(&buf[1], id) + 1;
|
||||||
logf("length %u", length);
|
logf("length %u", length);
|
||||||
|
|
||||||
|
if (!length)
|
||||||
|
return;
|
||||||
|
|
||||||
/* Key pressed */
|
/* Key pressed */
|
||||||
buf_dump(buf, length);
|
buf_dump(buf, length, "key press");
|
||||||
usb_hid_queue(buf, length);
|
usb_hid_queue(buf, length);
|
||||||
|
|
||||||
|
if (report->is_key_released)
|
||||||
|
{
|
||||||
/* Key released */
|
/* Key released */
|
||||||
memset(buf, 0, length);
|
memset(buf, 0, length);
|
||||||
buf[0] = report_id;
|
buf[0] = report_id;
|
||||||
|
|
||||||
buf_dump(buf, length);
|
buf_dump(buf, length, "key release");
|
||||||
usb_hid_queue(buf, length);
|
usb_hid_queue(buf, length);
|
||||||
|
}
|
||||||
|
|
||||||
usb_hid_try_send_drv();
|
usb_hid_try_send_drv();
|
||||||
}
|
}
|
||||||
|
|
|
@ -701,5 +701,39 @@ typedef enum usage_page
|
||||||
#define HID_CONSUMER_USAGE_AC_DISRIBUTE_HORIZONTALLY 0x29B
|
#define HID_CONSUMER_USAGE_AC_DISRIBUTE_HORIZONTALLY 0x29B
|
||||||
#define HID_CONSUMER_USAGE_AC_DISTRIBUTE_VERTICALLY 0x29C
|
#define HID_CONSUMER_USAGE_AC_DISTRIBUTE_VERTICALLY 0x29C
|
||||||
|
|
||||||
#endif
|
#ifdef HAVE_USB_HID_MOUSE
|
||||||
|
/* Mouse defines (custom made - Rockbox specific) */
|
||||||
|
#define HID_MOUSE_NONE 0x00
|
||||||
|
#define HID_MOUSE_UP 0x01
|
||||||
|
#define HID_MOUSE_UP_REP 0x02
|
||||||
|
#define HID_MOUSE_DOWN 0x03
|
||||||
|
#define HID_MOUSE_DOWN_REP 0x04
|
||||||
|
#define HID_MOUSE_LEFT 0x05
|
||||||
|
#define HID_MOUSE_LEFT_REP 0x06
|
||||||
|
#define HID_MOUSE_RIGHT 0x07
|
||||||
|
#define HID_MOUSE_RIGHT_REP 0x08
|
||||||
|
#define HID_MOUSE_LDRAG_UP 0x09
|
||||||
|
#define HID_MOUSE_LDRAG_UP_REP 0x0A
|
||||||
|
#define HID_MOUSE_LDRAG_DOWN 0x0B
|
||||||
|
#define HID_MOUSE_LDRAG_DOWN_REP 0x0C
|
||||||
|
#define HID_MOUSE_LDRAG_LEFT 0x0D
|
||||||
|
#define HID_MOUSE_LDRAG_LEFT_REP 0x0E
|
||||||
|
#define HID_MOUSE_LDRAG_RIGHT 0x0F
|
||||||
|
#define HID_MOUSE_LDRAG_RIGHT_REP 0x10
|
||||||
|
#define HID_MOUSE_RDRAG_UP 0x11
|
||||||
|
#define HID_MOUSE_RDRAG_UP_REP 0x12
|
||||||
|
#define HID_MOUSE_RDRAG_DOWN 0x13
|
||||||
|
#define HID_MOUSE_RDRAG_DOWN_REP 0x14
|
||||||
|
#define HID_MOUSE_RDRAG_LEFT 0x15
|
||||||
|
#define HID_MOUSE_RDRAG_LEFT_REP 0x16
|
||||||
|
#define HID_MOUSE_RDRAG_RIGHT 0x17
|
||||||
|
#define HID_MOUSE_RDRAG_RIGHT_REP 0x18
|
||||||
|
#define HID_MOUSE_SCROLL_UP 0x19
|
||||||
|
#define HID_MOUSE_SCROLL_DOWN 0x1A
|
||||||
|
#define HID_MOUSE_BUTTON_LEFT 0x1B
|
||||||
|
#define HID_MOUSE_BUTTON_LEFT_REL 0x1C
|
||||||
|
#define HID_MOUSE_BUTTON_RIGHT 0x1D
|
||||||
|
#define HID_MOUSE_BUTTON_RIGHT_REL 0x1E
|
||||||
|
#endif /* HAVE_USB_HID_MOUSE */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -182,3 +182,266 @@ this option \setting{On}. If it is not required, then turning this setting
|
||||||
Changes the brightness of the button lights.
|
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.
|
||||||
|
\begin{table}
|
||||||
|
\begin{btnmap}{}{}
|
||||||
|
\opt{SANSA_E200_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonScrollBack / \ButtonScrollFwd}
|
||||||
|
\opt{GIGABEAT_S_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}
|
||||||
|
{\ButtonVolUp / \ButtonVolDown}
|
||||||
|
\opt{IRIVER_H10_PAD}{\ButtonScrollUp / \ButtonScrollDown}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{\ButtonRCVolUp / \ButtonRCVolDown}%
|
||||||
|
}
|
||||||
|
& Volume up / down, respectively \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,IPOD_4G_PAD%
|
||||||
|
,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonSelect}
|
||||||
|
\opt{GIGABEAT_S_PAD}{\ButtonSelect; \ButtonBack}
|
||||||
|
\opt{IRIVER_H10_PAD}{\ButtonFF}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{Long \ButtonRCFF}%
|
||||||
|
}
|
||||||
|
& Volume mute \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonUp}
|
||||||
|
\opt{GIGABEAT_S_PAD,IRIVER_H10_PAD,IPOD_4G_PAD,IPOD_3G_PAD%
|
||||||
|
,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonPlay}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{\ButtonRCPlay}%
|
||||||
|
}
|
||||||
|
& Play / Pause \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonPower}
|
||||||
|
\opt{GIGABEAT_S_PAD}{\ButtonMenu}
|
||||||
|
\opt{SANSA_CLIP_PAD}{\ButtonHome}
|
||||||
|
\opt{IRIVER_H10_PAD}{\ButtonRew}
|
||||||
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}{Long \ButtonPlay}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{Long \ButtonRCPlay}%
|
||||||
|
}
|
||||||
|
& Stop \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,GIGABEAT_S_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD%
|
||||||
|
,IRIVER_H10_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonLeft / \ButtonRight}
|
||||||
|
\opt{SANSA_E200_PAD}{\ButtonMenu}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{\ButtonRCRew / \ButtonRCFF}%
|
||||||
|
}
|
||||||
|
& Scan previous / next track \\
|
||||||
|
\end{btnmap}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\item [Presentation: ]This mode lets you control a presentation program
|
||||||
|
(e.g. OpenOffice Impress, and some other popular application), making
|
||||||
|
the \dap{} a wired remote control device. This mode is can be useful
|
||||||
|
for lecturers who does not have a wireless remote control for this
|
||||||
|
purpose.
|
||||||
|
\begin{table}
|
||||||
|
\begin{btnmap}{}{}
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonUp / \ButtonPower}
|
||||||
|
\opt{GIGABEAT_S_PADIRIVER_H10_PAD}{\ButtonPlay / \ButtonMenu}
|
||||||
|
\opt{SANSA_CLIP_PAD}{\ButtonUp / \ButtonHome}
|
||||||
|
\opt{IRIVER_H10_PAD}{\ButtonPlay / \ButtonRew}
|
||||||
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonPlay / Long \ButtonPlay}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{\ButtonRCPlay / Long \ButtonRCPlay}%
|
||||||
|
}
|
||||||
|
& Slideshow start / leave, respectively \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,GIGABEAT_S_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD%
|
||||||
|
,IRIVER_H10_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonLeft / \ButtonRight}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{\ButtonRCRew / \ButtonRCFF}%
|
||||||
|
}
|
||||||
|
& Slide previous / next, respectively \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,GIGABEAT_S_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD%
|
||||||
|
,IRIVER_H10_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{Long \ButtonLeft / Long \ButtonRight}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{& }
|
||||||
|
& Slide first / last, respectively \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,GIGABEAT_S_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}
|
||||||
|
{\ButtonDown}
|
||||||
|
\opt{IRIVER_H10_PAD}{\ButtonPower}
|
||||||
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}{\ButtonMenu}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{& }
|
||||||
|
& Blank screen \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,GIGABEAT_S_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}
|
||||||
|
{Long \ButtonDown}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{& }
|
||||||
|
& White screen \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonScrollBack / \ButtonScrollFwd}
|
||||||
|
\opt{GIGABEAT_S_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}
|
||||||
|
{\ButtonVolUp / \ButtonVolDown}
|
||||||
|
\opt{IRIVER_H10_PAD}{\ButtonScrollUp / \ButtonScrollDown}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{\ButtonRCVolUp / \ButtonRCVolDown}%
|
||||||
|
}
|
||||||
|
& Previous / next link in slide, respectively \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,IPOD_4G_PAD%
|
||||||
|
,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonSelect}
|
||||||
|
\opt{GIGABEAT_S_PAD}{\ButtonSelect; \ButtonBack}
|
||||||
|
\opt{IRIVER_H10_PAD}{\ButtonFF}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{Long \ButtonRCFF}%
|
||||||
|
}
|
||||||
|
& Perform a 'mouse click' over a link \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,IPOD_4G_PAD%
|
||||||
|
,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{Long \ButtonSelect}
|
||||||
|
\opt{GIGABEAT_S_PAD}{Long \ButtonSelect; Long \ButtonBack}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{Long \ButtonRCRew}%
|
||||||
|
}
|
||||||
|
& Perform a 'mouse over' over a link \\
|
||||||
|
\end{btnmap}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\item [Browser: ]This mode lets you control a web browser (e.g. Firefox).
|
||||||
|
It uses the \dap{}'s keys to navigate through the web page and
|
||||||
|
different tabs, navigate through history, and to control zoom.
|
||||||
|
\begin{table}
|
||||||
|
\begin{btnmap}{}{}
|
||||||
|
\opt{SANSA_E200_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonScrollBack / \ButtonScrollFwd}
|
||||||
|
\opt{GIGABEAT_S_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}
|
||||||
|
{\ButtonVolUp / \ButtonVolDown}
|
||||||
|
\opt{IRIVER_H10_PAD}{\ButtonScrollUp / \ButtonScrollDown}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{\ButtonRCVolUp / \ButtonRCVolDown}%
|
||||||
|
}
|
||||||
|
& Scroll up / down, respectively \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}
|
||||||
|
{\ButtonUp / \ButtonDown}
|
||||||
|
\opt{GIGABEAT_S_PAD}{\ButtonPlay / \ButtonDown}
|
||||||
|
\opt{IRIVER_H10_PAD}{\ButtonPlay / \ButtonPower}
|
||||||
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonPlay / \ButtonMenu}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{\ButtonRCPlay / Long \ButtonRCDsp}%
|
||||||
|
}
|
||||||
|
& Scroll page up / down, respectively \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}
|
||||||
|
{Long \ButtonUp / Long \ButtonDown}
|
||||||
|
\opt{GIGABEAT_S_PAD}{Long \ButtonPlay / Long \ButtonPower}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{& }
|
||||||
|
& Zoom in / out, respectively \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}
|
||||||
|
{Long \ButtonSelect}
|
||||||
|
\opt{GIGABEAT_S_PAD}{Long \ButtonSelect; Long \ButtonBack}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{Long \ButtonRCRew}%
|
||||||
|
}
|
||||||
|
& Zoom reset \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,GIGABEAT_S_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD%
|
||||||
|
,IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonLeft / \ButtonRight}
|
||||||
|
\opt{IRIVER_H10_PAD}{\ButtonRew / \ButtonFF}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{& }
|
||||||
|
& Tab previous / next, respectively \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD}{Long \ButtonPower}
|
||||||
|
\opt{GIGABEAT_S_PAD}{Long \ButtonMenu}
|
||||||
|
\opt{SANSA_CLIP_PAD}{Long \ButtonHome}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{& }
|
||||||
|
& Tab close \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,GIGABEAT_S_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD%
|
||||||
|
,IRIVER_H10_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{Long \ButtonLeft / Long \ButtonRight}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{\ButtonRCRew / \ButtonRCFF}%
|
||||||
|
}
|
||||||
|
& History back / forward \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,IPOD_4G_PAD%
|
||||||
|
,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonSelect}
|
||||||
|
\opt{GIGABEAT_S_PAD}{Long \ButtonSelect; Long \ButtonBack}
|
||||||
|
\opt{IRIVER_H10_PAD}{\ButtonFF}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{
|
||||||
|
&
|
||||||
|
\opt{GIGABEAT_RC_PAD}{Long \ButtonRCRew}%
|
||||||
|
}
|
||||||
|
& View full screen toggle \\
|
||||||
|
\end{btnmap}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\item [Mouse: ]This mode emulates a mouse. Features supported: Mouse
|
||||||
|
movement; left and right button clicking; and dragging and dropping.
|
||||||
|
\begin{table}
|
||||||
|
\begin{btnmap}{}{}
|
||||||
|
\opt{SANSA_E200_PAD,GIGABEAT_S_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}
|
||||||
|
{\ButtonUp / \ButtonDown / \ButtonLeft / \ButtonRight}
|
||||||
|
\opt{IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonMenu / \ButtonPlay / \ButtonLeft / \ButtonRight}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{& }
|
||||||
|
& Move cursor up / down / left / right, respectively \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,IPOD_4G_PAD%
|
||||||
|
,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonSelect}
|
||||||
|
\opt{GIGABEAT_S_PAD}{\ButtonSelect; \ButtonBack}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{& }
|
||||||
|
& Left mouse button click \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonPower}
|
||||||
|
\opt{GIGABEAT_S_PAD}{\ButtonMenu}
|
||||||
|
\opt{SANSA_CLIP_PAD}{\ButtonHome}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{& }
|
||||||
|
& Right mouse button click \\
|
||||||
|
%
|
||||||
|
\opt{SANSA_E200_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD}
|
||||||
|
{\ButtonScrollBack / \ButtonScrollFwd}
|
||||||
|
\opt{GIGABEAT_S_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}
|
||||||
|
{\ButtonVolUp / \ButtonVolDown}
|
||||||
|
\opt{HAVEREMOTEKEYMAP}{& }
|
||||||
|
& Mouse wheel scroll up / down, respectively \\
|
||||||
|
\end{btnmap}
|
||||||
|
\end{table}
|
||||||
|
\end{description}
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
||||||
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
|
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
|
||||||
\edef\UseOption{\UseOption,HAVE_BUTTON_LIGHTS}
|
\edef\UseOption{\UseOption,HAVE_BUTTON_LIGHTS}
|
||||||
|
\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
\edef\UseOption{\UseOption,sansa}
|
\edef\UseOption{\UseOption,sansa}
|
||||||
|
|
||||||
\newcommand{\playerman}{Sansa}
|
\newcommand{\playerman}{Sansa}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
||||||
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
|
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
|
||||||
\edef\UseOption{\UseOption,HAVE_BUTTON_LIGHTS}
|
\edef\UseOption{\UseOption,HAVE_BUTTON_LIGHTS}
|
||||||
|
%\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
\edef\UseOption{\UseOption,sansaAMS}
|
\edef\UseOption{\UseOption,sansaAMS}
|
||||||
|
|
||||||
\newcommand{\playerman}{Sansa}
|
\newcommand{\playerman}{Sansa}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
||||||
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
|
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
|
||||||
\edef\UseOption{\UseOption,HAVE_BUTTON_LIGHTS}
|
\edef\UseOption{\UseOption,HAVE_BUTTON_LIGHTS}
|
||||||
|
\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
\edef\UseOption{\UseOption,sansa}
|
\edef\UseOption{\UseOption,sansa}
|
||||||
|
|
||||||
\newcommand{\playerman}{Sansa}
|
\newcommand{\playerman}{Sansa}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
\edef\UseOption{\UseOption,gigabeat}
|
\edef\UseOption{\UseOption,gigabeat}
|
||||||
\edef\UseOption{\UseOption,GIGABEAT_RC_PAD}
|
\edef\UseOption{\UseOption,GIGABEAT_RC_PAD}
|
||||||
\edef\UseOption{\UseOption,HAVEREMOTEKEYMAP}
|
\edef\UseOption{\UseOption,HAVEREMOTEKEYMAP}
|
||||||
|
\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
|
|
||||||
\newcommand{\playerman}{Toshiba}
|
\newcommand{\playerman}{Toshiba}
|
||||||
\newcommand{\playertype}{Gigabeat S Series}
|
\newcommand{\playertype}{Gigabeat S Series}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
||||||
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
||||||
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
|
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
|
||||||
|
\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
\edef\UseOption{\UseOption,iriver}
|
\edef\UseOption{\UseOption,iriver}
|
||||||
|
|
||||||
\newcommand{\playerman}{Iriver}
|
\newcommand{\playerman}{Iriver}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
||||||
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
||||||
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
|
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
|
||||||
|
\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
\edef\UseOption{\UseOption,iriver}
|
\edef\UseOption{\UseOption,iriver}
|
||||||
|
|
||||||
\newcommand{\playerman}{Iriver}
|
\newcommand{\playerman}{Iriver}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
\edef\UseOption{\UseOption,IPOD_3G_PAD}
|
\edef\UseOption{\UseOption,IPOD_3G_PAD}
|
||||||
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
||||||
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
||||||
|
\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
\edef\UseOption{\UseOption,ipod}
|
\edef\UseOption{\UseOption,ipod}
|
||||||
|
|
||||||
\newcommand{\playerman}{Ipod}
|
\newcommand{\playerman}{Ipod}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
\edef\UseOption{\UseOption,IPOD_3G_PAD}
|
\edef\UseOption{\UseOption,IPOD_3G_PAD}
|
||||||
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
||||||
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
||||||
|
\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
\edef\UseOption{\UseOption,ipod}
|
\edef\UseOption{\UseOption,ipod}
|
||||||
|
|
||||||
\newcommand{\playerman}{Ipod}
|
\newcommand{\playerman}{Ipod}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
\edef\UseOption{\UseOption,IPOD_4G_PAD}
|
\edef\UseOption{\UseOption,IPOD_4G_PAD}
|
||||||
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
||||||
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
||||||
|
\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
\edef\UseOption{\UseOption,ipod}
|
\edef\UseOption{\UseOption,ipod}
|
||||||
|
|
||||||
\newcommand{\playerman}{Ipod}
|
\newcommand{\playerman}{Ipod}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
\edef\UseOption{\UseOption,IPOD_4G_PAD}
|
\edef\UseOption{\UseOption,IPOD_4G_PAD}
|
||||||
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
||||||
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
||||||
|
\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
\edef\UseOption{\UseOption,ipod}
|
\edef\UseOption{\UseOption,ipod}
|
||||||
|
|
||||||
\newcommand{\playerman}{Ipod}
|
\newcommand{\playerman}{Ipod}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
\edef\UseOption{\UseOption,IPOD_4G_PAD}
|
\edef\UseOption{\UseOption,IPOD_4G_PAD}
|
||||||
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
||||||
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
||||||
|
\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
\edef\UseOption{\UseOption,ipod}
|
\edef\UseOption{\UseOption,ipod}
|
||||||
|
|
||||||
\newcommand{\playerman}{Ipod}
|
\newcommand{\playerman}{Ipod}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
\edef\UseOption{\UseOption,HAVE_RB_BL_ON_DISK}
|
\edef\UseOption{\UseOption,HAVE_RB_BL_ON_DISK}
|
||||||
\edef\UseOption{\UseOption,IPOD_4G_PAD}
|
\edef\UseOption{\UseOption,IPOD_4G_PAD}
|
||||||
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
||||||
|
\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
\edef\UseOption{\UseOption,ipod}
|
\edef\UseOption{\UseOption,ipod}
|
||||||
|
|
||||||
\newcommand{\playerman}{Ipod}
|
\newcommand{\playerman}{Ipod}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
\edef\UseOption{\UseOption,HAVE_BACKLIGHT}
|
||||||
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
\edef\UseOption{\UseOption,HAVE_DISK_STORAGE}
|
||||||
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
|
\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE}
|
||||||
|
\edef\UseOption{\UseOption,USB_ENABLE_HID}
|
||||||
\edef\UseOption{\UseOption,ipod}
|
\edef\UseOption{\UseOption,ipod}
|
||||||
|
|
||||||
\newcommand{\playerman}{Ipod}
|
\newcommand{\playerman}{Ipod}
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
\newcommand{\ButtonRight}{\btnfnt{Right}}
|
\newcommand{\ButtonRight}{\btnfnt{Right}}
|
||||||
\newcommand{\ButtonUp}{\btnfnt{Up}}
|
\newcommand{\ButtonUp}{\btnfnt{Up}}
|
||||||
\newcommand{\ButtonDown}{\btnfnt{Down}}
|
\newcommand{\ButtonDown}{\btnfnt{Down}}
|
||||||
\newcommand{\ButtonVolUp}{\btnfnt{Volume up}}
|
\newcommand{\ButtonVolUp}{\btnfnt{Volume Up}}
|
||||||
\newcommand{\ButtonVolDown}{\btnfnt{Volume down}}
|
\newcommand{\ButtonVolDown}{\btnfnt{Volume Down}}
|
||||||
\newcommand{\ButtonSelect}{\btnfnt{Select}}
|
\newcommand{\ButtonSelect}{\btnfnt{Select}}
|
||||||
\newcommand{\ButtonPrev}{\btnfnt{Previous}}
|
\newcommand{\ButtonPrev}{\btnfnt{Previous}}
|
||||||
\newcommand{\ButtonPlay}{\btnfnt{Play}}
|
\newcommand{\ButtonPlay}{\btnfnt{Play}}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue