summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2019-06-25 19:47:08 -0400
committerScott Murray <scott.murray@konsulko.com>2019-06-25 19:50:39 -0400
commit547cf7dbc1e38bda791bdab3a665ccfe6e26915f (patch)
tree534eaf69c93b36bab22e37d8b54acb7b4a6ea020
parente49a29beae53f89fc23760d7c4ccd3caeb9640af (diff)
Fixes to work with running as non-root and 4A removal
Added the missing new audio permission to the widget manifest, and reworked ringtone audio output to remove 4A support. Bug-AGL: SPEC-2558 Signed-off-by: Scott Murray <scott.murray@konsulko.com> Change-Id: I7ca5a438333bd046a1634a9056291bd7c215d4e6
-rw-r--r--app/app.pro2
-rw-r--r--app/fileplayer.cpp127
-rw-r--r--app/fileplayer.h14
-rw-r--r--app/main.cpp2
-rw-r--r--package/config.xml3
5 files changed, 6 insertions, 142 deletions
diff --git a/app/app.pro b/app/app.pro
index 2a6a48b..71cd509 100644
--- a/app/app.pro
+++ b/app/app.pro
@@ -5,7 +5,7 @@ SOURCES = main.cpp phone.cpp fileplayer.cpp
HEADERS = phone.h numbertype.h fileplayer.h
CONFIG += link_pkgconfig
-PKGCONFIG += libhomescreen qlibwindowmanager qtappfw libafbwsc gstreamer-1.0
+PKGCONFIG += libhomescreen qlibwindowmanager qtappfw gstreamer-1.0
RESOURCES += \
phone.qrc \
diff --git a/app/fileplayer.cpp b/app/fileplayer.cpp
index e26a3e6..85d2440 100644
--- a/app/fileplayer.cpp
+++ b/app/fileplayer.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 Konsulko Group
+ * Copyright (C) 2018,2019 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,105 +19,21 @@
#include <cstring>
#include <iostream>
#include <mutex>
-#include <condition_variable>
-#include <json-c/json.h>
#undef DEBUG
-struct set_role_data
-{
- bool state;
- std::string output;
- std::condition_variable cv;
-};
-
-static void on_hangup(void *closure, struct afb_wsj1 *wsj)
-{
-}
-
-static void on_call(void *closure, const char *api, const char *verb, struct afb_wsj1_msg *msg)
-{
-}
-
-static void on_event(void* closure, const char* event, struct afb_wsj1_msg *msg)
-{
-}
-
-static void on_reply(void *closure, struct afb_wsj1_msg *msg)
-{
- struct set_role_data *data = (struct set_role_data*) closure;
- struct json_object* reply;
-
- if(!(data && data->state))
- goto reply_done;
-
- // We opened the role, return the output
- reply = afb_wsj1_msg_object_j(msg);
- if(reply) {
-#ifdef DEBUG
- std::cerr << __FUNCTION__ << ": reply = " << \
- json_object_to_json_string_ext(reply, JSON_C_TO_STRING_SPACED | JSON_C_TO_STRING_PRETTY) << \
- std::endl;
-#endif
- struct json_object* response;
- int rc = json_object_object_get_ex(reply, "response", &response);
- if(rc) {
- struct json_object* val;
- rc = json_object_object_get_ex(response, "device_uri", &val);
- if (rc && json_object_get_string_len(val)) {
- const char* jres_pcm = json_object_get_string(val);
- data->output = jres_pcm;
-#ifdef DEBUG
- std::cerr << __FUNCTION__ << ": output = " << jres_pcm << std::endl;
-#endif
- }
- }
- }
-reply_done:
- // Signal reply is done
- data->cv.notify_one();
-}
-
-static void *afb_loop_thread(struct sd_event* loop)
-{
- for(;;)
- sd_event_run(loop, 30000000);
-}
-
static void *gst_loop_thread(GMainLoop *loop)
{
if(loop)
g_main_loop_run(loop);
}
-FilePlayer::FilePlayer(const int port, const std::string &token, const std::string &path, const std::string &role) :
+FilePlayer::FilePlayer(const std::string &path, const std::string &role) :
m_path(path),
m_role(role)
{
std::string uri;
- if(sd_event_new(&m_afb_loop) < 0) {
- std::cerr << __FUNCTION__ << ": Failed to create event loop" << std::endl;
- return;
- }
-
- // Initialize interface for websocket
- m_itf.on_hangup = on_hangup;
- m_itf.on_call = on_call;
- m_itf.on_event = on_event;
-
- uri = "ws://localhost:" + std::to_string(port) + "/api?token=" + token;
-#ifdef DEBUG
- std::cerr << "Using URI: " << uri << std::endl;
-#endif
- m_ws = afb_ws_client_connect_wsj1(m_afb_loop, uri.c_str(), &m_itf, NULL);
- if(m_ws) {
- m_afb_thread = std::thread(afb_loop_thread, m_afb_loop);
- } else {
- std::cerr << __FUNCTION__ << ": Failed to create websocket connection" << std::endl;
- goto error;
- }
-
// Initialize GStreamer
gst_init(NULL, NULL);
@@ -153,10 +69,6 @@ error:
g_main_loop_quit(m_gst_loop);
m_gst_loop = nullptr;
}
- if(m_afb_loop) {
- sd_event_unref(m_afb_loop);
- m_afb_loop = nullptr;
- }
return;
}
@@ -166,26 +78,16 @@ FilePlayer::~FilePlayer(void)
gst_object_unref(m_playbin);
gst_object_unref(m_alsa_sink);
gst_object_unref(m_bus);
- sd_event_unref(m_afb_loop);
}
void FilePlayer::play(bool loop)
{
- std::string output;
-
if(!m_valid || m_playing)
return;
- if(set_role_state(true, &output) != 0)
- return;
-
- if(output.empty())
- return;
-
m_playing = true;
m_looping = loop;
- g_object_set(m_alsa_sink, "device", output.c_str(), NULL);
g_object_set(m_playbin, "audio-sink", m_alsa_sink, NULL);
std::string uri = "file://" + m_path;
g_object_set(m_playbin, "uri", uri.c_str(), NULL);
@@ -213,29 +115,6 @@ gboolean FilePlayer::gstreamer_bus_callback(GstBus *bus, GstMessage *msg, gpoint
return static_cast<FilePlayer*>(data)->bus_callback(bus, msg);
}
-int FilePlayer::set_role_state(bool state, std::string *output)
-{
- if(!m_valid)
- return -1;
-
- set_role_data data;
- data.state = state;
- json_object *jsonData = json_object_new_object();
- json_object_object_add(jsonData, "action", json_object_new_string(state ? "open" : "close"));
- int rc = afb_wsj1_call_j(m_ws, "ahl-4a", m_role.c_str(), jsonData, on_reply, (void*) &data);
- if(rc >= 0) {
- // Wait for response
- std::mutex m;
- std::unique_lock<std::mutex> lk(m);
- data.cv.wait(lk);
- if(state && output)
- *output = data.output;
- } else {
- std::cerr << __FUNCTION__ << ": Failed to call ahl-4a/" << m_role.c_str() << std::endl;
- }
- return rc;
-}
-
gboolean FilePlayer::bus_callback(GstBus *bus, GstMessage *msg)
{
switch (GST_MESSAGE_TYPE(msg)) {
@@ -266,8 +145,6 @@ gboolean FilePlayer::bus_callback(GstBus *bus, GstMessage *msg)
std::cerr << __FUNCTION__ << ": GST_MESSAGE_STATE_CHANGE: " << (int) old_state << " to " << (int) new_state << std::endl;
#endif
if(old_state == GST_STATE_PLAYING && new_state == GST_STATE_PAUSED) {
- set_role_state(false);
-
// Seek back to beginning so any subsequent play starts there
if (!gst_element_seek(m_playbin,
1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
diff --git a/app/fileplayer.h b/app/fileplayer.h
index 5f52370..a580409 100644
--- a/app/fileplayer.h
+++ b/app/fileplayer.h
@@ -21,17 +21,10 @@
#include <thread>
#include <gst/gst.h>
-extern "C"
-{
-#include <afb/afb-wsj1.h>
-#include <afb/afb-ws-client.h>
-#include <systemd/sd-event.h>
-}
-
class FilePlayer
{
public:
- FilePlayer(int port, const std::string &token, const std::string &path, const std::string &role);
+ FilePlayer(const std::string &path, const std::string &role);
~FilePlayer();
void play(bool loop = false);
@@ -42,10 +35,6 @@ public:
private:
std::string m_path;
std::string m_role;
- struct afb_wsj1 *m_ws = nullptr;
- struct afb_wsj1_itf m_itf;
- std::thread m_afb_thread;
- sd_event *m_afb_loop = nullptr;
std::thread m_gst_thread;
GMainLoop *m_gst_loop = nullptr;
GstElement *m_playbin = nullptr;
@@ -55,7 +44,6 @@ private:
bool m_playing = false;
bool m_looping = false;
- int set_role_state(bool state, std::string *output = nullptr);
gboolean bus_callback(GstBus *bus, GstMessage *msg);
};
diff --git a/app/main.cpp b/app/main.cpp
index 95de315..6423844 100644
--- a/app/main.cpp
+++ b/app/main.cpp
@@ -66,7 +66,7 @@ int main(int argc, char *argv[])
context->setContextProperty("telephony", telephony);
std::string token = secret.toStdString();
std::string install_dir = getenv("AFM_APP_INSTALL_DIR");
- FilePlayer *player = new FilePlayer(port, token, install_dir + "/bin/Phone.wav", std::string("phone"));
+ FilePlayer *player = new FilePlayer(install_dir + "/bin/Phone.wav", std::string("phone"));
Phone *phone = new Phone(telephony, player);
context->setContextProperty("phone", phone);
QObject::connect(telephony, &Telephony::callStateChanged, phone, &Phone::onCallStateChanged);
diff --git a/package/config.xml b/package/config.xml
index cb3fa2a..a392f9c 100644
--- a/package/config.xml
+++ b/package/config.xml
@@ -11,13 +11,12 @@
<param name="homescreen" value="ws" />
<param name="telephony" value="ws" />
<param name="bluetooth-pbap" value="ws" />
- <param name="ahl-4a" value="ws" />
</feature>
<feature name="urn:AGL:widget:required-permission">
<param name="urn:AGL:permission::public:no-htdocs" value="required" />
<param name="http://tizen.org/privilege/internal/dbus" value="required" />
- <param name="urn:AGL:permission:audio:public:audiostream" value="required" />
<param name="urn:AGL:permission::public:display" value="required" />
+ <param name="urn:AGL:permission::public:audio" value="required" />
</feature>
</widget>