diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugins/lua/include_lua/audio.lua | 36 | ||||
-rw-r--r-- | apps/plugins/lua/lua.make | 2 | ||||
-rw-r--r-- | apps/plugins/lua/rocklib.c | 65 | ||||
-rwxr-xr-x | apps/plugins/lua/rocklib_aux.pl | 2 |
4 files changed, 103 insertions, 2 deletions
diff --git a/apps/plugins/lua/include_lua/audio.lua b/apps/plugins/lua/include_lua/audio.lua new file mode 100644 index 0000000000..51e5fbe228 --- /dev/null +++ b/apps/plugins/lua/include_lua/audio.lua | |||
@@ -0,0 +1,36 @@ | |||
1 | --[[ Lua RB Audio Operations | ||
2 | /*************************************************************************** | ||
3 | * __________ __ ___. | ||
4 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
5 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
6 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
7 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
8 | * \/ \/ \/ \/ \/ | ||
9 | * $Id$ | ||
10 | * | ||
11 | * Copyright (C) 2017 William Wilgus | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or | ||
14 | * modify it under the terms of the GNU General Public License | ||
15 | * as published by the Free Software Foundation; either version 2 | ||
16 | * of the License, or (at your option) any later version. | ||
17 | * | ||
18 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
19 | * KIND, either express or implied. | ||
20 | * | ||
21 | ****************************************************************************/ | ||
22 | ]] | ||
23 | |||
24 | -- [[ conversion to old style audio_ functions ]] | ||
25 | if not rb.audio then rb.splash(rb.HZ, "No Support!") return nil end | ||
26 | |||
27 | rb.audio_status = function() return rb.audio("status") end | ||
28 | rb.audio_play = function (elapsed, offset) rb.audio("play", elapsed, offset) end | ||
29 | rb.audio_stop = function() rb.audio("stop") end | ||
30 | rb.audio_pause = function() rb.audio("pause") end | ||
31 | rb.audio_resume = function() rb.audio("resume") end | ||
32 | rb.audio_next = function() rb.audio("next") end | ||
33 | rb.audio_prev = function() rb.audio("prev") end | ||
34 | rb.audio_ff_rewind = function (newtime) rb.audio("ffrewind", newtime) end | ||
35 | rb.audio_flush_and_reload_tracks = function() rb.audio("flushandreloadtracks") end | ||
36 | rb.audio_get_file_pos = function() return rb.audio("getfilepos") end | ||
diff --git a/apps/plugins/lua/lua.make b/apps/plugins/lua/lua.make index 58b3b69831..5931b655e8 100644 --- a/apps/plugins/lua/lua.make +++ b/apps/plugins/lua/lua.make | |||
@@ -16,7 +16,7 @@ LUA_OBJ := $(call c2obj, $(LUA_SRC)) | |||
16 | OTHER_SRC += $(LUA_SRC) | 16 | OTHER_SRC += $(LUA_SRC) |
17 | 17 | ||
18 | LUA_INCLUDEDIR := $(LUA_SRCDIR)/include_lua | 18 | LUA_INCLUDEDIR := $(LUA_SRCDIR)/include_lua |
19 | LUA_INCLUDELIST := $(addprefix $(LUA_BUILDDIR)/,blit.lua color.lua draw.lua image.lua lcd.lua math_ex.lua print.lua timer.lua) | 19 | LUA_INCLUDELIST := $(addprefix $(LUA_BUILDDIR)/,audio.lua blit.lua color.lua draw.lua image.lua lcd.lua math_ex.lua print.lua timer.lua) |
20 | 20 | ||
21 | ifndef APP_TYPE | 21 | ifndef APP_TYPE |
22 | ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) | 22 | ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) |
diff --git a/apps/plugins/lua/rocklib.c b/apps/plugins/lua/rocklib.c index 3f85da97a7..871336505c 100644 --- a/apps/plugins/lua/rocklib.c +++ b/apps/plugins/lua/rocklib.c | |||
@@ -320,6 +320,69 @@ RB_WRAP(playlist_insert_directory) | |||
320 | return 1; | 320 | return 1; |
321 | } | 321 | } |
322 | 322 | ||
323 | RB_WRAP(audio) | ||
324 | { | ||
325 | enum e_audio {AUDIO_STATUS = 0, AUDIO_PLAY, AUDIO_STOP, AUDIO_PAUSE, | ||
326 | AUDIO_RESUME, AUDIO_NEXT, AUDIO_PREV, AUDIO_FFREWIND, | ||
327 | AUDIO_FLUSHANDRELOADTRACKS, AUDIO_GETPOS, AUDIO_ECOUNT}; | ||
328 | const char *audio_option[] = {"status", "play", "stop", "pause", | ||
329 | "resume", "next", "prev", "ffrewind", | ||
330 | "flushandreloadtracks", "getfilepos", NULL}; | ||
331 | long elapsed, offset, newtime; | ||
332 | int status = rb->audio_status(); | ||
333 | |||
334 | int option = luaL_checkoption (L, 1, NULL, audio_option); | ||
335 | switch(option) | ||
336 | { | ||
337 | default: | ||
338 | case AUDIO_STATUS: | ||
339 | break; | ||
340 | case AUDIO_PLAY: | ||
341 | elapsed = luaL_checkint(L, 2); | ||
342 | offset = luaL_checkint(L, 3); | ||
343 | |||
344 | if (status == (AUDIO_STATUS_PLAY | AUDIO_STATUS_PAUSE)) | ||
345 | { | ||
346 | /* not perfect but provides a decent compromise */ | ||
347 | rb->audio_ff_rewind(elapsed + offset); | ||
348 | rb->audio_resume(); | ||
349 | } | ||
350 | else if (status != AUDIO_STATUS_PLAY) | ||
351 | rb->audio_play((unsigned long) elapsed, (unsigned long) offset); | ||
352 | |||
353 | break; | ||
354 | case AUDIO_STOP: | ||
355 | rb->audio_stop(); | ||
356 | break; | ||
357 | case AUDIO_PAUSE: | ||
358 | rb->audio_pause(); | ||
359 | break; | ||
360 | case AUDIO_RESUME: | ||
361 | rb->audio_resume(); | ||
362 | break; | ||
363 | case AUDIO_NEXT: | ||
364 | rb->audio_next(); | ||
365 | break; | ||
366 | case AUDIO_PREV: | ||
367 | rb->audio_prev(); | ||
368 | break; | ||
369 | case AUDIO_FFREWIND: | ||
370 | newtime = (long) luaL_checkint(L, 2); | ||
371 | rb->audio_ff_rewind(newtime); | ||
372 | break; | ||
373 | case AUDIO_FLUSHANDRELOADTRACKS: | ||
374 | rb->audio_flush_and_reload_tracks(); | ||
375 | break; | ||
376 | case AUDIO_GETPOS: | ||
377 | lua_pushinteger(L, rb->audio_get_file_pos()); | ||
378 | return 1; | ||
379 | } | ||
380 | |||
381 | rb->yield(); | ||
382 | lua_pushinteger(L, status); /* return previous (or current) audio status */ | ||
383 | return 1; | ||
384 | } | ||
385 | |||
323 | SIMPLE_VOID_WRAPPER(backlight_force_on); | 386 | SIMPLE_VOID_WRAPPER(backlight_force_on); |
324 | SIMPLE_VOID_WRAPPER(backlight_use_settings); | 387 | SIMPLE_VOID_WRAPPER(backlight_use_settings); |
325 | 388 | ||
@@ -449,6 +512,8 @@ static const luaL_Reg rocklib[] = | |||
449 | RB_FUNC(strip_extension), | 512 | RB_FUNC(strip_extension), |
450 | RB_FUNC(create_numbered_filename), | 513 | RB_FUNC(create_numbered_filename), |
451 | 514 | ||
515 | RB_FUNC(audio), | ||
516 | |||
452 | {NULL, NULL} | 517 | {NULL, NULL} |
453 | }; | 518 | }; |
454 | #undef RB_FUNC | 519 | #undef RB_FUNC |
diff --git a/apps/plugins/lua/rocklib_aux.pl b/apps/plugins/lua/rocklib_aux.pl index 085a191ee3..e47a898d55 100755 --- a/apps/plugins/lua/rocklib_aux.pl +++ b/apps/plugins/lua/rocklib_aux.pl | |||
@@ -75,7 +75,7 @@ my @forbidden_functions = ('^open$', | |||
75 | '^lcd_(mono_)?+bitmap', | 75 | '^lcd_(mono_)?+bitmap', |
76 | '^__.+$', | 76 | '^__.+$', |
77 | '^.+_(un)?cached$', | 77 | '^.+_(un)?cached$', |
78 | '^audio_play$', | 78 | '^audio_.+$', |
79 | '^round_value_to_list32$'); | 79 | '^round_value_to_list32$'); |
80 | 80 | ||
81 | my $rocklib = sprintf("%s/rocklib.c", $ARGV[0]); | 81 | my $rocklib = sprintf("%s/rocklib.c", $ARGV[0]); |