flipperdevices / flipperzero-firmware

Flipper Zero firmware source code
https://flipperzero.one
GNU General Public License v3.0
12.64k stars 2.69k forks source link

Lefty Mode #1015

Closed B3rry closed 1 year ago

B3rry commented 2 years ago

Hi,

I’d like to suggest a lefty mode, as the hardware design of the device makes it difficult for left handed users to operate the flipper zero. Potentially rotating the display output, and 5 way controller’s input 180 degrees would be very helpful.

Astrrra commented 2 years ago

I second this

skotopes commented 2 years ago

Feasible. I'l add it to backlog.

alexwaibel commented 2 years ago

Not sure how feasible this would be given the resolution and current UI design, but it would be cool to be able to rotate the display orientation arbitrarily instead of having a simple lefty toggle. My thought being that if I just flip the device upside down so the buttons are on the left, the IR blaster is no longer facing forward. As a lefty, I'd probably prefer to use the device in the orientation used by the universal remote app (with the dpad at the bottom).

B3rry commented 2 years ago

Agreed, it may not be ideal, but even a primitive flipping of all screens presented in a horizontal view would help. I actually imagine this means the solution is more nuanced than just “rotate 180 at all times” as rotation should probably stay in the default orientation when navigating a vertical view. IMO the best practice is to factor symmetrical bilateral use into the ID phase, but that is a hardware modification.

richardbbrooks commented 2 years ago

Howdy, left-handed here who thought this might be a good first spelunking. I was able to make a proof of concept with just a few changes and confirmed mostly working on my own Zero. Kudos to maintainers for how easy it was to build and flash. It's highly encouraging towards making future contributions. foto_no_exif

In ./applications/canvas.c changing U8G2_R0: (_note this won't survive apps changing orientation, similar changes are needed wherever u8g2_SetDisplayRotation is called too_)

    u8g2_Setup_st756x_flipper(&canvas->fb, U8G2_R0, u8x8_hw_spi_stm32, u8g2_gpio_and_delay_stm32);

to U8G2_R2:

    u8g2_Setup_st756x_flipper(&canvas->fb, U8G2_R2, u8x8_hw_spi_stm32, u8g2_gpio_and_delay_stm32);

Ref: https://github.com/olikraus/u8g2/wiki/u8g2reference#setdisplayrotation

And within ./firmware/targets/f7/furi_hal_resources.c redefining the key items input_pins so that U/D/L/R are opposites

These changes reveal a few side effects to consider in a polished solution:

skotopes commented 2 years ago

view_port_rotate_buttons can be used as example

vilewired commented 1 year ago

This and this.