using namespace std;
static audio_in_h g_audio_in = NULL;
+static audio_io_state_e g_audio_io_state = AUDIO_IO_STATE_IDLE;
static sound_stream_info_h g_volume_stream = NULL;
static virtual_sound_stream_h g_virtual_sound_stream = NULL;
return;
}
+static void _audio_in_state_changed_cb(audio_in_h handle, audio_io_state_e previous, audio_io_state_e current, bool by_policy, void *user_data)
+{
+ if (handle == g_audio_in) {
+ g_audio_io_state = current;
+ }
+}
+
void dependency_default_audio_initialize(mas_proxy_interface interfaces)
{
const int rate = 16000;
return;
}
+ ret = audio_in_set_state_changed_cb(g_audio_in, _audio_in_state_changed_cb, NULL);
+ if (AUDIO_IO_ERROR_NONE != ret) {
+ LOGE("[Recorder ERROR] Fail to set state changed callback : %d", ret);
+ sound_manager_remove_device_connection_changed_cb(g_device_id);
+ sound_manager_destroy_stream_information(g_stream_info);
+ g_stream_info = NULL;
+ audio_in_destroy(g_audio_in);
+ g_audio_in = NULL;
+ return;
+ }
+
ret = audio_in_set_sound_stream_info(g_audio_in, g_stream_info);
if (AUDIO_IO_ERROR_NONE != ret) {
LOGE("[Recorder ERROR] Fail to set stream info : %d", ret);
sound_manager_remove_device_connection_changed_cb(g_device_id);
sound_manager_destroy_stream_information(g_stream_info);
g_stream_info = NULL;
+ audio_in_unset_state_changed_cb(g_audio_in);
audio_in_destroy(g_audio_in);
g_audio_in = NULL;
return;
sound_manager_remove_device_connection_changed_cb(g_device_id);
sound_manager_destroy_stream_information(g_stream_info);
g_stream_info = NULL;
+ audio_in_unset_state_changed_cb(g_audio_in);
audio_in_destroy(g_audio_in);
g_audio_in = NULL;
return;
}
if (g_audio_in) {
+ ret = audio_in_unset_state_changed_cb(g_audio_in);
+ if (AUDIO_IO_ERROR_NONE != ret) {
+ LOGD("[Recorder ERROR] Fail to unset state changed callback : %d", ret);
+ }
+
ret = audio_in_destroy(g_audio_in);
if (AUDIO_IO_ERROR_NONE != ret) {
LOGD("[Recorder ERROR] Fail to destroy audio : %d", ret);
void dependency_default_audio_start_recording()
{
if (g_audio_in) {
- int ret = audio_in_resume(g_audio_in);
+ int ret = AUDIO_IO_ERROR_NONE;
+ if (AUDIO_IO_STATE_RUNNING != g_audio_io_state) {
+ ret = audio_in_resume(g_audio_in);
+ }
if (AUDIO_IO_ERROR_NONE != ret) {
LOGD("[Recorder ERROR] Fail to resume audio in : %d", ret);
}
g_recorder_thread.join();
}
if (g_audio_in) {
- int ret = audio_in_pause(g_audio_in);
+ int ret = AUDIO_IO_ERROR_NONE;
+ if (AUDIO_IO_STATE_RUNNING == g_audio_io_state) {
+ ret = audio_in_pause(g_audio_in);
+ }
if (AUDIO_IO_ERROR_NONE != ret) {
LOGD("[Recorder ERROR] Fail to pause audio in : %d", ret);
}
#include "wakeup_manager_main.h"
#include "wakeup_manager.h"
+#include <memory>
+
using namespace multiassistant::wakeup;
static wakeup_service_wakeup_event_cb g_wakeup_event_cb;
void on_value_changed() override;
};
-static CWakeupEventObserver g_wakeup_event_observer;
-static CSettingValueObserver g_setting_value_observer;
-static CWakeupManager g_wakeup_manager(&g_wakeup_event_observer, &g_setting_value_observer);
+static std::unique_ptr<CWakeupEventObserver> g_wakeup_event_observer;
+static std::unique_ptr<CSettingValueObserver> g_setting_value_observer;
+static std::unique_ptr<CWakeupManager> g_wakeup_manager;
int wakeup_manager_initialize(void)
{
MWR_LOGD("[ENTER]");
+ try {
+ g_wakeup_event_observer.reset(new CWakeupEventObserver);
+ g_setting_value_observer.reset(new CSettingValueObserver);
+ if (NULL == g_wakeup_event_observer || NULL == g_setting_value_observer) {
+ return -1;
+ }
+ g_wakeup_manager.reset(new CWakeupManager(g_wakeup_event_observer.get(), g_setting_value_observer.get()));
+ if (NULL == g_wakeup_manager) {
+ return -1;
+ }
+ } catch (const std::exception& e) {
+ MWR_LOGE("Exception caught : %s", e.what());
+ return -1;
+ }
+
g_wakeup_event_cb = NULL;
g_wakeup_event_user_data = NULL;
g_error_cb = NULL;
g_error_user_data = NULL;
- g_wakeup_manager.initialize();
+ g_wakeup_manager->initialize();
MWR_LOGD("[END]");
return 0;
{
MWR_LOGD("[ENTER]");
- g_wakeup_manager.deinitialize();
+ if (nullptr == g_wakeup_manager) return -1;
+
+ try {
+ g_wakeup_manager->deinitialize();
+ g_wakeup_manager.reset();
+
+ g_wakeup_event_observer.reset();
+ g_setting_value_observer.reset();
+ } catch (const std::exception& e) {
+ MWR_LOGE("Exception caught : %s", e.what());
+ return -1;
+ }
MWR_LOGD("[END]");
return 0;
MWR_LOGD("[ERROR] Parameter is invalid, settings(%p), struct_size(%p)", settings, struct_size);
return -1;
}
- CWakeupSettings* wakeup_settings = g_wakeup_manager.get_wakeup_settings();
+
+ if (nullptr == g_wakeup_manager) return -1;
+ CWakeupSettings* wakeup_settings = g_wakeup_manager->get_wakeup_settings();
if (wakeup_settings) {
const int PLUGIN_VERSION = 1;
static ma_plugin_settings current_settings;
MWR_LOGD("[ERROR] Parameter is invalid, appid(%s), wakeup_word(%s), language(%s)", appid, wakeup_word, language);
return -1;
}
- g_wakeup_manager.add_assistant_wakeup_word(
+
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->add_assistant_wakeup_word(
string{appid}, string{wakeup_word}, (language ? string{language} : string{}));
MWR_LOGD("[END]");
return -1;
}
- g_wakeup_manager.add_assistant_language(string{appid}, string{language});
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->add_assistant_language(string{appid}, string{language});
MWR_LOGD("[DEBUG] language(%s)", language);
return -1;
}
+ if (nullptr == g_wakeup_manager) return -1;
MWR_LOGD("[DEBUG] appid(%s), wakeup engine(%s)", appid, engine);
- g_wakeup_manager.set_assistant_wakeup_engine(string{appid}, string{engine});
+ g_wakeup_manager->set_assistant_wakeup_engine(string{appid}, string{engine});
MWR_LOGD("[END]");
return 0;
return -1;
}
+ if (nullptr == g_wakeup_manager) return -1;
MWR_LOGD("[DEBUG] default_assistant appid(%s)", appid);
- g_wakeup_manager.set_default_assistant(string{appid});
+ g_wakeup_manager->set_default_assistant(string{appid});
MWR_LOGD("[END]");
return 0;
int wakeup_manager_get_default_assistant(const char** appid)
{
static string default_assistant;
- default_assistant = g_wakeup_manager.get_default_assistant();
+
+ if (nullptr == g_wakeup_manager) return -1;
+ default_assistant = g_wakeup_manager->get_default_assistant();
if (default_assistant.empty()) {
*appid = nullptr;
return -1;
}
- g_wakeup_manager.set_language(string{language});
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->set_language(string{language});
MWR_LOGD("[END]");
return 0;
int wakeup_manager_change_state(wakeup_manager_state_e state)
{
- g_wakeup_manager.change_manager_state(state);
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->change_manager_state(state);
return 0;
}
{
MWR_LOGD("[ENTER]");
- g_wakeup_manager.activate();
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->activate();
MWR_LOGD("[END]");
return 0;
{
MWR_LOGD("[ENTER]");
- g_wakeup_manager.deactivate();
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->deactivate();
MWR_LOGD("[END]");
return 0;
appid_string = appid;
}
- g_wakeup_manager.update_voice_feedback_state(appid_string, state);
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->update_voice_feedback_state(appid_string, state);
MWR_LOGD("[END]");
return 0;
if (appid) appid_string = appid;
if (command) command_string = command;
- g_wakeup_manager.send_assistant_specific_command(appid_string, command_string);
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->send_assistant_specific_command(appid_string, command_string);
MWR_LOGD("[END]");
return 0;
appid_string = appid;
}
- g_wakeup_manager.set_background_volume(appid_string, ratio);
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->set_background_volume(appid_string, ratio);
MWR_LOGD("[END]");
return 0;
} else {
appid_string = appid;
}
- g_wakeup_manager.update_recognition_result(appid_string, result);
+
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->update_recognition_result(appid_string, result);
MWR_LOGD("[END]");
return 0;
{
MWR_LOGD("[ENTER]");
- g_wakeup_manager.process_event(static_cast<ma_plugin_event_e>(event), data, len);
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->process_event(static_cast<ma_plugin_event_e>(event), data, len);
MWR_LOGD("[END]");
return 0;
{
MWR_LOGD("[ENTER]");
- g_wakeup_manager.start_streaming_utterance_data();
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->start_streaming_utterance_data();
MWR_LOGD("[END]");
return 0;
{
MWR_LOGD("[ENTER]");
- g_wakeup_manager.stop_streaming_utterance_data();
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->stop_streaming_utterance_data();
MWR_LOGD("[END]");
return 0;
{
MWR_LOGD("[ENTER]");
- g_wakeup_manager.start_streaming_follow_up_data();
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->start_streaming_follow_up_data();
MWR_LOGD("[END]");
return 0;
{
MWR_LOGD("[ENTER]");
- g_wakeup_manager.stop_streaming_follow_up_data();
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->stop_streaming_follow_up_data();
MWR_LOGD("[END]");
return 0;
{
MWR_LOGD("[ENTER]");
- g_wakeup_manager.start_streaming_previous_utterance_data();
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->start_streaming_previous_utterance_data();
MWR_LOGD("[END]");
return 0;
{
MWR_LOGD("[ENTER]");
- g_wakeup_manager.stop_streaming_previous_utterance_data();
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->stop_streaming_previous_utterance_data();
MWR_LOGD("[END]");
return 0;
return -1;
}
- g_wakeup_manager.get_audio_format(rate, channel, audio_type);
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->get_audio_format(rate, channel, audio_type);
MWR_LOGD("[END] rate(%d), channel(%d), audio_type(%d)", *rate, *channel, *audio_type);
return 0;
return -1;
}
- g_wakeup_manager.get_audio_source_type(type);
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->get_audio_source_type(type);
MWR_LOGD("[END] type(%s)", *type);
return 0;
{
MWR_LOGD("[ENTER] : %d", require);
- g_wakeup_manager.set_wake_word_audio_require_flag(require);
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->set_wake_word_audio_require_flag(require);
MWR_LOGD("[END]");
return 0;
int wakeup_manager_feed_audio_data(wakeup_speech_streaming_event_e event, void* buffer, int len)
{
- g_wakeup_manager.feed_audio_data(event, buffer, len);
+ if (nullptr == g_wakeup_manager) return -1;
+ g_wakeup_manager->feed_audio_data(event, buffer, len);
return 0;
}
}
}
-static int init_wakeup(void)
+static int init_plugin(void)
{
- MAS_LOGD("[Enter] init_wakeup");
-
- int ret = mas_dbus_open_connection();
- if (0 != ret) {
- MAS_LOGE("[ERROR] Fail to open connection");
- }
-
if (0 != multi_assistant_service_plugin_initialize()) {
MAS_LOGE("Fail to ws intialize");
return -1;
return -1;
}
+ return 0;
+}
+
+static int deinit_plugin(void)
+{
+ if (0 != multi_assistant_service_plugin_deinitialize()) {
+ MAS_LOGE("Fail to deinitialize");
+ }
+}
+
+static int process_multi_assistant_activated_setting()
+{
if (0 == vconf_notify_key_changed(MULTI_ASSISTANT_SETTINGS_ACTIVATED, mas_active_state_changed_cb, NULL)) {
/* Activate / deactivate according to the vconf key setting */
mas_active_state_changed_cb(NULL, NULL);
}
#endif
}
+ return 0;
+}
+
+static int init_wakeup(void)
+{
+ MAS_LOGD("[Enter] init_wakeup");
+
+ int ret = mas_dbus_open_connection();
+ if (0 != ret) {
+ MAS_LOGE("[ERROR] Fail to open connection");
+ }
+
+ init_plugin();
+
+ process_multi_assistant_activated_setting();
mas_prelaunch_default_assistant();
g_current_lang = NULL;
}
*/
+ deinit_plugin();
vconf_ignore_key_changed(MULTI_ASSISTANT_SETTINGS_ACTIVATED, mas_active_state_changed_cb);
if (0 != ret) {
MAS_LOGE("[ERROR] Fail to close connection");
}
-
- if (0 != multi_assistant_service_plugin_deinitialize()) {
- MAS_LOGE("Fail to ws deinitialize");
- }
}
int mas_get_current_client_pid()
void service_app_control(app_control_h app_control, void *data)
{
// Todo: add your code here.
+ char *operation = NULL;
+ int ret = app_control_get_operation(app_control, &operation);
+ if (ret == APP_CONTROL_ERROR_NONE && operation) {
+ //strncmp(operation, APP_CONTROL_OPERATION_LAUNCH_ON_EVENT, strlen(operation)) == 0){
+ char* value = NULL;
+ app_control_get_extra_data(app_control, "event", &value);
+ LOGD("operation : %s , %s", operation, value);
+ if (value && 0 == strcmp(value, "reload")) {
+ deinit_plugin();
+ init_plugin();
+ process_multi_assistant_activated_setting();
+ }
+ }
return;
}