WIP for passing arguments to lua scripts
args are recognized by adding ?arg to the end of the script path
The easiest way to do this currently is to use the function rb.restart_lua
local sfile = rawget(_G, "_fullpath") or ""
local sArgs = rawget(_G, "_arguments")
if not sArgs then
rb.restart_lua(sfile .. "?my arguments")
else
rb.splash(1000, sfile .. "?" .. sArgs)
end
I'd eventually like to figure out a sensible way to do this from a
shortcut / quick list
Change-Id: I2b60fe3b8f1d04b57361fe532510bd6afee59fbf
g#2272 adds checks for incompatible version & proper number of clips
Currently incompatible talk files will logf when failure to load occurs
Adds a message to Debug > Talk engine stats
'Talk Status: OK'
'Talk Status: ERR Incompatible voice file'
'Talk Status: ERR (#)' -- OOM, Alloc Error
Change-Id: Ifd2c1f38f710541c9cd929b8abf67bba4363ca53
While playing a track the playlist viewer may not
have a big enough temporary buffer to load and display
'max_files_in_playlist' entries
This patch attempts to load as many entries as possible
If tracks were already playing (dynamic playlist or otherwise)
The original code only gave half the plugin buffer to a playlist
loaded from file
On some targets half the plugin buffer is not enough to load all entries…
Now we attempt to get as many entries possible while at least leaving a
small buffer (MAX_PATH) for the name buffer
Change-Id: Ic06eaabc4e2550f076d625957d6d073790852743
This patch addresses a keymapping anomaly on the Rocker. Currently the
Power button when pressed inside a sub-menu will return you to the root
of the menu. However when pressed again it returns you to the sub-menu
you were in previously. This is at odds with how other ports work and
makes it difficult to return to the WPS without manually selecting it on
the root menu.
This patch copies the behaviour of the home button on the Sansa Clip+.
Pressing it once will exit a sub-menu and bring you back to the root
menu. Pressing it again takes you to the WPS. No functionality is lost
or covered up by making this reassignment.
Change-Id: I17789457d49b087a2b4c75f4490ec722d9479a9b
GCC 7 and up complain about this false positive when -Wformat-truncation
or -D_FORTIFY_SOURCE is turned on.
Primarily affects simulator builds on hosts with strict defaults.
Change-Id: I385b3c247775e1268b6bbd326b1afc3eb5453db7
In addition to version and target also check id1_max & id2_max
for proper length before allowing voice file to be loaded
Change-Id: I36016059d07781b0bb43dd9873bbb6e565298d76
(A lot of work was done on this thing, for a target that hasn't been compileable
at least since we moved to git..)
Change-Id: Ibface9392f3251b5be4bf1e0c4d12639c4f1662d
enable keylock in WPS and FMS by simultaniously pressing POWER and BACK.
It was necessary to change the ACTION_FM_EXIT from BUTTON_BACK-button-press-event to
BUTTON_BACK|BUTTON_REL-event and BUTTON_BACK|BUTTON_REPEAT-event to easily be able
to press BUTTON_POWER|BUTTON_BACK without accidentally triggering ACTION_FM_EXIT.
also rebase to current master and add myself to docs/CREDITS
Change-Id: I263a034d0d8fd047d39265e3598ae7936dd8133d
Provided by Roman Stolyarov
Integration, Refactoring, and Upstreaming by Solomon Peachy
X3II confirmed working by forum tester, X20 is nearly identical.
This includes bootloader, main firmware, and the flash image patcher.
Eventual Todo:
* Further refactor AGPTek Rocker & xduoo hiby bootloaders
* Further refactor AGPTek Rocker & xduoo hosted platform code
Change-Id: I34a674051d368efcc75d1d18c725971fe46c3eee
Devices in IAP mode 4 do not explicitly request specific notifications, thus they don't get *any* periodic notifications at the moment (in particular, they miss the track position updates that are supposed to be sent out every 500 ms).
The attached patch fixes this by skipping an early return for devices in IST_EXTENDED state.
Change-Id: I23e35247dd0494e537429d4fd9d51dc7f4653d76
After a few issues with the timer code in the hosted players
I realized a few shortcomings in the original rockev code...
This rewrite gives thread_exit an explicit flag instead of 0
custom events now have a set-able timeout
previous lua hooks are restored
flags are stored in uint8_t
Change-Id: I9ca45246ac9233a2faa581e26a8cc5e5fb512e88
Stop gap till I get a chance to work on the root folder stuff
Makes whatever volume marked by bootdata.boot_volume
the base or root volume, mounts all other volumes after
the specified boot volume.
Has the effect of swapping the SD card to the slot for internal
and Internal storage is mounted as the Sd-card.
Does not honor root redirect -- uses .rockbox folder in the root of boot volume
Change-Id: I0f786aa0c8721e21cba607366775be3e3c0cf474
-Make pacbox AI score agnostic.
-Fix corner case of Game Over/reset with AI on.
-AI can now start on level where pattern starts facing right.
Change-Id: Ibc5416a53ebc07506c31434051b6d47b276cf668
This makes wolf3d work with the shareware files available on the wiki. This
will make things work out-of-the-box with Rockbox Utility.
Change-Id: I9118ecf8715c688565982fc4feb29a8641d68b6a
with the addition of suspending all events on thread start and exit
we don't really need to block on THREAD_QUIT in so many places
Removed suspend clearing on event unregister and updated comments
Change-Id: Id9c6a460def558c5331ee292035691a9f82b2c43
report of call after free on event thread on Agptek Rocker
I'm guessing its a race condition between the thread and the timer
but can't say for sure without some more testing
Change-Id: If11bd718b3cfa81ea13fff378df56d12afa17a7f
rb.strip_extension and rb.create_numbered_filename
have been moved to include_lua/files.lua
to use simply add require('files') to your script
Change-Id: I95af7b312c8614cb10da4b71b22714b3e282e08a
everything that would have been added has already been added or
needs more supporting functions so they've been excluded for the time being
Change-Id: I4ae4753c543287934702a3bd2eeccce5b032235d
removes some usless / duplicated functions
removes atoi - lua tonumber() does this for you
removes strlen - lua string.len does this for you
removes system_memory_guard - if a device that actually implements
system_memory_guard needs it we can add it back conditionally
consolidates talk_number and talk_spell (on backend)
consolidates talk_shutup and talk_force_shutup talk_shutup(bForce)
Change-Id: Id132642f087975a7c132e99a668a41c977942b81
The index for Icon_NOICON is -1 which is caught properly
as is icon > Icon_Last_Themeable
But if you pass an index lower than Icon_NOICON screen_put_iconxy()
tries to read memory prior to the iconset resulting in a crash
Change-Id: I415e650932d65214d883a1595e22261f22e776b6
Several places in the menu code assume MT_MENU though no guarantee existed
menu type is now explicitly checked prior to use of the submenu variable
Change-Id: Ib9013684309eb2d4cf4a8a809d097b096d3fcffc
Dynamic menus had a buffer_len variable in the parent function but it
was discarded before passing to the callbacks
Why!!?? No clue but everything that used it was assuming MAXPATH
Wouldn't be surprised to see some bugs pop out from this one..
init_menu_lists() was assuming MENU_HAS_DESC and setting the
menu title + icon based on such even though it could be invalid
didn't see anywhere in the code that was currently using MENU_DYNAMIC_DESC
in relation to a top level menu but considering it caused all kinds
of corruption to the menu when I tried its probably been tried
and abandoned before...
Change-Id: I8d961d748918bfa8ea6adb5ad60491af4d739d6e
for fname, isdir, attrib in luadir.dir(scrpath, true) do
passing true for the second argument returns table of
file/dir attributes in attrib
Change-Id: I7c999e2fc5dac95b8ccbe169f2119c31b63f6a41
forum user fprockboxer asked for a way to detect long presses within the
do_menu routine this adds that functionality
result = rb.do_menu("Title",t_items, start, menu_callback)
function menu_callback(action)
...
return action
end
Change-Id: I110c590095a743a57d0a7d45b24309899a4629cf
Adds example scripts for reading track metadata + dumping albumart
and rockbox settings
settings are now stored as a table of strings rather than a table of tables
as it saves ~15 kb of ram without adding much complexity
Change-Id: I611c312b2a60ab96e595e4710b17aedbd6c0689b
back when I wrote this I was running the sim on a 32 bit machine
I didn't catch the hardcoded LONG_MAX reference or the fact that
lua_tointeger maxes ot at 32 bits
on 64 bit machines strtol caused all kinds of issues especially since
it returned the real LONG_MIN/MAX values
Change-Id: I3571ebbd9df333f7cbf4077562412c27429bfadc
consolidate some of the playlist create functions
remove extensions from playlist naming (you can still add it if you desire)
switch to strlcpy, strlcpy functions
Change-Id: Ibd62912da4d1f68ed5366baa887d92d4c6b1f933
FS#12992 - Can't create playlist with all tracks on device (regression)
references this issue
empty_playlist() only sets filename[0] = '\0'
the code was checking filename[1]..
bug ensued
strip extra leading '/' from default path
Change-Id: Ibd8973666ee45583b9e11e3ba317c0e247f085c1
apparently we should be doing this anyway
mark4o> The packets overlap and may reuse state set by other recent packets,
so if you seek to a different position,
resetting the state helps to ensure that the subsequent
packets won't use the state set by the unrelated packets
that were processed before the seek.
remove stack bump WORKAROUND_FS13060
Change-Id: I1c14e23b1721a360b91e3e55202c1557aef0fcc6
* Properly account for ID3v1 tags
* Play time computation fixes
* Add speech feedback
Patch by Igor Poretsky
Change-Id: Ia6df8fb171882a88527cfa9d3b76b705f09becdd
- Only load when database is ready
- Assign to file browser only when returning to WPS
- Minor speech fixes
Patch by Igor Poretsky
Re-synchronized by myself
Change-Id: If9c943b3af415a2decd3dd5803d730bd790d09fe
This boosts performance to 13.0FPS on ipod6g for `timedemo demo1'. That's a
+34% increase from baseline.
Change-Id: I50bae7783ff2fce46e8257c251c6b639c069e7cb
I didn't do _OPT3 because it's disabled in the PQ source.
This gives as +0.2FPS boost over the last commit.
Change-Id: I9c3c8fb7bd23262beb810da6e9469d6b6c4b2a81
The PocketQuake project, available below, has some nice fixed-point code:
https://web.archive.org/web/20150412233306/http://quake.pocketmatrix.com/PocketQuake0062_src.zip
I'd like to see most of them merged into our Quake port. This commit
gives +0.9FPS on ipod6g. (A big change given that it was running at
only 9.7FPS to begin with!)
Change-Id: I91931bdd5c22f14fb28616de938a03b4e7d7b076
Gives us the lowest HW sample rate that's >= 22KHz.
Needed because some targets that don't support 22K support 11K or 8K, so
HW_SAMPR_MIN will give us much lower quality than is acceptable.
Take advantage of this new macro in the SDL, MIDI, and MIKMOD plugins,
and implement a crude "fast enough" test to enable higher sample rates
on more capable targets.
Change-Id: I6ad38026fb3410c62da028e78512e027729bb851
LCD developed 9/2015 by Terry Ellison
We've already discarded the ldebug module from lua
it only makes sense to discard the debug info as well
adds 1.5 K to the binary
saves 8 Kb on the base state
once scripts start getting called i've seen 10-50Kb savings but it all depends on
what exactly you are running
Change-Id: Ibb74f344df1c4c96380ec6c98b010a810e9ae9cc
- Improved sound quality (use 44.1KHz)
- Conventional mixer is now used
- Playback is performed in a separate thread
- Speech feedback in menus
Patch by Igor Poretsky
Change-Id: I13baa224cefd67aefe6d62b988971bfbd421757d
Add bottom left as quickscreen and bottom right as hotkey acroos the
board for fuze+. Meant as a
stopgap until gesture support becomes good enough that it is unnecessary
Also adds my name to CREDITS
Change-Id: If1729b7d53d967081b6d97a9a49cd66312c96ed4
- Assigned hotkey to long back
- Assigned quickscreen invocation to long menu
- Fixed pitchscreen control
- Assigned long presses in pitchscreen
Patch by Igor Poretsky
Change-Id: I56ca8ea046ba564356f0a178a724182df88a3ac1
This is not a very pretty fix, but code that doesn't crash is better than
code that crashes... "If it runs, it's done."
Change-Id: Ia1d0c537e5e5e60fb80cf7d7de2332e1c712806f
adds (static) function tagtree_unload
frees all buflib allocations for tagtree
adds command %reload that allows a new tagnavi file to be loaded
without device restart
use it like so..
"Reload..." -> %reload
Allocations are now checked for validity (probably a good idea anyway)
Change-Id: I2b4b9b7e253f97f3e6575e0ea7a92905e004d47f
Forgot a return statement in Sys_FileRead (which slipped by since I've made
the questionable decision to disable all warnings...)
Change-Id: Ia0f3da52b43765b8e0e9953893ac7957ec2f6c2e
For some reason a NULL pointer creeps in, on the simulator only, it seems.
This makes sure that if it happens on target we'll know about it.
Change-Id: I7a5bc9dd3ef71f28d58d0d456d23007dc0d49ce3
COM_LoadStackFile was not thread-safe since it relied on a global variable
to pass the loadbuf parameter to COM_LoadFile. This was causing mysterious
crashes when model loading and audio mixing were happening simultaneously.
Change-Id: I505c5ef0ed49d0c4aa4b11cfed05647c75b5b40d
- Unfinished game is now saved along with current position.
- All savings are automatically done on shutdown.
- Implemented facility to view played games.
- Fixed bug that prevented program from the very first move.
Patch by Igor Poretsky
Change-Id: I997b97752e4362ed953309bea985d071f9db229b
paths.
If ROOTDIR=/rockbox and BUILDDIR=/rockbox/build-something, it is now possible to
successfully build both target binaries and simulators.
Change-Id: If12d1d5933c5a15feebf627a4f1636dc1e3a67fa
Derivative of work by RobertGabrielJakabosky
http://lua-users.org/wiki/EmergencyGarbageCollector
I've only implemented the not enough memory part and
expanded this idea to adding a mechanism to signal
the OOM condition of the plugin buffer which allows us to only
grab the playback buffer after garbage collection fails
(SO THE MUSIC KEEPS PLAYING AS LONG AS POSSIBLE)
Change-Id: I684fb98b540ffc01f7ba324ab5b761ceb59b9f9b
This caches large files (arbitrarily defined as >1MB) in memory, which
reduces the delay when a new model or sound is needed.
Change-Id: I0f96449555a32f05d771fe900c10eaf21ecbb4f6
When the starting address of the plugin buffer
is not aligned to 8 bytes crashes occur in tlsf
(on ARM atleast)
Change-Id: I655500c25e1c8f84b4a2418e9ec5c5948e4bea82
The quake commit tried to optimize lcd updates but inadvertently broke
wolf3d (which always uses a 320x200 screen size). This fixes that and also
lets direct mode truly exit early to hopefully save some cycles.
Change-Id: I41d96cd584257fe25e791c7f615812849f348e4f
add defines for sound functions
SOUND_VOLUME, SOUND_BALANCE, SOUND_CHANNELS, SOUND_STEREO_WIDTH ...
defines depend on target
require "sound_defines" to add them to rb.sound_settings[]
consolidates:
sound_set, sound_current, sound_default, sound_min, sound_max,
sound_unit, sound_pitch, sound_val2phys to a single function
rb.sound("name", setting, [value])
require "sound.lua" for old functionality
Change-Id: Ice695218aa433f4fcbb48fbd6b8a9bf29c994110
Adds:
sound_current(int setting)
returns the current sound setting from global_settings
complements sound_max, sound_min and sound_default
Change-Id: I35bd893753c958f808492906fe533edc51d5d57c
ef9ee89 introduced Read{Big,Little}{Short,Long,Float} functions to safely
read a value in memory. These incorrectly take char*, which causes them to
output erroneous 0xff bytes when given bytes with bit 7 set.
Change-Id: I9531172301aecfdacae405d2f782f662608ce6df
The d*_t structs are from "d"isk, which means they could be
unaligned. Packing them saves me from having to rewrite every single
access to them.
Change-Id: I6d5a9525fff368bf29bdb85cf1672fce02ce3396
This #ifdef apparcntly confuses dependency generation, and since lang_enum.h
just declares an enum, including it unconditionally is harmless.
Change-Id: I8feaff7657080962f1ae6305492075c8a5bca673
talk_time and talk_date are now exposed to plugins, so the strings they
reference need to be moved from rtc-only to global.
Change-Id: I88166dc21455d595878d3d1ec557289cd3a5ff6b
The format strings in the snprintf can in theory need 60 characters
This will not happen in practice (because seconds are 0..60 and not
full-range integers etc.), but -D_FORTIFY_SOURCE will still warn
about it, so we use 60 characters for HOSTED to make the compiler
happy. Native builds still use 20, which is enough in practice.
Change-Id: I22a2bab8134442e531a10bf883f3a369ade0fdc3
As rbcompat.h is -include'd on the command line, the mkdep script doesn't
pick it up. Explicitly add the dependency to lang_enum.h to the makefile.
Also add lang_enum.h to the 'make clean' target!
Change-Id: I33c8ed0cd5c1d44dce02ac9285469c0e4feac00e
Original patch by Mario Lang
Heavily updated by Igor Poretsky
Further updated by myself
This patch breaks binary API compatibility by placing the new
functions where they make the most logical sense. IMO this is
the better approach to take given the scope of the changes needed
for talk support.
Since binary API is changing, the patch also moves some other
functions around to more logical locations.
As well as voice support in plugins, this patch voice-enables several
simple plugins. There will be follow-up patches for many plugins that
build on this one.
Change-Id: I18070c06e77e8a3c016c2eb6b6c5dbe6633b9b54
This ports id Software's Quake to run on the SDL plugin runtime. The
source code originated from id under the GPLv2 license. I used
https://github.com/ahefner/sdlquake as the base of my port.
Performance is, unsurprisingly, not on par with what you're probably
used to on PC. I average about 10FPS on ipod6g, but it's still
playable.
Sound works well enough, but in-game music is not supported. I've
written ARM assembly routines for the inner sound loop. Make sure you
turn the "brightness" all the way down, or colors will look funky.
To run, extract Quake's data files to /.rockbox/quake. Have fun!
Change-Id: I4285036e967d7f0722802d43cf2096c808ca5799
This library allows events to be subscribed / recieved within a lua script
most events in rb are synchronous so flags are set and later checked by a
secondary thread to make them (semi?) asynchronous.
There are a few caveats to be aware of:
FIRST, The main lua state is halted till the lua callback(s) are finished
Yielding will not return control to your script from within a callback
Also, subsequent callbacks may be delayed by the code in your lua callback
SECOND, You must store the value returned from the event_register function
you might get away with it for a bit but gc will destroy your callback
eventually if you do not store the event
THIRD, You only get one cb per event type
["action", "button", "custom", "playback", "timer"]
(Re-registration of an event overwrites the previous one)
Usage:
possible events =["action", "button", "custom", "playback", "timer"]
local evX = rockev.register("event", cb_function, [timeout / flags])
cb_function([id] [, data]) ... end
rockev.suspend(["event"/nil][true/false]) passing nil affects all events
stops event from executing, any but the last event before
re-enabling will be lost, passing false, unregistering or re-registering
an event will clear the suspend
rockev.trigger("event", [true/false], [id])
sets an event to triggered,
NOTE!, CUSTOM_EVENT must be unset manually
id is only passed to callback by custom and playback events
rockev.unregister(evX)
Use unregister(evX) to remove an event
Unregistering is not necessary before script end, it will be
cleaned up on script exit
Change-Id: Iea12a5cc0c0295b955dcc1cdf2eec835ca7e354d
Rockbox constants are auto generated by a perl script like the majority
of the plugin functions.
Constants are contained in rb_defines.lua, if the file exists it is auto loaded
by the lua state for backwards compatibility
Frees ~1k
Change-Id: I237700576c748f468249e501c839d89effca3f39
We have quite a bit of ram tied up in lua with our c libraries
I was searching for a way to free up some of this when I came
across read only tables in e-lua but that involved a lot of patching
through the source
Instead I came up with this..
it frees about 15k ram without much slowdown in code execution
since after a function gets called it is automatically added to the table
If you have a performance issue you can call the bind method
to bind a specific function or the whole table in one shot
for instance rb table
rb("lcd_clear") -- binds/returns function rb.lcd_clear()
rb(nil) -- binds every function in rb table + removes latebind metatable ..
-- added pairs and ipairs code from lua 5.2
-- cleaned up code + made more seamless
existing fields are now saved rather than overwritten when table is bound
Change-Id: I1c20e76b736c032dedc727d2e58928641e40191d
Allows saving of ram by reusing strings already stored in the binary
and storing a pointer instead of malloc and copy to get them inside
the lua state
Saves about 1.5K overall
Derivative of work by bogdanm
RAM optimizations: pseudo RO strings, functions in Flash
d54659b572
Change-Id: I21d6dcfa32523877efd9f70fb0f88f2a02872649
track elapsed is needed to use fast-forward and rewind effectively
track length might as well be added too..
Change-Id: I906c92eb5260164c6177d8c0a8ff879b1fad7898
wl_def.h has a #pragma pack(1), which causes issues when we take the
address of an unaligned struct field. This fixes the issue by
disabling packing in fmopl_gpl.c.
Change-Id: I526880fa73226e8028855896f7efc3a66571b3ec