summaryrefslogtreecommitdiffstats
path: root/conf.d/project/lua.d
diff options
context:
space:
mode:
authorFulup Ar Foll <fulup@iot.bzh>2018-06-04 00:33:34 +0200
committerFulup Ar Foll <fulup@iot.bzh>2018-06-04 00:33:34 +0200
commitbbaf42c6b02ca5d1bdceb7e215807abdbf8cd61d (patch)
tree48368647ddfa11483d72a9a577cfa0a11f575d93 /conf.d/project/lua.d
parent2af80583a462fa0f71d0250bca03db5a4cf22fe8 (diff)
Move to Dynamic Mixer API (work in progress)
Diffstat (limited to 'conf.d/project/lua.d')
-rw-r--r--conf.d/project/lua.d/softmixer-simple-test.lua217
1 files changed, 156 insertions, 61 deletions
diff --git a/conf.d/project/lua.d/softmixer-simple-test.lua b/conf.d/project/lua.d/softmixer-simple-test.lua
index 115831b..87fb866 100644
--- a/conf.d/project/lua.d/softmixer-simple-test.lua
+++ b/conf.d/project/lua.d/softmixer-simple-test.lua
@@ -21,131 +21,221 @@
-- Static variables should be prefixed with _
_EventHandle={}
--- Call when AlsaCore return HAL active list
-function _AlsaPingCB_ (source, result, context)
- AFB:notice (source, "--InLua-- PingCB: result='%s'", Dump_Table(result))
+-- make variable visible from ::OnExitError::
+local error
+local result
-end
+local printf = function(s,...)
+ io.write(s:format(...))
+ io.write("\n")
+ return
+end
-- Display receive arguments and echo them to caller
function _mixer_simple_test_ (source, args)
do
- local error
- local response
+
- -- ================== Default Alsa snd-aloop numid and subdev config
- local aloop = {
- ["devices"] = {["playback"]=0,["capture"]=1},
- ["ramps"] = {
+ -- Mixer UID is used as API name
+
+ -- ==================== Default rate ===========================
+
+ local audio_params ={
+ defaults = { ["rate"] = 48000 },
+ standard = { ["rate"] = 44100 },
+ basic= { ["rate"] = 8000 },
+ }
+
+ local volume_ramps = {
{["uid"]="ramp-fast", ["delay"]= 050, ["up"]=10,["down"]=3},
{["uid"]="ramp-slow", ["delay"]= 250, ["up"]=03,["down"]=1},
{["uid"]="ramp-normal", ["delay"]= 100, ["up"]=06,["down"]=2},
- },
+ }
+
+ -- ======================= Loop PCM ===========================
+ local snd_aloop = {
+ ["uid"] = "Alsa-Loop",
+ ["path"]= "/dev/snd/by-path/platform-snd_aloop.0",
+ ["devices"] = {["playback"]=0,["capture"]=1},
["subdevs"] = {
- {["subdev"]= 0, ["numid"]= 51},
- {["subdev"]= 1, ["numid"]= 57},
+ {["subdev"]= 0, ["numid"]= 51, ["uid"]= "loop-legacy"},
+ {["subdev"]= 1, ["numid"]= 57, ["uid"]= "loop-multimedia"},
{["subdev"]= 2, ["numid"]= 63},
{["subdev"]= 3, ["numid"]= 69},
{["subdev"]= 4, ["numid"]= 75},
{["subdev"]= 5, ["numid"]= 81},
{["subdev"]= 6, ["numid"]= 87},
{["subdev"]= 7, ["numid"]= 93},
- }
+ },
}
- -- ==================== Default rate ===========================
-
- local audio_defaults = {
- ["rate"] = 48000,
- }
-
- -- ======================= Loop PCM ===========================
- local snd_aloop = {
- ["uid"] = "Alsa-Loop",
- ["devpath"] = "/dev/snd/by-path/platform-snd_aloop.0",
- ["params"] = audio_defaults,
- ["ramps"] = aloop.ramps,
- ["devices"] = aloop.devices,
- ["subdevs"] = aloop.subdevs,
- }
+ -- ============================= Backend (Sound Cards) ===================
- -- ============================= Sound Cards ===================
local snd_yamaha = {
["uid"]= "YAMAHA-APU70",
- ["devpath"]= "/dev/snd/by-id/usb-YAMAHA_Corporation_YAMAHA_AP-U70_USB_Audio_00-00",
- ["params"] = snd_params,
+ ["path"]= "/dev/snd/by-id/usb-YAMAHA_Corporation_YAMAHA_AP-U70_USB_Audio_00-00",
+ ["params"]= audio_params.default,
["sink"] = {
- {["uid"]= "front-right", ["port"]= 0},
- {["uid"]= "front-left", ["port"]= 1},
+ ["channels"] = {
+ {["uid"]= "front-right", ["port"]= 0},
+ {["uid"]= "front-left", ["port"]= 1},
+ },
}
}
- local snd_jabra= {
- ["uid"]= "Jabra-Solemate",
- ["devpath"]= "/dev/snd/by-id/usb-0b0e_Jabra_SOLEMATE_v1.34.0-00",
- ["params"] = snd_params,
+ local snd_usb_8ch= {
+ ["uid"]= "8CH-USB",
+ ["path"]= "/dev/snd/by-id/usb-0d8c_USB_Sound_Device-00",
+ ["params"] = audio_params.default,
["sink"] = {
- {["uid"]= "front-right", ["port"]= 0},
- {["uid"]= "front-left", ["port"]= 1},
+ ["controls"]= {
+ ["volume"] = {["name"]= "Speaker Playback Volume", ["value"]=80},
+ ["mute"] = {["name"]= "Speaker Playback Switch"},
+ },
+ ["channels"] = {
+ {["uid"]= "front-right", ["port"]= 0},
+ {["uid"]= "front-left" , ["port"]= 1},
+ {["uid"]= "middle-right", ["port"]= 2},
+ {["uid"]= "middle-left" , ["port"]= 3},
+ {["uid"]= "back-right", ["port"]= 4},
+ {["uid"]= "back-left" , ["port"]= 5},
+ {["uid"]= "centre-left" , ["port"]= 6},
+ {["uid"]= "centre-left" , ["port"]= 7},
+ },
+ },
+ ["source"] = {
+ ["controls"]= {
+ ["volume"] = {["name"]= "Capture Volume"},
+ ["mute"] = {["name"]= "Capture Switch"},
+ },
+ ["channels"] = {
+ {["uid"]= "mic-right", ["port"]= 0},
+ {["uid"]= "mic-left" , ["port"]= 1},
+ },
}
}
-- ============================= Zones ===================
+ local zone_stereo={
+ ["uid"] = "full-stereo",
+ ["sink"] = {
+ {["target"]="front-right",["channel"]=0},
+ {["target"]="front-left" ,["channel"]=1},
+ {["target"]="middle-right",["channel"]=0},
+ {["target"]="middle-left" ,["channel"]=1},
+ {["target"]="back-right",["channel"]=0},
+ {["target"]="back-left" ,["channel"]=1},
+ }
+ }
+
local zone_front= {
["uid"] = "front-seats",
- ["type"] = "playback",
- ["mapping"] = {
+ ["sink"] = {
{["target"]="front-right",["channel"]=0},
{["target"]="front-left" ,["channel"]=1},
}
}
+ local zone_middle= {
+ ["uid"] = "middle-seats",
+ ["sink"] = {
+ {["target"]="middle-right",["channel"]=0},
+ {["target"]="middle-left" ,["channel"]=1},
+ }
+ }
+
+ local zone_back= {
+ ["uid"] = "back-seats",
+ ["sink"] = {
+ {["target"]="back-right",["channel"]=0},
+ {["target"]="back-left" ,["channel"]=1},
+ }
+ }
+
+ local zone_driver= {
+ ["uid"] = "driver-seat",
+ ["source"] = {
+ {["target"]="mic-right",["channel"]=0},
+ },
+ ["sink"] = {
+ {["target"]="front-right",["channel"]=0},
+ }
+ }
+
-- =================== Audio Stream ============================
local stream_music= {
- ["uid"] = "multimedia",
- ["zone"] = "front-seats",
- ["ramp"] = "ramp-slow",
+ ["uid"] = "multimedia",
+ ["zone"]= "full-stereo",
+ ["source"]= "loop-multimedia",
["volume"]= 60,
["mute"] = false,
+ ["params"]= audio_params.standard,
}
local stream_navigation= {
["uid"] = "navigation",
- ["zone"] = "front-seats",
- ["ramp"] = "ramp-normal",
- ["volume"]= 70,
+ ["zone"]= "front-seats",
+ ["volume"]= 60,
["mute"] = false,
}
-
+
local stream_emergency= {
["uid"] = "emergency",
- ["zone"] = "front-seats",
- ["ramp"] = "ramp-fast",
+ ["zone"] = "driver-seat",
["volume"]= 80,
["mute"] = false,
+ --["params"]= audio_params.basic,
}
+ local stream_radio= {
+ ["uid"] = "radio",
+ ["zone"] = "full-stereo",
+ --["source"]= snd_usb_8ch.uid,
+ ["volume"]= 60,
+ ["mute"] = false,
+ }
+
+ local stream_pulse= {
+ ["uid"] = "pulseaudio",
+ ["zone"] = "back-seats",
+ ["source"]= "loop-legacy",
+ ["volume"]= 60,
+ ["mute"] = false,
+ }
+
--- ================ Create Mixer =========================
- local MyMixer= {
- ["uid"]="Simple_Mixer",
- ["backend"] = {snd_yamaha},
- ["frontend"]= {snd_aloop},
- ["zones"] = {zone_front},
- ["streams"] = {stream_music,stream_navigation,stream_emergency},
+ local MyTestHal= {
+ ["uid"]= "MyMixer",
+ ["ramps"]= volume_ramps,
+ ["playbacks"] = {snd_usb_8ch},
+ ["captures"]= {snd_usb_8ch},
+ ["loops"] = {snd_aloop},
+ ["zones"] = {zone_stereo, zone_front, zone_back, zone_middle, zone_driver},
+ ["streams"] = {stream_pulse, stream_music, stream_navigation },
+ -- ["streams"] = {stream_pulse, stream_music, stream_navigation, stream_emergency, stream_radio },
+
}
- local error,response= smix:_mixer_new_ (source, MyMixer)
+ -- direct LUA call because controller cannot call its own API from AFB:servsync
+ error,result= smix:_mixer_new_ (source, {["uid"]="MyMixer"})
if (error ~= 0) then
- AFB:error (source, "--InLua-- smix:_mixer_new_ fail config=%s", Dump_Table(aloop))
+ AFB:error (source, "--InLua-- smix:_mixer_new_ fail config=%s", Dump_Table(result))
goto OnErrorExit
else
- AFB:notice (source, "--InLua-- smix:_mixer_new_ done response=%s\n", Dump_Table(response))
+ AFB:notice (source, "--InLua-- smix:_mixer_new_ done\n")
end
+ error,result= AFB:servsync(source, "MyMixer", "attach", MyTestHal)
+ if (error) then
+ AFB:error (source, "--InLua-- API MyMixer/attach fail error=%d", error)
+ goto OnErrorExit
+ else
+ AFB:notice (source, "--InLua-- MyMixer/attach done result=%s\n", Dump_Table(result))
+ end
-- ================== Happy End =============================
AFB:notice (source, "--InLua-- Test success")
@@ -153,6 +243,11 @@ function _mixer_simple_test_ (source, args)
-- ================= Unhappy End ============================
::OnErrorExit::
- AFB:error (source, "--InLua-- Test fail")
+ local response=result["request"]
+ printf ("--InLua-- ------------STATUS= %s --------------", result["status"])
+ printf ("--InLua-- ++ INFO= %s", Dump_Table(response["info"]))
+ printf ("--InLua-- ----------TEST %s-------------", result["status"])
+
+ AFB:error (source, "--InLua-- Test Fail")
return 1 -- unhappy end --
end