Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions include/ctrlm_ipc_voice.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
44 changes: 6 additions & 38 deletions src/ipc/ctrlm_ipc_iarm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
23 changes: 22 additions & 1 deletion src/ipc/ctrlm_ipc_iarm.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 <typename T>
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
17 changes: 5 additions & 12 deletions src/ipc/ctrlm_rcp_ipc_event.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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()
{
}
Expand Down Expand Up @@ -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);
}
16 changes: 7 additions & 9 deletions src/ipc/ctrlm_rcp_ipc_event.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -103,15 +104,14 @@ 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;
~ctrlm_rcp_ipc_net_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; }
Expand All @@ -131,14 +131,13 @@ class ctrlm_rcp_ipc_net_status_t : public ctrlm_virtual_json_t
std::vector<ctrlm_rcp_ipc_controller_status_t> 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_; }
Expand All @@ -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; }
Expand Down
30 changes: 4 additions & 26 deletions src/ipc/ctrlm_rcp_ipc_iarm_thunder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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_event_json_t>(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
Expand All @@ -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_event_json_t>(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
Expand All @@ -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_event_json_t>(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
Expand All @@ -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_event_json_t>(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)
Expand Down
5 changes: 2 additions & 3 deletions src/voice/ipc/ctrlm_voice_ipc.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -171,23 +172,21 @@ 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;
}
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;
virtual bool session_end(const ctrlm_voice_ipc_event_session_end_t &session_end) = 0;
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:
Expand Down
25 changes: 7 additions & 18 deletions src/voice/ipc/ctrlm_voice_ipc_iarm_legacy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
Expand All @@ -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);
}
Expand Down Expand Up @@ -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: {
Expand All @@ -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: {
Expand All @@ -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;
}
}
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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);
}
}
Loading