lua remove and consolidate some rb plugin functions

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
This commit is contained in:
William Wilgus 2019-09-26 23:23:16 -05:00
parent 5afdcdd460
commit de06a06351
2 changed files with 73 additions and 6 deletions

View file

@ -57,6 +57,7 @@
#define RB_WRAP(func) static int rock_##func(lua_State UNUSED_ATTR *L) #define RB_WRAP(func) static int rock_##func(lua_State UNUSED_ATTR *L)
#define SIMPLE_VOID_WRAPPER(func) RB_WRAP(func) { (void)L; func(); return 0; } #define SIMPLE_VOID_WRAPPER(func) RB_WRAP(func) { (void)L; func(); return 0; }
/* KERNEL */
RB_WRAP(current_tick) RB_WRAP(current_tick)
{ {
lua_pushinteger(L, *rb->current_tick); lua_pushinteger(L, *rb->current_tick);
@ -77,6 +78,13 @@ RB_WRAP(schedule_cpu_boost)
} }
#endif #endif
RB_WRAP(sleep)
{
unsigned ticks = (unsigned) lua_tonumber(L, 1);
rb->sleep(ticks);
return 0;
}
#ifdef HAVE_PRIORITY_SCHEDULING #ifdef HAVE_PRIORITY_SCHEDULING
RB_WRAP(thread_set_priority) RB_WRAP(thread_set_priority)
{ {
@ -847,8 +855,47 @@ RB_WRAP(read_mem)
lua_replace(L, -3);/* stk pos 1 is no longer offset it is starting address */ lua_replace(L, -3);/* stk pos 1 is no longer offset it is starting address */
return mem_read_write(L, address, maxsize, false); return mem_read_write(L, address, maxsize, false);
} }
/* will add this back if anyone finds a target that needs it */
RB_WRAP(system_memory_guard)
{
int newmode = (int) luaL_checkint(L, 1);
int result = rb->system_memory_guard(newmode);
lua_pushinteger(L, result);
return 1;
}
#endif #endif
/* SPEAKING */
static int rock_talk(lua_State *L)
{
int result;
bool enqueue = lua_toboolean(L, 2);
if (lua_isnumber(L, 1))
{
long n = (long) lua_tonumber(L, 1);
result = rb->talk_number(n, enqueue);
}
else
{
const char* spell = luaL_checkstring(L, 1);
result = rb->talk_spell(spell, enqueue);
}
lua_pushinteger(L, result);
return 1;
}
RB_WRAP(talk_shutup)
{
if (lua_toboolean(L, 1))
rb->talk_force_shutup();
else
rb->talk_shutup();
return 0;
}
/* MISC */
RB_WRAP(restart_lua) RB_WRAP(restart_lua)
{ {
/*close lua state, open a new lua state, load script @ filename */ /*close lua state, open a new lua state, load script @ filename */
@ -859,17 +906,16 @@ RB_WRAP(restart_lua)
return -1; return -1;
} }
#define RB_FUNC(func) {#func, rock_##func} #define RB_FUNC(func) {#func, rock_##func}
#define RB_ALIAS(name, func) {name, rock_##func} #define RB_ALIAS(name, func) {name, rock_##func}
static const luaL_Reg rocklib[] = static const luaL_Reg rocklib[] =
{ {
/* Kernel */ /* KERNEL */
RB_FUNC(current_tick), RB_FUNC(current_tick),
#ifdef HAVE_SCHEDULER_BOOSTCTRL #ifdef HAVE_SCHEDULER_BOOSTCTRL
RB_FUNC(schedule_cpu_boost), RB_FUNC(schedule_cpu_boost),
#endif #endif
RB_FUNC(sleep),
#ifdef HAVE_PRIORITY_SCHEDULING #ifdef HAVE_PRIORITY_SCHEDULING
RB_FUNC(thread_set_priority), RB_FUNC(thread_set_priority),
#endif #endif
@ -932,6 +978,12 @@ static const luaL_Reg rocklib[] =
RB_FUNC(audio_next_track), RB_FUNC(audio_next_track),
RB_FUNC(audio_current_track), RB_FUNC(audio_current_track),
/* SPEAKING */
{"talk_number", rock_talk},
{"talk_spell", rock_talk},
RB_FUNC(talk_shutup),
/* MISC */
RB_FUNC(restart_lua), RB_FUNC(restart_lua),
{NULL, NULL} {NULL, NULL}

View file

@ -21,7 +21,7 @@
# The purpose of this script is to automatically generate Lua wrappers for # The purpose of this script is to automatically generate Lua wrappers for
# (easily) portable C functions used in the Rockbox plugin API. # (easily) portable C functions used in the Rockbox plugin API.
# It doesn't contain support for enums, structs or pointers (apart from char*). # It doesn't contain support for structs or pointers (apart from char*).
# #
# The output will be written to <build_dir>/apps/plugins/lua/rocklib_aux.c # The output will be written to <build_dir>/apps/plugins/lua/rocklib_aux.c
@ -50,7 +50,8 @@ my @ported_functions;
# These functions are excluded from automatically wrapping. This is useful if # These functions are excluded from automatically wrapping. This is useful if
# you want to manually port them to Lua. The format is a standard Perl regular # you want to manually port them to Lua. The format is a standard Perl regular
# expression. # expression.
my @forbidden_functions = ('^open$', my @forbidden_functions = ('^atoi$',
'^open$',
'^open_utf8$', '^open_utf8$',
'^close$', '^close$',
'dcache', 'dcache',
@ -69,6 +70,7 @@ my @forbidden_functions = ('^open$',
'^strip_extension$', '^strip_extension$',
'^create_numbered_filename$', '^create_numbered_filename$',
'^s?+rand$', '^s?+rand$',
'^strlen$',
'^strl?+cpy$', '^strl?+cpy$',
'^strl?+cat$', '^strl?+cat$',
'strn?+casecmp$', 'strn?+casecmp$',
@ -103,11 +105,17 @@ my @forbidden_functions = ('^open$',
'^pcm_(set_frequency|calculate_peaks)$', '^pcm_(set_frequency|calculate_peaks)$',
'^sound_(set|current|default|min|max|unit|pitch|val2phys)$', '^sound_(set|current|default|min|max|unit|pitch|val2phys)$',
'^mixer_(set|get)_frequency$', '^mixer_(set|get)_frequency$',
'^rock_plugin_get_current_filename$', '^plugin_get_current_filename$',
'^plugin_release_audio_buffer$', '^plugin_release_audio_buffer$',
'^reload_directory$', '^reload_directory$',
'^set_current_file$', '^set_current_file$',
'^set_dirfilter$', '^set_dirfilter$',
'^sleep$',
'^system_memory_guard$',
'^talk_number$',
'^talk_force_shutup$',
'^talk_spell$',
'^talk_shutup$',
'^(trigger|cancel)_cpu_boost$', '^(trigger|cancel)_cpu_boost$',
'^thread_', '^thread_',
'^round_value_to_list32$'); '^round_value_to_list32$');
@ -185,6 +193,7 @@ EOF
; ;
my %in_types = ('void' => \&in_void, my %in_types = ('void' => \&in_void,
'enum' => \&in_int,
'int' => \&in_int, 'int' => \&in_int,
'unsigned' => \&in_int, 'unsigned' => \&in_int,
'unsignedint' => \&in_int, 'unsignedint' => \&in_int,
@ -237,6 +246,12 @@ sub in_void
return "\t(void)L;\n"; return "\t(void)L;\n";
} }
sub in_null
{
my ($name, $type, $pos) = @_;
return sprintf("\t%s %s = NULL;\n", $type, $name, $type, $pos)
}
sub in_int sub in_int
{ {
my ($name, $type, $pos) = @_; my ($name, $type, $pos) = @_;