summaryrefslogtreecommitdiffstats
path: root/include/libsoundmanager.hpp
diff options
context:
space:
mode:
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>2017-10-02 16:22:02 +0900
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>2017-10-11 13:33:02 +0900
commitce253994af37137d4c29221e7914f437c3dcb510 (patch)
tree3beed005e974e45d008089ffe67c9793c8bb1ee4 /include/libsoundmanager.hpp
parente483fae4992307f34b6a9926bfba8b2e0568ebe3 (diff)
Add agl-service-soundmanager-2017
Add a new binding agl-service-soundmanager-2017. A image about this see JIRA SPEC-916 Packaging via cmake [PatchSet3] Pass to afb-binding version 2 Fix typo Fix libsoundmanager bug [PatchSet4] Modified commit message [PatchSet5] Re-add root CMakeLists.txt Prevent memory leak of json object Bug-AGL: SPEC-926 Change-Id: I24c0280210777778c379ac7027f3d71fa28d6d85 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
Diffstat (limited to 'include/libsoundmanager.hpp')
-rw-r--r--include/libsoundmanager.hpp95
1 files changed, 95 insertions, 0 deletions
diff --git a/include/libsoundmanager.hpp b/include/libsoundmanager.hpp
new file mode 100644
index 0000000..55e23df
--- /dev/null
+++ b/include/libsoundmanager.hpp
@@ -0,0 +1,95 @@
+/*
+ * 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 <vector>
+#include <map>
+#include <string>
+#include <functional>
+#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>
+}
+
+class LibSoundmanager
+{
+public:
+ LibSoundmanager();
+ ~LibSoundmanager();
+ LibSoundmanager(const LibSoundmanager &) = delete;
+ LibSoundmanager &operator=(const LibSoundmanager &) = delete;
+ int init(int port, const std::string& token);
+
+ using handler_asyncSetSourceState = std::function<void(int sourceID, int handle)>;
+
+ enum EventType_AsyncSetSourceState {
+ Event_AsyncSetSourceState_On = 1,
+ Event_AsyncSetSourceState_Off ,
+ Event_AsyncSetSourceState_Pause
+ };
+
+ /* Method */
+ int registerSource(const std::string& sourceName);
+ int connect(int sourceID, int sinkID);
+ int connect(int sourceID, const std::string& sinkName = "default");
+ int disconnect(int connectionID);
+ int ackSetSourceState(int handle, int error);
+
+ 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);
+ void set_event_handler(enum EventType_AsyncSetSourceState et, handler_asyncSetSourceState f);
+ 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);
+ void register_callback(
+ void (*reply_cb)(struct json_object* reply_contents),
+ void (*hangup_cb)(void) = nullptr);
+
+private:
+ int run_eventloop();
+ int init_event();
+ int initialize_websocket();
+ int dispatch_asyncSetSourceState(int sourceID, int handle, const std::string& sourceState);
+
+ 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;
+ int mport;
+ std::string mtoken;
+ std::vector<int> msourceIDs;
+ std::map<EventType_AsyncSetSourceState, std::function<void(int sourceID, int handle)>> handlers;
+
+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 */