summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorKazumasa Mitsunari <kazumasa_mitsunari_za@mail.toyota.co.jp>2017-08-29 20:58:47 +0900
committerKazumasa Mitsunari <kazumasa_mitsunari_za@mail.toyota.co.jp>2017-08-29 20:58:47 +0900
commit2e602801b372b0b68111316b89f567213e3ea378 (patch)
treec7d53d765baba6d1cf2435eb51d913fd6abe6c11 /include
parentf743c3428f41b8d127e538ea8a6505a0c882cdb2 (diff)
Add sound manager initial source code
First version 2017/08/29 SoundManager consists of main 4 parts 1. doc Document of sound manager and audio manager architecture This describes application sequence Please open ApplicationGuide.md with browser 2. include Contains API of libsoundmanager LibSoundmanager API is going to be modified, so please don't use for now Update will be done in near future 3. soundmanager_binding Contains soundmanager binding. This is the service midleware If installing this, soundmanager is automatically launched by AppFW(systemd) 4. sample Contains sample applications. These applications follow the AudioManager sequence and using soundmanager binding Change-Id: I75b6c5c652e1dc00b39bc499a2ee6bf1e2aeaf6d Signed-off-by: Kazumasa Mitsunari <kazumasa_mitsunari_za@mail.toyota.co.jp>
Diffstat (limited to 'include')
-rw-r--r--include/CMakeLists.txt18
-rw-r--r--include/libsoundmanager/libsoundmanager.hpp108
2 files changed, 126 insertions, 0 deletions
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
new file mode 100644
index 0000000..fe9a09c
--- /dev/null
+++ b/include/CMakeLists.txt
@@ -0,0 +1,18 @@
+#
+# Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+#
+# 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.
+#
+
+
+INSTALL(DIRECTORY libsoundmanager DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) \ No newline at end of file
diff --git a/include/libsoundmanager/libsoundmanager.hpp b/include/libsoundmanager/libsoundmanager.hpp
new file mode 100644
index 0000000..90ac572
--- /dev/null
+++ b/include/libsoundmanager/libsoundmanager.hpp
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ *
+ * 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.
+ */
+
+#ifndef LIBSOUNDMANAGER_H
+#define LIBSOUNDMANAGER_H
+#include <audiomanagertypes.h>
+#include <vector>
+#include <map>
+#include <string>
+#include <json-c/json.h>
+#include <systemd/sd-event.h>
+extern "C"
+{
+#include <afb/afb-binding.h>
+#include <afb/afb-wsj1.h>
+#include <afb/afb-ws-client.h>
+}
+
+using namespace am;
+
+const std::vector<std::string> api_list{
+ std::string("connect"),
+ std::string("disconnect"),
+ std::string("setVolume"),
+ std::string("volumeStep"),
+ std::string("setSinkMuteState"),
+ std::string("getListMainConnections"),
+ std::string("ackConnect"),
+ std::string("ackDisconnect"),
+ std::string("ackSetSourceState"),
+ std::string("registerSource"),
+ std::string("registerDomain"),
+ std::string("deregisterSource"),
+ std::string("subscribe"),
+ std::string("unsubscribe")
+};
+
+const std::vector<std::string> event_list{
+ std::string("newMainConnection"),
+ std::string("volumeChanged"),
+ std::string("removedMainConnection"),
+ std::string("sinkMuteStateChanged"),
+ std::string("mainConnectionStateChanged"),
+ std::string("setRoutingReady"),
+ std::string("setRoutingRundown"),
+ std::string("asyncConnect"),
+ std::string("asyncSetSourceState")
+};
+
+class LibSoundmanager
+{
+private:
+ LibSoundmanager() = delete;
+public:
+ LibSoundmanager(const int port, const std::string& token);
+ //LibSoundmanager(const std::string& uri);
+ ~LibSoundmanager();
+
+ /* Method */
+ void register_callback(
+ void (*event_cb)(const std::string& event, struct json_object* event_contents),
+ void (*reply_cb)(struct json_object* reply_contents),
+ void (*hangup_cb)(void) = nullptr);
+ int run_eventloop();
+ int call(const std::string& verb, struct json_object* arg);
+ int call(const char* verb, struct json_object* arg);
+ int subscribe(const std::string& event_name);
+ int unsubscribe(const std::string& event_name);
+ /*const struct afb_wsj1* get_websocket_handler();
+ const struct sd_event* get_sd_event();*/
+
+private:
+ int initialize_websocket();
+ void (*onEvent)(const std::string& event, struct json_object* event_contents);
+ void (*onReply)(struct json_object* reply);
+ void (*onHangup)(void);
+
+ struct afb_wsj1* sp_websock;
+ struct afb_wsj1_itf minterface;
+ sd_event* mploop;
+ std::string muri;
+ int mport = 12345;
+ std::string mtoken = "123456";
+
+ am_Error_e connect(const am_sourceID_t sourceID, const am_sinkID_t sinkID, am::am_mainConnectionID_t& mainConnectionID);
+ am_Error_e disconnect(const am_mainConnectionID_t mainConnectionID);
+
+public:
+ /* Don't use/ Internal only */
+ void on_hangup(void *closure, struct afb_wsj1 *wsj);
+ void on_call(void *closure, const char *api, const char *verb, struct afb_wsj1_msg *msg);
+ void on_event(void *closure, const char *event, struct afb_wsj1_msg *msg);
+ void on_reply(void *closure, struct afb_wsj1_msg *msg);
+};
+#endif /* LIBSOUNDMANAGER_H */