Instead of passing the entire cmdline as a single string that was
treated as the exectuable name on some platforms
Change-Id: Ic4f043a3a48e1b1bfab82bbfa8983c2d224606ec
get_files(path, recurse, finddir, findfile, sort_by, cancel_fn, f_t, d_t)
get_files returns a sorted tables of directories and (another) of files
path is the starting path; recurse == false.. only that path will be searched
findfile & finddir are definable search functions
if not defined all files/dirs are returned if false is passed.. none
or you can provide your own function
sort_by can be by "name" "size" "date" or "none" to perform no sorting
note: for "size" and "date" you may need to strip the attribute data to use
the returned filename
cancel_fn if not defined or not a function no user cancel otherwise supply
your own cancel function which returns true to cancel searching for files
f_t and d_t allow you to pass your own tables for re-use but isn't necessary
Change-Id: Ic4c2ad9c9b5abeeeeaf572880edbc8873d52066b
Implement the available/total functions using QStorageInfo. Unfortunately, QStorageInfo does not provide cluster size, so there's still some platform-specific code left extracted to Utils::filesystemClusterSize().
Co-authored-by: Qwen3.7-Plus
Change-Id: Iacec829b7d12afb65a966fe15e319d305c7384fd
I rewrote some of the problematic scripts to use an event loop which
fixed most of the issues but it turns out the underlying issue is
that when the device is under load the timeout that detects a repeat press
makes the key a repeat press and we miss the initial press completely
due to being under load and under the gun
Adds entries for PLA_EXIT and PLA_CANCEL with a Repeat press
Change-Id: I8247b0ebd37fc58608f6be126c49e56f8375e9cf
skin_buffer_to_offset() call can never return a "negative" pointer
(since it just returns the pointer as-is) so don't bother to check.
Change-Id: Id86d53abd7ab1fb071ca54421ebe3b5ff2981c02
not sure if there's a reason these weren't included
in g#3229
- simple lists
- playlist viewer
- browse_id3
- option select
Change-Id: I0e15aaeb563e68ea21bf5df667ce134d01a95195
usb_enable(false) wrote "" to the gadget UDC attribute to unbind it, but
sysfs_set_string("") doesn't do a write syscall.
This meant that live USB-mode switches did nothing and required a reboot to take effect.
Change-Id: I0fc9f54fdb2f529bfe24d5c1ed472c873401080e
When called with FORMAT_MESSAGE_ALLOCATE_BUFFER you need to pass in
a pointer to an LPSTR, not the LPSTR itself.
Change-Id: Iecc6d79edceb2142d61034d61364262126957b46
Instead of the first one on the (alphabetically sorted) list, currently
Bulgarian.
Ideally we'd try to discern this from the current system/UI language
Change-Id: I82a14716afb484fbaea22f78fe4dd7f00c24252e
It's not a fatal error (as we build in-tree instead) but the
builder infrastruture was treating it as one.
Change-Id: I7c0d00e36184f8d15642bce4a3bbbd5542943ed6
* Devices with ADB now have HAVE_USB_ADB
* DX50/DX90 no longer set USB_NONE
* stub out necessary functions
* usb_set_mode() and global_settings.usb_mode are now:
* called for all devices with (HAVE_USB_ADB | HAVE_USB_POWER)
* wrapped with consistent #ifdefs
Fixes regression in ce88de54b8
Change-Id: Ib0c16082fe237e8159cd42847355186ea5c74589
All required code is already present in the left usb_set_mode call.
Affects iBasso DX50, iBasso DX90, HiBy R1 and HiBy R3 PRO II.
Fixes FS#13890
Change-Id: Ib554ca98a36ceeaa48c0aa699c3671a40d4fee47
bidi_l2v() classified each character with ispunct((int)c), but c is
a decoded Unicode codepoint. ispunct() is only defined for values
that fit in an unsigned char (or EOF); a larger value is undefined
behaviour, and glibc then reads past the ctype table and reports
some codepoints as punctuation.
Hebrew final kaf (U+05DA) and gimel (U+05D2) land on such entries,
so a string ending in one had that letter trimmed off its RTL block
as if it were trailing punctuation and moved to the wrong end of
the line. Limit the punctuation test to ASCII so the result is
well-defined.
Change-Id: Ie6c3d8413f35ec3652e9228e3d5af05ef5bb811a
As far as I can tell this was indtroduced during this commit
32ff4e93bd
basically they added a NOBREAK flag
to all the commands that had '\n'
where as
{ SKIN_TOKEN_VIEWPORT_FGCOLOUR, "Vf" , "S"},
{ SKIN_TOKEN_VIEWPORT_BGCOLOUR, "Vb" , "S"},
do not have \n yet they were changed to have the NOBREAK flag applied
{ SKIN_TOKEN_VIEWPORT_FGCOLOUR, "Vf" , "S", NOBREAK },
{ SKIN_TOKEN_VIEWPORT_BGCOLOUR, "Vb" , "S", NOBREAK },
this causes anything after the command to be ignored
-- Note added to manual this will be a won't fix
due to the possibility of breaking existing themes
Change-Id: I0135f04c344bf817c104f951a657e2690f2d36bb
FONT_UI scans from MAXFONTS-1 to 0 to maximize the chances of getting a loaded
font but this may result in global_status.font_id being ignored even
if set through setuifont
this should take care of all the plugin woes dues to this
by setting the lcd font to the ui font before loading the plugin
and also making FONT_UI map to this font when font_get(FONT_UI) is called
if the desired font is not loaded then fallback to the previous behavior
Change-Id: I101d6f91910c17b08fca2b988a0a99c9e6899bee
GetNextProcess, GetProcessPID and GetProcessInformation are replaced by proc_listallpids() and proc_pidpath()
Co-authored-by: ChatGPT (GPT-5.3 Mini) <chatgpt@openai.com>
Change-Id: Ic4fe13c405e11b658b1a9540e49741d4e69069f3
- insertMulti() -> insert()
- QString::fromUtf16() with a parameter type other than char16_t*
- enterEvent() parameter type changed from QEvent to QEnterEvent
- QVariant -> QMetaType
Co-authored-by: ChatGPT (GPT-5.3 Mini) <chatgpt@openai.com>
Change-Id: Ia9c6c93e281475856e8355a8aa0e64c474eed80c
This removes usage of the deprecated macOS Gestalt() API (2/2)
Co-authored-by: ChatGPT (GPT-5.3 Mini) <chatgpt@openai.com>
Change-Id: Id10386285469c06f082a7dcdcc3284b97519b10a
This removes usage of the deprecated macOS Gestalt() API (1/2)
Co-authored-by: ChatGPT (GPT-5.3 Mini) <chatgpt@openai.com>
Change-Id: Ia3af510412a97258dcd9fc9134708900c04c62c4
FONT_UI is a placeholder when it gets assigned it isn't resolved
immediately
when its time to resolve the font it is processed with font_get(int font)
first it sets it to the last slot
and then decrements till it gets a valid font
Change-Id: I3c203d58ed2d813d206f5b435e6b55ed196cf213
add get_metadata_afmt function so we don't have to extra functions
remove unneeded bounds check on audio_format in rbcodec_format_is_atomic()
add bounds check on audio_format in get_metadata_afmt()
Change-Id: I76bd869100b000579c6546f0670ba4ba2c541f22
tagcache.c add_tagcache() and potentially
skin_tokens.c wps_playlist_percent_prepare()
make calls to probe_file_format() prior to calling get_metadata_ex
resulting in some small amout of duplicated work
especially in the case of add_tagcache this can add
up to a lot of duplicated work
breaks out audio_fmt so these can supply the afmt other callers just
supply probe_file_format(trackname) in the function call
Change-Id: I8084213b8ee7e04d76dce0986beb83d443ac804b
%pP reports playlist progress by position index, which treats every
track as equally long. For playlists with tracks of unequal length --
audiobooks with chapters anywhere from two minutes to an hour are the
motivating case -- position is a poor proxy for listening progress.
%pX reports the played percentage of the whole playlist by time: the
summed length of all preceding tracks plus the elapsed time in the
current one, relative to the playlist's total duration. It can be
used as a value, in a conditional, with %if(), or as a bar tag like
%pb.
If a playlist contains more than 500 tracks or the scan is taking too
long and the user aborts the tag will fallback to the behavior of %pP
except the progress through the current track will be included in the
returned percentage
--------------------------------------
Computing this needs every track's length, and reading metadata for
every track is too slow and disk-heavy for a tag that refreshes on the
WPS. Instead each track's length is estimated from its file size: the
skin engine scans the playlist in the background, a batch of files each
skin refresh, opening each file only to read its size (directory
metadata, no header parse). Size is turned into time by calibrating one
file of each type -- the first file of each extension is parsed once
with get_metadata to learn its bytes-per-second, and every later file
of that type reuses it. A single-format playlist, the usual audiobook
case, parses exactly one file and stat's the rest.
The result is an estimate -- bitrate varies within a type, especially
for VBR -- but it is cheap and accurate enough for a progress
indicator, and the playing track always contributes its exact elapsed
time. Per-track lengths are stored as two bytes of minutes each in a
movable buffer sized to the track count and allocated only while the
tag is in use; the cache is keyed on the track count and a crc of the
first, middle and last filenames, so a playlist swap or reshuffle is
caught. If the buffer cannot be allocated (a very large playlist on a
low-memory target) the tag falls back to position-based progress.
The buffer is allocated when playback starts (and when the now-playing
screen is opened with playback already active) rather than lazily on the
first WPS refresh, so the one-time allocation happens at a playback
boundary instead of during steady-state playback; it falls back to
allocating on first use if that point is missed.
Until the scan finishes the tag does not blank: it returns an instant
equal-weight estimate -- (completed tracks + fraction through the
current one) / track count -- which sharpens into the size-based value
as the scan fills in. So a theme can just use %pX and it is correct
from the first frame, and %?pX is true whenever a playlist is loaded.
Tested on a Sansa Clip Zip and in the simulator. On a 216-track,
~745 MB single-format audiobook playlist the length scan dropped from
~4150 ms (get_metadata on every track) to ~174 ms (one parse plus 215
file-size stats), roughly 24x lighter.
Change-Id: I6e572e78a10444bd513ddc77e30da04aa5153ef2
Was missing:
* Arabic Supplement
* Arabic Extended B
* Arabic Extended A
* Rumi Numerals
* Arabic Extended C
* Indic Isqaq Numerals
* Ottoman Siyaq Numerals
* Arabic Mathematical Alphabet Symbols
Worth noting that most of these are vanishingly unlikely to ever show up
in the context of Rockbox. (The exceptions are "Arabic Supplement" and
possibly the Mathematical Symbols)
Also corrected "Arabic Presentation" into two distint blocks, as
the characters between them (fe00-fe6f) are NOT indicative of RTL.
Change-Id: I0c5c547921c789d32425682c8c75edb21428f549
Commit d1be73c ("keyboard.c Use viewports, move text box pos")
moved the picker and edit line into dedicated viewports. Under an
RTL UI language these viewports get VP_FLAG_ALIGN_RIGHT, so
lcd_putsxy mirrors every call; with the per-character cell drawing
this reversed the picker grid and the edit line (Hebrew shown
reversed, Latin filenames backwards, wrong caret).
- Clear the alignment flag on the keyboard own viewports so the
picker grid and cell layout are no longer mirrored.
- Draw the edit line as a single string so the bidi engine reorders
mixed Hebrew/Latin correctly, and use the full line width.
- Compute the caret from the bidi (LTR-base) visual layout so it
lands at the insertion point, including mixed Hebrew+Latin text.
- Pick the edit-line direction and invert the left/right cursor
keys based on the text first strong character.
Change-Id: I79f1c444bc9121fd5018ad5f6f4148afe2c1a3e1
It can be used to choose which Apple Developer ID to use when signing the build of the Qt apps. By default, it uses ad-hoc signing, i.e. no Apple Developer ID is needed.
Change-Id: I5634e318f4949107eb954b729b2f8f1d60fad115
It is always enabled, except in the following situations:
* bootloaders
* warble or checkwps applications
* devices with less than 4MB of RAM
* imx233-based devices
imx233 is a special case; that will be backed out we figure out why
it fails to boot if the binary size exceeds 1MB.
Change-Id: If4a89e389f562bb5791a565fba99c830213473d3
- Remove libpath as the dirs are already in the search path. It doesn't help with QtPdf, QtVirtualKeyboardQml or QtVirtualKeyboard not being found (at least on my system). The native libraries are properly found and copied to the app bundle.
- Remove "|| true" at the end, as even though macdeployqt shows a bunch of "ERROR: " messages, it still exits with code 0
Note: This is a partial revert of bf273149. codesign is still required, the binary is killed with SIGKILL by the OS if the libraries are modified but the signature is not updated.
Change-Id: I2d7d4e32ed8043f302c163db4f89fc90cc921f88
Clipzip, ClipPlus other devices may be similar
Autoscan from the main menu and the device hangs at scanning 88.1
try to record with no station set and it just records static
Change-Id: I59fe17dde80736e4fae8445c0aea7fcf5e476317
Now there is zero overlap between what can be found in rbutil.ini
and the downloadable build-info.
Change-Id: Iba84dec39b062f69098bea62a286acfd36479226
Add search path for the Qt libraries, ignore the signature verification error and then re-sign again.
Co-authored-by: Qwen3.7-Plus
Change-Id: Ifa6232cd56e78e593b3395384dd2a98fa9cc67e5
Create a new target dmgbuild_venv which is added as a dependency of both RockboxUtility and RockboxThemeEditor so CMake understands that it's a shared dependency.
Co-authored-by: Qwen3.7-Plus
Change-Id: I417de25356885574546a7ae2a53ddbd44f6be557
ipodpatcher tries to unmount volumes that are not mounted e.g. the firmware partition, before making any changes. On macOS this fails with a non-zero exit code, causing the whole process (bootloader installation or uninstallation) to fail.
A proper fix would be to trace every path that uses ipod_reopen_rw(), and only call unmount if we expect the volume to be currently mounted.
Change-Id: Ieaa58da336216d5060465cfc2b7f5f8c729fe8b9
The simulator on macOS has been broken since macOS 26.4
was introduced. On macOS 26.4, 26.5, and the 27 beta,
thread setup fails in make_context (firmware/asm/thread-
unix.c), because sigaltstack returns an "Operation not
permitted" error. Fall back to SDL threads until this
can be fixed.
Also update GCC to keep it in sync with the latest
Homebrew formula
(https://formulae.brew.sh/formula/gcc).
Change-Id: Ib08ac81ede00c577f28a85c7886f716e7504bbe9
I accidentally added an extra character wittthe last patch by changing
< to <= in the process of testing this I realized spaces were sometimes
being included at the beginning of the line and also that sometime
sentences were being cut short even though they fit on the screen
Change-Id: Iee0ed64e18defad2acb3c107d334ea2a49bd5b6f
fix lua strpbrk function skipping the first accept chr
lua splash_scroller fix NULL pointer in brk due to lastbreak
not being reset on a new line
Change-Id: Ica0c9ee5f9194f5be54ab90ad16309adead1c207
the other items that scroll use the menu button and reset on STD_OK
OS stacks use STD_OK to scroll and any other button to reset
Change-Id: I1fa1caa322fe761c6f92d2d08cc418e78843863b
Fix FS#13832
If the remote is already plugged in when Rockbox boots, it stays dead
until you replug it. These remotes only send their identify packet
once at power-up, so we never see it and then throw away all button
events because lingo 0x02 was never negotiated. The OF doesn't care,
so accept ContextButtonStatus from unidentified devices too. Stray
bytes received before iap_setup() also made iap_getc() return false,
which the serial driver takes as "sync found" and locks autobaud onto
the wrong bitrate.
The ghost clicks come from the repeatbtn handshake. A held button
resends its down event every 30-100ms and each one re-armed
iap_repeatbtn, which stalls handling of the following packet. So
during a long press packets pile up, the event queue overflows, and
the leftovers replay as keypresses after you let go. Skipping fires
on button release which is why next/prev showed it the worst. Now
repeatbtn is only re-armed when the button state actually changes,
and iap_handlepkt() drains whatever complete packets are in the RX
buffer rather than relying on one queued event per packet.
While at it, fix two more things found along the way: the button
state is now written in one go (the temporary BUTTON_NONE could be
picked up by the button tick mid-update), and iap_rxlen is
decremented when a frame is received so the overflow check actually
does something.
Tested on ipodmini2g with an A1018 remote.
Change-Id: Ie18512e47d642fe6957fc010eaf79b6d2af4c070
Type 0 displays had to update the whole x line due to anything other
than a full line causing corruption and tearing
I figured out that flipping x and x_end
(LCD_W - x and LCD_W - x_end)
makes it work properly
Lowered the refresh rate to 95 Hz
Removed Fade in on screen enable
Change-Id: I0b8f76ad01ce7e48bd0a56aa321c30c30f91ce8d
Now that we have a datasheet for the type 1 display controller
it turns out the gamma correction was not being applied
the screen looks much better with it actually applied
also lowers display refresh from 120 HZ to 90 Hz and applied a mentioned
sleep mode (0x14) to save some power
Adds comments for the LCD commands ala type 0
Change-Id: I2d72df4d24b8bf9f3627bdb96ec9ce43ddd8b10a
Enable HAVE_LCD_FLIP for the Clip Zip and implement lcd_set_flip()
in the LCD driver, making the Display -> Flip Display setting work.
This lets the player be used upside down, e.g. clipped to clothing
with the control buttons pointing up and screen on the bottom.
Defining HAVE_LCD_FLIP also activates the existing button remap in
button_flip() (firmware/drivers/button.c) for this target: while the
display is flipped, LEFT/RIGHT, UP/DOWN and the volume keys are all
swapped to match the new orientation, so the whole device is usable
upside down, not just readable.
The flip is done in hardware by reversing the controller's GRAM write
direction and mirroring the write window in lcd_setup_rect, so partial
updates keep working and there is no per-frame cost. Both panel
variants are handled: the type 0 WiseChip/SEPS114A via MEMORY_WRITE/READ
(1Dh, 0x02), and the type 1 Visionox/LD7134 via the Graphic RAM Writing
Direction register (05h, 0x03). The direction register is written in
lcd_enable(), so it is set while the panel is powered and is re-applied
after display standby; lcd_set_flip() cycles the panel off and on so a
change to the setting takes effect immediately.
For the simulator, which has no real LCD controller, lcd_set_flip() is
implemented in the SDL LCD driver (lcd-bitmap.c) as a software mirror of
the framebuffer, so the flip is visible in theme previews; the generic
uisimulator stub is guarded out when HAVE_LCD_FLIP is defined.
Tested on real type 1 / LD7134 hardware in both orientations: display
content, button remapping and album art are all correct, and test_fps
shows partial updates run at full speed when flipped (1/4 frame 325 fps,
matching the non-flipped rate). The type 0 / SEPS114A path uses the same
approach; the 0x02 direction value was confirmed to flip a type 0 panel
by William Wilgus during review.
Change-Id: I99ef13949102b344826e72d1d90c71e2271448a6
display display type 0 / 1 in debug menu
update the comment on type 1 lcd I believe it to be a LDT LD7134 controller
the commands match up down to the gamma correction tables
Change-Id: Ic5d1d8db994a022a61db4a83a9f476cfafbcf51b
only load the namebuf once unless user changes the plugin
also displays the plugin name when user selects the whole context menu
Change-Id: I32b53729a3dcc2bf2c42393876407df7f3d38d8c
It is referenced by multiple threads, and as such needs to be both
volatile and SHAREDBSS to keep everyone happy.
...should address hangs on startup observed on nano2g and mini2g when
voiced menus are enabled
Regression introduced in dfa33c2 and made far worse by 759ef27
Change-Id: I202ec6c0d5825ff3a319b7d95d600b4ce06dd685
pcm_dma_set_freq expects the frequency index not the actual frequency
bug introduced in Commit dfa33c2 pcm: introduce pcm_sink
Change-Id: Idc521cfe1da22b112a16f81611dac720837eeea9
also fixes a bug where synclist viewport could be empty if the list isn't
initialized
voices path and parameters now
adds the item [Add] as the last item in the list
Change-Id: I1aad62baf3c19a67d04fa1fb3db8a7573e0a467f
open the glyph cache in a separate function so we can
get the MAX_PATH alloc off the stack quickly and
deal with the fd instead
Change-Id: I0e991a1286b29c781e3f03b6a49e100c70809920
Have a report of a hanging scrolling item, ensure the lists are stopped
on exit with gui_synclist_scroll_stop()
Change-Id: If670806f710118c79377bf8c5de6c1a5168e37fc
Always define storage_removable() and storage_present() so
that ifdefs are unnecessary. They were already defined as
constant for the CONFIG_STORAGE_MULTI case, but not in the
case of a single storage type.
Change-Id: I13073b3a72b201b5b11167deb050e6f27139c61c
Go to root menu when Start Screen has been set to "Resume Playback"
but playlist is finished
https://forums.rockbox.org/index.php?topic=55770
Change-Id: I6939fa313dd5fd6485628e22a2d860763492d5cf
Only react to Power button release if previous
button code was Power button press, so that
screen doesn't lock when device may have just
been turned on
Change-Id: I1ba228103efedeeceaaa00c49b1b1da66b63bb75
Clearing the display makes the backdrop come to the foreground.
which can look odd or glitchy, particularly for themes that do
custom drawing on the backdrop buffer (2c71aa9). It also causes
issues if the shutdown has to be canceled.
Instead, enable theme, then clear the UI vp.
Change-Id: Ia96d1e766a9b86ec133522f7cd259e8b88f64216
allows you to import a file and merge native keymaps
pops a yes no prompt to erase existing
duplicates will be overwritten
Change-Id: I167c6fac65775754b2a9874185d14f65638db9d7
Only apply dir filter to 'Browse' shortcuts, so that,
when trying to run a file from Shortcuts that is hidden
due to current dir filter settings, you don't get a 'Failed
reading Unknown' message (LANG_READ_FAILED/LANG_UNKNOWN)
because the tree entry can't be found in ft_enter.
Change-Id: I4eaad2ec415c9bac352a409922848e4407dac993
allows you to import a file and merge text keymaps
pops a yes no prompt to erase existing
duplicates will be overwritten
Change-Id: I0f4425e765f0a2ff6b73b830bcaea1b3f31e83cb
The skin is not unloaded using skin_unload_all in
settings_apply_skins anymore since commit 0ca4b38.
usb_screen was last remaining user until commit a969e1f.
Change-Id: I65a41ed220165587a04e699a7f210c575c00a4eb
I think they mean corrupted not crashes as I couldn't repro that
splash_scroller stepped by individual chars and split multibyte
sequences leaving corrupted chars
now it uses the new font_measurestring() to get the max_w and chops
it at break chars instead
this required a bit of a logic change to the function but should be
as good with less complications
Change-Id: I692db8b4737f41aec08dbc122fb844028498326d
This fixes the repeat_mode being stuck on Repeat Shuffle on the Hiby R1 WPS, and quick settings values being stuck at the last values for touch actions.
Regression from 9e254aca. The repeated state is used by the quick screen to detect repeated actions (see b918ec5) so I also removed "historical baggage" note.
Change-Id: Ic2a97058bbd17d232954ffe37f31a480ee11fe54
Follow-up to 9f20c45.
tagtree.c's retrieve_entries has significant stack usage
(>1.5k) and is called from tagtree_entries_iterate.
Further Reduce stack usage of tagtree_entries_iterate,
going from 784 B to 72 B, by using static memory allocation
for the the tagcache_search struct in the Properties plugin.
Change-Id: I75a170bea1c5392c18a891844a0ff31fbd2114eb
When a font doesn't have a glpyh for a given codepoint, the convertor
points it at the "default glyph". The plan is to replace this pointer
with a canary value so that rockbox genuinely knows this glpyh
does not exist, allowing a fallback path to be implemented.
(The plan is for the fallback path to attempt to compose a glpyh from
its decomposed codepoints, but this would make it be possible to
implement a true fallback/subsitute font mechanism)
Change-Id: If6fea29f5393a6d4b9d5747c911a36fdc8dda5ae
Formerly fixed at the first glpyh in the converted font; now it can be
explicitly set. This mirrors the functionality available from using the
DEFAULT_CHAR property of BDF fonts
Change-Id: Ibd754faff3fd4d393c4781e8faa685612e3301f0
Moving the skin update from gui_synclist_set_title to
gui_synclist_draw (c41beeb) had the inadvertent side
effect that, if gui_synclist_select_item was called in
between, it may have missed a configured skinlist that
only got enabled by the skin update. Which could lead
to a selection appearing off screen.
This was mainly an issue if you had popped an activity,
which resets the skinlist cfg to NULL, but didn't perform
a skin update before the call to gui_synclist_select_item.
Now that GUI_EVENT_ACTIONREDRAW can be used instead of
GUI_EVENT_ACTIONUPDATE to prevent the display from being
updated, we may as well update the skin immediately in
gui_synclist_set_title again.
Change-Id: Iaee98d670ffb8d7b6590bd2ba11827fef5fba5a8
Stack overflow in splash_progress called from
tagtree_subentries_do_action with stack protector
enabled on mips
Change-Id: Ia71e0493e279af0531ae792d41442198555664f6
This disables custom scroll bars when initializing lists
that are currently always un-skinned, in scenarios where
there is neither a new activity to be pushed, nor is the
theme toggled.
Change-Id: I1bb05fc9be956c71e1adb70e764094082d9bb904
currently logf() in codec are printed unconditionally when
ROCKBOX_HAS_LOGF, which is confusing.
Gate them behind LOGF_ENABLE to align with the main binary.
Change-Id: I4eb44604000acded55d0af8869145c4f3d77efcb
add a plugin_ram_end symbol to plugin.lds and rewrite ovl_offset.pl
to read plugin_ram_end and plugin_load_end_addr from the elf via nm.
this removes all dependence on the linker map file format, which
differs between gnu ld and lld.
Change-Id: I66e623d9a2b44eb84ae7035155c84d8afe46df23
The skinlist cfg may not have been restored in time
after leaving the onplay tree menu, because the skin
isn't updated before gui_synclist_select_item is called.
This can result in the wrong number of visible lines
being calculated for the list, and a selection that
appears off-screen.
Regression introduced in commit dfd9c10, or later.
Due to the recent drawing changes, reverting the
changes to onplay.c doesn't re-introduce any visual
glitches.
Change-Id: I853bdfe6b6ba39e2eb281534ca302a0a828253b9
Takes care of disabling scroll bars when the current activity
doesn't change, but the theme is toggled. Applies to confirmation
prompts, for example.
Since we're updating the skin immediately afterwards, the cfg
will be reset as needed.
Change-Id: I8a62b6b4ad0abf5176ab6b3e39281021108cb59f
clang uses "unsigned int" for "uint32_t", which does not match gcc's
"unsigned long".
fix errors caused by this.
Change-Id: I05aaf23934167a56a6e400f49fcaf8b70bfaca13
this fixes "has non-ABS relocation R_MIPS_26 against symbol 'spl_main'"
error when linked with lld.
Change-Id: I6b584d8fdcae3f509f322b8557249bc2870904a3
Some themes, such as Themify, FreshOS, iPod reFresh, Jive,
iPodOS, iPone, iClassic, AbsoluteBlack320, and possibly
others, draw a mask over the album art on the foreground
layer, in order to add rounded corners or to apply a fake
camera perspective (instead of taking advantage of the
backdrop layer).
This results in rendering glitches that can be fixed by
drawing the album art first.
Change-Id: Ie373c51304ab0d0a09b8663a8adff343a32ae5bb
clang defines both of __LITTLE_ENDIAN__ and __mips__, causing
confusion in the byte order detection.
Change-Id: If95255974e9e3e5d0554410bbab65bc2af1bb1c7
Lang IDs get localized, if using them in a setting they should be
converted to english
adds lang_id_to_english() which walks the core builtins to return the lang id in english
Change-Id: Iced0d70be1318e512a8f3756e2bef1102dc511d8
Allow setting context menu items
reuses WPS hotkey items
Runs the item
displays the item
Open plugin shows the item name
Pitch shows the pitch speed amount
add 'Show In Files' hotkey item
devices without a hotkey get an extra item
added Manual entries
Change-Id: I427e70e1cad15364ac5d2a7114032e97cc9eee1a
which is required for u"" unicode string literals used in the USB stack.
gcc allows this even in gnu99, but clang does not.
Change-Id: I1700fe503f20f31ba4704f8bef1ccca45f822620
this commit is a combination of the following changes, which
significantly refactors usb core and class drivers.
1. unify usb buffers of each class driver to reduce iram usage
currently, many class drivers allocate their own buffer to receive
control out data, which is a waste of iram.
share one common buffer for that usage to address the issue.
2. simplify control request handling by implicitly receiving write
request data packets
change 1 above fixed the data destination. therefore, having the core
receive the data allows us to reduce the class driver's work and
simplifies the api.
3. enhance usb core's control request handling and unify the legacy
driver api
in order to implement change 2, both the legacy and new driver apis
should be supported. so that, using the designware driver as a
reference, the new driver api functionality is move into usb core.
this simplifies the usb device drivers by requiring them to implement
only the functionalities equivalent to the legacy api.
tested with ipodvideo(arc) and erosqnative(designware)
Change-Id: I3627daa90278751f599e2108ec150ec3f8f6c524
The skin engine is responsible for drawing custom
scroll bars, but isn't kept in sync with list redraws.
Change-Id: Ieb457a4eb8442d4521c67a46a94c4d2132814c64
Eliminate the somewhat circuitous skin_defer_rendering
and skin_render_deferred functions introduced in commit
c145d19e85.
skin_render (and thus skin_update and sb_skin_update),
along with skinlist_draw, list_draw (and thus
gui_synclist_draw), and quickscreen_draw, will never
update the screen anymore. Instead, the skin is only
marked as dirty now.
GUI_EVENT_ACTIONUPDATE redraws the skin as necessary,
and updates the screen afterwards, if the skin is dirty.
This event is sent from get_action, just like before.
A new event, GUI_EVENT_ACTIONREDRAW allows you to redraw
the skin without causing an immediate update at the same
time.
Change-Id: Ib20644853ead901e32f639000f044d6935135bae
commit 3307b04 didn't fully get rid of the PANICs observed on the
Fiio M3K after adding a debounce interval for USB status by event
in e75a3fb, so this reverts to the previous behavior
Change-Id: I42b45a545eb1e26fa3ae3150504712079678f96e
If Playlist Viewer can't open instantaneously due
to the retrieval of metadata, or on devices with disk
storage, make sure the UI doesn't feel unresponsive
Change-Id: Ib7a837515b4fb89ee0ee34ec04541200248b1d6f
IpodVT reported odd word wrapping in the case of a perfectly fitting line on a space
which carried over to the next line
in the process I got a ASAN overflow on the line buffer due to
the possibility that lines_per_page - 1 might be -1 and then
reading off in space for an offset into the file
not sure that this would really cause an issue since it would presumably
be bounded within the boundries of the file anyway
Change-Id: Ib5b2c5a30b58faf8bda653f9b9d8d7f76cfb8069
Lists with a selection size of >1 aren't skinned, so we
we have to manually take care of calling scroll_stop on
the un-skinned bookmark list before displaying the
(skinned) context menu.
Change-Id: Ie7ce627b5ea073be03304b7c676403cdfb4d3243
posix month field is called mon not month
mon goes from 0-11 so strfrtime needs to add 1 to the number for %m
day of week goes 0-6 where 0 = sunday
day of year goes 0-365 (365 on a leap year)
according to lua everything starts at 1
so month is 1-12
day of week goes 1-7 1 = sunday
day of year is 1-365 (366 on a leap year)
added some fields in the time_date example
Change-Id: Icd502b172285d23133488aa3456786d756667bfa
Reduces GNU Complexity score from 33 to 2.
Additionally:
- Allocate MAX_PATH, instead of MAX_PATH+1,
for formatted id3 info (NULL terminator is
already included)
- Ensure minimum name buffer size of 2*MAX_PATH,
instead of MAX_PATH+1, so that there is space for
both the formatted track name and, if enabled, the
id3 info of a single track
Change-Id: Ie60590f6c0da4fe3a515b5643494a29cfc56de50
- Eliminate separate display update for USB screen UI vp;
wait for skin_render instead
- Eliminate outer loop around handle_usb_events
- Use handle_usb_events in Simulator as well.
Fixes USB screen being dismissed by any button presses,
or by system events.
- When USB keypad mode is changed, only redraw the title viewport
- Delete unused MODE_NAME_LEN #define
- Hide "USB keypad mode:" prefix. Only display current mode setting,
which requires less scrolling and ensures that the new setting
is always visible immediately after it has been changed
- Change comment from:
/* Don't return until we get SYS_USB_DISCONNECTED or SYS_TIMEOUT */
to: /* Don't return until we get SYS_USB_DISCONNECTED */
which reflects existing behavior (comment may have been
copy-pasted from usb_wait_for_disconnect_w_tmo)
- Don't scroll USB keypad mode unless UI vp's width is > 1, since
some themes try to hide the USB viewport and display a custom UI
instead
Change-Id: I9b9703025b00ad807920ee60a843f269f414f6f9
Load stts (time to sample) table on demand if it doesn't fit in RAM.
Fixes FS#13889 (in most cases I've seen files with single element in this table and problematic one has 111200 elements)
Change-Id: I719f92a4512a45472739587e81861b9bc545f349
When using a theme with custom skinned lists
(e.g. Themify 2), a line in Text Editor will
continue to scroll after opening the context
menu, because you're switching from an un-
skinned list to a skinned list, which means
that list-skinned.c/list_draw isn't calling
scroll_stop_viewport for the list_text_vp,
as would be the case for un-skinned lists.
Change-Id: I952937166d8f17c9d57f4d93e715de970c49e5e8
small bug, /t as the last character should left justify without
adding spaces to the end of string
/t also added too many spaces to the end of tabbed lines
adds info comment for new usage
ifdef removes some functionality for the bootloader
Change-Id: Ia4ba80f631f8bac3a13441912a8560616fa2c784
For some reason this resolves an apparently-unrelated warning about a const
violation inside playlist_viewer_init().
Change-Id: Ifd4eb008335876707abe64da04a3afd0d1c46633
GCC16 is stricter about reporting these, and while we can rely on
the compiler to optimize away dead stores, we're better off eliminating
them from the source code.
Change-Id: I14570a986811a77ca656c60d792593ff8c458571
The compiler is smart enough to optimize away dead stores but let's
just get rid of them in the first place
Change-Id: I5c85d7c05ef03b084205356a21248f7b049296b0
chris_s reported that a vp width of 1 wpuld cause the trxt reflow to go into an endless loop
check for this and skip displaying the splash
add a warning to the sim for catching unintentional cases of this
Change-Id: I9e1c561f745b5bcf113d0a6cdff57a00cd190fd4
only split a long word across lines if it is larger than screen width
also consider \0 as a valid place to split so we still run through the space finding loop
make /t left justify the splash window (in RTL langs it right justifies)
Change-Id: Id2955878a178c66cb0a1c644e62f943247666d8b
The imx233 bootloader reserves the first 1MB of DRAM for loading the
main firmware, but the recent utf8proc changes means we now exceed that
size on most imx233 targets. Bump this up to 1.5MB to give us more headroom
Change-Id: I1b8bede85d06d40338ea6e3d9abb4e5da34423be
Fixes issues with multiple spaces
adds support for \n and multiple \n
adds support for \t (only at start of line)
adds utf8 aware string splitting
locks to max width/height
adds \f to reset min width / height
larger buffer for units with ram > 8mb
make splash buffer static
Needs testing
Change-Id: I46915043719dce0d696c5ab0da3ed92e4755829c
This reverts commit e13befb925.
Reason for revert: Significant performance regressions, especially with respect to UI interactivity when the database is in use; see https://forums.rockbox.org/index.php/topic,55703.0.html
Change-Id: I0428711871480b74f7faeecb0536f7ed63f631cc
maxbytes counted final characters not actual bytes
font_measurestring() returns the number of bytes of a string that will
fit in a given width
Change-Id: Id73b763267e399bd558f87872b5e715076f9b7f7
2026-05-14 09:51:58 -04:00
3852 changed files with 23201 additions and 15365 deletions