summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
m---------app-afb-helpers-submodule0
m---------app-controller-submodule0
-rw-r--r--conf.d/cmake/00-opensuse-osconfig.cmake (renamed from conf.d/cmake/00-suse-osconfig.cmake)0
-rw-r--r--conf.d/project/etc/4a-softmixer-config.json84
-rw-r--r--conf.d/project/lua.d/softmixer-00.lua86
-rw-r--r--conf.d/project/lua.d/softmixer-01.lua192
-rw-r--r--conf.d/project/lua.d/softmixer-double.lua (renamed from conf.d/project/samples/softmixer-multi-01.lua)24
-rw-r--r--conf.d/project/lua.d/softmixer-simple.lua (renamed from conf.d/project/lua.d/softmixer-02.lua)41
-rw-r--r--mixer-binding/mixer-binding.h7
-rw-r--r--nbproject/configurations.xml158
-rw-r--r--plugins/alsa/alsa-api-sndloops.c1
-rw-r--r--plugins/alsa/alsa-plug-vol.c82
-rw-r--r--plugins/alsa/alsa-softmixer.c2
-rw-r--r--plugins/alsa/alsa-softmixer.h14
14 files changed, 232 insertions, 459 deletions
diff --git a/app-afb-helpers-submodule b/app-afb-helpers-submodule
-Subproject ad95795ba872303d24cf2302b039a9068d5b83b
+Subproject 70fd3f0ea563220211a5b412ebdab46eb0ce5ed
diff --git a/app-controller-submodule b/app-controller-submodule
-Subproject 59bbc828469169b518eea036f63f60b5ac8f626
+Subproject e8b0b3c3cc9b0453b88d1315822fda5963754ae
diff --git a/conf.d/cmake/00-suse-osconfig.cmake b/conf.d/cmake/00-opensuse-osconfig.cmake
index 9f8ce3d..9f8ce3d 100644
--- a/conf.d/cmake/00-suse-osconfig.cmake
+++ b/conf.d/cmake/00-opensuse-osconfig.cmake
diff --git a/conf.d/project/etc/4a-softmixer-config.json b/conf.d/project/etc/4a-softmixer-config.json
index b094f2f..2b4db11 100644
--- a/conf.d/project/etc/4a-softmixer-config.json
+++ b/conf.d/project/etc/4a-softmixer-config.json
@@ -1,5 +1,5 @@
{
- "schema": "To Be Defined",
+ "schema": "http://iot.bzh/download/public/schema/json/ctl-schema.json",
"metadata": {
"uid": "Soft Mixer",
"version": "1.0",
@@ -8,10 +8,12 @@
},
"plugins": [
{
- "uid": "alsa-router",
- "ldpath": "./plugins/alsa",
- "lua2c": ["snd_cards", "snd_zones", "snd_loops", "snd_streams"],
- "info": "Map alsa-loop subdevices to 4A HAL streams"
+ "uid": "alsa-softmixer",
+ "info": "Map alsa-loop subdevices to 4A HAL streams",
+ "spath":"./plugins/alsa:../conf.d/project/lua.d",
+ "file": ["alsa-router.ctlso", "softmixer-simple.lua"],
+ "lua2c_prefix": "smix",
+ "lua2c": ["snd_cards", "snd_zones", "snd_loops", "snd_streams"]
}
],
@@ -19,82 +21,26 @@
{
"uid": "init-soft-mixer",
"info": "Initialise Audio Router",
- "lua": "_init_softmixer_"
+ "uri": "lua://alsa-softmixer",
+ "function": "_init_softmixer_"
}
],
- "sndcards": [
- {
- "uid": "Focusrite_Scarlett_18i8",
- "info": "Focusrite 18i8",
- "device": "/dev/snd/by-id/usb-Focusrite_Scarlett_18i8_USB_10004EE6-00",
- "action": {
- "uid": "init-snd-card",
- "function": "lua://init-focusrite"
- },
- "channels": {
- "sink": [
- {
- "type": "FrontLeftFullRange",
- "port": 0
- },
- {
- "type": "FrontRightFullRange",
- "port": 1
- },
- {
- "type": "RearLeftFullRange",
- "port": 2
- },
- {
- "type": "FrontRightFullRange",
- "port": 3
- },
- {
- "type": "Center",
- "port": 4
- },
- {
- "type": "LFE",
- "port": 5
- }
- ],
- "source": [
- {
- "uid": "FrontRightMic",
- "type": "Directional",
- "port": 0
- }
- ]
- }
- }
- ],
-
- "streams": [{
- "uid": "alsa-loop",
- "dev": "/dev/snd/by-path/platform-snd_aloop.0",
- "subdev": 0,
- "count": 8
- }],
-
"controls": [
{
"uid": "mixer-config",
- "lua": "_mixer_config_"
+ "uri": "lua://alsa-softmixer",
+ "function": "_mixer_config_"
},
{
"uid": "snd-cards",
- "callback": {
- "plugin": "alsa-router",
- "function": "snd_cards"
- }
+ "uri": "plugin://alsa-softmixer",
+ "function": "snd_cards"
},
{
"uid": "snd-zone",
- "callback": {
- "plugin": "alsa-router",
- "function": "snd_zones"
- }
+ "uri": "plugin://alsa-softmixer",
+ "function": "snd_zones"
}
]
}
diff --git a/conf.d/project/lua.d/softmixer-00.lua b/conf.d/project/lua.d/softmixer-00.lua
deleted file mode 100644
index 29d2c70..0000000
--- a/conf.d/project/lua.d/softmixer-00.lua
+++ /dev/null
@@ -1,86 +0,0 @@
---[[
- Copyright (C) 2016 "IoT.bzh"
- Author Fulup Ar Foll <fulup@iot.bzh>
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- Note: this file should be called before any other to assert declare function
- is loaded before anything else.
-
- References:
- http://lua-users.org/wiki/DetectingUndefinedVariables
-
---]]
-
-
---===================================================
---= Niklas Frykholm
--- basically if user tries to create global variable
--- the system will not let them!!
--- call GLOBAL_lock(_G)
---
---===================================================
-function GLOBAL_lock(t)
- local mt = getmetatable(t) or {}
- mt.__newindex = lock_new_index
- setmetatable(t, mt)
-end
-
---===================================================
--- call GLOBAL_unlock(_G)
--- to change things back to normal.
---===================================================
-function GLOBAL_unlock(t)
- local mt = getmetatable(t) or {}
- mt.__newindex = unlock_new_index
- setmetatable(t, mt)
-end
-
-function lock_new_index(t, k, v)
- if (string.sub(k,1,1) ~= "_") then
- GLOBAL_unlock(_G)
- error("GLOBALS are locked -- " .. k ..
- " must be declared local or prefix with '_' for globals.", 2)
- else
- rawset(t, k, v)
- end
-end
-
-function unlock_new_index(t, k, v)
- rawset(t, k, v)
-end
-
--- return serialised version of printable table
-function Dump_Table(o)
- if type(o) == 'table' then
- local s = '{ '
- for k,v in pairs(o) do
- if type(k) ~= 'number' then k = '"'..k..'"' end
- s = s .. '['..k..'] = ' .. Dump_Table(v) .. ','
- end
- return s .. '} '
- else
- return tostring(o)
- end
-end
-
-
--- simulate C prinf function
-printf = function(s,...)
- io.write(s:format(...))
- io.write("\n")
- return
-end
-
--- lock global variable
-GLOBAL_lock(_G)
diff --git a/conf.d/project/lua.d/softmixer-01.lua b/conf.d/project/lua.d/softmixer-01.lua
deleted file mode 100644
index b11a252..0000000
--- a/conf.d/project/lua.d/softmixer-01.lua
+++ /dev/null
@@ -1,192 +0,0 @@
---[[
- Copyright (C) 2016 "IoT.bzh"
- Author Fulup Ar Foll <fulup@iot.bzh>
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-
- NOTE: strict mode: every global variables should be prefixed by '_'
---]]
-
--- 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))
-
-end
-
-
--- Display receive arguments and echo them to caller
-function _mixer_config_ (source, args)
- local error
-
- local sndcard_0 = {
- ["uid"]= "YAMAHA-APU70",
- ["path"]= "/dev/snd/by-id/usb-YAMAHA_Corporation_YAMAHA_AP-U70_USB_Audio_00-00",
- ["sink"] = {
- [0]= {["uid"]= "front-right", ["port"]= 0},
- [1]= {["uid"]= "front-left", ["port"]= 1},
- }
- }
-
- local sndcard_1 = {
- ["uid"]= "Jabra-Solemate",
- ["path"]= "/dev/snd/by-id/usb-0b0e_Jabra_SOLEMATE_v1.34.0-00",
- ["sink"] = {
- [0]= {["uid"]= "front-right", ["port"]= 0},
- [1]= {["uid"]= "front-left", ["port"]= 1},
- }
- }
-
- local sndcard_2 = {
- ["uid"]= "Jabra-410",
- ["path"]= "/dev/snd/by-id/usb-0b0e_Jabra_SPEAK_410_USB_745C4B15BD11x010900-00",
- ["sink"] = {
- [0]= {["uid"]= "back-right", ["port"]= 0},
- [1]= {["uid"]= "back-left", ["port"]= 1},
- }
- }
-
- local snd-aloop = {
- ["uid"]= "Alsa-Loop",
- ["path"]= "/dev/snd/by-path/platform-snd_aloop.0",
- ["capture"] = 1,
- ["playback"]= 0,
- ["subdevs"] = {
- [0]= {["uid"]="musique" ["subdev"]= 0, ["numid"]= 51},
- [1]= {["uid"]="guidance" ["subdev"]= 1, ["numid"]= 57},
- [2]= {["uid"]="emergency" ["subdev"]= 2, ["numid"]= 63},
- [3]= {["uid"]="telephony" ["subdev"]= 3, ["numid"]= 69},
- [4]= {["uid"]="xxxx" ["subdev"]= 4, ["numid"]= 75},
- [5]= {["uid"]="yyyy" ["subdev"]= 5, ["numid"]= 81},
- [6]= {["uid"]="zzzz" ["subdev"]= 6, ["numid"]= 87},
- [7]= {["uid"]="yyyy" ["subdev"]= 7, ["numid"]= 93},
- }
- }
-
- local sndcards= {
- [0] = sndcard_0,
- [1] = sndcard_2,
- }
-
- local zone_front= {
- ["uid"] = "front-seat",
- ["type"] = "playback",
- ["mapping"] = {
- [0]= {["target"]="front-right",["channel"]=0},
- [1]= {["target"]="front-left" ,["channel"]=1},
- }
- }
-
- local zone_back= {
- ["uid"] = "back-seat",
- ["type"] = "playback",
- ["mapping"] = {
- [0]= {["target"]="back-right",["channel"]=0},
- [1]= {["target"]="back-left" ,["channel"]=1},
- }
- }
-
- local zone_all= {
- ["uid"] = "all-seat",
- ["type"] = "playback",
- ["mapping"] = {
- [0]= {["target"]="front-right",["channel"]=0},
- [1]= {["target"]="front-left" ,["channel"]=1},
- [3]= {["target"]="back-right" ,["channel"]=0},
- [4]= {["target"]="back-left" ,["channel"]=1},
- }
- }
-
- local zones = {
- [0] = zone-all,
- [1] = zone-front,
- [2] = zone-back,
- }
-
- local stream_music= {
- ["uid"] = "multimedia",
- ["zone"] = "zone-all",
- ["volume"]= 70,
- ["mute"] = false;
- }
-
- local stream_navigation= {
- ["uid"] = "navigation",
- ["zone"] = "zone-front",
- ["volume"]= 80,
- ["mute"] = false;
- }
-
- local stream_children= {
- ["uid"] = "children",
- ["zone"] = "zone-back",
- ["volume"]= 50,
- ["mute"] = false;
- }
-
- local streams = {
- [0] = stream_music,
- [1] = stream_navigation,
- [2] = stream_children,
- }
-
- local params = {
- ["rate"]= 48000,
- --["rate"]= 44100,
- ["channels"]= 2,
- }
-
-
-
- -- Call AlsaSoftRouter
-
- error= L2C:snd_cards (source, sndcards)
- if (error ~= 0) then
- AFB:error (source, "--InLua-- L2C:sndcards fail to attach sndcards=%s", Dump_Table(sndcards))
- --goto OnErrorExit
- else
- AFB:notice (source, "--InLua-- L2C:sndcards done response=%s", Dump_Table(response))
- end
-
- error= L2C:snd_zones (source, zones)
- if (error ~= 0) then
- AFB:error (source, "--InLua-- L2C:zones fail to attach sndcards=%s", Dump_Table(sndcards))
- --goto OnErrorExit
- else
- AFB:notice (source, "--InLua-- L2C:zones done response=%s", Dump_Table(response))
- end
-
-
- error= L2C:snd_stream (source, {["devin"]= devin, ["devout"]= devout, ["params"]= params})
-
- AFB:notice (source, "--InLua-- _mixer_config_ done")
-
- do return 0 end -- happy end (hoops: lua syntax) --
-
-::OnErrorExit::
- AFB:error (source, "--InLua-- snd_attach fail")
- return 1 end -- unhappy end --
-
--- Display receive arguments and echo them to caller
-function _init_softmixer_ (source, args)
-
- -- create event to push change audio roles to potential listeners
- _EventHandle=AFB:evtmake(source, "control")
-
- _mixer_config_ (source, args)
-
-end
diff --git a/conf.d/project/samples/softmixer-multi-01.lua b/conf.d/project/lua.d/softmixer-double.lua
index 1b8ba02..8f7a20a 100644
--- a/conf.d/project/samples/softmixer-multi-01.lua
+++ b/conf.d/project/lua.d/softmixer-double.lua
@@ -54,12 +54,12 @@ function _mixer_config_ (source, args)
}
}
- error,response= L2C:snd_loops (source, snd_aloop)
+ error,response= smix:snd_loops (source, snd_aloop)
if (error ~= 0) then
- AFB:error (source, "--InLua-- L2C:snd_loops fail to attach sndcards=%s", Dump_Table(aloop))
+ AFB:error (source, "--InLua-- smix:snd_loops fail to attach sndcards=%s", Dump_Table(aloop))
goto OnErrorExit
else
- AFB:notice (source, "--InLua-- L2C:snd_loops done response=%s\n", Dump_Table(response))
+ AFB:notice (source, "--InLua-- smix:snd_loops done response=%s\n", Dump_Table(response))
end
@@ -106,12 +106,12 @@ function _mixer_config_ (source, args)
sndcard_2,
}
- error,response= L2C:snd_cards (source, sndcards)
+ error,response= smix:snd_cards (source, sndcards)
if (error ~= 0) then
- AFB:error (source, "--InLua-- L2C:snd_cards fail to attach sndcards=%s", Dump_Table(sndcards))
+ AFB:error (source, "--InLua-- smix:snd_cards fail to attach sndcards=%s", Dump_Table(sndcards))
goto OnErrorExit
else
- AFB:notice (source, "--InLua-- L2C:snd_cards done response=%s\n", Dump_Table(response))
+ AFB:notice (source, "--InLua-- smix:snd_cards done response=%s\n", Dump_Table(response))
end
-- ============================= Zones ===================
@@ -151,12 +151,12 @@ function _mixer_config_ (source, args)
zone_back,
}
- error,response= L2C:snd_zones (source, multi_zones)
+ error,response= smix:snd_zones (source, multi_zones)
if (error ~= 0) then
- AFB:error (source, "--InLua-- L2C:snd_zones fail to attach sndcards=%s", Dump_Table(multi_zones))
+ AFB:error (source, "--InLua-- smix:snd_zones fail to attach sndcards=%s", Dump_Table(multi_zones))
goto OnErrorExit
else
- AFB:notice (source, "--InLua-- L2C:snd_zones done response=%s\n", Dump_Table(response))
+ AFB:notice (source, "--InLua-- smix:snd_zones done response=%s\n", Dump_Table(response))
end
-- =================== Audio Stream ============================
@@ -193,12 +193,12 @@ function _mixer_config_ (source, args)
stream_children,
}
- error,response= L2C:snd_streams (source, snd_streams)
+ error,response= smix:snd_streams (source, snd_streams)
if (error ~= 0) then
- AFB:error (source, "--InLua-- L2C:snd_streams fail to attach sndcards=%s", Dump_Table(aloop))
+ AFB:error (source, "--InLua-- smix:snd_streams fail to attach sndcards=%s", Dump_Table(aloop))
goto OnErrorExit
else
- AFB:notice (source, "--InLua-- L2C:streams_loops done response=%s\n", Dump_Table(response))
+ AFB:notice (source, "--InLua-- smix:streams_loops done response=%s\n", Dump_Table(response))
end
diff --git a/conf.d/project/lua.d/softmixer-02.lua b/conf.d/project/lua.d/softmixer-simple.lua
index 5ea52de..9f00ce1 100644
--- a/conf.d/project/lua.d/softmixer-02.lua
+++ b/conf.d/project/lua.d/softmixer-simple.lua
@@ -60,12 +60,12 @@ function _mixer_config_ (source, args)
}
}
- error,response= L2C:snd_loops (source, snd_aloop)
+ error,response= smix:snd_loops (source, snd_aloop)
if (error ~= 0) then
- AFB:error (source, "--InLua-- L2C:snd_loops fail to attach sndcards=%s", Dump_Table(aloop))
+ AFB:error (source, "--InLua-- smix:snd_loops fail to attach sndcards=%s", Dump_Table(aloop))
goto OnErrorExit
else
- AFB:notice (source, "--InLua-- L2C:snd_loops done response=%s\n", Dump_Table(response))
+ AFB:notice (source, "--InLua-- smix:snd_loops done response=%s\n", Dump_Table(response))
end
@@ -81,17 +81,27 @@ function _mixer_config_ (source, args)
}
}
+ local sndcard_1 = {
+ ["uid"]= "Jabra-Solemate",
+ ["devpath"]= "/dev/snd/by-id/usb-0b0e_Jabra_SOLEMATE_v1.34.0-00",
+ ["params"] = snd_params,
+ ["sink"] = {
+ [0]= {["uid"]= "front-right", ["port"]= 0},
+ [1]= {["uid"]= "front-left", ["port"]= 1},
+ }
+ }
+
-- group sound card as one multi channels card
local sndcards= {
- sndcard_0,
+ sndcard_1,
}
- error,response= L2C:snd_cards (source, sndcards)
+ error,response= smix:snd_cards (source, sndcards)
if (error ~= 0) then
- AFB:error (source, "--InLua-- L2C:snd_cards fail to attach sndcards=%s", Dump_Table(sndcards))
+ AFB:error (source, "--InLua-- smix:snd_cards fail to attach sndcards=%s", Dump_Table(sndcards))
goto OnErrorExit
else
- AFB:notice (source, "--InLua-- L2C:snd_cards done response=%s\n", Dump_Table(response))
+ AFB:notice (source, "--InLua-- smix:snd_cards done response=%s\n", Dump_Table(response))
end
-- ============================= Zones ===================
@@ -109,12 +119,12 @@ function _mixer_config_ (source, args)
zone_front,
}
- error,response= L2C:snd_zones (source, multi_zones)
+ error,response= smix:snd_zones (source, multi_zones)
if (error ~= 0) then
- AFB:error (source, "--InLua-- L2C:snd_zones fail to attach sndcards=%s", Dump_Table(multi_zones))
+ AFB:error (source, "--InLua-- smix:snd_zones fail to attach sndcards=%s", Dump_Table(multi_zones))
goto OnErrorExit
else
- AFB:notice (source, "--InLua-- L2C:snd_zones done response=%s\n", Dump_Table(response))
+ AFB:notice (source, "--InLua-- smix:snd_zones done response=%s\n", Dump_Table(response))
end
-- =================== Audio Stream ============================
@@ -138,12 +148,12 @@ function _mixer_config_ (source, args)
stream_navigation,
}
- error,response= L2C:snd_streams (source, snd_streams)
+ error,response= smix:snd_streams (source, snd_streams)
if (error ~= 0) then
- AFB:error (source, "--InLua-- L2C:snd_streams fail to attach sndcards=%s", Dump_Table(aloop))
+ AFB:error (source, "--InLua-- smix:snd_streams fail to attach sndcards=%s", Dump_Table(aloop))
goto OnErrorExit
else
- AFB:notice (source, "--InLua-- L2C:streams_loops done response=%s\n", Dump_Table(response))
+ AFB:notice (source, "--InLua-- smix:streams_loops done response=%s\n", Dump_Table(response))
end
@@ -159,10 +169,13 @@ end
-- Display receive arguments and echo them to caller
function _init_softmixer_ (source, args)
-
+
+ printf ("*********** in print ")
-- create event to push change audio roles to potential listeners
_EventHandle=AFB:evtmake(source, "control")
_mixer_config_ (source, args)
end
+
+printf ("*********** load done ")
diff --git a/mixer-binding/mixer-binding.h b/mixer-binding/mixer-binding.h
index 57d4ce9..b60ccee 100644
--- a/mixer-binding/mixer-binding.h
+++ b/mixer-binding/mixer-binding.h
@@ -27,4 +27,11 @@
#include <ctl-config.h>
+#ifndef PUBLIC
+#define PUBLIC
+#endif
+#ifndef STATIC
+#define STATIC static
+#endif
+
#endif /* _CTL_BINDING_INCLUDE_ */
diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml
index 556d5fb..7ec1f1f 100644
--- a/nbproject/configurations.xml
+++ b/nbproject/configurations.xml
@@ -3,6 +3,8 @@
<logicalFolder name="root" displayName="root" projectFiles="true" kind="ROOT">
<df root="." name="0">
<df name="app-afb-helpers-submodule">
+ <in>curl-wrap.c</in>
+ <in>escape.c</in>
<in>filescan-utils.c</in>
<in>wrap-json.c</in>
</df>
@@ -23,9 +25,17 @@
</df>
<df name="plugins">
<df name="alsa">
+ <in>alsa-api-sndcards.c</in>
+ <in>alsa-api-sndloops.c</in>
+ <in>alsa-api-sndstreams.c</in>
+ <in>alsa-api-sndzones.c</in>
<in>alsa-capture.c</in>
<in>alsa-core-ctl.c</in>
<in>alsa-core-pcm.c</in>
+ <in>alsa-plug-dmix.c</in>
+ <in>alsa-plug-multi.c</in>
+ <in>alsa-plug-rate.c</in>
+ <in>alsa-plug-route.c</in>
<in>alsa-plug-stream.c</in>
<in>alsa-softmixer.c</in>
<in>alsa-utils-bypath.c</in>
@@ -76,6 +86,53 @@
<preBuildFirst>true</preBuildFirst>
</preBuild>
</makefileType>
+ <item path="app-afb-helpers-submodule/curl-wrap.c"
+ ex="false"
+ tool="0"
+ flavor2="2">
+ <cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/json-c</pElem>
+ <pElem>../../../opt/include</pElem>
+ <pElem>/usr/include/p11-kit-1</pElem>
+ <pElem>/usr/include/uuid</pElem>
+ <pElem>../../../opt/include/alsa</pElem>
+ <pElem>/usr/include/lua5.3</pElem>
+ <pElem>app-afb-helpers-submodule</pElem>
+ <pElem>build/app-afb-helpers-submodule</pElem>
+ </incDir>
+ <preprocessorList>
+ <Elem>AFB_BINDING_VERSION=dyn</Elem>
+ <Elem>CONTROL_CONFIG_PATH="/home/fulup/opt/4a-softmixer/etc:/home/fulup/Workspace/Audio-4a/4a-softmixer/build/package/etc"</Elem>
+ <Elem>CONTROL_LUA_PATH="/home/fulup/Workspace/Audio-4a/4a-softmixer/conf.d/project/lua.d:/home/fulup/opt/4a-softmixer/data"</Elem>
+ <Elem>CONTROL_PLUGIN_PATH="/home/fulup/opt/4a-softmixer/lib/plugins:/home/fulup/Workspace/Audio-4a/4a-softmixer/build/package/lib/plugins"</Elem>
+ <Elem>CTL_PLUGIN_MAGIC=987456123</Elem>
+ <Elem>USE_API_DYN=1</Elem>
+ </preprocessorList>
+ </cTool>
+ </item>
+ <item path="app-afb-helpers-submodule/escape.c" ex="false" tool="0" flavor2="2">
+ <cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/json-c</pElem>
+ <pElem>../../../opt/include</pElem>
+ <pElem>/usr/include/p11-kit-1</pElem>
+ <pElem>/usr/include/uuid</pElem>
+ <pElem>../../../opt/include/alsa</pElem>
+ <pElem>/usr/include/lua5.3</pElem>
+ <pElem>app-afb-helpers-submodule</pElem>
+ <pElem>build/app-afb-helpers-submodule</pElem>
+ </incDir>
+ <preprocessorList>
+ <Elem>AFB_BINDING_VERSION=dyn</Elem>
+ <Elem>CONTROL_CONFIG_PATH="/home/fulup/opt/4a-softmixer/etc:/home/fulup/Workspace/Audio-4a/4a-softmixer/build/package/etc"</Elem>
+ <Elem>CONTROL_LUA_PATH="/home/fulup/Workspace/Audio-4a/4a-softmixer/conf.d/project/lua.d:/home/fulup/opt/4a-softmixer/data"</Elem>
+ <Elem>CONTROL_PLUGIN_PATH="/home/fulup/opt/4a-softmixer/lib/plugins:/home/fulup/Workspace/Audio-4a/4a-softmixer/build/package/lib/plugins"</Elem>
+ <Elem>CTL_PLUGIN_MAGIC=987456123</Elem>
+ <Elem>USE_API_DYN=1</Elem>
+ </preprocessorList>
+ </cTool>
+ </item>
<item path="app-afb-helpers-submodule/filescan-utils.c"
ex="false"
tool="0"
@@ -128,6 +185,17 @@
<cTool flags="1">
</cTool>
</item>
+ <item path="app-controller-submodule/ctl-lib/ctl-lua-utils.c"
+ ex="false"
+ tool="0"
+ flavor2="3">
+ <cTool flags="1">
+ <incDir>
+ <pElem>app-controller-submodule/ctl-lib</pElem>
+ <pElem>build/app-controller-submodule/ctl-lib</pElem>
+ </incDir>
+ </cTool>
+ </item>
<item path="app-controller-submodule/ctl-lib/ctl-lua.c"
ex="false"
tool="0"
@@ -165,6 +233,15 @@
<pElem>../../../opt/include</pElem>
<pElem>build/app-controller-submodule/ctl-lib</pElem>
</incDir>
+ <preprocessorList>
+ <Elem>AFB_BINDING_VERSION=dyn</Elem>
+ <Elem>CONTROL_CONFIG_PATH="/home/fulup/opt/4a-softmixer/etc:/home/fulup/Workspace/Audio-4a/4a-softmixer/build/package/etc"</Elem>
+ <Elem>CONTROL_LUA_PATH="/home/fulup/Workspace/Audio-4a/4a-softmixer/conf.d/project/lua.d:/home/fulup/opt/4a-softmixer/data"</Elem>
+ <Elem>CONTROL_PLUGIN_PATH="/home/fulup/opt/4a-softmixer/lib/plugins:/home/fulup/Workspace/Audio-4a/4a-softmixer/build/package/lib/plugins"</Elem>
+ <Elem>CONTROL_SUPPORT_LUA</Elem>
+ <Elem>CTL_PLUGIN_MAGIC=987456123</Elem>
+ <Elem>USE_API_DYN=1</Elem>
+ </preprocessorList>
</cTool>
</folder>
<folder path="0/mixer-binding">
@@ -198,10 +275,9 @@
<preprocessorList>
<Elem>AFB_BINDING_VERSION=dyn</Elem>
<Elem>CONTROL_CONFIG_PATH="/home/fulup/opt/4a-softmixer/etc:/home/fulup/Workspace/Audio-4a/4a-softmixer/build/package/etc"</Elem>
- <Elem>CONTROL_LUA_PATH="/home/fulup/opt/4a-softmixer/data:/home/fulup/Workspace/Audio-4a/4a-softmixer/conf.d/project/lua.d"</Elem>
+ <Elem>CONTROL_LUA_PATH="/home/fulup/Workspace/Audio-4a/4a-softmixer/conf.d/project/lua.d:/home/fulup/opt/4a-softmixer/data"</Elem>
<Elem>CONTROL_PLUGIN_PATH="/home/fulup/opt/4a-softmixer/lib/plugins:/home/fulup/Workspace/Audio-4a/4a-softmixer/build/package/lib/plugins"</Elem>
<Elem>CTL_PLUGIN_MAGIC=987456123</Elem>
- <Elem>NATIVE_LINUX</Elem>
<Elem>USE_API_DYN=1</Elem>
<Elem>alsa_router_EXPORTS</Elem>
</preprocessorList>
@@ -211,32 +287,110 @@
<cTool flags="1">
</cTool>
</item>
+ <item path="plugins/alsa/alsa-api-sndcards.c" ex="false" tool="0" flavor2="2">
+ <cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
+ </cTool>
+ </item>
+ <item path="plugins/alsa/alsa-api-sndloops.c" ex="false" tool="0" flavor2="2">
+ <cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
+ </cTool>
+ </item>
+ <item path="plugins/alsa/alsa-api-sndstreams.c" ex="false" tool="0" flavor2="2">
+ <cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
+ </cTool>
+ </item>
+ <item path="plugins/alsa/alsa-api-sndzones.c" ex="false" tool="0" flavor2="2">
+ <cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
+ </cTool>
+ </item>
<item path="plugins/alsa/alsa-capture.c" ex="false" tool="0" flavor2="2">
<cTool flags="0">
+ <preprocessorList>
+ <Elem>CONTROL_LUA_PATH="/home/fulup/opt/4a-softmixer/data:/home/fulup/Workspace/Audio-4a/4a-softmixer/conf.d/project/lua.d"</Elem>
+ <Elem>NATIVE_LINUX</Elem>
+ </preprocessorList>
</cTool>
</item>
<item path="plugins/alsa/alsa-core-ctl.c" ex="false" tool="0" flavor2="2">
<cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
</cTool>
</item>
<item path="plugins/alsa/alsa-core-pcm.c" ex="false" tool="0" flavor2="2">
<cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
+ </cTool>
+ </item>
+ <item path="plugins/alsa/alsa-plug-dmix.c" ex="false" tool="0" flavor2="2">
+ <cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
+ </cTool>
+ </item>
+ <item path="plugins/alsa/alsa-plug-multi.c" ex="false" tool="0" flavor2="2">
+ <cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
+ </cTool>
+ </item>
+ <item path="plugins/alsa/alsa-plug-rate.c" ex="false" tool="0" flavor2="2">
+ <cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
+ </cTool>
+ </item>
+ <item path="plugins/alsa/alsa-plug-route.c" ex="false" tool="0" flavor2="2">
+ <cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
</cTool>
</item>
<item path="plugins/alsa/alsa-plug-stream.c" ex="false" tool="0" flavor2="2">
<cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
</cTool>
</item>
<item path="plugins/alsa/alsa-softmixer.c" ex="false" tool="0" flavor2="2">
<cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
</cTool>
</item>
<item path="plugins/alsa/alsa-utils-bypath.c" ex="false" tool="0" flavor2="2">
<cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
</cTool>
</item>
<item path="plugins/alsa/alsa-utils-dump.c" ex="false" tool="0" flavor2="2">
<cTool flags="0">
+ <incDir>
+ <pElem>/usr/include/lua5.3</pElem>
+ </incDir>
</cTool>
</item>
</conf>
diff --git a/plugins/alsa/alsa-api-sndloops.c b/plugins/alsa/alsa-api-sndloops.c
index be12c11..cf7bf55 100644
--- a/plugins/alsa/alsa-api-sndloops.c
+++ b/plugins/alsa/alsa-api-sndloops.c
@@ -139,6 +139,7 @@ OnErrorExit:
CTLP_LUA2C(snd_loops, source, argsJ, responseJ) {
int error;
AlsaSndLoopT *sndLoop = calloc(1, sizeof (AlsaSndLoopT));
+
if (json_object_get_type(argsJ) != json_type_object) {
AFB_ApiError(source->api, "L2C:sndloops: invalid object type= %s", json_object_get_string(argsJ));
diff --git a/plugins/alsa/alsa-plug-vol.c b/plugins/alsa/alsa-plug-vol.c
deleted file mode 100644
index 42d1e0b..0000000
--- a/plugins/alsa/alsa-plug-vol.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2018 "IoT.bzh"
- * Author Fulup Ar Foll <fulup@iot.bzh>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#define _GNU_SOURCE // needed for vasprintf
-
-#include "alsa-softmixer.h"
-
-ALSA_PLUG_PROTO(softvol);
-
-PUBLIC AlsaPcmInfoT* AlsaCreateVol(CtlSourceT *source, const char *pcmName, AlsaPcmInfoT* ctlTarget, AlsaPcmInfoT* pcmSlave) {
-
- snd_config_t *volConfig, *elemConfig, *slaveConfig, *controlConfig,*pcmConfig;
- int error = 0;
- AlsaPcmInfoT *pcmPlug= malloc(sizeof(AlsaPcmInfoT));
- pcmPlug->devid= pcmName;
-
- // refresh global alsalib config and create PCM top config
- snd_config_update();
- error += snd_config_top(&volConfig);
- error += snd_config_set_id (volConfig, pcmPlug->devid);
- error += snd_config_imake_string(&elemConfig, "type", "softvol");
- error += snd_config_add(volConfig, elemConfig);
- if (error) goto OnErrorExit;
-
- // add slave leaf
- error += snd_config_make_compound(&slaveConfig, "slave", 0);
- error += snd_config_imake_string(&elemConfig, "pcm", pcmSlave->devid);
- error += snd_config_add(slaveConfig, elemConfig);
- error += snd_config_add(volConfig, slaveConfig);
- if (error) goto OnErrorExit;
-
- // add control leaf
- error += snd_config_make_compound(&controlConfig, "control", 0);
- error += snd_config_imake_string(&elemConfig, "name", pcmName);
- error += snd_config_add(controlConfig, elemConfig);
- error += snd_config_imake_integer(&elemConfig, "card", ctlTarget->cardid);
- error += snd_config_add(controlConfig, elemConfig);
- error += snd_config_add(volConfig, controlConfig);
- if (error) goto OnErrorExit;
-
- // update top config to access previous plugin PCM
- snd_config_update();
-
- error = _snd_pcm_softvol_open(&pcmPlug->handle, pcmName, snd_config, volConfig, SND_PCM_STREAM_PLAYBACK , SND_PCM_NONBLOCK);
- if (error) {
- AFB_ApiError(source->api, "AlsaCreateVol: fail to create Plug=%s Slave=%s", pcmPlug->devid, pcmSlave->devid);
- goto OnErrorExit;
- }
-
- error += snd_config_search(snd_config, "pcm", &pcmConfig);
- error += snd_config_add(pcmConfig, volConfig);
- if (!error) {
- AFB_ApiError(source->api, "AlsaCreateDmix: fail to add configDMIX=%s", pcmPlug->devid);
- goto OnErrorExit;
- }
-
- // Debug config & pcm
- AlsaDumpCtlConfig (source, volConfig, 1);
- //AlsaDumpPcmInfo(source, pcmPlug->handle, "pcmPlug->handle");
- AFB_ApiNotice(source->api, "AlsaCreateVol: %s done", pcmPlug->devid);
- return pcmPlug;
-
-OnErrorExit:
- AFB_ApiNotice(source->api, "AlsaCreateVol: OnErrorExit");
- AlsaDumpCtlConfig(source, volConfig, 1);
- return NULL;
-} \ No newline at end of file
diff --git a/plugins/alsa/alsa-softmixer.c b/plugins/alsa/alsa-softmixer.c
index 23a01dd..033e87b 100644
--- a/plugins/alsa/alsa-softmixer.c
+++ b/plugins/alsa/alsa-softmixer.c
@@ -22,7 +22,7 @@
// Force Lua2cWrapper inclusion within already existing plugin
-CTLP_LUA_REGISTER("alsa-mixer")
+CTLP_LUA_REGISTER("alsa-softmixer")
SoftMixerHandleT *Softmixer;
diff --git a/plugins/alsa/alsa-softmixer.h b/plugins/alsa/alsa-softmixer.h
index 3018402..c5f6305 100644
--- a/plugins/alsa/alsa-softmixer.h
+++ b/plugins/alsa/alsa-softmixer.h
@@ -32,6 +32,13 @@
#include <alsa/asoundlib.h>
+#ifndef PUBLIC
+#define PUBLIC
+#endif
+#ifndef STATIC
+#define STATIC static
+#endif
+
#define MAINLOOP_WATCHDOG 30000
#define MAX_AUDIO_STREAMS 8*2
#define ALSA_DEFAULT_PCM_RATE 48000
@@ -43,7 +50,12 @@
#define ALSA_PLUG_PROTO(plugin) \
int _snd_pcm_ ## plugin ## _open(snd_pcm_t **pcmp, const char *name, snd_config_t *root, snd_config_t *conf, snd_pcm_stream_t stream, int mode)
-
+#ifndef PUBLIC
+#define PUBLIC
+#endif
+#ifndef STATIC
+#define STATIC static
+#endif
// alsa-utils-bypath.c