Commit graph

18147 commits

Author SHA1 Message Date
Aidan MacDonald
910a39af27 touchscreen: Evaluate %Tp tag only if pointing mode is enabled
Simply knowing that a touchscreen is present isn't that useful for
themes. Having %Tp evaluate as true when in pointing mode and false
in 3x3 mode is better. For example, themes can change their layout
or hide touch UI elements when in 3x3 mode, or show a status icon.

Although a similar effect can be achieved with the %St tag it's
simpler to use %Tp for this purpose -- it can report the current
mode, not just the user preference.

Change-Id: Ie343c105970dca11864fa44c6a091ed8e9e35b3d
2025-12-04 19:36:51 -05:00
Aidan MacDonald
02ad19c959 touchscreen: Fix seeking to end of track in WPS
Seeking to the very end of the track with the touchscreen caused
rapid skipping through the playlist because each touch event
generates a separate seek operation, kind of like rapidly pressing
a physical button. Fix this bug by executing the seek operation
only for the release event.

Change-Id: Ic1080065a68e7cc2ba98e2f27293c954f2ec8fb2
2025-12-04 19:36:19 -05:00
Aidan MacDonald
010d22ed29 touchscreen: Port skin engine to gesture API
Use the gesture API for improved reliability.

Change-Id: I44c4e124132605ecf4f1499f97defd7b4b2d78e8
2025-12-04 19:00:38 -05:00
Aidan MacDonald
0f99defe1f touchscreen: Port quickscreen to gesture API
Use the gesture API to improve reliability, and allow press and hold
to repeatedly increment or decrement a value like on button targets.

Change-Id: Ic01b7a0802c3dec9f1534f5dd11e006b28a875b6
2025-12-04 17:29:54 -05:00
Aidan MacDonald
94468f693f touchscreen: Port yes/no screen to gesture API
Use the gesture API in the yes/no screen to suppress bogus
touches and generally improve reliability.

Change-Id: I44adf95255f07d81188fd249dc00a91519ca7b99
2025-12-04 17:29:54 -05:00
Aidan MacDonald
67233114f7 touchscreen: Port list code to gesture API
Make use of the new gesture API to overhaul list touch support.
This should fix most of the annoyances with touch navigation in
menus and make the touchscreen easier to use.

Change-Id: Ied300947fcf755e2810e9348496ed86eaf620669
2025-12-04 16:22:26 -05:00
Aidan MacDonald
e2363b0e2c plugins: Add touch API to plugin API and revamp touchscreen test
Change-Id: Iefb658693b03e0cda43e2a9fc93086485e790b4e
2025-12-04 09:01:51 -05:00
Aidan MacDonald
8aae723853 touchscreen: Integrate gesture API with action system
Provide a default gesture object in the action system which will
be kept up to date with touch events automatically. This reduces
the boilerplate needed to handle touch input.

Change-Id: I76f51ac2c3e3a0da204707d62e91a175c5f8c76a
2025-12-04 08:14:28 -05:00
Aidan MacDonald
bb1e0b48a0 touchscreen: Add gesture velocity helper
Add a helper for computing the motion velocity during a touchscreen press.

Change-Id: I1ef7452ba9815897fd3ec01f8980c89aeef5418f
2025-12-04 08:14:28 -05:00
Aidan MacDonald
7aa823215b touchscreen: Add gesture recognition API
Add a basic gesture API which can detect taps, long presses,
and dragging gestures.

Change-Id: Id10bf8d46b9195330ce951f9f108c81e87a8dad4
2025-12-04 08:14:28 -05:00
Aidan MacDonald
9e254acab3 touchscreen: Update action system touch event reporting
Add a cleaner API for reporting touch events and deprecate the old
action_get_touchscreen_press() API. The old API is now emulated by
using the new one internally.

Change-Id: I001378e66f9c81806f134f011420d671954fcde2
2025-12-04 07:10:17 -05:00
Solomon Peachy
bbcf210c94 Nuke maemo (nokian800/nokian900) and [open]pandora targets
They haven't seen any work since 2013, and likely hasn't compiled in at
least a couple of releases -- not that we ever "released" anything for
these targets.

Futhermore, upstream for both has been effectively dead for about as
long, and there's been no user reports of these being used since 2017
(and even then only in passing).

It isn't worth the effort to triage their current state, much less
uplift into something supportable, while the maintenance burden of
keeping these things in-tree can be demonstrated by the diffstat.

Change-Id: Id93bd450679d1b75e2c74295b3ae1548cd241b24
2025-12-03 20:42:02 -05:00
Aidan MacDonald
9f613fd981 touchscreen: Default to putting the scrollbar on the right
For touch targets and right-handed use it makes most sense to
put the scrollbar on the right so your finger doesn't get in
the way of the touchscreen. Sorry left-handed people!

Change-Id: I35cfd8aa3bee6eb638572c9ca592942c53188a50
2025-12-03 20:34:52 -05:00
Solomon Peachy
9a9b4d089e FS#13708: Corrections to Russian translation (Ivan Romaniuk-Mikhailovsky)
Change-Id: I7c40dba2654c50b9c5f5770e09f415d56b26d1cd
2025-11-29 16:10:43 -05:00
Solomon Peachy
23d0886f29 FS#13701: Updated Russian translation (Ivan Romaniuk-Mikhailovsky)
Change-Id: I1cc454dce50651d95b611178cc986b7fa626f55f
2025-11-29 10:40:21 -05:00
Solomon Peachy
c43919352d FS#13707: Updated Simplified Chinese Translation (王吉)
Change-Id: I07bbe6f1415eea14fc3405f4030311437a976943
2025-11-26 20:31:05 -05:00
William Wilgus
76ee238d48 FS#13704 - Rockpaint fonts memory troubles -- Disable font rendering in font selection
Displaying the fonts as you select them is nice but IMO pretty wasteful
I think a few static bitmaps would probably suffice
I however don't feel like addressing this so lets just disable it, for now?

Change-Id: I882cc0c4129e99d8b2f4ac135301dc3906340bb7
2025-11-26 01:24:13 -05:00
William Wilgus
4e4af2fe96 Bugfix FS#13696 - ID3 year with substring cause panic
The issue was the false case returning NULL for children elements
instead just ignore the false branch for everything but
SKIN_TOKEN_SUBLINE_TIMEOUT_HIDE

Change-Id: Ie0f4f51646faf116e563ab7e60d52d18759f4220
2025-11-25 17:00:50 -05:00
Solomon Peachy
936482abb5 bootloaders: Correct formatting of 'no parition found' table dump
Change-Id: I0eb48a0a40d317f9b47b181e0a31bef7ffde1e15
2025-11-24 21:17:09 -05:00
Christian Soffke
f2be592215 plugins: Oscilloscope: Fix outdated mixer frequency
When Waveform mode was active, frequency changes during playback
(if set to "auto", or with USB audio active) weren't picked
up

Change-Id: Iebec7db951312b7dacff850e9554e1d06762ab3a
2025-11-24 21:26:42 +01:00
Christian Soffke
10808f5dfe plugins: Oscilloscope fiiom3k keymap: Add graphmode support
- Allows switching between peaks and waveform
- Adds some missing keys to manual entry

Change-Id: I0b4f2cee3c4da071bf3bf43487c6f445e0f7f61c
2025-11-24 19:35:05 +01:00
Christian Soffke
4095b13d52 plugins: Oscilloscope & VU Meter: Support USB audio
Also show current mixer frequency in title of VU meter,
and adjust the menu title from "VU Meter Menu" to just
"VU Meter"

Change-Id: I5bf8f55a3c9874618cac939fe32a611ac96f52ff
2025-11-24 19:35:05 +01:00
Solomon Peachy
e3dc4bf2d3 FS#13701: Updated Russian translation (Ivan Romaniuk-Mikhailovsky)
Most changes are for consistent capitalization

Change-Id: I5ebc3656450ee8ddf07c5a7fed0c1463b9825b9b
2025-11-23 20:21:06 -05:00
Solomon Peachy
eeb8a893f1 talk: Rework utf8-awareness in talk_spell()
* Eliminates warning on 16-bit unicode devices
 * More efficient
 * Still correct

Change-Id: I8d29f5560bc6f34b935e867d184a62a280b33596
2025-11-23 12:08:51 -05:00
Solomon Peachy
ebaa78542d FS#13424: When spelling out a string, decode it into utf8 codepoints first
We still can't spell out non-ascii letters but this is a first step towards
doing it correctly.

Change-Id: Ic981af7d4e351084ff53264589df3f7662763af4
2025-11-23 08:56:31 -05:00
Solomon Peachy
c208b84585 FS#13695: Fix crash in on-screen keyboard with codepoints > 0x7f
We were passing a utf8 byte sequence into a function expecting
the actual codepoint value.

...This bug has been around approximately forever.

Change-Id: I3f1d8b2508e7fc830ad9ed10bca3c3329c96851c
2025-11-23 08:36:39 -05:00
William Wilgus
1bc6b450b9 FS#13700 - Fiio M3k Left/right buttons are mixed up in the calendar plugin
Change-Id: I0e8016ffe65bf5cc47c3a5cec6a12b42022839c7
2025-11-22 10:16:11 -05:00
William Wilgus
7bd04ad89a FS#13698 - Rockblox don't accept control commands
FiiO M3K - you have to hold up or down before the pieces will rotate

AFAICT the scrollpad on the m3k is being presented as a scrollwheel
and it waits for 3 events before enabling rotation.

This behavior is blocking the user presses till you get a repeat event
Fix:
 Enable the scrollwheel at start for the m3k (and m3k linux)

Change-Id: Ic36048dae6f691e9085ab37ffbf67be07c2035ac
2025-11-22 09:53:59 -05:00
Sebastian Leonhardt
5e7a4290b2 rockboy: fix wrong colors on some targets
This bug was found and located by a forum user, see
https://forums.rockbox.org/index.php/topic,54776.0.html

The old code used the FB_SCALARPACK macro which doesn't
respect swapped byte order.
Using FB_RGBPACK fixes it and furthermore makes the
fb.cc[] array superfluous.
I added a small optimization for 16 bit targets, since
the gameboy colors almost fit perfectly (5 bit per color).

Change-Id: If96b3943cb4ab902b880ff3d471add25e138fe8e
2025-11-21 12:09:09 -05:00
Solomon Peachy
e0cc87fd3f translations: Minor corrections to Serbian and Korean
Change-Id: I8487d46dab238275c86cc2f412455e4f5f9b85c6
2025-11-21 12:07:32 -05:00
Solomon Peachy
8c1a52211a FS#13699: Korean Translation Updates (Jihoon Kim)
* Terminologies are unified
 * Inaccurate, incorrect, unnatural wordings are fixed

Change-Id: I24c5c53da4622240f035d93fd2713ff323acd4d0
2025-11-21 09:45:29 -05:00
Solomon Peachy
fe1440d402 FS#13694: Updated Serbian Translation (Ivan Pešić)
Change-Id: Id325ae31f60a5cdf31265424556711a6ffabc3ea
2025-11-20 07:55:33 -05:00
Solomon Peachy
62706a2484 FS#13693: Updated Vietnamese Translation (Chu Khanh Hanh)
Change-Id: Ie0f83a8174b9c877939fe335676fd285a7efcff9
2025-11-19 23:07:08 -05:00
Solomon Peachy
f54efbd462 FS#13691: Hungarian translation update (Gyúróczki Norbert)
Change-Id: I06d8bfd2fb7fb7e81d47faa83c24dede2090a395
2025-11-18 07:07:00 -05:00
Vencislav Atanasov
5218d87e5a Add USB-DAC strings to the Bulgarian translation
Change-Id: I0a2868a366456ce9dd0b4c15caef1796ece0c9d3
2025-11-18 13:35:57 +02:00
Solomon Peachy
7be1d9f917 Minor mechanical translation updates (German and Korean)
Change-Id: I07b77616b84a3d513c3e3fc2a82cd4e3a96a18cd
2025-11-17 19:40:44 -05:00
Solomon Peachy
006fcf9b85 FS#13690: Updated Italian translation (Alessio Lenzi)
Change-Id: Ic6a8fe271c0b5d8d17d56c39f14d69348df73655
2025-11-17 18:15:53 -05:00
Solomon Peachy
d6d7d560a0 FS#13689: Updated Korean Translation (Hoseok Seo)
Change-Id: I3ff0bcc5f885804f12293fde674b56336900c713
2025-11-17 13:02:09 -05:00
Dana Conrad
896cceee24 usbaudio: triage panic from splash()
Do the check in gui_wps_show() to avoid calling splash()
from anything other than the main thread

Change-Id: Icc1c6f287d82dc6e73b7cae9c75c18be73b82d48
2025-11-17 10:55:04 -05:00
Solomon Peachy
bc7bc4e8ac storage: report physical sector multiplier via storage_get_info()
Show this in in the info dump when we can't find a filesystem to mount
in main() plus in the ipod bootloaders

Change-Id: I3b437ae0032b17f29c0dd94043743f14d2b2f3ad
2025-11-17 08:57:43 -05:00
Solomon Peachy
c336c21b61 Translation updates:
- German (Wilfried Winkler)
 - Polish (Adam Rak)
 - Slovak (Matej Golian)
 - US English (Myself)

Change-Id: I85b094da4632e6b6f7554515d0ba91c5c15217f3
2025-11-17 06:57:24 -05:00
Solomon Peachy
1dc7f6e864 usbaudio: the "usb dac busy" splash should use ID2P() instead of str()
Change-Id: Icfd1a1a5fdf1c858b96eeb30164241c11ca64ec0
2025-11-15 18:24:06 -05:00
Solomon Peachy
1a17f69140 Add a feature flag for the USB DAC mode, and gate LANG_* appropriately
This is also a necessary step for proper inclusion in the manual

Change-Id: I1c30d2399509827ef6f0095485659d42f582cff9
2025-11-15 08:09:52 -05:00
Dana Conrad
a1837d2d80 usbaudio: block playback while usbaudio is active
Needed due to us commandeering the AUDIO DSP "channel" for USBAudio.
If/When we add another DSP channel, this can be reverted.

Works, but still goes to a "blank" WPS screen for a split second before
cancelling out.

Change-Id: I5fb8a1e226b4d3e46c86c59d593d807f49d7a35f
2025-11-15 07:38:46 -05:00
Dana Conrad
c533222851 usbaudio: send through dsp (new)
Does not seem to affect UI usability, but allowable DSP loads will vary
based on device and playback sample rate.

To-Do (someday):
- Add dedicated DSP channel
- How to apply DSP settings to above new channel? (UI)
- How to lock out timestretch from being enabled?

Change-Id: Ia24d1055340354e2c32e6008e7e2b03a8e88867d
2025-11-15 07:38:19 -05:00
Dana Conrad
7c4293af64 usbaudio: convert to asynchronous operation
Add feedback not based on samples used, but on buffers filled - idea
being we can do "PID" (someone who has actually implemented Real PID
could probably rewrite the calculation) based on how many buffers
we have filled versus the ideal buffer filled level (16).

Feedback is based on a historical average of the last two feedback
intervals.

This feedback math is done as fixed-point math to keep floats out of core. Note that a couple division operations needed to be strategically staged to avoid overflow or truncation.

Floats are still used for debug screen printout.

Also fixed a typo in the definition of usb_audio_control_request()

Host:
Linux: works
MacOS: works
Windows: Feedback does not work! It appears that Windows may not
         support asynchronous devices at all. Playback may "work",
         but results will vary as the number of buffers filled will
         drift over time.

Change-Id: I027feb16705e6e46c1144b1d08920b53de42cb26
2025-11-15 07:32:05 -05:00
Dana Conrad
9ce66e088e Add USB Audio 1.0 support
Original commit credit to Amaury Pouly, Moshe Piekarski
Pushed across the finish line by Dana Conrad

To enable, see setting under General Settings --> System --> USB-DAC.
On devices with few endpoints, this may not work while HID and/or
mass storage is enabled.

Adds new dedicated mixer channel.

setting usb-dac can have values:
- never (0)
- always (1)
- while_charge_only (2)
- while_mass_storage (3)

Relevant devices are DWC2 and ARC usb controller devices. That being:
x1000 Native targets (m3k, erosqnative, q1, others...?),
sansac200, creativezenxfi2, vibe500, ipodmini2g,
ipod4g, creativezenxfi, creativezenxfi3, sansaview, ipodcolor,
creativezenxfistyle, samsungypz5, sansafuzeplus, iriverh10_5gb,
tatungtpj1022, gigabeats, faketarget, samsungyh820, gogearhdd1630, samsungyh925, ipodmini1g, ipodvideo, creativezenmozaic, sonynwze370, creativezen, gogearsa9200, gogearhdd6330, sonynwze360, sansae200, mrobe100, iriverh10, creativezenv, ipodnano1g, samsungyh920

USB Driver-wise, it should be noted that this patch requires some
slight changes:
- proper blocking on control OUT transfers, to make sure the data is
  received *before* using it, the usb_core should probably use that too
- drivers can now support interface alternate settings
- drivers can be notified of completion by a new fast handler, which
  is called directly from the driver; this is is necessary for
  isochronous transfers because going through the usb queue is way too
  slow

Designware changes:

- enable for USBOTG_DESIGNWARE
- set maxpacketsize to 1023 for ISO endpoints

Change-Id: I570871884a4e4820b4312b203b07701f06ecacc6
2025-11-15 07:30:15 -05:00
Solomon Peachy
945ce06094 FS#13685: Updated Dutch Translation (Marc Aarts)
Change-Id: Ic3f39f62efe05e218d7a1878812ce3ad995de3e5
2025-11-09 08:22:42 -05:00
Solomon Peachy
619ed7eef0 docs: update MAINTAINERS
Mostly adding myself in several new places where I've done meaningful
recent work.

Change-Id: I86b071b0fafef163ba4c45bbee032d8ead0dccfc
2025-11-08 08:28:45 -05:00
Solomon Peachy
ff4cb33b09 FS#13684: Updated Dutch Translation (Marc Aarts)
Change-Id: Iea82055ce081f03a345f778de87d71d3fc36a13d
2025-11-08 07:44:48 -05:00