Re: [PATCH v2] input: Add Marine Navigation Keycodes
From: Dmitry Torokhov
Date: Fri Apr 08 2022 - 23:39:02 EST
Hi Shelby,
On Thu, Mar 03, 2022 at 05:28:52PM -0600, Shelby Heffron wrote:
> Hi Dmitry,
>
> We would like to take a step back and describe our application in more
> detail. We are supporting global physical keys on devices such as boat
> steering wheels that will interact with multiple marine navigation
> displays on the vessel. Could you please provide some further
> suggestions based on our requested keys and the description below.
Thank you very much for the detailed explanation.
>
> Our marine displays usually show a single fullscreen application which
> may show multiple types of data at the same time. For example, the
> application may be showing a map, RADAR, and some media controls at the
> same time. There can also be a control bar at the bottom of the screen
> giving options to do things like return to the home page or open a menu.
> Multiple network-connected marine displays can interact with each other
> to share a single keyed input device across them. In this setup, there
> will only be one active focus for the set of those connected devices.
> For multi-display setups, the focus can transition between displays
> either through the use of dedicated keys to immediately move the focus
> to the previous or next display or the focus can transition between
> displays automatically (e.g. when the user requests to move the focus to
> the next element but we're already at the current display's last element
> we will move the focus to the first element of the next display).
>
> For the elements displayed on a single marine display, our UI supports
> grouping them together into containers which function somewhat similarly
> to a group of radio buttons in a more-traditional application. We would
> place the previously mentioned map, RADAR, media controls, and bottom
> bar each into their own container. Containers also get used for things
> like menu pages where we have a list of items to scroll through and a
> separate list of buttons that can be used to take actions on the
> currently selected item. The focus can move between items within a
> container by using keys like up, down, left, right, next highlight, and
> previous highlight. To make navigating between these containers more
> convenient, we have a focus key that moves to the next container. This
> focus key behaves similarly to the tab key with a traditional
> application that has multiple sets of radio buttons, but we also have
> support for embedding traditional keyboard input into one of these
> containers where we would need KEY_TAB to behave normally. Our focus key
> does not change the visibility of anything on screen, which made it feel
> a little different than the description of KEY_CYCLEWINDOWS from the
> video remote controller documentation
> (https://www.kernel.org/doc/html/v4.9/media/uapi/rc/rc-tables.html), so
> our initial proposal avoided repurposing that event code.
>
> >> +/* Toggle the focus in or out */
> >> +#define KEY_FOCUS_TOGGLE 0x27b
> >
> > Could it be served by KEY_SELECT?
> >
>
> We have a select key on our marine display which is used for actions
> like to select/press the currently-focused button or behave similarly to
> a left mouse click when moving a cursor around on a map. We'd planned on
> using KEY_SELECT for that since its proximity to KEY_OK made us think it
> was intended to confirm selection of an item rather than to select the
> next item.
>
> In our application, the focus key will move between containers on the
> same display, but we felt it was different than KEY_CYCLEWINDOWS or KEY_TAB.
I see. In HID spec we have consumer code 0x1A3 AL Next Task/Application
that seems to be fitting the bill. And we map it to KEY_NEXT (to which
you voicing the concerns below). But HID also defines
0xb5 Scan Next Track - Moves to the next chapter or track boundary
0xb6 Scan Previous Track - Moves to the previous chapter or track
boundary
that we map to KEY_NEXTSONG and KEY_PREVIOUSSONG and I recommend your
media application(s) to use those for media controls.
>
> >> +/* Move between highlightable items */
> >> +#define KEY_NEXT_HIGHLIGHT 0x27c
> >> +#define KEY_PREVIOUS_HIGHLIGHT 0x27d
> >
> > I wonder if KEY_NEXT and KEY_PREVIOUS would be suitable for your
> > application.
> >
>
> KEY_NEXT/KEY_PREVIOUS seemed to be designated as media-related to
> control chapters in the remote controller documentation, so our initial
> proposal avoided repurposing those event codes. We anticipate needing
> keys for next chapter/previous chapter to control our media inputs in
> the future, so using KEY_NEXT/KEY_PREVIOUS for highlight movement now
> could lead to conflicts for us down the road.
>
> In our application, the next/previous highlight will transition the
> focus to elements within the same UI container.
OK, I see. Could we call them KEY_NEXT_ELEMENT/KEY_PREV_ELEMENT maybe?
And I would like to see comments describing intended use.
>
> >> +/* Navigate Displays */
> >> +#define KEY_NEXT_DISPLAY 0x27f
> >> +#define KEY_PREVIOUS_DISPLAY 0x280
> >
> > I am not familiar with marine navigation devices, could you please
> > explain a bit more about displays you are navigating. Are there separate
> > physical screens or are there several application screens/views you are
> > switching between?
> >
>
> Correct. These are separate physical screens. These keys would
> transition the current highlight between separate physical screens that
> are located next to each other.
OK, so we have the following keycodes:
KEY_SWITCHVIDEOMODE
KEY_VIDEO_NEXT
KEY_VIDEO_PREV
They are intended to request to switch between physical displays (see
drivers/acpi/acpi_video.c) and were introduced specifically for that in
a7ecd1ea913346a72f41a002c365882dc05c9bd5.
The comments on KEY_VIDEO_NEXT and KEY_VIDEO_PREV are unfortunate, I'll
need to fix that, and their use in hid-input.c,
rc-terratec-cinergy-c-pci, and rc-tivo are not correct. I think,
however, that there are not a lot of systems where we have combination
of multiple signal sources, and multiple output displays, so probably
this clash does not matter in practice.
>
>
> >> +#define KEY_BRIGHTNESS_MENU 0x28c
> >
> > Do you have multiple menus in the application?
> >
>
> Our marine displays do have multiple menus. This physical key will bring
> up a menu to immediately adjust the display brightness. Our displays go
> extremely bright and extremely dim to support outdoor use during the day
> or at night. This physical key can be used to quickly adjust brightness.
OK, then we shall have it.
Thanks.
--
Dmitry