diff options
-rw-r--r-- | apps/plugins/lua/include_lua/pcm.lua | 36 | ||||
-rw-r--r-- | apps/plugins/lua/lua.make | 4 | ||||
-rw-r--r-- | apps/plugins/lua/rocklib.c | 66 | ||||
-rwxr-xr-x | apps/plugins/lua/rocklib_aux.pl | 4 |
4 files changed, 108 insertions, 2 deletions
diff --git a/apps/plugins/lua/include_lua/pcm.lua b/apps/plugins/lua/include_lua/pcm.lua new file mode 100644 index 0000000000..318669bd67 --- /dev/null +++ b/apps/plugins/lua/include_lua/pcm.lua @@ -0,0 +1,36 @@ +--[[ Lua RB pcm Operations +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2018 William Wilgus + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +]] + +-- [[ conversion to old style pcm_ functions ]] +if not rb.pcm then rb.splash(rb.HZ, "No Support!") return nil end + +rb.pcm_apply_settings = function() rb.pcm("applysettings") end +rb.pcm_set_frequency = function(freq) rb.pcm("setfrequency", freq) end +rb.pcm_play_pause = function(bplay) rb.pcm("playpause", bplay) end +rb.pcm_play_stop = function() rb.pcm("playstop") end +rb.pcm_play_lock = function() rb.pcm("playlock") end +rb.pcm_play_unlock = function() rb.pcm("playunlock") end +rb.pcm_is_playing = function() return rb.pcm("isplaying") end +rb.pcm_is_paused = function() return rb.pcm("ispaused") end +rb.pcm_calculate_peaks = function() return rb.pcm("calculatepeaks") end +rb.pcm_get_bytes_waiting = function() return rb.pcm("getbyteswaiting") end diff --git a/apps/plugins/lua/lua.make b/apps/plugins/lua/lua.make index ece71cc4d6..56df860545 100644 --- a/apps/plugins/lua/lua.make +++ b/apps/plugins/lua/lua.make @@ -16,7 +16,9 @@ LUA_OBJ := $(call c2obj, $(LUA_SRC)) OTHER_SRC += $(LUA_SRC) LUA_INCLUDEDIR := $(LUA_SRCDIR)/include_lua -LUA_INCLUDELIST := $(addprefix $(LUA_BUILDDIR)/,audio.lua blit.lua color.lua draw.lua image.lua lcd.lua math_ex.lua print.lua timer.lua playlist.lua) +LUA_INCLUDELIST := $(addprefix $(LUA_BUILDDIR)/,audio.lua blit.lua color.lua draw.lua \ + image.lua lcd.lua math_ex.lua print.lua \ + timer.lua playlist.lua pcm.lua) ifndef APP_TYPE diff --git a/apps/plugins/lua/rocklib.c b/apps/plugins/lua/rocklib.c index c9242d99bd..ed76122118 100644 --- a/apps/plugins/lua/rocklib.c +++ b/apps/plugins/lua/rocklib.c @@ -334,6 +334,68 @@ RB_WRAP(audio) return 1; } +#if CONFIG_CODEC == SWCODEC +RB_WRAP(pcm) +{ + enum e_pcm {PCM_APPLYSETTINGS = 0, PCM_ISPLAYING, PCM_ISPAUSED, + PCM_PLAYSTOP, PCM_PLAYPAUSE, PCM_PLAYLOCK, PCM_PLAYUNLOCK, + PCM_CALCULATEPEAKS, PCM_SETFREQUENCY, PCM_GETBYTESWAITING, PCM_ECOUNT}; + + const char *pcm_option[] = {"applysettings", "isplaying", "ispaused", + "playstop", "playpause", "playlock", "playunlock", + "calculatepeaks", "setfrequency", "getbyteswaiting", NULL}; + bool b_result; + int left, right; + size_t byteswait; + + lua_pushnil(L); /*push nil so options w/o return have something to return */ + + int option = luaL_checkoption (L, 1, NULL, pcm_option); + switch(option) + { + default: + case PCM_APPLYSETTINGS: + rb->pcm_apply_settings(); + break; + case PCM_ISPLAYING: + b_result = rb->pcm_is_playing(); + lua_pushboolean(L, b_result); + break; + case PCM_ISPAUSED: + b_result = rb->pcm_is_paused(); + lua_pushboolean(L, b_result); + break; + case PCM_PLAYPAUSE: + rb->pcm_play_pause(luaL_checkboolean(L, 1)); + break; + case PCM_PLAYSTOP: + rb->pcm_play_stop(); + break; + case PCM_PLAYLOCK: + rb->pcm_play_lock(); + break; + case PCM_PLAYUNLOCK: + rb->pcm_play_unlock(); + break; + case PCM_CALCULATEPEAKS: + rb->pcm_calculate_peaks(&left, &right); + lua_pushinteger(L, left); + lua_pushinteger(L, right); + return 2; + case PCM_SETFREQUENCY: + rb->pcm_set_frequency((unsigned int) luaL_checkint(L, 1)); + break; + case PCM_GETBYTESWAITING: + byteswait = rb->pcm_get_bytes_waiting(); + lua_pushinteger(L, byteswait); + break; + } + + rb->yield(); + return 1; +} +#endif /*CONFIG_CODEC == SWCODEC*/ + SIMPLE_VOID_WRAPPER(backlight_force_on); SIMPLE_VOID_WRAPPER(backlight_use_settings); @@ -458,7 +520,9 @@ static const luaL_Reg rocklib[] = RB_FUNC(audio), RB_FUNC(playlist), - +#if CONFIG_CODEC == SWCODEC + RB_FUNC(pcm), +#endif {NULL, NULL} }; #undef RB_FUNC diff --git a/apps/plugins/lua/rocklib_aux.pl b/apps/plugins/lua/rocklib_aux.pl index d16351ac77..f52c64e98b 100755 --- a/apps/plugins/lua/rocklib_aux.pl +++ b/apps/plugins/lua/rocklib_aux.pl @@ -88,6 +88,10 @@ my @forbidden_functions = ('^open$', '^playlist_(amount|add|create|start|resume|shuffle)$', '^playlist_(sync|resume_track|remove_all_tracks)$', '^playlist_(insert_track|insert_directory)$', + '^pcm_is_(playing|paused)$', + '^pcm_play_(stop|pause|lock|unlock)$', + '^pcm_(apply_settings|get_bytes_waiting)$', + '^pcm_(set_frequency|calculate_peaks)$', '^round_value_to_list32$'); my $rocklib = sprintf("%s/rocklib.c", $ARGV[0]); |