summaryrefslogtreecommitdiffstats
path: root/conf.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
parent2af80583a462fa0f71d0250bca03db5a4cf22fe8 (diff)
Move to Dynamic Mixer API (work in progress)
Diffstat (limited to 'conf.d')
-rw-r--r--conf.d/cmake/00-opensuse-osconfig.cmake2
-rw-r--r--conf.d/cmake/config.cmake4
-rw-r--r--conf.d/project/etc/smixer-test-config.json (renamed from conf.d/project/etc/4a--softmixer-test.json)0
-rw-r--r--conf.d/project/lua.d/softmixer-simple-test.lua217
4 files changed, 160 insertions, 63 deletions
diff --git a/conf.d/cmake/00-opensuse-osconfig.cmake b/conf.d/cmake/00-opensuse-osconfig.cmake
index 9f8ce3d..3da2b4b 100644
--- a/conf.d/cmake/00-opensuse-osconfig.cmake
+++ b/conf.d/cmake/00-opensuse-osconfig.cmake
@@ -1,2 +1,4 @@
message(STATUS "*** Notice: OpenSuSe LUA-5.3+DynApi")
list(APPEND PKG_REQUIRED_LIST lua>=5.3)
+
+set(USE_EFENCE 1)
diff --git a/conf.d/cmake/config.cmake b/conf.d/cmake/config.cmake
index 536d4b5..8d6b4b7 100644
--- a/conf.d/cmake/config.cmake
+++ b/conf.d/cmake/config.cmake
@@ -18,7 +18,7 @@
# Project Info
# ------------------
-set(PROJECT_NAME 4a-softmixer)
+set(PROJECT_NAME 4a-smixer)
set(PROJECT_PRETTY_NAME "Audio SoftMixer")
set(PROJECT_DESCRIPTION "Soft Mixer for 4A (AGL Advanced Audio Architecture)")
set(PROJECT_URL "https://github.com/iotbzh/4a-softmixer")
@@ -199,7 +199,7 @@ set(AFB_REMPORT "1234" CACHE PATH "Default binder listening port")
# Print a helper message when every thing is finished
# ----------------------------------------------------
-set(CLOSING_MESSAGE "Typical binding launch: afb-daemon --name ${PROJECT_NAME}-afbd --port=${AFB_REMPORT} --workdir=${CMAKE_BINARY_DIR} --ldpath=/dev/null --binding=package/lib/softmixer-binding.so --roothttp=package/htdocs --token=\"${AFB_TOKEN}\" --tracereq=common --verbose")
+set(CLOSING_MESSAGE "Typical binding launch: afb-daemon --name smixer-test-afbd --port=${AFB_REMPORT} --workdir=${CMAKE_BINARY_DIR} --ldpath=/dev/null --binding=package/lib/softmixer-binding.so --roothttp=package/htdocs --token=\"${AFB_TOKEN}\" --tracereq=common --verbose")
set(PACKAGE_MESSAGE "Install widget file using in the target : afm-util install ${PROJECT_NAME}.wgt")
# Optional schema validator about now only XML, LUA and JSON
diff --git a/conf.d/project/etc/4a--softmixer-test.json b/conf.d/project/etc/smixer-test-config.json
index d646e3b..d646e3b 100644
--- a/conf.d/project/etc/4a--softmixer-test.json
+++ b/conf.d/project/etc/smixer-test-config.json
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