Skip to content
Open
Show file tree
Hide file tree
Changes from 8 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
2 changes: 2 additions & 0 deletions src/ctrlm.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ class ctrlm_voice_endpoint_t;
class ctrlm_irdb_interface_t;
class ctrlm_auth_t;
class ctrlm_telemetry_t;
class ctrlm_rcp_ipc_net_status_t;
typedef enum {
CTRLM_THREAD_MONITOR_RESPONSE_DEAD = 0,
CTRLM_THREAD_MONITOR_RESPONSE_ALIVE = 1
Expand Down Expand Up @@ -508,6 +509,7 @@ void ctrlm_update_last_key_info(int controller_id, ctrlm_key_source_t sou
ctrlm_irdb_interface_t* ctrlm_main_irdb_get();
ctrlm_auth_t* ctrlm_main_auth_get();
void ctrlm_main_auth_start_poll();
std::map<ctrlm_network_id_t, ctrlm_rcp_ipc_net_status_t> ctrlm_main_network_rcu_status_map_get();
Comment thread
egalla204 marked this conversation as resolved.
Outdated
std::string ctrlm_device_id_get();
Comment thread
egalla204 marked this conversation as resolved.
std::string ctrlm_stb_name_get();
std::string ctrlm_device_mac_get();
Expand Down
30 changes: 30 additions & 0 deletions src/ctrlm_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -877,6 +877,36 @@ void ctrlm_main_ir_last_keypress_get(ctrlm_ir_last_keypress_t *last_key_info) {
}
}

static void ctrlm_main_network_handler_execute_for_all(ctrlm_msg_handler_network_t handler, void *data, int size) {
for (auto const &network_it : g_ctrlm.networks) {
if (network_it.second) {
(network_it.second->*handler)(data, size);
}
}
Comment thread
egalla204 marked this conversation as resolved.
}

std::map<ctrlm_network_id_t, ctrlm_rcp_ipc_net_status_t> ctrlm_main_network_rcu_status_map_get() {
if (g_ctrlm.main_thread != g_thread_self ()) {
XLOGD_ERROR("not called from ctrlm_main_thread!!!!!");
if(!ctrlm_is_production_build()) {
g_assert(0);
}
return {};
}

std::shared_ptr<ctrlm_network_all_ipc_reply_wrapper_t<ctrlm_rcp_ipc_net_status_t>> params = std::make_shared<ctrlm_network_all_ipc_reply_wrapper_t<ctrlm_rcp_ipc_net_status_t>>();
params->set_net_id(CTRLM_MAIN_NETWORK_ID_ALL);

ctrlm_main_queue_msg_get_rcu_status_t msg = {};
msg.params = params;

ctrlm_main_network_handler_execute_for_all((ctrlm_msg_handler_network_t)&ctrlm_obj_network_t::req_process_get_rcu_status,
&msg,
sizeof(msg));

return params->get_reply();
}

void ctrlm_utils_sem_wait(){
sem_wait(&g_ctrlm.ctrlm_utils_sem);
}
Expand Down
40 changes: 38 additions & 2 deletions src/ipc/ctrlm_rcp_ipc_iarm_thunder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

#include "algorithm"
#include "ctrlm_rcp_ipc_iarm_thunder.h"
#include "ctrlm.h"
#include "ctrlm_network.h"
#include "ctrlm_log.h"
#include <uuid/uuid.h>
Expand Down Expand Up @@ -115,10 +116,45 @@ bool ctrlm_rcp_ipc_iarm_thunder_t::on_status(const ctrlm_rcp_ipc_net_status_t &n
return(false);
}

json_t *ret = json_object();
json_t *ret = json_object();
json_t *status = json_object();
json_t *net_type_supported = json_array();
json_t *remote_array = json_array();
std::map<ctrlm_network_id_t, ctrlm_rcp_ipc_net_status_t> status_map = ctrlm_main_network_rcu_status_map_get();
Comment thread
egalla204 marked this conversation as resolved.
Outdated
std::vector<ctrlm_rcp_ipc_controller_status_t> remotes;

ctrlm_network_type_t type = CTRLM_NETWORK_TYPE_INVALID;
ctrlm_ir_state_t ir_prog_state = CTRLM_IR_STATE_UNKNOWN;
ctrlm_rf_pair_state_t rf_pair_state = CTRLM_RF_PAIR_STATE_UNKNOWN;
int err = 0;

err |= json_object_set_new_nocheck(ret, STATUS, net_status.to_json());
for (auto const &it : ctrlm_network_types_get()) {
err |= json_array_append_new(net_type_supported, json_integer(it));
}
for (auto &it : status_map) {
it.second.get_controller_status_list(remotes);
}
for (const auto &remote : remotes) {
err |= json_array_append_new(remote_array, remote.to_json());
}
// For now default to RF4CE network reporting if available
for (auto &it : status_map) {
ir_prog_state = it.second.get_ir_prog_state();
rf_pair_state = it.second.get_rf_pair_state();
type = it.second.get_type();

if (type == CTRLM_NETWORK_TYPE_RF4CE) {
break;
}
}

err |= json_object_set_new_nocheck(status, REMOTE_DATA, remote_array);
err |= json_object_set_new_nocheck(status, NET_TYPES_SUPPORTED, net_type_supported);
err |= json_object_set_new_nocheck(status, NET_TYPE, json_integer(type));
err |= json_object_set_new_nocheck(status, IR_PROG_STATE, json_string(ctrlm_ir_state_str(ir_prog_state)));
err |= json_object_set_new_nocheck(status, PAIRING_STATE, json_string(ctrlm_rf_pair_state_str(rf_pair_state)));

err |= json_object_set_new_nocheck(ret, STATUS, status);

if (err) {
XLOGD_ERROR("JSON object set error");
Expand Down
Loading