summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/lua/include_lua/pcm.lua36
-rw-r--r--apps/plugins/lua/lua.make4
-rw-r--r--apps/plugins/lua/rocklib.c66
-rwxr-xr-xapps/plugins/lua/rocklib_aux.pl4
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]);