Skip to content

Commit b47d6f8

Browse files
authored
RDKEMW-8929 (#129)
* RDKEMW-8929: Refactor ctrlm_voice_ipc_t to inherit ctrlm_ipc_iarm_t Reason for change: Inherit ctrlm_ipc_iarm_t Test Procedure: Verify behavior of events before & after no diff Risks: Low Signed-off-by: Kelvin Lu <[email protected]>
1 parent afb70fa commit b47d6f8

File tree

9 files changed

+71
-187
lines changed

9 files changed

+71
-187
lines changed

include/ctrlm_ipc_voice.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,11 +304,11 @@ typedef struct {
304304

305305
// IARM Event JSON
306306
// This structure is used for the following calls:
307-
// CTRLM_VOICE_IARM_EVENT_SESSION_BEGIN_JSON
308-
// CTRLM_VOICE_IARM_EVENT_STREAM_BEGIN_JSON
307+
// CTRLM_VOICE_IARM_EVENT_SESSION_BEGIN_JSON
308+
// CTRLM_VOICE_IARM_EVENT_STREAM_BEGIN_JSON
309309
// CTRLM_VOICE_IARM_EVENT_SERVER_MESSAGE_JSON
310-
// CTRLM_VOICE_IARM_EVENT_STREAM_END_JSON
311-
// CTRLM_VOICE_IARM_EVENT_SESSION_END_JSON
310+
// CTRLM_VOICE_IARM_EVENT_STREAM_END_JSON
311+
// CTRLM_VOICE_IARM_EVENT_SESSION_END_JSON
312312
//
313313
// The payload MUST be a NULL terminated JSON String.
314314
typedef struct {

src/ipc/ctrlm_ipc_iarm.cpp

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -35,44 +35,12 @@ bool ctrlm_ipc_iarm_t::register_iarm_call(const char *call, IARM_BusCall_t handl
3535
return(ret);
3636
}
3737

38-
bool ctrlm_ipc_iarm_t::broadcast_iarm_event(const char *bus_name, int event, json_t* event_data) const
39-
{
40-
bool ret = false;
41-
if(!event_data) {
42-
return(ret);
43-
}
44-
45-
char *payload_str = json_dumps(event_data, JSON_COMPACT);
46-
47-
if(payload_str != NULL) {
48-
size_t str_size = strlen(payload_str) + 1;
49-
size_t size = sizeof(ctrlm_main_iarm_event_json_t) + str_size;
50-
51-
ctrlm_main_iarm_event_json_t *data = (ctrlm_main_iarm_event_json_t *)calloc(1, size);
52-
if (data == NULL) {
53-
XLOGD_ERROR("failed to allocate memory for the IARM event, so cannot broadcast....");
54-
} else {
55-
56-
data->api_revision = CTRLM_MAIN_IARM_BUS_API_REVISION;
57-
//Can't be replaced with safeC version of this, as safeC string functions doesn't allow string size more than 4K
58-
snprintf(data->payload, str_size, "%s", payload_str);
59-
60-
IARM_Result_t res = IARM_Bus_BroadcastEvent(bus_name, event, data, size);
61-
if(res != IARM_RESULT_SUCCESS) {
62-
XLOGD_ERROR("IARM Bus Error %d", res);
63-
} else {
64-
ret = true;
65-
}
66-
67-
free(data);
68-
}
69-
70-
free(payload_str);
71-
}
72-
73-
if(event_data) {
74-
json_decref(event_data);
38+
bool ctrlm_ipc_iarm_t::broadcast_iarm_event_legacy(const char *bus_name, int event, void *data, size_t data_size) const {
39+
bool ret = true;
40+
IARM_Result_t result = IARM_Bus_BroadcastEvent(bus_name, event, data, data_size);
41+
if(IARM_RESULT_SUCCESS != result) {
42+
XLOGD_ERROR("IARM Bus Error!");
43+
ret = false;
7544
}
76-
7745
return(ret);
7846
}

src/ipc/ctrlm_ipc_iarm.h

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,28 @@ class ctrlm_ipc_iarm_t {
3939
static void turn_off(std::atomic_bool &abool) { abool.store(false); }
4040

4141
bool register_iarm_call(const char *call, IARM_BusCall_t handler) const;
42-
bool broadcast_iarm_event(const char *bus_name, int event, json_t* event_data) const;
42+
bool broadcast_iarm_event_legacy(const char *bus_name, int event, void *data, size_t data_size) const;
43+
44+
template <typename T>
45+
bool broadcast_iarm_event(const char *bus_name, unsigned char api_revision, int event, const char *str) const {
46+
bool ret = false;
47+
size_t str_size = strlen(str) + 1;
48+
size_t size = sizeof(T) + str_size;
49+
T *data = (T *)calloc(1, size);
50+
data->api_revision = api_revision;
51+
if(!data) {
52+
return(ret);
53+
} else {
54+
snprintf(data->payload, str_size, "%s", str);
55+
if(IARM_Bus_BroadcastEvent(bus_name, event, data, size)) {
56+
ret = true;
57+
}
58+
if(data) {
59+
free(data);
60+
}
61+
}
62+
return(ret);
63+
}
4364
};
4465

4566
#endif

src/ipc/ctrlm_rcp_ipc_event.cpp

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,12 @@ void ctrlm_rcp_ipc_net_status_t::populate_status(const ctrlm_obj_network_t &netw
135135
}
136136
}
137137

138-
char *ctrlm_rcp_ipc_net_status_t::to_string() const
138+
std::string ctrlm_base_event_json_t::to_string() const
139139
{
140-
return json_dumps(to_json(), JSON_ENCODE_ANY);
140+
char *json_str = json_dumps(to_json(), JSON_ENCODE_ANY);
141+
std::string copy = json_str;
142+
free(json_str);
143+
return copy;
141144
}
142145

143146
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
170173
return (err) ? NULL : status;
171174
}
172175

173-
char *ctrlm_rcp_ipc_upgrade_status_t::to_string() const
174-
{
175-
return json_dumps(to_json(), JSON_ENCODE_ANY);
176-
}
177-
178176
ctrlm_rcp_ipc_validation_status_t::~ctrlm_rcp_ipc_validation_status_t()
179177
{
180178
}
@@ -216,8 +214,3 @@ json_t *ctrlm_rcp_ipc_validation_status_t::to_json() const
216214

217215
return (err) ? NULL : status;
218216
}
219-
220-
char *ctrlm_rcp_ipc_validation_status_t::to_string() const
221-
{
222-
return json_dumps(to_json(), JSON_ENCODE_ANY);
223-
}

src/ipc/ctrlm_rcp_ipc_event.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,17 +63,18 @@ namespace rcp_net_status_json_keys
6363
constexpr char const* ERROR_STRING = "errorString";
6464
}
6565

66-
class ctrlm_virtual_json_t
66+
class ctrlm_base_event_json_t
6767
{
6868
public:
69-
virtual ~ctrlm_virtual_json_t() {};
69+
virtual ~ctrlm_base_event_json_t() {};
7070
virtual json_t *to_json() const = 0;
71+
virtual std::string to_string() const;
7172
};
7273

7374
class ctrlm_obj_controller_t;
7475
class ctrlm_obj_network_t;
7576

76-
class ctrlm_rcp_ipc_controller_status_t : public ctrlm_virtual_json_t
77+
class ctrlm_rcp_ipc_controller_status_t : public ctrlm_base_event_json_t
7778
{
7879
public:
7980
ctrlm_rcp_ipc_controller_status_t() = default;
@@ -103,15 +104,14 @@ class ctrlm_rcp_ipc_controller_status_t : public ctrlm_virtual_json_t
103104
std::string upgrade_session_id_ = "";
104105
};
105106

106-
class ctrlm_rcp_ipc_net_status_t : public ctrlm_virtual_json_t
107+
class ctrlm_rcp_ipc_net_status_t : public ctrlm_base_event_json_t
107108
{
108109
public:
109110
ctrlm_rcp_ipc_net_status_t() = default;
110111
~ctrlm_rcp_ipc_net_status_t();
111112

112113
virtual json_t *to_json() const;
113114

114-
char *to_string() const;
115115
uint8_t get_api_revision() const { return api_revision_; }
116116
bool get_result() const { return (result_ == CTRLM_IARM_CALL_RESULT_SUCCESS) ? true : false; }
117117
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
131131
std::vector<ctrlm_rcp_ipc_controller_status_t> controller_status_list_;
132132
};
133133

134-
class ctrlm_rcp_ipc_upgrade_status_t : public ctrlm_virtual_json_t
134+
class ctrlm_rcp_ipc_upgrade_status_t : public ctrlm_base_event_json_t
135135
{
136136
public:
137137
ctrlm_rcp_ipc_upgrade_status_t() = default;
138138
~ctrlm_rcp_ipc_upgrade_status_t();
139139

140140
virtual json_t *to_json() const;
141-
char *to_string() const;
142141
bool get_result() const { return (result_ == CTRLM_IARM_CALL_RESULT_SUCCESS) ? true : false; }
143142
void set_result(ctrlm_iarm_call_result_t result) { result_ = result; }
144143
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
156155
ctrlm_iarm_call_result_t result_ = CTRLM_IARM_CALL_RESULT_INVALID;
157156
};
158157

159-
class ctrlm_rcp_ipc_validation_status_t : public ctrlm_virtual_json_t
158+
class ctrlm_rcp_ipc_validation_status_t : public ctrlm_base_event_json_t
160159
{
161160
public:
162161
ctrlm_rcp_ipc_validation_status_t() = default;
163162
~ctrlm_rcp_ipc_validation_status_t();
164163

165164
virtual json_t *to_json() const;
166-
char *to_string() const;
167165
uint8_t get_api_revision() const { return api_revision_; }
168166
bool get_result() const { return (result_ == CTRLM_IARM_CALL_RESULT_SUCCESS) ? true : false; }
169167
void set_result(ctrlm_iarm_call_result_t result) { result_ = result; }

src/ipc/ctrlm_rcp_ipc_iarm_thunder.cpp

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -114,18 +114,7 @@ bool ctrlm_rcp_ipc_iarm_thunder_t::on_status(const ctrlm_rcp_ipc_net_status_t &n
114114
return(false);
115115
}
116116

117-
json_t *ret = json_object();
118-
int err = 0;
119-
120-
err |= json_object_set_new_nocheck(ret, STATUS, net_status.to_json());
121-
122-
if (err) {
123-
XLOGD_ERROR("JSON object set error");
124-
json_decref(ret);
125-
return(false);
126-
}
127-
128-
return broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_RCU_IARM_EVENT_RCU_STATUS, ret);
117+
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());
129118
}
130119

131120
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
140129
return(false);
141130
}
142131

143-
json_t *ret = json_object();
144-
int err = 0;
145-
146-
err |= json_object_set_new_nocheck(ret, STATUS, validation_status.to_json());
147-
148-
if (err) {
149-
XLOGD_ERROR("JSON object set error");
150-
json_decref(ret);
151-
return(false);
152-
}
153-
154-
return broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_RCU_IARM_EVENT_VALIDATION_STATUS, ret);
132+
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());
155133
}
156134

157135
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
177155
return(false);
178156
}
179157

180-
return broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_RCU_IARM_EVENT_FIRMWARE_UPDATE_PROGRESS, ret);
158+
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());
181159
}
182160

183161
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_
198176
return(false);
199177
}
200178

201-
return broadcast_iarm_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_RCU_IARM_EVENT_VALIDATION_STATUS, ret);
179+
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());
202180
}
203181

204182
IARM_Result_t ctrlm_rcp_ipc_iarm_thunder_t::start_pairing(void *arg)

src/voice/ipc/ctrlm_voice_ipc.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "ctrlm.h"
2323
#include "ctrlm_voice_types.h"
2424
#include "ctrlm_ipc_voice.h"
25+
#include "ctrlm_ipc_iarm.h"
2526

2627
// Classes for eventing
2728

@@ -171,23 +172,21 @@ class ctrlm_voice_ipc_event_session_statistics_t {
171172
};
172173
// End classes for eventing
173174

174-
class ctrlm_voice_ipc_t {
175+
class ctrlm_voice_ipc_t : public ctrlm_ipc_iarm_t {
175176
public:
176177
ctrlm_voice_ipc_t(ctrlm_voice_t *obj_voice) {
177178
this->obj_voice = obj_voice;
178179
}
179180
virtual ~ctrlm_voice_ipc_t() {};
180181

181182
// Interface
182-
virtual bool register_ipc() const = 0;
183183
virtual bool session_begin(const ctrlm_voice_ipc_event_session_begin_t &session_begin) = 0;
184184
virtual bool stream_begin(const ctrlm_voice_ipc_event_stream_begin_t &stream_begin) = 0;
185185
virtual bool stream_end(const ctrlm_voice_ipc_event_stream_end_t &stream_end) = 0;
186186
virtual bool session_end(const ctrlm_voice_ipc_event_session_end_t &session_end) = 0;
187187
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
188188
virtual bool keyword_verification(const ctrlm_voice_ipc_event_keyword_verification_t &keyword_verification) = 0;
189189
virtual bool session_statistics(const ctrlm_voice_ipc_event_session_statistics_t &session_stats) = 0;
190-
virtual void deregister_ipc() const = 0;
191190
// End Interface
192191

193192
protected:

src/voice/ipc/ctrlm_voice_ipc_iarm_legacy.cpp

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
#include "ctrlm_voice_obj.h"
2424

2525
static IARM_Result_t update_settings(void *arg);
26-
static bool broadcast_event(const char *bus_name, int event, void *data, size_t data_size);
2726

2827
ctrlm_voice_ipc_iarm_legacy_t::ctrlm_voice_ipc_iarm_legacy_t(ctrlm_voice_t *obj_voice) : ctrlm_voice_ipc_t(obj_voice) {
2928
this->state = EVENT_ALL;
@@ -68,7 +67,7 @@ bool ctrlm_voice_ipc_iarm_legacy_t::session_begin(const ctrlm_voice_ipc_event_se
6867
safec_rc = strcpy_s((char *)event.language, sizeof(event.language), session_begin.language.c_str());
6968
ERR_CHK(safec_rc);
7069
event.is_voice_assistant = session_begin.common.voice_assistant ? 1 : 0;
71-
ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_BEGIN, &event, sizeof(event));
70+
ret = broadcast_iarm_event_legacy(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_BEGIN, &event, sizeof(event));
7271
}
7372
return(ret);
7473
}
@@ -90,7 +89,7 @@ bool ctrlm_voice_ipc_iarm_legacy_t::stream_end(const ctrlm_voice_ipc_event_strea
9089
event.session_id = stream_end.common.session_id_ctrlm;
9190
event.reason = (ctrlm_voice_session_end_reason_t)stream_end.reason;
9291
event.is_voice_assistant = stream_end.common.voice_assistant ? 1 : 0;
93-
ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_END, &event, sizeof(event));
92+
ret = broadcast_iarm_event_legacy(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_END, &event, sizeof(event));
9493
}
9594
return(ret);
9695
}
@@ -133,7 +132,7 @@ bool ctrlm_voice_ipc_iarm_legacy_t::session_end(const ctrlm_voice_ipc_event_sess
133132
event.curl_request_dns_time = session_end.server_stats->dns_time;
134133
event.curl_request_connect_time = session_end.server_stats->connect_time;
135134
}
136-
ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_RESULT, &event, sizeof(event));
135+
ret = broadcast_iarm_event_legacy(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_RESULT, &event, sizeof(event));
137136
break;
138137
}
139138
case SESSION_END_ABORT: {
@@ -144,7 +143,7 @@ bool ctrlm_voice_ipc_iarm_legacy_t::session_end(const ctrlm_voice_ipc_event_sess
144143
event.controller_id = session_end.common.controller_id;
145144
event.session_id = session_end.common.session_id_ctrlm;
146145
event.reason = (ctrlm_voice_session_abort_reason_t)session_end.reason;
147-
ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_ABORT, &event, sizeof(event));
146+
ret = broadcast_iarm_event_legacy(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_ABORT, &event, sizeof(event));
148147
break;
149148
}
150149
case SESSION_END_SHORT_UTTERANCE: {
@@ -156,7 +155,7 @@ bool ctrlm_voice_ipc_iarm_legacy_t::session_end(const ctrlm_voice_ipc_event_sess
156155
event.session_id = session_end.common.session_id_ctrlm;
157156
event.reason = (ctrlm_voice_session_end_reason_t)session_end.reason;
158157
event.return_code_internal = session_end.return_code_internal;
159-
ret = broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_SHORT, &event, sizeof(event));
158+
ret = broadcast_iarm_event_legacy(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_SHORT, &event, sizeof(event));
160159
break;
161160
}
162161
}
@@ -195,7 +194,7 @@ bool ctrlm_voice_ipc_iarm_legacy_t::session_statistics(const ctrlm_voice_ipc_eve
195194
event.session_id = session_stats.common.session_id_ctrlm;
196195
event.session = session_stats.session;
197196
event.reboot = session_stats.reboot;
198-
return(broadcast_event(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_STATS, &event, sizeof(event)));
197+
return(broadcast_iarm_event_legacy(CTRLM_MAIN_IARM_BUS_NAME, CTRLM_VOICE_IARM_EVENT_SESSION_STATS, &event, sizeof(event)));
199198
}
200199

201200
void ctrlm_voice_ipc_iarm_legacy_t::deregister_ipc() const {
@@ -229,14 +228,4 @@ IARM_Result_t update_settings(void *arg) {
229228
}
230229

231230
return(IARM_RESULT_SUCCESS);
232-
}
233-
234-
bool broadcast_event(const char *bus_name, int event, void *data, size_t data_size) {
235-
bool ret = true;
236-
IARM_Result_t result = IARM_Bus_BroadcastEvent(bus_name, event, data, data_size);
237-
if(IARM_RESULT_SUCCESS != result) {
238-
XLOGD_ERROR("IARM Bus Error!");
239-
ret = false;
240-
}
241-
return(ret);
242-
}
231+
}

0 commit comments

Comments
 (0)