diff --git a/include/ctrlm_ipc_voice.h b/include/ctrlm_ipc_voice.h index d5a58bc..270b92d 100644 --- a/include/ctrlm_ipc_voice.h +++ b/include/ctrlm_ipc_voice.h @@ -304,11 +304,11 @@ typedef struct { // IARM Event JSON // This structure is used for the following calls: -// CTRLM_VOICE_IARM_EVENT_SESSION_BEGIN_JSON -// CTRLM_VOICE_IARM_EVENT_STREAM_BEGIN_JSON +// CTRLM_VOICE_IARM_EVENT_SESSION_BEGIN_JSON +// CTRLM_VOICE_IARM_EVENT_STREAM_BEGIN_JSON // CTRLM_VOICE_IARM_EVENT_SERVER_MESSAGE_JSON -// CTRLM_VOICE_IARM_EVENT_STREAM_END_JSON -// CTRLM_VOICE_IARM_EVENT_SESSION_END_JSON +// CTRLM_VOICE_IARM_EVENT_STREAM_END_JSON +// CTRLM_VOICE_IARM_EVENT_SESSION_END_JSON // // The payload MUST be a NULL terminated JSON String. typedef struct { diff --git a/src/ipc/ctrlm_ipc_iarm.cpp b/src/ipc/ctrlm_ipc_iarm.cpp index b8d1684..6d96019 100644 --- a/src/ipc/ctrlm_ipc_iarm.cpp +++ b/src/ipc/ctrlm_ipc_iarm.cpp @@ -35,44 +35,12 @@ bool ctrlm_ipc_iarm_t::register_iarm_call(const char *call, IARM_BusCall_t handl return(ret); } -bool ctrlm_ipc_iarm_t::broadcast_iarm_event(const char *bus_name, int event, json_t* event_data) const -{ - bool ret = false; - if(!event_data) { - return(ret); - } - - char *payload_str = json_dumps(event_data, JSON_COMPACT); - - if(payload_str != NULL) { - size_t str_size = strlen(payload_str) + 1; - size_t size = sizeof(ctrlm_main_iarm_event_json_t) + str_size; - - ctrlm_main_iarm_event_json_t *data = (ctrlm_main_iarm_event_json_t *)calloc(1, size); - if (data == NULL) { - XLOGD_ERROR("failed to allocate memory for the IARM event, so cannot broadcast...."); - } else { - - data->api_revision = CTRLM_MAIN_IARM_BUS_API_REVISION; - //Can't be replaced with safeC version of this, as safeC string functions doesn't allow string size more than 4K - snprintf(data->payload, str_size, "%s", payload_str); - - IARM_Result_t res = IARM_Bus_BroadcastEvent(bus_name, event, data, size); - if(res != IARM_RESULT_SUCCESS) { - XLOGD_ERROR("IARM Bus Error %d", res); - } else { - ret = true; - } - - free(data); - } - - free(payload_str); - } - - if(event_data) { - json_decref(event_data); +bool ctrlm_ipc_iarm_t::broadcast_iarm_event_legacy(const char *bus_name, int event, void *data, size_t data_size) const { + bool ret = true; + IARM_Result_t result = IARM_Bus_BroadcastEvent(bus_name, event, data, data_size); + if(IARM_RESULT_SUCCESS != result) { + XLOGD_ERROR("IARM Bus Error!"); + ret = false; } - return(ret); } diff --git a/src/ipc/ctrlm_ipc_iarm.h b/src/ipc/ctrlm_ipc_iarm.h index c966c08..7856818 100644 --- a/src/ipc/ctrlm_ipc_iarm.h +++ b/src/ipc/ctrlm_ipc_iarm.h @@ -39,7 +39,28 @@ class ctrlm_ipc_iarm_t { static void turn_off(std::atomic_bool &abool) { abool.store(false); } bool register_iarm_call(const char *call, IARM_BusCall_t handler) const; - bool broadcast_iarm_event(const char *bus_name, int event, json_t* event_data) const; + bool broadcast_iarm_event_legacy(const char *bus_name, int event, void *data, size_t data_size) const; + + template + bool broadcast_iarm_event(const char *bus_name, unsigned char api_revision, int event, const char *str) const { + bool ret = false; + size_t str_size = strlen(str) + 1; + size_t size = sizeof(T) + str_size; + T *data = (T *)calloc(1, size); + data->api_revision = api_revision; + if(!data) { + return(ret); + } else { + snprintf(data->payload, str_size, "%s", str); + if(IARM_Bus_BroadcastEvent(bus_name, event, data, size)) { + ret = true; + } + if(data) { + free(data); + } + } + return(ret); + } }; #endif diff --git a/src/ipc/ctrlm_rcp_ipc_event.cpp b/src/ipc/ctrlm_rcp_ipc_event.cpp index 0ce44ba..5c24208 100644 --- a/src/ipc/ctrlm_rcp_ipc_event.cpp +++ b/src/ipc/ctrlm_rcp_ipc_event.cpp @@ -135,9 +135,12 @@ void ctrlm_rcp_ipc_net_status_t::populate_status(const ctrlm_obj_network_t &netw } } -char *ctrlm_rcp_ipc_net_status_t::to_string() const +std::string ctrlm_base_event_json_t::to_string() const { - return json_dumps(to_json(), JSON_ENCODE_ANY); + char *json_str = json_dumps(to_json(), JSON_ENCODE_ANY); + std::string copy = json_str; + free(json_str); + return copy; } ctrlm_rcp_ipc_upgrade_status_t::~ctrlm_rcp_ipc_upgrade_status_t() @@ -170,11 +173,6 @@ json_t *ctrlm_rcp_ipc_upgrade_status_t::to_json() const return (err) ? NULL : status; } -char *ctrlm_rcp_ipc_upgrade_status_t::to_string() const -{ - return json_dumps(to_json(), JSON_ENCODE_ANY); -} - ctrlm_rcp_ipc_validation_status_t::~ctrlm_rcp_ipc_validation_status_t() { } @@ -216,8 +214,3 @@ json_t *ctrlm_rcp_ipc_validation_status_t::to_json() const return (err) ? NULL : status; } - -char *ctrlm_rcp_ipc_validation_status_t::to_string() const -{ - return json_dumps(to_json(), JSON_ENCODE_ANY); -} diff --git a/src/ipc/ctrlm_rcp_ipc_event.h b/src/ipc/ctrlm_rcp_ipc_event.h index ae257af..bf31a82 100644 --- a/src/ipc/ctrlm_rcp_ipc_event.h +++ b/src/ipc/ctrlm_rcp_ipc_event.h @@ -63,17 +63,18 @@ namespace rcp_net_status_json_keys constexpr char const* ERROR_STRING = "errorString"; } -class ctrlm_virtual_json_t +class ctrlm_base_event_json_t { public: - virtual ~ctrlm_virtual_json_t() {}; + virtual ~ctrlm_base_event_json_t() {}; virtual json_t *to_json() const = 0; + virtual std::string to_string() const; }; class ctrlm_obj_controller_t; class ctrlm_obj_network_t; -class ctrlm_rcp_ipc_controller_status_t : public ctrlm_virtual_json_t +class ctrlm_rcp_ipc_controller_status_t : public ctrlm_base_event_json_t { public: ctrlm_rcp_ipc_controller_status_t() = default; @@ -103,7 +104,7 @@ class ctrlm_rcp_ipc_controller_status_t : public ctrlm_virtual_json_t std::string upgrade_session_id_ = ""; }; -class ctrlm_rcp_ipc_net_status_t : public ctrlm_virtual_json_t +class ctrlm_rcp_ipc_net_status_t : public ctrlm_base_event_json_t { public: ctrlm_rcp_ipc_net_status_t() = default; @@ -111,7 +112,6 @@ class ctrlm_rcp_ipc_net_status_t : public ctrlm_virtual_json_t virtual json_t *to_json() const; - char *to_string() const; uint8_t get_api_revision() const { return api_revision_; } bool get_result() const { return (result_ == CTRLM_IARM_CALL_RESULT_SUCCESS) ? true : false; } void set_result(ctrlm_iarm_call_result_t result) { result_ = result; } @@ -131,14 +131,13 @@ class ctrlm_rcp_ipc_net_status_t : public ctrlm_virtual_json_t std::vector controller_status_list_; }; -class ctrlm_rcp_ipc_upgrade_status_t : public ctrlm_virtual_json_t +class ctrlm_rcp_ipc_upgrade_status_t : public ctrlm_base_event_json_t { public: ctrlm_rcp_ipc_upgrade_status_t() = default; ~ctrlm_rcp_ipc_upgrade_status_t(); virtual json_t *to_json() const; - char *to_string() const; bool get_result() const { return (result_ == CTRLM_IARM_CALL_RESULT_SUCCESS) ? true : false; } void set_result(ctrlm_iarm_call_result_t result) { result_ = result; } ctrlm_network_id_t get_net_id() const { return net_id_; } @@ -156,14 +155,13 @@ class ctrlm_rcp_ipc_upgrade_status_t : public ctrlm_virtual_json_t ctrlm_iarm_call_result_t result_ = CTRLM_IARM_CALL_RESULT_INVALID; }; -class ctrlm_rcp_ipc_validation_status_t : public ctrlm_virtual_json_t +class ctrlm_rcp_ipc_validation_status_t : public ctrlm_base_event_json_t { public: ctrlm_rcp_ipc_validation_status_t() = default; ~ctrlm_rcp_ipc_validation_status_t(); virtual json_t *to_json() const; - char *to_string() const; uint8_t get_api_revision() const { return api_revision_; } bool get_result() const { return (result_ == CTRLM_IARM_CALL_RESULT_SUCCESS) ? true : false; } void set_result(ctrlm_iarm_call_result_t result) { result_ = result; } diff --git a/src/ipc/ctrlm_rcp_ipc_iarm_thunder.cpp b/src/ipc/ctrlm_rcp_ipc_iarm_thunder.cpp index 02f4128..82a005b 100644 --- a/src/ipc/ctrlm_rcp_ipc_iarm_thunder.cpp +++ b/src/ipc/ctrlm_rcp_ipc_iarm_thunder.cpp @@ -114,18 +114,7 @@ bool ctrlm_rcp_ipc_iarm_thunder_t::on_status(const ctrlm_rcp_ipc_net_status_t &n return(false); } - json_t *ret = json_object(); - int err = 0; - - err |= json_object_set_new_nocheck(ret, STATUS, net_status.to_json()); - - if (err) { - XLOGD_ERROR("JSON object set error"); - json_decref(ret); - return(false); - } - - return broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_RCU_IARM_EVENT_RCU_STATUS, ret); + return broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_MAIN_IARM_BUS_API_REVISION, CTRLM_RCU_IARM_EVENT_RCU_STATUS, net_status.to_string().c_str()); } bool ctrlm_rcp_ipc_iarm_thunder_t::on_validation_status(const ctrlm_rcp_ipc_validation_status_t &validation_status) const @@ -140,18 +129,7 @@ bool ctrlm_rcp_ipc_iarm_thunder_t::on_validation_status(const ctrlm_rcp_ipc_vali return(false); } - json_t *ret = json_object(); - int err = 0; - - err |= json_object_set_new_nocheck(ret, STATUS, validation_status.to_json()); - - if (err) { - XLOGD_ERROR("JSON object set error"); - json_decref(ret); - return(false); - } - - return broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_RCU_IARM_EVENT_VALIDATION_STATUS, ret); + return broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_MAIN_IARM_BUS_API_REVISION, CTRLM_RCU_IARM_EVENT_VALIDATION_STATUS, validation_status.to_string().c_str()); } bool ctrlm_rcp_ipc_iarm_thunder_t::on_firmware_update_progress(const ctrlm_rcp_ipc_upgrade_status_t &upgrade_status) const @@ -177,7 +155,7 @@ bool ctrlm_rcp_ipc_iarm_thunder_t::on_firmware_update_progress(const ctrlm_rcp_i return(false); } - return broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_RCU_IARM_EVENT_FIRMWARE_UPDATE_PROGRESS, ret); + return broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_MAIN_IARM_BUS_API_REVISION, CTRLM_RCU_IARM_EVENT_FIRMWARE_UPDATE_PROGRESS, upgrade_status.to_string().c_str()); } bool ctrlm_rcp_ipc_iarm_thunder_t::on_validation(const ctrlm_rcp_ipc_validation_status_t &validation_status) const @@ -198,7 +176,7 @@ bool ctrlm_rcp_ipc_iarm_thunder_t::on_validation(const ctrlm_rcp_ipc_validation_ return(false); } - return broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_RCU_IARM_EVENT_VALIDATION_STATUS, ret); + return broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_MAIN_IARM_BUS_API_REVISION, CTRLM_RCU_IARM_EVENT_VALIDATION_STATUS, validation_status.to_string().c_str()); } IARM_Result_t ctrlm_rcp_ipc_iarm_thunder_t::start_pairing(void *arg) diff --git a/src/voice/ipc/ctrlm_voice_ipc.h b/src/voice/ipc/ctrlm_voice_ipc.h index 25197ff..969a838 100644 --- a/src/voice/ipc/ctrlm_voice_ipc.h +++ b/src/voice/ipc/ctrlm_voice_ipc.h @@ -22,6 +22,7 @@ #include "ctrlm.h" #include "ctrlm_voice_types.h" #include "ctrlm_ipc_voice.h" +#include "ctrlm_ipc_iarm.h" // Classes for eventing @@ -171,7 +172,7 @@ class ctrlm_voice_ipc_event_session_statistics_t { }; // End classes for eventing -class ctrlm_voice_ipc_t { +class ctrlm_voice_ipc_t : public ctrlm_ipc_iarm_t { public: ctrlm_voice_ipc_t(ctrlm_voice_t *obj_voice) { this->obj_voice = obj_voice; @@ -179,7 +180,6 @@ class ctrlm_voice_ipc_t { virtual ~ctrlm_voice_ipc_t() {}; // Interface - virtual bool register_ipc() const = 0; virtual bool session_begin(const ctrlm_voice_ipc_event_session_begin_t &session_begin) = 0; virtual bool stream_begin(const ctrlm_voice_ipc_event_stream_begin_t &stream_begin) = 0; virtual bool stream_end(const ctrlm_voice_ipc_event_stream_end_t &stream_end) = 0; @@ -187,7 +187,6 @@ class ctrlm_voice_ipc_t { virtual bool server_message(const char *message, unsigned long size) = 0; // Pass a pointer to the message to avoid copying possible large chunks of data virtual bool keyword_verification(const ctrlm_voice_ipc_event_keyword_verification_t &keyword_verification) = 0; virtual bool session_statistics(const ctrlm_voice_ipc_event_session_statistics_t &session_stats) = 0; - virtual void deregister_ipc() const = 0; // End Interface protected: diff --git a/src/voice/ipc/ctrlm_voice_ipc_iarm_legacy.cpp b/src/voice/ipc/ctrlm_voice_ipc_iarm_legacy.cpp index c07f22b..1121e79 100644 --- a/src/voice/ipc/ctrlm_voice_ipc_iarm_legacy.cpp +++ b/src/voice/ipc/ctrlm_voice_ipc_iarm_legacy.cpp @@ -23,7 +23,6 @@ #include "ctrlm_voice_obj.h" static IARM_Result_t update_settings(void *arg); -static bool broadcast_event(const char *bus_name, int event, void *data, size_t data_size); ctrlm_voice_ipc_iarm_legacy_t::ctrlm_voice_ipc_iarm_legacy_t(ctrlm_voice_t *obj_voice) : ctrlm_voice_ipc_t(obj_voice) { this->state = EVENT_ALL; @@ -68,7 +67,7 @@ bool ctrlm_voice_ipc_iarm_legacy_t::session_begin(const ctrlm_voice_ipc_event_se safec_rc = strcpy_s((char *)event.language, sizeof(event.language), session_begin.language.c_str()); ERR_CHK(safec_rc); event.is_voice_assistant = session_begin.common.voice_assistant ? 1 : 0; - ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_BEGIN, &event, sizeof(event)); + ret = broadcast_iarm_event_legacy(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_BEGIN, &event, sizeof(event)); } return(ret); } @@ -90,7 +89,7 @@ bool ctrlm_voice_ipc_iarm_legacy_t::stream_end(const ctrlm_voice_ipc_event_strea event.session_id = stream_end.common.session_id_ctrlm; event.reason = (ctrlm_voice_session_end_reason_t)stream_end.reason; event.is_voice_assistant = stream_end.common.voice_assistant ? 1 : 0; - ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_END, &event, sizeof(event)); + ret = broadcast_iarm_event_legacy(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_END, &event, sizeof(event)); } return(ret); } @@ -133,7 +132,7 @@ bool ctrlm_voice_ipc_iarm_legacy_t::session_end(const ctrlm_voice_ipc_event_sess event.curl_request_dns_time = session_end.server_stats->dns_time; event.curl_request_connect_time = session_end.server_stats->connect_time; } - ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_RESULT, &event, sizeof(event)); + ret = broadcast_iarm_event_legacy(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_RESULT, &event, sizeof(event)); break; } case SESSION_END_ABORT: { @@ -144,7 +143,7 @@ bool ctrlm_voice_ipc_iarm_legacy_t::session_end(const ctrlm_voice_ipc_event_sess event.controller_id = session_end.common.controller_id; event.session_id = session_end.common.session_id_ctrlm; event.reason = (ctrlm_voice_session_abort_reason_t)session_end.reason; - ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_ABORT, &event, sizeof(event)); + ret = broadcast_iarm_event_legacy(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_ABORT, &event, sizeof(event)); break; } case SESSION_END_SHORT_UTTERANCE: { @@ -156,7 +155,7 @@ bool ctrlm_voice_ipc_iarm_legacy_t::session_end(const ctrlm_voice_ipc_event_sess event.session_id = session_end.common.session_id_ctrlm; event.reason = (ctrlm_voice_session_end_reason_t)session_end.reason; event.return_code_internal = session_end.return_code_internal; - ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_SHORT, &event, sizeof(event)); + ret = broadcast_iarm_event_legacy(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_SHORT, &event, sizeof(event)); break; } } @@ -195,7 +194,7 @@ bool ctrlm_voice_ipc_iarm_legacy_t::session_statistics(const ctrlm_voice_ipc_eve event.session_id = session_stats.common.session_id_ctrlm; event.session = session_stats.session; event.reboot = session_stats.reboot; - return(broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_STATS, &event, sizeof(event))); + return(broadcast_iarm_event_legacy(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_STATS, &event, sizeof(event))); } void ctrlm_voice_ipc_iarm_legacy_t::deregister_ipc() const { @@ -229,14 +228,4 @@ IARM_Result_t update_settings(void *arg) { } return(IARM_RESULT_SUCCESS); -} - -bool broadcast_event(const char *bus_name, int event, void *data, size_t data_size) { - bool ret = true; - IARM_Result_t result = IARM_Bus_BroadcastEvent(bus_name, event, data, data_size); - if(IARM_RESULT_SUCCESS != result) { - XLOGD_ERROR("IARM Bus Error!"); - ret = false; - } - return(ret); -} +} \ No newline at end of file diff --git a/src/voice/ipc/ctrlm_voice_ipc_iarm_thunder.cpp b/src/voice/ipc/ctrlm_voice_ipc_iarm_thunder.cpp index 1dfa80b..ad9cc5d 100644 --- a/src/voice/ipc/ctrlm_voice_ipc_iarm_thunder.cpp +++ b/src/voice/ipc/ctrlm_voice_ipc_iarm_thunder.cpp @@ -83,7 +83,6 @@ #define JSON_SESSION_END_SERVER_STATS_DNS_TIME "dnsTime" #define JSON_SESSION_END_SERVER_STATS_CONNECT_TIME "connectTime" -static bool broadcast_event(const char *bus_name, int event, const char *str); static const char *voice_device_str(ctrlm_voice_device_t device); static const char *voice_device_status_str(uint8_t status); @@ -93,63 +92,31 @@ ctrlm_voice_ipc_iarm_thunder_t::ctrlm_voice_ipc_iarm_thunder_t(ctrlm_voice_t *ob bool ctrlm_voice_ipc_iarm_thunder_t::register_ipc() const { bool ret = true; - IARM_Result_t rc; XLOGD_INFO("Thunder"); // NOTE: The IARM events are registered in ctrlm_main.cpp - XLOGD_INFO("Registering for %s IARM call", CTRLM_VOICE_IARM_CALL_STATUS); - rc = IARM_Bus_RegisterCall(CTRLM_VOICE_IARM_CALL_STATUS, &ctrlm_voice_ipc_iarm_thunder_t::status); - if(rc != IARM_RESULT_SUCCESS) { - XLOGD_ERROR("Failed to register %d", rc); + if(!register_iarm_call(CTRLM_VOICE_IARM_CALL_STATUS, &ctrlm_voice_ipc_iarm_thunder_t::status)) { ret = false; } - - XLOGD_INFO("Registering for %s IARM call", CTRLM_VOICE_IARM_CALL_CONFIGURE_VOICE); - rc = IARM_Bus_RegisterCall(CTRLM_VOICE_IARM_CALL_CONFIGURE_VOICE, &ctrlm_voice_ipc_iarm_thunder_t::configure_voice); - if(rc != IARM_RESULT_SUCCESS) { - XLOGD_ERROR("Failed to register %d", rc); + if(!register_iarm_call(CTRLM_VOICE_IARM_CALL_CONFIGURE_VOICE, &ctrlm_voice_ipc_iarm_thunder_t::configure_voice)) { ret = false; } - - XLOGD_INFO("Registering for %s IARM call", CTRLM_VOICE_IARM_CALL_SET_VOICE_INIT); - rc = IARM_Bus_RegisterCall(CTRLM_VOICE_IARM_CALL_SET_VOICE_INIT, &ctrlm_voice_ipc_iarm_thunder_t::set_voice_init); - if(rc != IARM_RESULT_SUCCESS) { - XLOGD_ERROR("Failed to register %d", rc); + if(!register_iarm_call(CTRLM_VOICE_IARM_CALL_SET_VOICE_INIT, &ctrlm_voice_ipc_iarm_thunder_t::set_voice_init)) { ret = false; } - - XLOGD_INFO("Registering for %s IARM call", CTRLM_VOICE_IARM_CALL_SEND_VOICE_MESSAGE); - rc = IARM_Bus_RegisterCall(CTRLM_VOICE_IARM_CALL_SEND_VOICE_MESSAGE, &ctrlm_voice_ipc_iarm_thunder_t::send_voice_message); - if(rc != IARM_RESULT_SUCCESS) { - XLOGD_ERROR("Failed to register %d", rc); + if(!register_iarm_call(CTRLM_VOICE_IARM_CALL_SEND_VOICE_MESSAGE, &ctrlm_voice_ipc_iarm_thunder_t::send_voice_message)) { ret = false; } - - XLOGD_INFO("Registering for %s IARM call", CTRLM_VOICE_IARM_CALL_SESSION_TYPES); - rc = IARM_Bus_RegisterCall(CTRLM_VOICE_IARM_CALL_SESSION_TYPES, &ctrlm_voice_ipc_iarm_thunder_t::voice_session_types); - if(rc != IARM_RESULT_SUCCESS) { - XLOGD_ERROR("Failed to register %d", rc); + if(!register_iarm_call(CTRLM_VOICE_IARM_CALL_SESSION_TYPES, &ctrlm_voice_ipc_iarm_thunder_t::voice_session_types)) { ret = false; } - - XLOGD_INFO("Registering for %s IARM call", CTRLM_VOICE_IARM_CALL_SESSION_REQUEST); - rc = IARM_Bus_RegisterCall(CTRLM_VOICE_IARM_CALL_SESSION_REQUEST, &ctrlm_voice_ipc_iarm_thunder_t::voice_session_request); - if(rc != IARM_RESULT_SUCCESS) { - XLOGD_ERROR("Failed to register %d", rc); + if(!register_iarm_call(CTRLM_VOICE_IARM_CALL_SESSION_REQUEST, &ctrlm_voice_ipc_iarm_thunder_t::voice_session_request)) { ret = false; } - - XLOGD_INFO("Registering for %s IARM call", CTRLM_VOICE_IARM_CALL_SESSION_TERMINATE); - rc = IARM_Bus_RegisterCall(CTRLM_VOICE_IARM_CALL_SESSION_TERMINATE, &ctrlm_voice_ipc_iarm_thunder_t::voice_session_terminate); - if(rc != IARM_RESULT_SUCCESS) { - XLOGD_ERROR("Failed to register %d", rc); + if(!register_iarm_call(CTRLM_VOICE_IARM_CALL_SESSION_TERMINATE, &ctrlm_voice_ipc_iarm_thunder_t::voice_session_terminate)) { ret = false; } - - XLOGD_INFO("Registering for %s IARM call", CTRLM_VOICE_IARM_CALL_SESSION_AUDIO_STREAM_START); - rc = IARM_Bus_RegisterCall(CTRLM_VOICE_IARM_CALL_SESSION_AUDIO_STREAM_START, &ctrlm_voice_ipc_iarm_thunder_t::voice_session_audio_stream_start); - if(rc != IARM_RESULT_SUCCESS) { - XLOGD_ERROR("Failed to register %d", rc); + if(!register_iarm_call(CTRLM_VOICE_IARM_CALL_SESSION_AUDIO_STREAM_START, &ctrlm_voice_ipc_iarm_thunder_t::voice_session_audio_stream_start)) { ret = false; } @@ -175,7 +142,7 @@ bool ctrlm_voice_ipc_iarm_thunder_t::session_begin(const ctrlm_voice_ipc_event_s if(json_str) { //TODO: surface the event through IARM XLOGD_INFO("%s", json_str); - ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_JSON_SESSION_BEGIN, json_str); + ret = broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_BUS_API_REVISION, CTRLM_VOICE_IARM_EVENT_JSON_SESSION_BEGIN, json_str); free(json_str); } else { XLOGD_ERROR("Failed to encode JSON string"); @@ -204,7 +171,7 @@ bool ctrlm_voice_ipc_iarm_thunder_t::stream_begin(const ctrlm_voice_ipc_event_st if(json_str) { //TODO: surface the event through IARM XLOGD_INFO("%s", json_str); - ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_JSON_STREAM_BEGIN, json_str); + ret = broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_BUS_API_REVISION, CTRLM_VOICE_IARM_EVENT_JSON_STREAM_BEGIN, json_str); free(json_str); } else { XLOGD_ERROR("Failed to encode JSON string"); @@ -234,7 +201,7 @@ bool ctrlm_voice_ipc_iarm_thunder_t::stream_end(const ctrlm_voice_ipc_event_stre if(json_str) { //TODO: surface the event through IARM XLOGD_INFO("%s", json_str); - ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_JSON_STREAM_END, json_str); + ret = broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_BUS_API_REVISION, CTRLM_VOICE_IARM_EVENT_JSON_STREAM_END, json_str); free(json_str); } else { XLOGD_ERROR("Failed to encode JSON string"); @@ -358,7 +325,7 @@ bool ctrlm_voice_ipc_iarm_thunder_t::session_end(const ctrlm_voice_ipc_event_ses if(json_str) { //TODO: surface the event through IARM XLOGD_INFO("<%s>", this->obj_voice->voice_stb_data_pii_mask_get() ? "***" : json_str); - ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_JSON_SESSION_END, json_str); + ret = broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_BUS_API_REVISION, CTRLM_VOICE_IARM_EVENT_JSON_SESSION_END, json_str); free(json_str); } else { XLOGD_ERROR("Failed to encode JSON string"); @@ -374,7 +341,7 @@ bool ctrlm_voice_ipc_iarm_thunder_t::server_message(const char *message, unsigne bool ret = false; if(message) { XLOGD_INFO("%ul : <%s>", size, this->obj_voice->voice_stb_data_pii_mask_get() ? "***" : message); //CID -160950 - Printargs - ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_JSON_SERVER_MESSAGE, message); + ret = broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_BUS_API_REVISION, CTRLM_VOICE_IARM_EVENT_JSON_SERVER_MESSAGE, message); } return(ret); } @@ -397,7 +364,7 @@ bool ctrlm_voice_ipc_iarm_thunder_t::keyword_verification(const ctrlm_voice_ipc_ if(json_str) { //TODO: surface the event through IARM XLOGD_INFO("%s", json_str); - ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_JSON_KEYWORD_VERIFICATION, json_str); + ret = broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_BUS_API_REVISION, CTRLM_VOICE_IARM_EVENT_JSON_KEYWORD_VERIFICATION, json_str); free(json_str); } else { XLOGD_ERROR("Failed to encode JSON string"); @@ -984,35 +951,6 @@ const char *voice_device_status_str(uint8_t status) { return("invalid"); } -bool broadcast_event(const char *bus_name, int event, const char *str) { - bool ret = false; - size_t str_size = strlen(str) + 1; - size_t size = sizeof(ctrlm_voice_iarm_event_json_t) + str_size; - ctrlm_voice_iarm_event_json_t *data = (ctrlm_voice_iarm_event_json_t *)malloc(size); - if(data) { - IARM_Result_t result; - - //Can't be replaced with safeC version of this - memset(data, 0, size); - - data->api_revision = CTRLM_VOICE_IARM_BUS_API_REVISION; - //Can't be replaced with safeC version of this, as safeC string functions doesn't allow string size more than 4K - snprintf(data->payload, str_size, "%s", str); - result = IARM_Bus_BroadcastEvent(bus_name, event, data, size); - if(IARM_RESULT_SUCCESS != result) { - XLOGD_ERROR("IARM Bus Error!"); - } else { - ret = true; - } - if(data) { - free(data); - } - } else { - XLOGD_ERROR("Failed to allocate data for IARM event"); - } - return(ret); -} - bool ctrlm_voice_ipc_request_supported_ptt_transcription(ctrlm_voice_ipc_request_config_t *config) { config->requires_transcription = true; config->requires_audio_file = false;